diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f53e779 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.exe filter=lfs diff=lfs merge=lfs -text +*.verseweb filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 1170717..0873801 100644 --- a/.gitignore +++ b/.gitignore @@ -1,136 +1,34 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* +mp-core-orig/ +tests/ +# Ignorar a pasta de dependências +node_modules/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Ambiente +.env +.env.*.local + +# Diretórios de build +dist/ +build/ + +# Cache +.cache/ +.nyc_output/ +coverage/ + +# Sistema +.DS_Store +Thumbs.db + +# IDEs/editores +.vscode/ +.idea/ +*.sublime-project +*.sublime-workspace diff --git a/AlternativasdeBancodedados-UC9.verseweb b/AlternativasdeBancodedados-UC9.verseweb new file mode 100644 index 0000000..2a5aa5f --- /dev/null +++ b/AlternativasdeBancodedados-UC9.verseweb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85e102f1c2202320cea86651d2b89d0563695a876043576eaa3e9167284a4b75 +size 65579867 diff --git a/DefaultLoadingImage.jpg b/DefaultLoadingImage.jpg new file mode 100644 index 0000000..11bc396 Binary files /dev/null and b/DefaultLoadingImage.jpg differ diff --git a/core.js b/core.js new file mode 100644 index 0000000..c4a5778 --- /dev/null +++ b/core.js @@ -0,0 +1,3191 @@ +/*! For license information please see metapress.js.LICENSE.txt */ +(() => { + var e, t, n, r, o = { + 69282: (e, t, n) => { + "use strict"; + var r = n(34155), + o = n(25108); + + function i(e) { + return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e + }, i(e) + } + var a, c, s = n(62136).codes, + l = s.ERR_AMBIGUOUS_ARGUMENT, + u = s.ERR_INVALID_ARG_TYPE, + f = s.ERR_INVALID_ARG_VALUE, + p = s.ERR_INVALID_RETURN_VALUE, + y = s.ERR_MISSING_ARGS, + d = n(25961), + g = n(89539).inspect, + h = n(89539).types, + b = h.isPromise, + m = h.isRegExp, + v = Object.assign ? Object.assign : n(8091).assign, + w = Object.is ? Object.is : n(20609); + + function P() { + var e = n(19158); + a = e.isDeepEqual, c = e.isDeepStrictEqual + } + new Map; + var S = !1, + A = e.exports = x, + E = {}; + + function O(e) { + if (e.message instanceof Error) throw e.message; + throw new d(e) + } + + function j(e, t, n, r) { + if (!n) { + var o = !1; + if (0 === t) o = !0, r = "No value argument passed to `assert.ok()`"; + else if (r instanceof Error) throw r; + var i = new d({ + actual: n, + expected: !0, + message: r, + operator: "==", + stackStartFn: e + }); + throw i.generatedMessage = o, i + } + } + + function x() { + for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; + j.apply(void 0, [x, t.length].concat(t)) + } + A.fail = function e(t, n, i, a, c) { + var s, l = arguments.length; + if (0 === l) s = "Failed"; + else if (1 === l) i = t, t = void 0; + else { + if (!1 === S) { + S = !0; + var u = r.emitWarning ? r.emitWarning : o.warn.bind(o); + u("assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.", "DeprecationWarning", "DEP0094") + } + 2 === l && (a = "!=") + } + if (i instanceof Error) throw i; + var f = { + actual: t, + expected: n, + operator: void 0 === a ? "fail" : a, + stackStartFn: c || e + }; + void 0 !== i && (f.message = i); + var p = new d(f); + throw s && (p.message = s, p.generatedMessage = !0), p + }, A.AssertionError = d, A.ok = x, A.equal = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + t != n && O({ + actual: t, + expected: n, + message: r, + operator: "==", + stackStartFn: e + }) + }, A.notEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + t == n && O({ + actual: t, + expected: n, + message: r, + operator: "!=", + stackStartFn: e + }) + }, A.deepEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + void 0 === a && P(), a(t, n) || O({ + actual: t, + expected: n, + message: r, + operator: "deepEqual", + stackStartFn: e + }) + }, A.notDeepEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + void 0 === a && P(), a(t, n) && O({ + actual: t, + expected: n, + message: r, + operator: "notDeepEqual", + stackStartFn: e + }) + }, A.deepStrictEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + void 0 === a && P(), c(t, n) || O({ + actual: t, + expected: n, + message: r, + operator: "deepStrictEqual", + stackStartFn: e + }) + }, A.notDeepStrictEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + void 0 === a && P(), c(t, n) && O({ + actual: t, + expected: n, + message: r, + operator: "notDeepStrictEqual", + stackStartFn: e + }) + }, A.strictEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + w(t, n) || O({ + actual: t, + expected: n, + message: r, + operator: "strictEqual", + stackStartFn: e + }) + }, A.notStrictEqual = function e(t, n, r) { + if (arguments.length < 2) throw new y("actual", "expected"); + w(t, n) && O({ + actual: t, + expected: n, + message: r, + operator: "notStrictEqual", + stackStartFn: e + }) + }; + var I = function e(t, n, r) { + var o = this; + ! function(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") + }(this, e), n.forEach((function(e) { + e in t && (void 0 !== r && "string" == typeof r[e] && m(t[e]) && t[e].test(r[e]) ? o[e] = r[e] : o[e] = t[e]) + })) + }; + + function k(e, t, n, r, o, i) { + if (!(n in e) || !c(e[n], t[n])) { + if (!r) { + var a = new I(e, o), + s = new I(t, o, e), + l = new d({ + actual: a, + expected: s, + operator: "deepStrictEqual", + stackStartFn: i + }); + throw l.actual = e, l.expected = t, l.operator = i.name, l + } + O({ + actual: e, + expected: t, + message: r, + operator: i.name, + stackStartFn: i + }) + } + } + + function T(e, t, n, r) { + if ("function" != typeof t) { + if (m(t)) return t.test(e); + if (2 === arguments.length) throw new u("expected", ["Function", "RegExp"], t); + if ("object" !== i(e) || null === e) { + var o = new d({ + actual: e, + expected: t, + message: n, + operator: "deepStrictEqual", + stackStartFn: r + }); + throw o.operator = r.name, o + } + var c = Object.keys(t); + if (t instanceof Error) c.push("name", "message"); + else if (0 === c.length) throw new f("error", t, "may not be an empty object"); + return void 0 === a && P(), c.forEach((function(o) { + "string" == typeof e[o] && m(t[o]) && t[o].test(e[o]) || k(e, t, o, n, c, r) + })), !0 + } + return void 0 !== t.prototype && e instanceof t || !Error.isPrototypeOf(t) && !0 === t.call({}, e) + } + + function _(e) { + if ("function" != typeof e) throw new u("fn", "Function", e); + try { + e() + } catch (e) { + return e + } + return E + } + + function R(e) { + return b(e) || null !== e && "object" === i(e) && "function" == typeof e.then && "function" == typeof e.catch + } + + function F(e) { + return Promise.resolve().then((function() { + var t; + if ("function" == typeof e) { + if (!R(t = e())) throw new p("instance of Promise", "promiseFn", t) + } else { + if (!R(e)) throw new u("promiseFn", ["Function", "Promise"], e); + t = e + } + return Promise.resolve().then((function() { + return t + })).then((function() { + return E + })).catch((function(e) { + return e + })) + })) + } + + function D(e, t, n, r) { + if ("string" == typeof n) { + if (4 === arguments.length) throw new u("error", ["Object", "Error", "Function", "RegExp"], n); + if ("object" === i(t) && null !== t) { + if (t.message === n) throw new l("error/message", 'The error message "'.concat(t.message, '" is identical to the message.')) + } else if (t === n) throw new l("error/message", 'The error "'.concat(t, '" is identical to the message.')); + r = n, n = void 0 + } else if (null != n && "object" !== i(n) && "function" != typeof n) throw new u("error", ["Object", "Error", "Function", "RegExp"], n); + if (t === E) { + var o = ""; + n && n.name && (o += " (".concat(n.name, ")")), o += r ? ": ".concat(r) : "."; + var a = "rejects" === e.name ? "rejection" : "exception"; + O({ + actual: void 0, + expected: n, + operator: e.name, + message: "Missing expected ".concat(a).concat(o), + stackStartFn: e + }) + } + if (n && !T(t, n, r, e)) throw t + } + + function M(e, t, n, r) { + if (t !== E) { + if ("string" == typeof n && (r = n, n = void 0), !n || T(t, n)) { + var o = r ? ": ".concat(r) : ".", + i = "doesNotReject" === e.name ? "rejection" : "exception"; + O({ + actual: t, + expected: n, + operator: e.name, + message: "Got unwanted ".concat(i).concat(o, "\n") + 'Actual message: "'.concat(t && t.message, '"'), + stackStartFn: e + }) + } + throw t + } + } + + function N() { + for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; + j.apply(void 0, [N, t.length].concat(t)) + } + A.throws = function e(t) { + for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o]; + D.apply(void 0, [e, _(t)].concat(r)) + }, A.rejects = function e(t) { + for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o]; + return F(t).then((function(t) { + return D.apply(void 0, [e, t].concat(r)) + })) + }, A.doesNotThrow = function e(t) { + for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o]; + M.apply(void 0, [e, _(t)].concat(r)) + }, A.doesNotReject = function e(t) { + for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o]; + return F(t).then((function(t) { + return M.apply(void 0, [e, t].concat(r)) + })) + }, A.ifError = function e(t) { + if (null != t) { + var n = "ifError got unwanted exception: "; + "object" === i(t) && "string" == typeof t.message ? 0 === t.message.length && t.constructor ? n += t.constructor.name : n += t.message : n += g(t); + var r = new d({ + actual: t, + expected: null, + operator: "ifError", + message: n, + stackStartFn: e + }), + o = t.stack; + if ("string" == typeof o) { + var a = o.split("\n"); + a.shift(); + for (var c = r.stack.split("\n"), s = 0; s < a.length; s++) { + var l = c.indexOf(a[s]); + if (-1 !== l) { + c = c.slice(0, l); + break + } + } + r.stack = "".concat(c.join("\n"), "\n").concat(a.join("\n")) + } + throw r + } + }, A.strict = v(N, A, { + equal: A.strictEqual, + deepEqual: A.deepStrictEqual, + notEqual: A.notStrictEqual, + notDeepEqual: A.notDeepStrictEqual + }), A.strict.strict = A.strict + }, + 25961: (e, t, n) => { + "use strict"; + var r = n(34155); + + function o(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e + } + + function i(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r) + } + } + + function a(e, t) { + return !t || "object" !== y(t) && "function" != typeof t ? c(e) : t + } + + function c(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e + } + + function s(e) { + var t = "function" == typeof Map ? new Map : void 0; + return s = function(e) { + if (null === e || (n = e, -1 === Function.toString.call(n).indexOf("[native code]"))) return e; + var n; + if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function"); + if (void 0 !== t) { + if (t.has(e)) return t.get(e); + t.set(e, r) + } + + function r() { + return u(e, arguments, p(this).constructor) + } + return r.prototype = Object.create(e.prototype, { + constructor: { + value: r, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), f(r, e) + }, s(e) + } + + function l() { + if ("undefined" == typeof Reflect || !Reflect.construct) return !1; + if (Reflect.construct.sham) return !1; + if ("function" == typeof Proxy) return !0; + try { + return Date.prototype.toString.call(Reflect.construct(Date, [], (function() {}))), !0 + } catch (e) { + return !1 + } + } + + function u(e, t, n) { + return u = l() ? Reflect.construct : function(e, t, n) { + var r = [null]; + r.push.apply(r, t); + var o = new(Function.bind.apply(e, r)); + return n && f(o, n.prototype), o + }, u.apply(null, arguments) + } + + function f(e, t) { + return f = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e + }, f(e, t) + } + + function p(e) { + return p = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e) + }, p(e) + } + + function y(e) { + return y = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e + }, y(e) + } + var d = n(89539).inspect, + g = n(62136).codes.ERR_INVALID_ARG_TYPE; + + function h(e, t, n) { + return (void 0 === n || n > e.length) && (n = e.length), e.substring(n - t.length, n) === t + } + var b = "", + m = "", + v = "", + w = "", + P = { + deepStrictEqual: "Expected values to be strictly deep-equal:", + strictEqual: "Expected values to be strictly equal:", + strictEqualObject: 'Expected "actual" to be reference-equal to "expected":', + deepEqual: "Expected values to be loosely deep-equal:", + equal: "Expected values to be loosely equal:", + notDeepStrictEqual: 'Expected "actual" not to be strictly deep-equal to:', + notStrictEqual: 'Expected "actual" to be strictly unequal to:', + notStrictEqualObject: 'Expected "actual" not to be reference-equal to "expected":', + notDeepEqual: 'Expected "actual" not to be loosely deep-equal to:', + notEqual: 'Expected "actual" to be loosely unequal to:', + notIdentical: "Values identical but not reference-equal:" + }; + + function S(e) { + var t = Object.keys(e), + n = Object.create(Object.getPrototypeOf(e)); + return t.forEach((function(t) { + n[t] = e[t] + })), Object.defineProperty(n, "message", { + value: e.message + }), n + } + + function A(e) { + return d(e, { + compact: !1, + customInspect: !1, + depth: 1e3, + maxArrayLength: 1 / 0, + showHidden: !1, + breakLength: 1 / 0, + showProxy: !1, + sorted: !0, + getters: !0 + }) + } + var E = function(e) { + function t(e) { + var n; + if (function(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") + }(this, t), "object" !== y(e) || null === e) throw new g("options", "Object", e); + var o = e.message, + i = e.operator, + s = e.stackStartFn, + l = e.actual, + u = e.expected, + f = Error.stackTraceLimit; + if (Error.stackTraceLimit = 0, null != o) n = a(this, p(t).call(this, String(o))); + else if (r.stderr && r.stderr.isTTY && (r.stderr && r.stderr.getColorDepth && 1 !== r.stderr.getColorDepth() ? (b = "[34m", m = "[32m", w = "[39m", v = "[31m") : (b = "", m = "", w = "", v = "")), "object" === y(l) && null !== l && "object" === y(u) && null !== u && "stack" in l && l instanceof Error && "stack" in u && u instanceof Error && (l = S(l), u = S(u)), "deepStrictEqual" === i || "strictEqual" === i) n = a(this, p(t).call(this, function(e, t, n) { + var o = "", + i = "", + a = 0, + c = "", + s = !1, + l = A(e), + u = l.split("\n"), + f = A(t).split("\n"), + p = 0, + d = ""; + if ("strictEqual" === n && "object" === y(e) && "object" === y(t) && null !== e && null !== t && (n = "strictEqualObject"), 1 === u.length && 1 === f.length && u[0] !== f[0]) { + var g = u[0].length + f[0].length; + if (g <= 10) { + if (!("object" === y(e) && null !== e || "object" === y(t) && null !== t || 0 === e && 0 === t)) return "".concat(P[n], "\n\n") + "".concat(u[0], " !== ").concat(f[0], "\n") + } else if ("strictEqualObject" !== n && g < (r.stderr && r.stderr.isTTY ? r.stderr.columns : 80)) { + for (; u[0][p] === f[0][p];) p++; + p > 2 && (d = "\n ".concat(function(e, t) { + if (t = Math.floor(t), 0 == e.length || 0 == t) return ""; + var n = e.length * t; + for (t = Math.floor(Math.log(t) / Math.log(2)); t;) e += e, t--; + return e + e.substring(0, n - e.length) + }(" ", p), "^"), p = 0) + } + } + for (var S = u[u.length - 1], E = f[f.length - 1]; S === E && (p++ < 2 ? c = "\n ".concat(S).concat(c) : o = S, u.pop(), f.pop(), 0 !== u.length && 0 !== f.length);) S = u[u.length - 1], E = f[f.length - 1]; + var O = Math.max(u.length, f.length); + if (0 === O) { + var j = l.split("\n"); + if (j.length > 30) + for (j[26] = "".concat(b, "...").concat(w); j.length > 27;) j.pop(); + return "".concat(P.notIdentical, "\n\n").concat(j.join("\n"), "\n") + } + p > 3 && (c = "\n".concat(b, "...").concat(w).concat(c), s = !0), "" !== o && (c = "\n ".concat(o).concat(c), o = ""); + var x = 0, + I = P[n] + "\n".concat(m, "+ actual").concat(w, " ").concat(v, "- expected").concat(w), + k = " ".concat(b, "...").concat(w, " Lines skipped"); + for (p = 0; p < O; p++) { + var T = p - a; + if (u.length < p + 1) T > 1 && p > 2 && (T > 4 ? (i += "\n".concat(b, "...").concat(w), s = !0) : T > 3 && (i += "\n ".concat(f[p - 2]), x++), i += "\n ".concat(f[p - 1]), x++), a = p, o += "\n".concat(v, "-").concat(w, " ").concat(f[p]), x++; + else if (f.length < p + 1) T > 1 && p > 2 && (T > 4 ? (i += "\n".concat(b, "...").concat(w), s = !0) : T > 3 && (i += "\n ".concat(u[p - 2]), x++), i += "\n ".concat(u[p - 1]), x++), a = p, i += "\n".concat(m, "+").concat(w, " ").concat(u[p]), x++; + else { + var _ = f[p], + R = u[p], + F = R !== _ && (!h(R, ",") || R.slice(0, -1) !== _); + F && h(_, ",") && _.slice(0, -1) === R && (F = !1, R += ","), F ? (T > 1 && p > 2 && (T > 4 ? (i += "\n".concat(b, "...").concat(w), s = !0) : T > 3 && (i += "\n ".concat(u[p - 2]), x++), i += "\n ".concat(u[p - 1]), x++), a = p, i += "\n".concat(m, "+").concat(w, " ").concat(R), o += "\n".concat(v, "-").concat(w, " ").concat(_), x += 2) : (i += o, o = "", 1 !== T && 0 !== p || (i += "\n ".concat(R), x++)) + } + if (x > 20 && p < O - 2) return "".concat(I).concat(k, "\n").concat(i, "\n").concat(b, "...").concat(w).concat(o, "\n") + "".concat(b, "...").concat(w) + } + return "".concat(I).concat(s ? k : "", "\n").concat(i).concat(o).concat(c).concat(d) + }(l, u, i))); + else if ("notDeepStrictEqual" === i || "notStrictEqual" === i) { + var d = P[i], + E = A(l).split("\n"); + if ("notStrictEqual" === i && "object" === y(l) && null !== l && (d = P.notStrictEqualObject), E.length > 30) + for (E[26] = "".concat(b, "...").concat(w); E.length > 27;) E.pop(); + n = 1 === E.length ? a(this, p(t).call(this, "".concat(d, " ").concat(E[0]))) : a(this, p(t).call(this, "".concat(d, "\n\n").concat(E.join("\n"), "\n"))) + } else { + var O = A(l), + j = "", + x = P[i]; + "notDeepEqual" === i || "notEqual" === i ? (O = "".concat(P[i], "\n\n").concat(O)).length > 1024 && (O = "".concat(O.slice(0, 1021), "...")) : (j = "".concat(A(u)), O.length > 512 && (O = "".concat(O.slice(0, 509), "...")), j.length > 512 && (j = "".concat(j.slice(0, 509), "...")), "deepEqual" === i || "equal" === i ? O = "".concat(x, "\n\n").concat(O, "\n\nshould equal\n\n") : j = " ".concat(i, " ").concat(j)), n = a(this, p(t).call(this, "".concat(O).concat(j))) + } + return Error.stackTraceLimit = f, n.generatedMessage = !o, Object.defineProperty(c(n), "name", { + value: "AssertionError [ERR_ASSERTION]", + enumerable: !1, + writable: !0, + configurable: !0 + }), n.code = "ERR_ASSERTION", n.actual = l, n.expected = u, n.operator = i, Error.captureStackTrace && Error.captureStackTrace(c(n), s), n.stack, n.name = "AssertionError", a(n) + } + var n, s; + return function(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && f(e, t) + }(t, e), n = t, s = [{ + key: "toString", + value: function() { + return "".concat(this.name, " [").concat(this.code, "]: ").concat(this.message) + } + }, { + key: d.custom, + value: function(e, t) { + return d(this, function(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, + r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter((function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable + })))), r.forEach((function(t) { + o(e, t, n[t]) + })) + } + return e + }({}, t, { + customInspect: !1, + depth: 0 + })) + } + }], s && i(n.prototype, s), t + }(s(Error)); + e.exports = E + }, + 62136: (e, t, n) => { + "use strict"; + + function r(e) { + return r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e + }, r(e) + } + + function o(e) { + return o = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e) + }, o(e) + } + + function i(e, t) { + return i = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e + }, i(e, t) + } + var a, c, s = {}; + + function l(e, t, n) { + n || (n = Error); + var a = function(n) { + function a(n, i, c) { + var s; + return function(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") + }(this, a), s = function(e, t) { + return !t || "object" !== r(t) && "function" != typeof t ? function(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e + }(e) : t + }(this, o(a).call(this, function(e, n, r) { + return "string" == typeof t ? t : t(e, n, r) + }(n, i, c))), s.code = e, s + } + return function(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && i(e, t) + }(a, n), a + }(n); + s[e] = a + } + + function u(e, t) { + if (Array.isArray(e)) { + var n = e.length; + return e = e.map((function(e) { + return String(e) + })), n > 2 ? "one of ".concat(t, " ").concat(e.slice(0, n - 1).join(", "), ", or ") + e[n - 1] : 2 === n ? "one of ".concat(t, " ").concat(e[0], " or ").concat(e[1]) : "of ".concat(t, " ").concat(e[0]) + } + return "of ".concat(t, " ").concat(String(e)) + } + l("ERR_AMBIGUOUS_ARGUMENT", 'The "%s" argument is ambiguous. %s', TypeError), l("ERR_INVALID_ARG_TYPE", (function(e, t, o) { + var i, c, s, l, f; + if (void 0 === a && (a = n(69282)), a("string" == typeof e, "'name' must be a string"), "string" == typeof t && (c = "not ", t.substr(0, c.length) === c) ? (i = "must not be", t = t.replace(/^not /, "")) : i = "must be", function(e, t, n) { + return (void 0 === n || n > e.length) && (n = e.length), e.substring(n - t.length, n) === t + }(e, " argument")) s = "The ".concat(e, " ").concat(i, " ").concat(u(t, "type")); + else { + var p = ("number" != typeof f && (f = 0), f + ".".length > (l = e).length || -1 === l.indexOf(".", f) ? "argument" : "property"); + s = 'The "'.concat(e, '" ').concat(p, " ").concat(i, " ").concat(u(t, "type")) + } + return s + ". Received type ".concat(r(o)) + }), TypeError), l("ERR_INVALID_ARG_VALUE", (function(e, t) { + var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "is invalid"; + void 0 === c && (c = n(89539)); + var o = c.inspect(t); + return o.length > 128 && (o = "".concat(o.slice(0, 128), "...")), "The argument '".concat(e, "' ").concat(r, ". Received ").concat(o) + }), TypeError, RangeError), l("ERR_INVALID_RETURN_VALUE", (function(e, t, n) { + var o; + return o = n && n.constructor && n.constructor.name ? "instance of ".concat(n.constructor.name) : "type ".concat(r(n)), "Expected ".concat(e, ' to be returned from the "').concat(t, '"') + " function but got ".concat(o, ".") + }), TypeError), l("ERR_MISSING_ARGS", (function() { + for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; + void 0 === a && (a = n(69282)), a(t.length > 0, "At least one arg needs to be specified"); + var o = "The ", + i = t.length; + switch (t = t.map((function(e) { + return '"'.concat(e, '"') + })), i) { + case 1: + o += "".concat(t[0], " argument"); + break; + case 2: + o += "".concat(t[0], " and ").concat(t[1], " arguments"); + break; + default: + o += t.slice(0, i - 1).join(", "), o += ", and ".concat(t[i - 1], " arguments") + } + return "".concat(o, " must be specified") + }), TypeError), e.exports.codes = s + }, + 19158: (e, t, n) => { + "use strict"; + + function r(e, t) { + return function(e) { + if (Array.isArray(e)) return e + }(e) || function(e, t) { + var n = [], + r = !0, + o = !1, + i = void 0; + try { + for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t || n.length !== t); r = !0); + } catch (e) { + o = !0, i = e + } finally { + try { + r || null == c.return || c.return() + } finally { + if (o) throw i + } + } + return n + }(e, t) || function() { + throw new TypeError("Invalid attempt to destructure non-iterable instance") + }() + } + + function o(e) { + return o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e + }, o(e) + } + var i = void 0 !== /a/g.flags, + a = function(e) { + var t = []; + return e.forEach((function(e) { + return t.push(e) + })), t + }, + c = function(e) { + var t = []; + return e.forEach((function(e, n) { + return t.push([n, e]) + })), t + }, + s = Object.is ? Object.is : n(20609), + l = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function() { + return [] + }, + u = Number.isNaN ? Number.isNaN : n(20360); + + function f(e) { + return e.call.bind(e) + } + var p = f(Object.prototype.hasOwnProperty), + y = f(Object.prototype.propertyIsEnumerable), + d = f(Object.prototype.toString), + g = n(89539).types, + h = g.isAnyArrayBuffer, + b = g.isArrayBufferView, + m = g.isDate, + v = g.isMap, + w = g.isRegExp, + P = g.isSet, + S = g.isNativeError, + A = g.isBoxedPrimitive, + E = g.isNumberObject, + O = g.isStringObject, + j = g.isBooleanObject, + x = g.isBigIntObject, + I = g.isSymbolObject, + k = g.isFloat32Array, + T = g.isFloat64Array; + + function _(e) { + if (0 === e.length || e.length > 10) return !0; + for (var t = 0; t < e.length; t++) { + var n = e.charCodeAt(t); + if (n < 48 || n > 57) return !0 + } + return 10 === e.length && e >= Math.pow(2, 32) + } + + function R(e) { + return Object.keys(e).filter(_).concat(l(e).filter(Object.prototype.propertyIsEnumerable.bind(e))) + } + + function F(e, t) { + if (e === t) return 0; + for (var n = e.length, r = t.length, o = 0, i = Math.min(n, r); o < i; ++o) + if (e[o] !== t[o]) { + n = e[o], r = t[o]; + break + } return n < r ? -1 : r < n ? 1 : 0 + } + + function D(e, t, n, r) { + if (e === t) return 0 !== e || !n || s(e, t); + if (n) { + if ("object" !== o(e)) return "number" == typeof e && u(e) && u(t); + if ("object" !== o(t) || null === e || null === t) return !1; + if (Object.getPrototypeOf(e) !== Object.getPrototypeOf(t)) return !1 + } else { + if (null === e || "object" !== o(e)) return (null === t || "object" !== o(t)) && e == t; + if (null === t || "object" !== o(t)) return !1 + } + var a, c, l, f, p = d(e); + if (p !== d(t)) return !1; + if (Array.isArray(e)) { + if (e.length !== t.length) return !1; + var y = R(e), + g = R(t); + return y.length === g.length && N(e, t, n, r, 1, y) + } + if ("[object Object]" === p && (!v(e) && v(t) || !P(e) && P(t))) return !1; + if (m(e)) { + if (!m(t) || Date.prototype.getTime.call(e) !== Date.prototype.getTime.call(t)) return !1 + } else if (w(e)) { + if (!w(t) || (l = e, f = t, !(i ? l.source === f.source && l.flags === f.flags : RegExp.prototype.toString.call(l) === RegExp.prototype.toString.call(f)))) return !1 + } else if (S(e) || e instanceof Error) { + if (e.message !== t.message || e.name !== t.name) return !1 + } else { + if (b(e)) { + if (n || !k(e) && !T(e)) { + if (! function(e, t) { + return e.byteLength === t.byteLength && 0 === F(new Uint8Array(e.buffer, e.byteOffset, e.byteLength), new Uint8Array(t.buffer, t.byteOffset, t.byteLength)) + }(e, t)) return !1 + } else if (! function(e, t) { + if (e.byteLength !== t.byteLength) return !1; + for (var n = 0; n < e.byteLength; n++) + if (e[n] !== t[n]) return !1; + return !0 + }(e, t)) return !1; + var _ = R(e), + D = R(t); + return _.length === D.length && N(e, t, n, r, 0, _) + } + if (P(e)) return !(!P(t) || e.size !== t.size) && N(e, t, n, r, 2); + if (v(e)) return !(!v(t) || e.size !== t.size) && N(e, t, n, r, 3); + if (h(e)) { + if (c = t, (a = e).byteLength !== c.byteLength || 0 !== F(new Uint8Array(a), new Uint8Array(c))) return !1 + } else if (A(e) && ! function(e, t) { + return E(e) ? E(t) && s(Number.prototype.valueOf.call(e), Number.prototype.valueOf.call(t)) : O(e) ? O(t) && String.prototype.valueOf.call(e) === String.prototype.valueOf.call(t) : j(e) ? j(t) && Boolean.prototype.valueOf.call(e) === Boolean.prototype.valueOf.call(t) : x(e) ? x(t) && BigInt.prototype.valueOf.call(e) === BigInt.prototype.valueOf.call(t) : I(t) && Symbol.prototype.valueOf.call(e) === Symbol.prototype.valueOf.call(t) + }(e, t)) return !1 + } + return N(e, t, n, r, 0) + } + + function M(e, t) { + return t.filter((function(t) { + return y(e, t) + })) + } + + function N(e, t, n, r, o, i) { + if (5 === arguments.length) { + i = Object.keys(e); + var a = Object.keys(t); + if (i.length !== a.length) return !1 + } + for (var c = 0; c < i.length; c++) + if (!p(t, i[c])) return !1; + if (n && 5 === arguments.length) { + var s = l(e); + if (0 !== s.length) { + var u = 0; + for (c = 0; c < s.length; c++) { + var f = s[c]; + if (y(e, f)) { + if (!y(t, f)) return !1; + i.push(f), u++ + } else if (y(t, f)) return !1 + } + var d = l(t); + if (s.length !== d.length && M(t, d).length !== u) return !1 + } else { + var g = l(t); + if (0 !== g.length && 0 !== M(t, g).length) return !1 + } + } + if (0 === i.length && (0 === o || 1 === o && 0 === e.length || 0 === e.size)) return !0; + if (void 0 === r) r = { + val1: new Map, + val2: new Map, + position: 0 + }; + else { + var h = r.val1.get(e); + if (void 0 !== h) { + var b = r.val2.get(t); + if (void 0 !== b) return h === b + } + r.position++ + } + r.val1.set(e, r.position), r.val2.set(t, r.position); + var m = C(e, t, n, i, r, o); + return r.val1.delete(e), r.val2.delete(t), m + } + + function U(e, t, n, r) { + for (var o = a(e), i = 0; i < o.length; i++) { + var c = o[i]; + if (D(t, c, n, r)) return e.delete(c), !0 + } + return !1 + } + + function L(e) { + switch (o(e)) { + case "undefined": + return null; + case "object": + return; + case "symbol": + return !1; + case "string": + e = +e; + case "number": + if (u(e)) return !1 + } + return !0 + } + + function B(e, t, n) { + var r = L(n); + return null != r ? r : t.has(r) && !e.has(r) + } + + function q(e, t, n, r, o) { + var i = L(n); + if (null != i) return i; + var a = t.get(i); + return !(void 0 === a && !t.has(i) || !D(r, a, !1, o)) && !e.has(i) && D(r, a, !1, o) + } + + function $(e, t, n, r, o, i) { + for (var c = a(e), s = 0; s < c.length; s++) { + var l = c[s]; + if (D(n, l, o, i) && D(r, t.get(l), o, i)) return e.delete(l), !0 + } + return !1 + } + + function C(e, t, n, i, s, l) { + var u = 0; + if (2 === l) { + if (! function(e, t, n, r) { + for (var i = null, c = a(e), s = 0; s < c.length; s++) { + var l = c[s]; + if ("object" === o(l) && null !== l) null === i && (i = new Set), i.add(l); + else if (!t.has(l)) { + if (n) return !1; + if (!B(e, t, l)) return !1; + null === i && (i = new Set), i.add(l) + } + } + if (null !== i) { + for (var u = a(t), f = 0; f < u.length; f++) { + var p = u[f]; + if ("object" === o(p) && null !== p) { + if (!U(i, p, n, r)) return !1 + } else if (!n && !e.has(p) && !U(i, p, n, r)) return !1 + } + return 0 === i.size + } + return !0 + }(e, t, n, s)) return !1 + } else if (3 === l) { + if (! function(e, t, n, i) { + for (var a = null, s = c(e), l = 0; l < s.length; l++) { + var u = r(s[l], 2), + f = u[0], + p = u[1]; + if ("object" === o(f) && null !== f) null === a && (a = new Set), a.add(f); + else { + var y = t.get(f); + if (void 0 === y && !t.has(f) || !D(p, y, n, i)) { + if (n) return !1; + if (!q(e, t, f, p, i)) return !1; + null === a && (a = new Set), a.add(f) + } + } + } + if (null !== a) { + for (var d = c(t), g = 0; g < d.length; g++) { + var h = r(d[g], 2), + b = (f = h[0], h[1]); + if ("object" === o(f) && null !== f) { + if (!$(a, e, f, b, n, i)) return !1 + } else if (!(n || e.has(f) && D(e.get(f), b, !1, i) || $(a, e, f, b, !1, i))) return !1 + } + return 0 === a.size + } + return !0 + }(e, t, n, s)) return !1 + } else if (1 === l) + for (; u < e.length; u++) { + if (!p(e, u)) { + if (p(t, u)) return !1; + for (var f = Object.keys(e); u < f.length; u++) { + var y = f[u]; + if (!p(t, y) || !D(e[y], t[y], n, s)) return !1 + } + return f.length === Object.keys(t).length + } + if (!p(t, u) || !D(e[u], t[u], n, s)) return !1 + } + for (u = 0; u < i.length; u++) { + var d = i[u]; + if (!D(e[d], t[d], n, s)) return !1 + } + return !0 + } + e.exports = { + isDeepEqual: function(e, t) { + return D(e, t, !1) + }, + isDeepStrictEqual: function(e, t) { + return D(e, t, !0) + } + } + }, + 54220: (e, t, n) => { + "use strict"; + n.d(t, { + H: () => o + }); + var r = n(25108); + class o { + static shared = new o; + activeSubscription = null; + get editorUnlocked() { + return !!this.activeSubscription + } + get externalPluginsUnlocked() { + return !!this.activeSubscription + } + async refreshSubscription() { + let e = await fetch("https://get.metapress.dev/api/payments/checkSubscription").then((e => e.json())); + if (e.errorText) throw new Error(e.errorText); + this.activeSubscription = e.subscriptionInfo, setTimeout((function() { + r.debug(`[MetaPress] Subscription for ${e.domain} is: ${e.subscription}`) + }), 1) + } + async subscribe(e) { + let t = `https://get.metapress.dev/api/payments/subscribe?domain=${encodeURIComponent(window.location.hostname)}&affiliateCode=${encodeURIComponent(e||"")}`, + n = window.screenLeft || window.screenX || 0, + r = window.screenTop || window.screenY || 0, + o = window.outerWidth || 1920, + i = window.outerHeight || 1080, + a = Math.max(n + o / 2 - 300, 0), + c = Math.max(r + i / 2 - 400, 0), + s = window.open(t, "manage-subscription", `width=600,height=800,left=${a},top=${c},menubar=no,toolbar=no,location=no,personalbar=no,status=no`); + for (; await new Promise((e => setTimeout(e, 500))), !s.closed;); + await this.refreshSubscription() + } + } + }, + 55293: (e, t, n) => { + "use strict"; + n.d(t, { + BV: () => a, + ZP: () => i, + mc: () => c + }); + var r = n(54220), + o = n(25108); + class i { + all = []; + stats = { + eventsEmitted: 0, + recordEvents: !1, + recordedEvents: [] + }; + get allLoaded() { + return this.startedAllPlugins + } + startedAllPlugins = !1; + allPluginsRegistered = !1; + loadingPluginMetadata = []; + pendingLoadPromises = []; + async start() { + o.debug("[MetaPress] Loading plugins..."); + let e = await this.register(Promise.all([n.e(745), n.e(8718)]).then(n.bind(n, 88718)), { + name: "Loader", + InternalPluginKey: s + }); + await e.waitForLoaderReady(), await r.H.shared.refreshSubscription().catch((e => { + setTimeout((function() { + o.error("[MetaPress] Unable to check subscription: " + e.message) + }), 1) + })), this.register(Promise.all([n.e(8250), n.e(7568)]).then(n.bind(n, 7568)), { + name: "Animations", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(140), n.e(1217), n.e(8646), n.e(452), n.e(5414)]).then(n.bind(n, 65414)), { + name: "Built-in Objects", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(4162), n.e(6955)]).then(n.bind(n, 26955)), { + name: "Camera Controller", + InternalPluginKey: s + }), this.register(n.e(3301).then(n.bind(n, 13301)), { + name: "Entity Manager", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(840), n.e(7109)]).then(n.bind(n, 77109)), { + name: "Input Manager", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(140), n.e(4162), n.e(8789), n.e(9528)]).then(n.bind(n, 9528)), { + name: "Physics", + InternalPluginKey: s + }), this.register(n.e(4142).then(n.bind(n, 84142)), { + name: "Raycasting", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(8646), n.e(1259), n.e(6282)]).then(n.bind(n, 16282)), { + name: "Regions", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(8250), n.e(2371), n.e(3170)]).then(n.bind(n, 83170)), { + name: "World Renderer", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(2371), n.e(3696)]).then(n.bind(n, 73696)), { + name: "Ambient Occlusion", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(140), n.e(1217), n.e(2050), n.e(7387)]).then(n.bind(n, 37387)), { + name: "VR Manager", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(3446)]).then(n.bind(n, 43446)), { + name: "Avatar Manager", + InternalPluginKey: s + }), this.register(n.e(5380).then(n.bind(n, 55380)), { + name: "Default Avatar", + InternalPluginKey: s + }), this.register(n.e(4240).then(n.bind(n, 54240)), { + name: "Extra Avatars", + InternalPluginKey: s + }), this.register(n.e(2167).then(n.bind(n, 92167)), { + name: "Audio Core", + InternalPluginKey: s + }), this.register(n.e(1530).then(n.bind(n, 41530)), { + name: "Media", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(8764), n.e(8853), n.e(510)]).then(n.bind(n, 82944)), { + name: "P2P Audio", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(8151), n.e(2589), n.e(516), n.e(2116)]).then(n.bind(n, 62116)), { + name: "Open Link", + InternalPluginKey: s + }), this.register(Promise.all([n.e(983), n.e(341)]).then(n.bind(n, 90341)), { + name: "Asset Manager", + InternalPluginKey: s + }), this.register(Promise.all([n.e(5972), n.e(4659)]).then(n.bind(n, 4659)), { + name: "Backend", + InternalPluginKey: s + }), this.register(Promise.all([n.e(745), n.e(3738)]).then(n.bind(n, 43738)), { + name: "Chat", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(2238), n.e(2589), n.e(1985)]).then(n.bind(n, 31985)), { + name: "Debug", + InternalPluginKey: s + }), this.register(Promise.all([n.e(745), n.e(9104)]).then(n.bind(n, 89104)), { + name: "Navigation", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(8250), n.e(3475), n.e(2589), n.e(4716)]).then(n.bind(n, 4716)), { + name: "Emojis", + InternalPluginKey: s + }), this.register(n.e(242).then(n.bind(n, 242)), { + name: "Mixamo Compatibility", + InternalPluginKey: s + }), this.register(n.e(4148).then(n.bind(n, 94148)), { + name: "Nametags", + InternalPluginKey: s + }), this.register(n.e(2973).then(n.bind(n, 42973)), { + name: "Notifier", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(8764), n.e(7600), n.e(5101)]).then(n.bind(n, 45101)), { + name: "Portals", + InternalPluginKey: s + }), this.register(n.e(9402).then(n.bind(n, 89402)), { + name: "Profiles", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(8151), n.e(2589), n.e(516), n.e(4530)]).then(n.bind(n, 4530)), { + name: "Site content", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(2031)]).then(n.bind(n, 32031)), { + name: "Spawn points", + InternalPluginKey: s + }), this.register(n.e(9649).then(n.bind(n, 19649)), { + name: "URL Hash Location", + InternalPluginKey: s + }), this.register(Promise.all([n.e(8764), n.e(5319), n.e(1003)]).then(n.bind(n, 91003)), { + name: "Optimize GLB Imports", + InternalPluginKey: s + }), this.register(n.e(488).then(n.bind(n, 10488)), { + name: "WordPress Integration", + InternalPluginKey: s + }), this.register(n.e(3756).then(n.bind(n, 3756)), { + name: "WebDAV Integration", + InternalPluginKey: s + }), this.register(n.e(2302).then(n.bind(n, 22302)), { + name: "Template File Integration", + InternalPluginKey: s + }), this.register(n.e(7141).then(n.bind(n, 27141)), { + name: "Web Weaver AI", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(8764), n.e(8853), n.e(4025)]).then(n.bind(n, 45604)), { + name: "Ethereal Storage", + InternalPluginKey: s + }), this.register(n.e(5948).then(n.bind(n, 25948)), { + name: "Messaging", + InternalPluginKey: s + }), this.register(Promise.all([n.e(1310), n.e(781)]).then(n.bind(n, 10781)), { + name: "MQTT", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(745), n.e(1884), n.e(2589), n.e(4079)]).then(n.bind(n, 4079)), { + name: "Dialogs", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(745), n.e(9220), n.e(2589), n.e(2009)]).then(n.bind(n, 42009)), { + name: "Editor", + InternalPluginKey: s + }), this.register(n.e(7195).then(n.bind(n, 47195)), { + name: "Fullscreen Support", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(745), n.e(8764), n.e(1036), n.e(2589), n.e(1023)]).then(n.bind(n, 66579)), { + name: "Menubar", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(5651), n.e(2589), n.e(100)]).then(n.bind(n, 30100)), { + name: "Settings Panel", + InternalPluginKey: s + }), this.register(Promise.all([n.e(9477), n.e(2212)]).then(n.bind(n, 12212)), { + name: "User Interface", + InternalPluginKey: s + }), this.register(n.e(3746).then(n.bind(n, 63746)), { + name: "Action Panel", + InternalPluginKey: s + }), await this.waitForAllPluginsToLoad(), this.allPluginsRegistered = !0, "loading" == document.readyState && (o.debug("[MetaPress] Waiting for document to finish loading..."), await new Promise((e => window.addEventListener("DOMContentLoaded", e)))); + for (let e of window.metapressPluginLoaders || []) this.pendingLoadPromises.push(e()); + window.metapressPluginLoaders = { + push: async e => { + this.pendingLoadPromises.push(e()), await this.waitForAllPluginsToLoad() + } + }, await this.waitForAllPluginsToLoad(), o.debug("[MetaPress] All plugins loaded!"), this.startedAllPlugins = !0, metapress.plugins.sendEvent("onAppReady") + } + async waitForAllPluginsToLoad() { + for (; this._isWaitingForPluginsToLoad;) await new Promise((e => setTimeout(e, 100))); + for (this._isWaitingForPluginsToLoad = !0;;) { + for (let e of this.pendingLoadPromises) { + try { + await e + } catch (e) { + o.warn("[MetaPress] Plugin load error:", e) + } + this.pendingLoadPromises = this.pendingLoadPromises.filter((t => t != e)) + } + let e = this.pluginLoadCheck(); + for (let e of this.all) await e._loadPromise; + if (!e) break; + await new Promise((e => setTimeout(e, 100))) + } + this._isWaitingForPluginsToLoad = !1 + } + async register(e, t) { + if (t?.InternalPluginKey === s || r.H.shared.externalPluginsUnlocked) { + t && delete t.InternalPluginKey, t && this.loadingPluginMetadata.push(t); + try { + if (e instanceof Promise && (this.pendingLoadPromises.push(e), e = await e), e.__esModule && (e = e.default), "function" == typeof e && (e = new e), !e.id) throw new Error("No 'id' field found on the registered plugin."); + if (e.id.includes(">")) throw new Error("Invalid character '>' in plugin ID."); + if (this.all.find((t => t.id == e.id))) throw new Error(`Plugin with ID '${e.id}' already registered.`); + return e.config = metapress.config[e.id] || {}, e._state = a.Waiting, this.all.push(e), this.all.sort(((e, t) => (e.priority || 0) - (t.priority || 0))), this.startedAllPlugins && this.waitForAllPluginsToLoad(), e + } finally { + t && (this.loadingPluginMetadata = this.loadingPluginMetadata.filter((e => e != t))) + } + } else o.warn(`[MetaPress] External plugin '${t?.name||e?.id}' is not loaded because no valid subscription was found.`) + } + pluginLoadCheck() { + let e = !1; + for (let t of this.all) this.pluginLoadCheckIndividual(t) && (e = !0); + if (!e) + for (let e of this.all) this.pluginDependencyCheckIndividual(e); + return e + } + pluginLoadCheckIndividual(e) { + if (e._state == a.Loading) return !0; + if (e._state == a.Loaded) return !1; + if (e._state == a.Error) return !1; + let t = !1; + for (let n of e.requires || []) + if (!this.getProvider(n)) { + t = !0; + break + } return !t && (e._state = a.Loading, e._loadPromise = Promise.resolve().then((async () => { + try { + await (e.onLoad?.()), e._state = a.Loaded, this.sendEvent("onPluginLoad", e), o.debug(`[MetaPress] Plugin loaded: ${e.id}`); + let t = e.provides || []; + for (let n of t) { + let t = this.all.find((t => t._state == a.Loaded && t.provides?.includes(n) && t.id != e.id)); + t && o.warn(`[MetaPress] Plugin '${e.id}' provides '${n}', but so does '${t.id}'. This can have unintended side effects.`) + } + } catch (t) { + t.cancelled ? o.debug(`[MetaPress] Plugin '${e.id}' was skipped: ${t.message}`) : o.error(`[MetaPress] Plugin '${e.id}' failed to load:`, t), e._state = a.Error, e._error = t + } + })), !0) + } + pluginDependencyCheckIndividual(e) { + if (e._state == a.Waiting) + for (let t of e.requires || []) + if (!this.getProvider(t)) return e._state = a.Error, e._error = { + message: `The dependency '${t}' was not found.`, + cancelled: !0 + }, void o.debug(`[MetaPress] Plugin '${e.id}' was skipped: ${e._error.message}`) + } + _sendEvent(e, t, n, r) { + if (this.stats.eventsEmitted += 1, this.stats.recordEvents && "_onInternalEvent" != t && this.stats.recordedEvents.push({ + responseMode: e, + name: t, + args: n, + isAsync: r, + date: Date.now() + }), this._callStack || (this._callStack = []), this._callStack.includes(t)) return; + this._callStack.push(t); + let i = null; + try { + let r = this._listeners[t]; + if (r?.length) + for (let e of r) e(...n); + i = e == c.All || e == c.AllAsync ? [] : null; + let s = t.split(">"), + l = null, + u = null; + 1 == s.length ? (l = null, u = s[0].trim()) : s.length >= 2 && (l = s[0].trim(), u = s[1].trim()), u = "$" + u; + for (let t of this.all) + if (t._state == a.Loaded && (!l || t.id == l) && (l || t[u])) try { + let r = e == c.AllAsync ? Promise.resolve().then((() => t[u]?.apply(t, n))) : t[u]?.apply(t, n); + if (null == r); + else if (e == c.All || e == c.AllAsync) i.push(r); + else if (e == c.First) { + i = r; + break + } + } catch (e) { + o.error(`[MetaPress] Error calling plugin '${t.id}.${u}':`, e) + } + } catch (e) { + o.error(e) + } + return this._callStack.pop(), i + } + sendEvent(e, ...t) { + this._sendEvent(c.None, e, t), this._sendEvent(c.None, "_onInternalEvent", [c.None, e, t]) + } + call(e, ...t) { + return this._sendEvent(c.First, e, t) ?? this._sendEvent(c.First, "_onInternalEvent", [c.First, e, t]) + } + callAll(e, ...t) { + return [...this._sendEvent(c.All, e, t), ...this._sendEvent(c.All, "_onInternalEvent", [c.All, e, t]).flat()] + } + async callAsync(e, ...t) { + let n = this._sendEvent(c.AllAsync, e, t), + r = this._sendEvent(c.AllAsync, "_onInternalEvent", [c.All, e, t]); + return n = await Promise.all(n), r = await Promise.all(r), n.find((e => !!e)) ?? r.flat().find((e => !!e)) + } + async callAllAsync(e, ...t) { + let n = this._sendEvent(c.AllAsync, e, t), + r = this._sendEvent(c.AllAsync, "_onInternalEvent", [e, t]); + return n = await Promise.all(n), r = await Promise.all(r), [...n, ...r.flat()].filter((e => !!e)) + } + getProvider(e, t) { + return t ? this.all.find((t => t.provides?.includes(e))) : this.all.find((t => t._state == a.Loaded && t.provides?.includes(e))) + } + _listeners = {}; + addEventListener(e, t) { + this._listeners[e] || (this._listeners[e] = []), this._listeners[e].push(t) + } + removeEventListener(e, t) { + this._listeners[e] && (this._listeners[e] = this._listeners[e].filter((e => e != t))) + } + } + const a = { + Waiting: "waiting", + Loading: "loading", + Loaded: "loaded", + Error: "error" + }, + c = { + None: 0, + First: 1, + All: 2, + AllAsync: 3 + }; + var s = Math.random() + ":" + Math.random() + }, + 21924: (e, t, n) => { + "use strict"; + var r = n(40210), + o = n(55559), + i = o(r("String.prototype.indexOf")); + e.exports = function(e, t) { + var n = r(e, !!t); + return "function" == typeof n && i(e, ".prototype.") > -1 ? o(n) : n + } + }, + 55559: (e, t, n) => { + "use strict"; + var r = n(58612), + o = n(40210), + i = o("%Function.prototype.apply%"), + a = o("%Function.prototype.call%"), + c = o("%Reflect.apply%", !0) || r.call(a, i), + s = o("%Object.getOwnPropertyDescriptor%", !0), + l = o("%Object.defineProperty%", !0), + u = o("%Math.max%"); + if (l) try { + l({}, "a", { + value: 1 + }) + } catch (e) { + l = null + } + e.exports = function(e) { + var t = c(r, a, arguments); + if (s && l) { + var n = s(t, "length"); + n.configurable && l(t, "length", { + value: 1 + u(0, e.length - (arguments.length - 1)) + }) + } + return t + }; + var f = function() { + return c(r, i, arguments) + }; + l ? l(e.exports, "apply", { + value: f + }) : e.exports.apply = f + }, + 25108: (e, t, n) => { + var r = n(89539), + o = n(69282); + + function i() { + return (new Date).getTime() + } + var a, c = Array.prototype.slice, + s = {}; + a = void 0 !== n.g && n.g.console ? n.g.console : "undefined" != typeof window && window.console ? window.console : {}; + for (var l = [ + [function() {}, "log"], + [function() { + a.log.apply(a, arguments) + }, "info"], + [function() { + a.log.apply(a, arguments) + }, "warn"], + [function() { + a.warn.apply(a, arguments) + }, "error"], + [function(e) { + s[e] = i() + }, "time"], + [function(e) { + var t = s[e]; + if (!t) throw new Error("No such label: " + e); + delete s[e]; + var n = i() - t; + a.log(e + ": " + n + "ms") + }, "timeEnd"], + [function() { + var e = new Error; + e.name = "Trace", e.message = r.format.apply(null, arguments), a.error(e.stack) + }, "trace"], + [function(e) { + a.log(r.inspect(e) + "\n") + }, "dir"], + [function(e) { + if (!e) { + var t = c.call(arguments, 1); + o.ok(!1, r.format.apply(null, t)) + } + }, "assert"] + ], u = 0; u < l.length; u++) { + var f = l[u], + p = f[0], + y = f[1]; + a[y] || (a[y] = p) + } + e.exports = a + }, + 4289: (e, t, n) => { + "use strict"; + var r = n(82215), + o = "function" == typeof Symbol && "symbol" == typeof Symbol("foo"), + i = Object.prototype.toString, + a = Array.prototype.concat, + c = Object.defineProperty, + s = n(31044)(), + l = c && s, + u = function(e, t, n, r) { + var o; + (!(t in e) || "function" == typeof(o = r) && "[object Function]" === i.call(o) && r()) && (l ? c(e, t, { + configurable: !0, + enumerable: !1, + value: n, + writable: !0 + }) : e[t] = n) + }, + f = function(e, t) { + var n = arguments.length > 2 ? arguments[2] : {}, + i = r(t); + o && (i = a.call(i, Object.getOwnPropertySymbols(t))); + for (var c = 0; c < i.length; c += 1) u(e, i[c], t[i[c]], n[i[c]]) + }; + f.supportsDescriptors = !!l, e.exports = f + }, + 8091: e => { + "use strict"; + + function t(e, t) { + if (null == e) throw new TypeError("Cannot convert first argument to object"); + for (var n = Object(e), r = 1; r < arguments.length; r++) { + var o = arguments[r]; + if (null != o) + for (var i = Object.keys(Object(o)), a = 0, c = i.length; a < c; a++) { + var s = i[a], + l = Object.getOwnPropertyDescriptor(o, s); + void 0 !== l && l.enumerable && (n[s] = o[s]) + } + } + return n + } + e.exports = { + assign: t, + polyfill: function() { + Object.assign || Object.defineProperty(Object, "assign", { + enumerable: !1, + configurable: !0, + writable: !0, + value: t + }) + } + } + }, + 94029: (e, t, n) => { + "use strict"; + var r = n(95320), + o = Object.prototype.toString, + i = Object.prototype.hasOwnProperty, + a = function(e, t, n) { + for (var r = 0, o = e.length; r < o; r++) i.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e)) + }, + c = function(e, t, n) { + for (var r = 0, o = e.length; r < o; r++) null == n ? t(e.charAt(r), r, e) : t.call(n, e.charAt(r), r, e) + }, + s = function(e, t, n) { + for (var r in e) i.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e)) + }; + e.exports = function(e, t, n) { + if (!r(t)) throw new TypeError("iterator must be a function"); + var i; + arguments.length >= 3 && (i = n), "[object Array]" === o.call(e) ? a(e, t, i) : "string" == typeof e ? c(e, t, i) : s(e, t, i) + } + }, + 17648: e => { + "use strict"; + var t = "Function.prototype.bind called on incompatible ", + n = Array.prototype.slice, + r = Object.prototype.toString, + o = "[object Function]"; + e.exports = function(e) { + var i = this; + if ("function" != typeof i || r.call(i) !== o) throw new TypeError(t + i); + for (var a, c = n.call(arguments, 1), s = function() { + if (this instanceof a) { + var t = i.apply(this, c.concat(n.call(arguments))); + return Object(t) === t ? t : this + } + return i.apply(e, c.concat(n.call(arguments))) + }, l = Math.max(0, i.length - c.length), u = [], f = 0; f < l; f++) u.push("$" + f); + if (a = Function("binder", "return function (" + u.join(",") + "){ return binder.apply(this,arguments); }")(s), i.prototype) { + var p = function() {}; + p.prototype = i.prototype, a.prototype = new p, p.prototype = null + } + return a + } + }, + 58612: (e, t, n) => { + "use strict"; + var r = n(17648); + e.exports = Function.prototype.bind || r + }, + 40210: (e, t, n) => { + "use strict"; + var r, o = SyntaxError, + i = Function, + a = TypeError, + c = function(e) { + try { + return i('"use strict"; return (' + e + ").constructor;")() + } catch (e) {} + }, + s = Object.getOwnPropertyDescriptor; + if (s) try { + s({}, "") + } catch (e) { + s = null + } + var l = function() { + throw new a + }, + u = s ? function() { + try { + return l + } catch (e) { + try { + return s(arguments, "callee").get + } catch (e) { + return l + } + } + }() : l, + f = n(41405)(), + p = Object.getPrototypeOf || function(e) { + return e.__proto__ + }, + y = {}, + d = "undefined" == typeof Uint8Array ? r : p(Uint8Array), + g = { + "%AggregateError%": "undefined" == typeof AggregateError ? r : AggregateError, + "%Array%": Array, + "%ArrayBuffer%": "undefined" == typeof ArrayBuffer ? r : ArrayBuffer, + "%ArrayIteratorPrototype%": f ? p([][Symbol.iterator]()) : r, + "%AsyncFromSyncIteratorPrototype%": r, + "%AsyncFunction%": y, + "%AsyncGenerator%": y, + "%AsyncGeneratorFunction%": y, + "%AsyncIteratorPrototype%": y, + "%Atomics%": "undefined" == typeof Atomics ? r : Atomics, + "%BigInt%": "undefined" == typeof BigInt ? r : BigInt, + "%BigInt64Array%": "undefined" == typeof BigInt64Array ? r : BigInt64Array, + "%BigUint64Array%": "undefined" == typeof BigUint64Array ? r : BigUint64Array, + "%Boolean%": Boolean, + "%DataView%": "undefined" == typeof DataView ? r : DataView, + "%Date%": Date, + "%decodeURI%": decodeURI, + "%decodeURIComponent%": decodeURIComponent, + "%encodeURI%": encodeURI, + "%encodeURIComponent%": encodeURIComponent, + "%Error%": Error, + "%eval%": eval, + "%EvalError%": EvalError, + "%Float32Array%": "undefined" == typeof Float32Array ? r : Float32Array, + "%Float64Array%": "undefined" == typeof Float64Array ? r : Float64Array, + "%FinalizationRegistry%": "undefined" == typeof FinalizationRegistry ? r : FinalizationRegistry, + "%Function%": i, + "%GeneratorFunction%": y, + "%Int8Array%": "undefined" == typeof Int8Array ? r : Int8Array, + "%Int16Array%": "undefined" == typeof Int16Array ? r : Int16Array, + "%Int32Array%": "undefined" == typeof Int32Array ? r : Int32Array, + "%isFinite%": isFinite, + "%isNaN%": isNaN, + "%IteratorPrototype%": f ? p(p([][Symbol.iterator]())) : r, + "%JSON%": "object" == typeof JSON ? JSON : r, + "%Map%": "undefined" == typeof Map ? r : Map, + "%MapIteratorPrototype%": "undefined" != typeof Map && f ? p((new Map)[Symbol.iterator]()) : r, + "%Math%": Math, + "%Number%": Number, + "%Object%": Object, + "%parseFloat%": parseFloat, + "%parseInt%": parseInt, + "%Promise%": "undefined" == typeof Promise ? r : Promise, + "%Proxy%": "undefined" == typeof Proxy ? r : Proxy, + "%RangeError%": RangeError, + "%ReferenceError%": ReferenceError, + "%Reflect%": "undefined" == typeof Reflect ? r : Reflect, + "%RegExp%": RegExp, + "%Set%": "undefined" == typeof Set ? r : Set, + "%SetIteratorPrototype%": "undefined" != typeof Set && f ? p((new Set)[Symbol.iterator]()) : r, + "%SharedArrayBuffer%": "undefined" == typeof SharedArrayBuffer ? r : SharedArrayBuffer, + "%String%": String, + "%StringIteratorPrototype%": f ? p("" [Symbol.iterator]()) : r, + "%Symbol%": f ? Symbol : r, + "%SyntaxError%": o, + "%ThrowTypeError%": u, + "%TypedArray%": d, + "%TypeError%": a, + "%Uint8Array%": "undefined" == typeof Uint8Array ? r : Uint8Array, + "%Uint8ClampedArray%": "undefined" == typeof Uint8ClampedArray ? r : Uint8ClampedArray, + "%Uint16Array%": "undefined" == typeof Uint16Array ? r : Uint16Array, + "%Uint32Array%": "undefined" == typeof Uint32Array ? r : Uint32Array, + "%URIError%": URIError, + "%WeakMap%": "undefined" == typeof WeakMap ? r : WeakMap, + "%WeakRef%": "undefined" == typeof WeakRef ? r : WeakRef, + "%WeakSet%": "undefined" == typeof WeakSet ? r : WeakSet + }; + try { + null.error + } catch (e) { + var h = p(p(e)); + g["%Error.prototype%"] = h + } + var b = function e(t) { + var n; + if ("%AsyncFunction%" === t) n = c("async function () {}"); + else if ("%GeneratorFunction%" === t) n = c("function* () {}"); + else if ("%AsyncGeneratorFunction%" === t) n = c("async function* () {}"); + else if ("%AsyncGenerator%" === t) { + var r = e("%AsyncGeneratorFunction%"); + r && (n = r.prototype) + } else if ("%AsyncIteratorPrototype%" === t) { + var o = e("%AsyncGenerator%"); + o && (n = p(o.prototype)) + } + return g[t] = n, n + }, + m = { + "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], + "%ArrayPrototype%": ["Array", "prototype"], + "%ArrayProto_entries%": ["Array", "prototype", "entries"], + "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], + "%ArrayProto_keys%": ["Array", "prototype", "keys"], + "%ArrayProto_values%": ["Array", "prototype", "values"], + "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], + "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], + "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], + "%BooleanPrototype%": ["Boolean", "prototype"], + "%DataViewPrototype%": ["DataView", "prototype"], + "%DatePrototype%": ["Date", "prototype"], + "%ErrorPrototype%": ["Error", "prototype"], + "%EvalErrorPrototype%": ["EvalError", "prototype"], + "%Float32ArrayPrototype%": ["Float32Array", "prototype"], + "%Float64ArrayPrototype%": ["Float64Array", "prototype"], + "%FunctionPrototype%": ["Function", "prototype"], + "%Generator%": ["GeneratorFunction", "prototype"], + "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], + "%Int8ArrayPrototype%": ["Int8Array", "prototype"], + "%Int16ArrayPrototype%": ["Int16Array", "prototype"], + "%Int32ArrayPrototype%": ["Int32Array", "prototype"], + "%JSONParse%": ["JSON", "parse"], + "%JSONStringify%": ["JSON", "stringify"], + "%MapPrototype%": ["Map", "prototype"], + "%NumberPrototype%": ["Number", "prototype"], + "%ObjectPrototype%": ["Object", "prototype"], + "%ObjProto_toString%": ["Object", "prototype", "toString"], + "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], + "%PromisePrototype%": ["Promise", "prototype"], + "%PromiseProto_then%": ["Promise", "prototype", "then"], + "%Promise_all%": ["Promise", "all"], + "%Promise_reject%": ["Promise", "reject"], + "%Promise_resolve%": ["Promise", "resolve"], + "%RangeErrorPrototype%": ["RangeError", "prototype"], + "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], + "%RegExpPrototype%": ["RegExp", "prototype"], + "%SetPrototype%": ["Set", "prototype"], + "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], + "%StringPrototype%": ["String", "prototype"], + "%SymbolPrototype%": ["Symbol", "prototype"], + "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], + "%TypedArrayPrototype%": ["TypedArray", "prototype"], + "%TypeErrorPrototype%": ["TypeError", "prototype"], + "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], + "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], + "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], + "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], + "%URIErrorPrototype%": ["URIError", "prototype"], + "%WeakMapPrototype%": ["WeakMap", "prototype"], + "%WeakSetPrototype%": ["WeakSet", "prototype"] + }, + v = n(58612), + w = n(17642), + P = v.call(Function.call, Array.prototype.concat), + S = v.call(Function.apply, Array.prototype.splice), + A = v.call(Function.call, String.prototype.replace), + E = v.call(Function.call, String.prototype.slice), + O = v.call(Function.call, RegExp.prototype.exec), + j = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g, + x = /\\(\\)?/g, + I = function(e) { + var t = E(e, 0, 1), + n = E(e, -1); + if ("%" === t && "%" !== n) throw new o("invalid intrinsic syntax, expected closing `%`"); + if ("%" === n && "%" !== t) throw new o("invalid intrinsic syntax, expected opening `%`"); + var r = []; + return A(e, j, (function(e, t, n, o) { + r[r.length] = n ? A(o, x, "$1") : t || e + })), r + }, + k = function(e, t) { + var n, r = e; + if (w(m, r) && (r = "%" + (n = m[r])[0] + "%"), w(g, r)) { + var i = g[r]; + if (i === y && (i = b(r)), void 0 === i && !t) throw new a("intrinsic " + e + " exists, but is not available. Please file an issue!"); + return { + alias: n, + name: r, + value: i + } + } + throw new o("intrinsic " + e + " does not exist!") + }; + e.exports = function(e, t) { + if ("string" != typeof e || 0 === e.length) throw new a("intrinsic name must be a non-empty string"); + if (arguments.length > 1 && "boolean" != typeof t) throw new a('"allowMissing" argument must be a boolean'); + if (null === O(/^%?[^%]*%?$/, e)) throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); + var n = I(e), + r = n.length > 0 ? n[0] : "", + i = k("%" + r + "%", t), + c = i.name, + l = i.value, + u = !1, + f = i.alias; + f && (r = f[0], S(n, P([0, 1], f))); + for (var p = 1, y = !0; p < n.length; p += 1) { + var d = n[p], + h = E(d, 0, 1), + b = E(d, -1); + if (('"' === h || "'" === h || "`" === h || '"' === b || "'" === b || "`" === b) && h !== b) throw new o("property names with quotes must have matching quotes"); + if ("constructor" !== d && y || (u = !0), w(g, c = "%" + (r += "." + d) + "%")) l = g[c]; + else if (null != l) { + if (!(d in l)) { + if (!t) throw new a("base intrinsic for " + e + " exists, but the property is not available."); + return + } + if (s && p + 1 >= n.length) { + var m = s(l, d); + l = (y = !!m) && "get" in m && !("originalValue" in m.get) ? m.get : l[d] + } else y = w(l, d), l = l[d]; + y && !u && (g[c] = l) + } + } + return l + } + }, + 27296: (e, t, n) => { + "use strict"; + var r = n(40210)("%Object.getOwnPropertyDescriptor%", !0); + if (r) try { + r([], "length") + } catch (e) { + r = null + } + e.exports = r + }, + 31044: (e, t, n) => { + "use strict"; + var r = n(40210)("%Object.defineProperty%", !0), + o = function() { + if (r) try { + return r({}, "a", { + value: 1 + }), !0 + } catch (e) { + return !1 + } + return !1 + }; + o.hasArrayLengthDefineBug = function() { + if (!o()) return null; + try { + return 1 !== r([], "length", { + value: 1 + }).length + } catch (e) { + return !0 + } + }, e.exports = o + }, + 41405: (e, t, n) => { + "use strict"; + var r = "undefined" != typeof Symbol && Symbol, + o = n(55419); + e.exports = function() { + return "function" == typeof r && "function" == typeof Symbol && "symbol" == typeof r("foo") && "symbol" == typeof Symbol("bar") && o() + } + }, + 55419: e => { + "use strict"; + e.exports = function() { + if ("function" != typeof Symbol || "function" != typeof Object.getOwnPropertySymbols) return !1; + if ("symbol" == typeof Symbol.iterator) return !0; + var e = {}, + t = Symbol("test"), + n = Object(t); + if ("string" == typeof t) return !1; + if ("[object Symbol]" !== Object.prototype.toString.call(t)) return !1; + if ("[object Symbol]" !== Object.prototype.toString.call(n)) return !1; + for (t in e[t] = 42, e) return !1; + if ("function" == typeof Object.keys && 0 !== Object.keys(e).length) return !1; + if ("function" == typeof Object.getOwnPropertyNames && 0 !== Object.getOwnPropertyNames(e).length) return !1; + var r = Object.getOwnPropertySymbols(e); + if (1 !== r.length || r[0] !== t) return !1; + if (!Object.prototype.propertyIsEnumerable.call(e, t)) return !1; + if ("function" == typeof Object.getOwnPropertyDescriptor) { + var o = Object.getOwnPropertyDescriptor(e, t); + if (42 !== o.value || !0 !== o.enumerable) return !1 + } + return !0 + } + }, + 96410: (e, t, n) => { + "use strict"; + var r = n(55419); + e.exports = function() { + return r() && !!Symbol.toStringTag + } + }, + 17642: (e, t, n) => { + "use strict"; + var r = n(58612); + e.exports = r.call(Function.call, Object.prototype.hasOwnProperty) + }, + 35717: e => { + "function" == typeof Object.create ? e.exports = function(e, t) { + t && (e.super_ = t, e.prototype = Object.create(t.prototype, { + constructor: { + value: e, + enumerable: !1, + writable: !0, + configurable: !0 + } + })) + } : e.exports = function(e, t) { + if (t) { + e.super_ = t; + var n = function() {}; + n.prototype = t.prototype, e.prototype = new n, e.prototype.constructor = e + } + } + }, + 82584: (e, t, n) => { + "use strict"; + var r = n(96410)(), + o = n(21924)("Object.prototype.toString"), + i = function(e) { + return !(r && e && "object" == typeof e && Symbol.toStringTag in e) && "[object Arguments]" === o(e) + }, + a = function(e) { + return !!i(e) || null !== e && "object" == typeof e && "number" == typeof e.length && e.length >= 0 && "[object Array]" !== o(e) && "[object Function]" === o(e.callee) + }, + c = function() { + return i(arguments) + }(); + i.isLegacyArguments = a, e.exports = c ? i : a + }, + 95320: e => { + "use strict"; + var t, n, r = Function.prototype.toString, + o = "object" == typeof Reflect && null !== Reflect && Reflect.apply; + if ("function" == typeof o && "function" == typeof Object.defineProperty) try { + t = Object.defineProperty({}, "length", { + get: function() { + throw n + } + }), n = {}, o((function() { + throw 42 + }), null, t) + } catch (e) { + e !== n && (o = null) + } else o = null; + var i = /^\s*class\b/, + a = function(e) { + try { + var t = r.call(e); + return i.test(t) + } catch (e) { + return !1 + } + }, + c = function(e) { + try { + return !a(e) && (r.call(e), !0) + } catch (e) { + return !1 + } + }, + s = Object.prototype.toString, + l = "function" == typeof Symbol && !!Symbol.toStringTag, + u = !(0 in [, ]), + f = function() { + return !1 + }; + if ("object" == typeof document) { + var p = document.all; + s.call(p) === s.call(document.all) && (f = function(e) { + if ((u || !e) && (void 0 === e || "object" == typeof e)) try { + var t = s.call(e); + return ("[object HTMLAllCollection]" === t || "[object HTML document.all class]" === t || "[object HTMLCollection]" === t || "[object Object]" === t) && null == e("") + } catch (e) {} + return !1 + }) + } + e.exports = o ? function(e) { + if (f(e)) return !0; + if (!e) return !1; + if ("function" != typeof e && "object" != typeof e) return !1; + try { + o(e, null, t) + } catch (e) { + if (e !== n) return !1 + } + return !a(e) && c(e) + } : function(e) { + if (f(e)) return !0; + if (!e) return !1; + if ("function" != typeof e && "object" != typeof e) return !1; + if (l) return c(e); + if (a(e)) return !1; + var t = s.call(e); + return !("[object Function]" !== t && "[object GeneratorFunction]" !== t && !/^\[object HTML/.test(t)) && c(e) + } + }, + 48662: (e, t, n) => { + "use strict"; + var r, o = Object.prototype.toString, + i = Function.prototype.toString, + a = /^\s*(?:function)?\*/, + c = n(96410)(), + s = Object.getPrototypeOf; + e.exports = function(e) { + if ("function" != typeof e) return !1; + if (a.test(i.call(e))) return !0; + if (!c) return "[object GeneratorFunction]" === o.call(e); + if (!s) return !1; + if (void 0 === r) { + var t = function() { + if (!c) return !1; + try { + return Function("return function*() {}")() + } catch (e) {} + }(); + r = !!t && s(t) + } + return s(e) === r + } + }, + 98611: e => { + "use strict"; + e.exports = function(e) { + return e != e + } + }, + 20360: (e, t, n) => { + "use strict"; + var r = n(55559), + o = n(4289), + i = n(98611), + a = n(29415), + c = n(23194), + s = r(a(), Number); + o(s, { + getPolyfill: a, + implementation: i, + shim: c + }), e.exports = s + }, + 29415: (e, t, n) => { + "use strict"; + var r = n(98611); + e.exports = function() { + return Number.isNaN && Number.isNaN(NaN) && !Number.isNaN("a") ? Number.isNaN : r + } + }, + 23194: (e, t, n) => { + "use strict"; + var r = n(4289), + o = n(29415); + e.exports = function() { + var e = o(); + return r(Number, { + isNaN: e + }, { + isNaN: function() { + return Number.isNaN !== e + } + }), e + } + }, + 85692: (e, t, n) => { + "use strict"; + var r = n(94029), + o = n(63083), + i = n(21924), + a = i("Object.prototype.toString"), + c = n(96410)(), + s = n(27296), + l = "undefined" == typeof globalThis ? n.g : globalThis, + u = o(), + f = i("Array.prototype.indexOf", !0) || function(e, t) { + for (var n = 0; n < e.length; n += 1) + if (e[n] === t) return n; + return -1 + }, + p = i("String.prototype.slice"), + y = {}, + d = Object.getPrototypeOf; + c && s && d && r(u, (function(e) { + var t = new l[e]; + if (Symbol.toStringTag in t) { + var n = d(t), + r = s(n, Symbol.toStringTag); + if (!r) { + var o = d(n); + r = s(o, Symbol.toStringTag) + } + y[e] = r.get + } + })), e.exports = function(e) { + if (!e || "object" != typeof e) return !1; + if (!c || !(Symbol.toStringTag in e)) { + var t = p(a(e), 8, -1); + return f(u, t) > -1 + } + return !!s && function(e) { + var t = !1; + return r(y, (function(n, r) { + if (!t) try { + t = n.call(e) === r + } catch (e) {} + })), t + }(e) + } + }, + 24244: e => { + "use strict"; + var t = function(e) { + return e != e + }; + e.exports = function(e, n) { + return 0 === e && 0 === n ? 1 / e == 1 / n : e === n || !(!t(e) || !t(n)) + } + }, + 20609: (e, t, n) => { + "use strict"; + var r = n(4289), + o = n(55559), + i = n(24244), + a = n(75624), + c = n(52281), + s = o(a(), Object); + r(s, { + getPolyfill: a, + implementation: i, + shim: c + }), e.exports = s + }, + 75624: (e, t, n) => { + "use strict"; + var r = n(24244); + e.exports = function() { + return "function" == typeof Object.is ? Object.is : r + } + }, + 52281: (e, t, n) => { + "use strict"; + var r = n(75624), + o = n(4289); + e.exports = function() { + var e = r(); + return o(Object, { + is: e + }, { + is: function() { + return Object.is !== e + } + }), e + } + }, + 18987: (e, t, n) => { + "use strict"; + var r; + if (!Object.keys) { + var o = Object.prototype.hasOwnProperty, + i = Object.prototype.toString, + a = n(21414), + c = Object.prototype.propertyIsEnumerable, + s = !c.call({ + toString: null + }, "toString"), + l = c.call((function() {}), "prototype"), + u = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"], + f = function(e) { + var t = e.constructor; + return t && t.prototype === e + }, + p = { + $applicationCache: !0, + $console: !0, + $external: !0, + $frame: !0, + $frameElement: !0, + $frames: !0, + $innerHeight: !0, + $innerWidth: !0, + $onmozfullscreenchange: !0, + $onmozfullscreenerror: !0, + $outerHeight: !0, + $outerWidth: !0, + $pageXOffset: !0, + $pageYOffset: !0, + $parent: !0, + $scrollLeft: !0, + $scrollTop: !0, + $scrollX: !0, + $scrollY: !0, + $self: !0, + $webkitIndexedDB: !0, + $webkitStorageInfo: !0, + $window: !0 + }, + y = function() { + if ("undefined" == typeof window) return !1; + for (var e in window) try { + if (!p["$" + e] && o.call(window, e) && null !== window[e] && "object" == typeof window[e]) try { + f(window[e]) + } catch (e) { + return !0 + } + } catch (e) { + return !0 + } + return !1 + }(); + r = function(e) { + var t = null !== e && "object" == typeof e, + n = "[object Function]" === i.call(e), + r = a(e), + c = t && "[object String]" === i.call(e), + p = []; + if (!t && !n && !r) throw new TypeError("Object.keys called on a non-object"); + var d = l && n; + if (c && e.length > 0 && !o.call(e, 0)) + for (var g = 0; g < e.length; ++g) p.push(String(g)); + if (r && e.length > 0) + for (var h = 0; h < e.length; ++h) p.push(String(h)); + else + for (var b in e) d && "prototype" === b || !o.call(e, b) || p.push(String(b)); + if (s) + for (var m = function(e) { + if ("undefined" == typeof window || !y) return f(e); + try { + return f(e) + } catch (e) { + return !1 + } + }(e), v = 0; v < u.length; ++v) m && "constructor" === u[v] || !o.call(e, u[v]) || p.push(u[v]); + return p + } + } + e.exports = r + }, + 82215: (e, t, n) => { + "use strict"; + var r = Array.prototype.slice, + o = n(21414), + i = Object.keys, + a = i ? function(e) { + return i(e) + } : n(18987), + c = Object.keys; + a.shim = function() { + if (Object.keys) { + var e = function() { + var e = Object.keys(arguments); + return e && e.length === arguments.length + }(1, 2); + e || (Object.keys = function(e) { + return o(e) ? c(r.call(e)) : c(e) + }) + } else Object.keys = a; + return Object.keys || a + }, e.exports = a + }, + 21414: e => { + "use strict"; + var t = Object.prototype.toString; + e.exports = function(e) { + var n = t.call(e), + r = "[object Arguments]" === n; + return r || (r = "[object Array]" !== n && null !== e && "object" == typeof e && "number" == typeof e.length && e.length >= 0 && "[object Function]" === t.call(e.callee)), r + } + }, + 34155: e => { + var t, n, r = e.exports = {}; + + function o() { + throw new Error("setTimeout has not been defined") + } + + function i() { + throw new Error("clearTimeout has not been defined") + } + + function a(e) { + if (t === setTimeout) return setTimeout(e, 0); + if ((t === o || !t) && setTimeout) return t = setTimeout, setTimeout(e, 0); + try { + return t(e, 0) + } catch (n) { + try { + return t.call(null, e, 0) + } catch (n) { + return t.call(this, e, 0) + } + } + }! function() { + try { + t = "function" == typeof setTimeout ? setTimeout : o + } catch (e) { + t = o + } + try { + n = "function" == typeof clearTimeout ? clearTimeout : i + } catch (e) { + n = i + } + }(); + var c, s = [], + l = !1, + u = -1; + + function f() { + l && c && (l = !1, c.length ? s = c.concat(s) : u = -1, s.length && p()) + } + + function p() { + if (!l) { + var e = a(f); + l = !0; + for (var t = s.length; t;) { + for (c = s, s = []; ++u < t;) c && c[u].run(); + u = -1, t = s.length + } + c = null, l = !1, + function(e) { + if (n === clearTimeout) return clearTimeout(e); + if ((n === i || !n) && clearTimeout) return n = clearTimeout, clearTimeout(e); + try { + n(e) + } catch (t) { + try { + return n.call(null, e) + } catch (t) { + return n.call(this, e) + } + } + }(e) + } + } + + function y(e, t) { + this.fun = e, this.array = t + } + + function d() {} + r.nextTick = function(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]; + s.push(new y(e, t)), 1 !== s.length || l || a(p) + }, y.prototype.run = function() { + this.fun.apply(null, this.array) + }, r.title = "browser", r.browser = !0, r.env = {}, r.argv = [], r.version = "", r.versions = {}, r.on = d, r.addListener = d, r.once = d, r.off = d, r.removeListener = d, r.removeAllListeners = d, r.emit = d, r.prependListener = d, r.prependOnceListener = d, r.listeners = function(e) { + return [] + }, r.binding = function(e) { + throw new Error("process.binding is not supported") + }, r.cwd = function() { + return "/" + }, r.chdir = function(e) { + throw new Error("process.chdir is not supported") + }, r.umask = function() { + return 0 + } + }, + 20384: e => { + e.exports = function(e) { + return e && "object" == typeof e && "function" == typeof e.copy && "function" == typeof e.fill && "function" == typeof e.readUInt8 + } + }, + 55955: (e, t, n) => { + "use strict"; + var r = n(82584), + o = n(48662), + i = n(86430), + a = n(85692); + + function c(e) { + return e.call.bind(e) + } + var s = "undefined" != typeof BigInt, + l = "undefined" != typeof Symbol, + u = c(Object.prototype.toString), + f = c(Number.prototype.valueOf), + p = c(String.prototype.valueOf), + y = c(Boolean.prototype.valueOf); + if (s) var d = c(BigInt.prototype.valueOf); + if (l) var g = c(Symbol.prototype.valueOf); + + function h(e, t) { + if ("object" != typeof e) return !1; + try { + return t(e), !0 + } catch (e) { + return !1 + } + } + + function b(e) { + return "[object Map]" === u(e) + } + + function m(e) { + return "[object Set]" === u(e) + } + + function v(e) { + return "[object WeakMap]" === u(e) + } + + function w(e) { + return "[object WeakSet]" === u(e) + } + + function P(e) { + return "[object ArrayBuffer]" === u(e) + } + + function S(e) { + return "undefined" != typeof ArrayBuffer && (P.working ? P(e) : e instanceof ArrayBuffer) + } + + function A(e) { + return "[object DataView]" === u(e) + } + + function E(e) { + return "undefined" != typeof DataView && (A.working ? A(e) : e instanceof DataView) + } + t.isArgumentsObject = r, t.isGeneratorFunction = o, t.isTypedArray = a, t.isPromise = function(e) { + return "undefined" != typeof Promise && e instanceof Promise || null !== e && "object" == typeof e && "function" == typeof e.then && "function" == typeof e.catch + }, t.isArrayBufferView = function(e) { + return "undefined" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(e) : a(e) || E(e) + }, t.isUint8Array = function(e) { + return "Uint8Array" === i(e) + }, t.isUint8ClampedArray = function(e) { + return "Uint8ClampedArray" === i(e) + }, t.isUint16Array = function(e) { + return "Uint16Array" === i(e) + }, t.isUint32Array = function(e) { + return "Uint32Array" === i(e) + }, t.isInt8Array = function(e) { + return "Int8Array" === i(e) + }, t.isInt16Array = function(e) { + return "Int16Array" === i(e) + }, t.isInt32Array = function(e) { + return "Int32Array" === i(e) + }, t.isFloat32Array = function(e) { + return "Float32Array" === i(e) + }, t.isFloat64Array = function(e) { + return "Float64Array" === i(e) + }, t.isBigInt64Array = function(e) { + return "BigInt64Array" === i(e) + }, t.isBigUint64Array = function(e) { + return "BigUint64Array" === i(e) + }, b.working = "undefined" != typeof Map && b(new Map), t.isMap = function(e) { + return "undefined" != typeof Map && (b.working ? b(e) : e instanceof Map) + }, m.working = "undefined" != typeof Set && m(new Set), t.isSet = function(e) { + return "undefined" != typeof Set && (m.working ? m(e) : e instanceof Set) + }, v.working = "undefined" != typeof WeakMap && v(new WeakMap), t.isWeakMap = function(e) { + return "undefined" != typeof WeakMap && (v.working ? v(e) : e instanceof WeakMap) + }, w.working = "undefined" != typeof WeakSet && w(new WeakSet), t.isWeakSet = function(e) { + return w(e) + }, P.working = "undefined" != typeof ArrayBuffer && P(new ArrayBuffer), t.isArrayBuffer = S, A.working = "undefined" != typeof ArrayBuffer && "undefined" != typeof DataView && A(new DataView(new ArrayBuffer(1), 0, 1)), t.isDataView = E; + var O = "undefined" != typeof SharedArrayBuffer ? SharedArrayBuffer : void 0; + + function j(e) { + return "[object SharedArrayBuffer]" === u(e) + } + + function x(e) { + return void 0 !== O && (void 0 === j.working && (j.working = j(new O)), j.working ? j(e) : e instanceof O) + } + + function I(e) { + return h(e, f) + } + + function k(e) { + return h(e, p) + } + + function T(e) { + return h(e, y) + } + + function _(e) { + return s && h(e, d) + } + + function R(e) { + return l && h(e, g) + } + t.isSharedArrayBuffer = x, t.isAsyncFunction = function(e) { + return "[object AsyncFunction]" === u(e) + }, t.isMapIterator = function(e) { + return "[object Map Iterator]" === u(e) + }, t.isSetIterator = function(e) { + return "[object Set Iterator]" === u(e) + }, t.isGeneratorObject = function(e) { + return "[object Generator]" === u(e) + }, t.isWebAssemblyCompiledModule = function(e) { + return "[object WebAssembly.Module]" === u(e) + }, t.isNumberObject = I, t.isStringObject = k, t.isBooleanObject = T, t.isBigIntObject = _, t.isSymbolObject = R, t.isBoxedPrimitive = function(e) { + return I(e) || k(e) || T(e) || _(e) || R(e) + }, t.isAnyArrayBuffer = function(e) { + return "undefined" != typeof Uint8Array && (S(e) || x(e)) + }, ["isProxy", "isExternal", "isModuleNamespaceObject"].forEach((function(e) { + Object.defineProperty(t, e, { + enumerable: !1, + value: function() { + throw new Error(e + " is not supported in userland") + } + }) + })) + }, + 89539: (e, t, n) => { + var r = n(34155), + o = n(25108), + i = Object.getOwnPropertyDescriptors || function(e) { + for (var t = Object.keys(e), n = {}, r = 0; r < t.length; r++) n[t[r]] = Object.getOwnPropertyDescriptor(e, t[r]); + return n + }, + a = /%[sdj%]/g; + t.format = function(e) { + if (!w(e)) { + for (var t = [], n = 0; n < arguments.length; n++) t.push(u(arguments[n])); + return t.join(" ") + } + n = 1; + for (var r = arguments, o = r.length, i = String(e).replace(a, (function(e) { + if ("%%" === e) return "%"; + if (n >= o) return e; + switch (e) { + case "%s": + return String(r[n++]); + case "%d": + return Number(r[n++]); + case "%j": + try { + return JSON.stringify(r[n++]) + } catch (e) { + return "[Circular]" + } + default: + return e + } + })), c = r[n]; n < o; c = r[++n]) m(c) || !A(c) ? i += " " + c : i += " " + u(c); + return i + }, t.deprecate = function(e, n) { + if (void 0 !== r && !0 === r.noDeprecation) return e; + if (void 0 === r) return function() { + return t.deprecate(e, n).apply(this, arguments) + }; + var i = !1; + return function() { + if (!i) { + if (r.throwDeprecation) throw new Error(n); + r.traceDeprecation ? o.trace(n) : o.error(n), i = !0 + } + return e.apply(this, arguments) + } + }; + var c = {}, + s = /^$/; + if (r.env.NODE_DEBUG) { + var l = r.env.NODE_DEBUG; + l = l.replace(/[|\\{}()[\]^$+?.]/g, "\\$&").replace(/\*/g, ".*").replace(/,/g, "$|^").toUpperCase(), s = new RegExp("^" + l + "$", "i") + } + + function u(e, n) { + var r = { + seen: [], + stylize: p + }; + return arguments.length >= 3 && (r.depth = arguments[2]), arguments.length >= 4 && (r.colors = arguments[3]), b(n) ? r.showHidden = n : n && t._extend(r, n), P(r.showHidden) && (r.showHidden = !1), P(r.depth) && (r.depth = 2), P(r.colors) && (r.colors = !1), P(r.customInspect) && (r.customInspect = !0), r.colors && (r.stylize = f), y(r, e, r.depth) + } + + function f(e, t) { + var n = u.styles[t]; + return n ? "[" + u.colors[n][0] + "m" + e + "[" + u.colors[n][1] + "m" : e + } + + function p(e, t) { + return e + } + + function y(e, n, r) { + if (e.customInspect && n && j(n.inspect) && n.inspect !== t.inspect && (!n.constructor || n.constructor.prototype !== n)) { + var o = n.inspect(r, e); + return w(o) || (o = y(e, o, r)), o + } + var i = function(e, t) { + if (P(t)) return e.stylize("undefined", "undefined"); + if (w(t)) { + var n = "'" + JSON.stringify(t).replace(/^"|"$/g, "").replace(/'/g, "\\'").replace(/\\"/g, '"') + "'"; + return e.stylize(n, "string") + } + return v(t) ? e.stylize("" + t, "number") : b(t) ? e.stylize("" + t, "boolean") : m(t) ? e.stylize("null", "null") : void 0 + }(e, n); + if (i) return i; + var a = Object.keys(n), + c = function(e) { + var t = {}; + return e.forEach((function(e, n) { + t[e] = !0 + })), t + }(a); + if (e.showHidden && (a = Object.getOwnPropertyNames(n)), O(n) && (a.indexOf("message") >= 0 || a.indexOf("description") >= 0)) return d(n); + if (0 === a.length) { + if (j(n)) { + var s = n.name ? ": " + n.name : ""; + return e.stylize("[Function" + s + "]", "special") + } + if (S(n)) return e.stylize(RegExp.prototype.toString.call(n), "regexp"); + if (E(n)) return e.stylize(Date.prototype.toString.call(n), "date"); + if (O(n)) return d(n) + } + var l, u = "", + f = !1, + p = ["{", "}"]; + return h(n) && (f = !0, p = ["[", "]"]), j(n) && (u = " [Function" + (n.name ? ": " + n.name : "") + "]"), S(n) && (u = " " + RegExp.prototype.toString.call(n)), E(n) && (u = " " + Date.prototype.toUTCString.call(n)), O(n) && (u = " " + d(n)), 0 !== a.length || f && 0 != n.length ? r < 0 ? S(n) ? e.stylize(RegExp.prototype.toString.call(n), "regexp") : e.stylize("[Object]", "special") : (e.seen.push(n), l = f ? function(e, t, n, r, o) { + for (var i = [], a = 0, c = t.length; a < c; ++a) _(t, String(a)) ? i.push(g(e, t, n, r, String(a), !0)) : i.push(""); + return o.forEach((function(o) { + o.match(/^\d+$/) || i.push(g(e, t, n, r, o, !0)) + })), i + }(e, n, r, c, a) : a.map((function(t) { + return g(e, n, r, c, t, f) + })), e.seen.pop(), function(e, t, n) { + return e.reduce((function(e, t) { + return t.indexOf("\n"), e + t.replace(/\u001b\[\d\d?m/g, "").length + 1 + }), 0) > 60 ? n[0] + ("" === t ? "" : t + "\n ") + " " + e.join(",\n ") + " " + n[1] : n[0] + t + " " + e.join(", ") + " " + n[1] + }(l, u, p)) : p[0] + u + p[1] + } + + function d(e) { + return "[" + Error.prototype.toString.call(e) + "]" + } + + function g(e, t, n, r, o, i) { + var a, c, s; + if ((s = Object.getOwnPropertyDescriptor(t, o) || { + value: t[o] + }).get ? c = s.set ? e.stylize("[Getter/Setter]", "special") : e.stylize("[Getter]", "special") : s.set && (c = e.stylize("[Setter]", "special")), _(r, o) || (a = "[" + o + "]"), c || (e.seen.indexOf(s.value) < 0 ? (c = m(n) ? y(e, s.value, null) : y(e, s.value, n - 1)).indexOf("\n") > -1 && (c = i ? c.split("\n").map((function(e) { + return " " + e + })).join("\n").slice(2) : "\n" + c.split("\n").map((function(e) { + return " " + e + })).join("\n")) : c = e.stylize("[Circular]", "special")), P(a)) { + if (i && o.match(/^\d+$/)) return c; + (a = JSON.stringify("" + o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/) ? (a = a.slice(1, -1), a = e.stylize(a, "name")) : (a = a.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"), a = e.stylize(a, "string")) + } + return a + ": " + c + } + + function h(e) { + return Array.isArray(e) + } + + function b(e) { + return "boolean" == typeof e + } + + function m(e) { + return null === e + } + + function v(e) { + return "number" == typeof e + } + + function w(e) { + return "string" == typeof e + } + + function P(e) { + return void 0 === e + } + + function S(e) { + return A(e) && "[object RegExp]" === x(e) + } + + function A(e) { + return "object" == typeof e && null !== e + } + + function E(e) { + return A(e) && "[object Date]" === x(e) + } + + function O(e) { + return A(e) && ("[object Error]" === x(e) || e instanceof Error) + } + + function j(e) { + return "function" == typeof e + } + + function x(e) { + return Object.prototype.toString.call(e) + } + + function I(e) { + return e < 10 ? "0" + e.toString(10) : e.toString(10) + } + t.debuglog = function(e) { + if (e = e.toUpperCase(), !c[e]) + if (s.test(e)) { + var n = r.pid; + c[e] = function() { + var r = t.format.apply(t, arguments); + o.error("%s %d: %s", e, n, r) + } + } else c[e] = function() {}; + return c[e] + }, t.inspect = u, u.colors = { + bold: [1, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + white: [37, 39], + grey: [90, 39], + black: [30, 39], + blue: [34, 39], + cyan: [36, 39], + green: [32, 39], + magenta: [35, 39], + red: [31, 39], + yellow: [33, 39] + }, u.styles = { + special: "cyan", + number: "yellow", + boolean: "yellow", + undefined: "grey", + null: "bold", + string: "green", + date: "magenta", + regexp: "red" + }, t.types = n(55955), t.isArray = h, t.isBoolean = b, t.isNull = m, t.isNullOrUndefined = function(e) { + return null == e + }, t.isNumber = v, t.isString = w, t.isSymbol = function(e) { + return "symbol" == typeof e + }, t.isUndefined = P, t.isRegExp = S, t.types.isRegExp = S, t.isObject = A, t.isDate = E, t.types.isDate = E, t.isError = O, t.types.isNativeError = O, t.isFunction = j, t.isPrimitive = function(e) { + return null === e || "boolean" == typeof e || "number" == typeof e || "string" == typeof e || "symbol" == typeof e || void 0 === e + }, t.isBuffer = n(20384); + var k = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + + function T() { + var e = new Date, + t = [I(e.getHours()), I(e.getMinutes()), I(e.getSeconds())].join(":"); + return [e.getDate(), k[e.getMonth()], t].join(" ") + } + + function _(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + } + t.log = function() { + o.log("%s - %s", T(), t.format.apply(t, arguments)) + }, t.inherits = n(35717), t._extend = function(e, t) { + if (!t || !A(t)) return e; + for (var n = Object.keys(t), r = n.length; r--;) e[n[r]] = t[n[r]]; + return e + }; + var R = "undefined" != typeof Symbol ? Symbol("util.promisify.custom") : void 0; + + function F(e, t) { + if (!e) { + var n = new Error("Promise was rejected with a falsy value"); + n.reason = e, e = n + } + return t(e) + } + t.promisify = function(e) { + if ("function" != typeof e) throw new TypeError('The "original" argument must be of type Function'); + if (R && e[R]) { + var t; + if ("function" != typeof(t = e[R])) throw new TypeError('The "util.promisify.custom" argument must be of type Function'); + return Object.defineProperty(t, R, { + value: t, + enumerable: !1, + writable: !1, + configurable: !0 + }), t + } + + function t() { + for (var t, n, r = new Promise((function(e, r) { + t = e, n = r + })), o = [], i = 0; i < arguments.length; i++) o.push(arguments[i]); + o.push((function(e, r) { + e ? n(e) : t(r) + })); + try { + e.apply(this, o) + } catch (e) { + n(e) + } + return r + } + return Object.setPrototypeOf(t, Object.getPrototypeOf(e)), R && Object.defineProperty(t, R, { + value: t, + enumerable: !1, + writable: !1, + configurable: !0 + }), Object.defineProperties(t, i(e)) + }, t.promisify.custom = R, t.callbackify = function(e) { + if ("function" != typeof e) throw new TypeError('The "original" argument must be of type Function'); + + function t() { + for (var t = [], n = 0; n < arguments.length; n++) t.push(arguments[n]); + var o = t.pop(); + if ("function" != typeof o) throw new TypeError("The last argument must be of type Function"); + var i = this, + a = function() { + return o.apply(i, arguments) + }; + e.apply(this, t).then((function(e) { + r.nextTick(a.bind(null, null, e)) + }), (function(e) { + r.nextTick(F.bind(null, e, a)) + })) + } + return Object.setPrototypeOf(t, Object.getPrototypeOf(e)), Object.defineProperties(t, i(e)), t + } + }, + 28721: (e, t, n) => { + "use strict"; + n.d(t, { + Z: () => s + }); + const r = { + randomUUID: "undefined" != typeof crypto && crypto.randomUUID && crypto.randomUUID.bind(crypto) + }; + let o; + const i = new Uint8Array(16); + + function a() { + if (!o && (o = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !o)) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); + return o(i) + } + const c = []; + for (let e = 0; e < 256; ++e) c.push((e + 256).toString(16).slice(1)); + const s = function(e, t, n) { + if (r.randomUUID && !t && !e) return r.randomUUID(); + const o = (e = e || {}).random || (e.rng || a)(); + if (o[6] = 15 & o[6] | 64, o[8] = 63 & o[8] | 128, t) { + n = n || 0; + for (let e = 0; e < 16; ++e) t[n + e] = o[e]; + return t + } + return function(e, t = 0) { + return (c[e[t + 0]] + c[e[t + 1]] + c[e[t + 2]] + c[e[t + 3]] + "-" + c[e[t + 4]] + c[e[t + 5]] + "-" + c[e[t + 6]] + c[e[t + 7]] + "-" + c[e[t + 8]] + c[e[t + 9]] + "-" + c[e[t + 10]] + c[e[t + 11]] + c[e[t + 12]] + c[e[t + 13]] + c[e[t + 14]] + c[e[t + 15]]).toLowerCase() + }(o) + } + }, + 86430: (e, t, n) => { + "use strict"; + var r = n(94029), + o = n(63083), + i = n(21924), + a = n(27296), + c = i("Object.prototype.toString"), + s = n(96410)(), + l = "undefined" == typeof globalThis ? n.g : globalThis, + u = o(), + f = i("String.prototype.slice"), + p = {}, + y = Object.getPrototypeOf; + s && a && y && r(u, (function(e) { + if ("function" == typeof l[e]) { + var t = new l[e]; + if (Symbol.toStringTag in t) { + var n = y(t), + r = a(n, Symbol.toStringTag); + if (!r) { + var o = y(n); + r = a(o, Symbol.toStringTag) + } + p[e] = r.get + } + } + })); + var d = n(85692); + e.exports = function(e) { + return !!d(e) && (s && Symbol.toStringTag in e ? function(e) { + var t = !1; + return r(p, (function(n, r) { + if (!t) try { + var o = n.call(e); + o === r && (t = o) + } catch (e) {} + })), t + }(e) : f(c(e), 8, -1)) + } + }, + 63083: (e, t, n) => { + "use strict"; + var r = ["BigInt64Array", "BigUint64Array", "Float32Array", "Float64Array", "Int16Array", "Int32Array", "Int8Array", "Uint16Array", "Uint32Array", "Uint8Array", "Uint8ClampedArray"], + o = "undefined" == typeof globalThis ? n.g : globalThis; + e.exports = function() { + for (var e = [], t = 0; t < r.length; t++) "function" == typeof o[r[t]] && (e[e.length] = r[t]); + return e + } + } + }, + i = {}; + + function a(e) { + var t = i[e]; + if (void 0 !== t) return t.exports; + var n = i[e] = { + id: e, + loaded: !1, + exports: {} + }; + return o[e].call(n.exports, n, n.exports, a), n.loaded = !0, n.exports + } + a.m = o, a.amdD = function() { + throw new Error("define cannot be used indirect") + }, a.amdO = {}, a.n = e => { + var t = e && e.__esModule ? () => e.default : () => e; + return a.d(t, { + a: t + }), t + }, t = Object.getPrototypeOf ? e => Object.getPrototypeOf(e) : e => e.__proto__, a.t = function(n, r) { + if (1 & r && (n = this(n)), 8 & r) return n; + if ("object" == typeof n && n) { + if (4 & r && n.__esModule) return n; + if (16 & r && "function" == typeof n.then) return n + } + var o = Object.create(null); + a.r(o); + var i = {}; + e = e || [null, t({}), t([]), t(t)]; + for (var c = 2 & r && n; + "object" == typeof c && !~e.indexOf(c); c = t(c)) Object.getOwnPropertyNames(c).forEach((e => i[e] = () => n[e])); + return i.default = () => n, a.d(o, i), o + }, a.d = (e, t) => { + for (var n in t) a.o(t, n) && !a.o(e, n) && Object.defineProperty(e, n, { + enumerable: !0, + get: t[n] + }) + }, a.f = {}, a.e = e => Promise.all(Object.keys(a.f).reduce(((t, n) => (a.f[n](e, t), t)), [])), a.u = e => "mp-core/" + e + "." + { + 87: "5699f7cda3c90f83830b", + 100: "ed693e9d3f50f224ea1c", + 140: "8904bd1233c37c62526e", + 242: "53320f1d872026e28294", + 341: "48692c3a072447f43798", + 452: "c0a7d2c9e078899a3956", + 488: "eaeea95fba7ad1ac2e0c", + 510: "8e42de5365b69e32aee6", + 516: "a67746541f8d6bbe35f7", + 745: "f0412a366bed1690f45f", + 781: "a4dad612af5605293c68", + 840: "5a35ef73289fce12eccd", + 983: "fb9761d7ed3d54e012c9", + 1003: "07365fe51405362eed1f", + 1023: "8d8a93197f60c9a53862", + 1036: "ffda2f3fca1d099fb52e", + 1217: "0936a1194f22a3351250", + 1259: "027b0491163c90f3c509", + 1310: "ccdb6fa732d26e629ac4", + 1530: "1f599abe6bb0aa7290b8", + 1884: "2b7cbd8ff99c67d7c3f9", + 1985: "72f33bc23aaabe93ae9a", + 2009: "dfdb84a8533087597abc", + 2031: "f295fecf8726ab70c465", + 2050: "1d65bfa04ba15a8db781", + 2116: "43ed19b0c5c4834034ad", + 2167: "febbff22e51ce16e09a8", + 2212: "175a913bb63f201676f3", + 2238: "25311b5bca452092272c", + 2302: "004dd82aad40d71680cc", + 2371: "de1b9165c5c02c010699", + 2589: "84d4ff16b40231e994a8", + 2973: "26cea1d94d325a74bd27", + 3041: "f0562e3445339520e4e2", + 3170: "98ff77257d0dd1ce1e79", + 3301: "6c003d1f94da33ed48a2", + 3446: "dd059db1d4c0efb71f7e", + 3475: "e6774ca63479294c37ab", + 3696: "6c1688b5380783cd9763", + 3738: "c59e2f8c80659da8b79d", + 3746: "8ad1d79106a94847bcac", + 3756: "1ee9b05d9ce7a6207aa0", + 4025: "62f778212dd8d973e15e", + 4079: "104642eee2beaf1f3f3f", + 4142: "c8ef6b51843f25edb294", + 4148: "dd6eef45d0b3aecad38f", + 4162: "410558a96e2cd1c99b72", + 4240: "0fbdf037c9ba71d0a987", + 4530: "6c47ddfc70bcd7c85a4c", + 4659: "01838f8486534144d729", + 4716: "58661ad1306ee5037402", + 5101: "7eb52fa042636a859afc", + 5319: "2091f5edc8f40c2e7d2d", + 5380: "f23079b41e4ca095de5f", + 5414: "4031eef599a696f81f7c", + 5651: "50e5a936656bbfd0c680", + 5733: "a988a3a53aa19d43d41e", + 5948: "89bc32cf626c7557b89d", + 5972: "3a4ce7cbebe3ef574f60", + 6282: "79a261084de7bc1b171a", + 6955: "57f38995c76dd52b66e0", + 7109: "ac3ba5f29adea1f80a5a", + 7141: "b23c3a293c5eca16605d", + 7195: "8181ac8896c1ce405592", + 7263: "41c1258b0ad3dc2168de", + 7387: "68400629ead8ff4f5fb7", + 7568: "bd91c24889dc1571b2ba", + 7600: "ec777e96e4b9e81913bd", + 8151: "05dcd0b4bff4f4b930c2", + 8250: "c503d7388d485702f9cb", + 8646: "0ec5486d0de2a97459ad", + 8718: "9cfd1705958640832a52", + 8764: "de7b5fad116eb5e3a6ac", + 8789: "6d4d2a50d69117441536", + 8853: "dd37c6d6d0f63f3bb13c", + 9104: "d8944d6d4309406d00ae", + 9220: "bc0c3287241bf0522322", + 9402: "effc5bb56363119ed7f9", + 9477: "aae27230a1f3d5fa1b7f", + 9528: "ec5926af2086c7d1044b", + 9649: "a150e59929642a7efa7b" + } [e] + ".bundle.js", a.g = function() { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")() + } catch (e) { + if ("object" == typeof window) return window + } + }(), a.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), n = {}, r = "metapress:", a.l = (e, t, o, i) => { + if (n[e]) n[e].push(t); + else { + var c, s; + if (void 0 !== o) + for (var l = document.getElementsByTagName("script"), u = 0; u < l.length; u++) { + var f = l[u]; + if (f.getAttribute("src") == e || f.getAttribute("data-webpack") == r + o) { + c = f; + break + } + } + c || (s = !0, (c = document.createElement("script")).charset = "utf-8", c.timeout = 120, a.nc && c.setAttribute("nonce", a.nc), c.setAttribute("data-webpack", r + o), c.src = e), n[e] = [t]; + var p = (t, r) => { + c.onerror = c.onload = null, clearTimeout(y); + var o = n[e]; + if (delete n[e], c.parentNode && c.parentNode.removeChild(c), o && o.forEach((e => e(r))), t) return t(r) + }, + y = setTimeout(p.bind(null, void 0, { + type: "timeout", + target: c + }), 12e4); + c.onerror = p.bind(null, c.onerror), c.onload = p.bind(null, c.onload), s && document.head.appendChild(c) + } + }, a.r = e => { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { + value: "Module" + }), Object.defineProperty(e, "__esModule", { + value: !0 + }) + }, a.nmd = e => (e.paths = [], e.children || (e.children = []), e), (() => { + var e; + a.g.importScripts && (e = a.g.location + ""); + var t = a.g.document; + if (!e && t && (t.currentScript && (e = t.currentScript.src), !e)) { + var n = t.getElementsByTagName("script"); + n.length && (e = n[n.length - 1].src) + } + if (!e) throw new Error("Automatic publicPath is not supported in this browser"); + e = e.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"), a.p = e + })(), (() => { + var e = { + 179: 0 + }; + a.f.j = (t, n) => { + var r = a.o(e, t) ? e[t] : void 0; + if (0 !== r) + if (r) n.push(r[2]); + else { + var o = new Promise(((n, o) => r = e[t] = [n, o])); + n.push(r[2] = o); + var i = a.p + a.u(t), + c = new Error; + a.l(i, (n => { + if (a.o(e, t) && (0 !== (r = e[t]) && (e[t] = void 0), r)) { + var o = n && ("load" === n.type ? "missing" : n.type), + i = n && n.target && n.target.src; + c.message = "Loading chunk " + t + " failed.\n(" + o + ": " + i + ")", c.name = "ChunkLoadError", c.type = o, c.request = i, r[1](c) + } + }), "chunk-" + t, t) + } + }; + var t = (t, n) => { + var r, o, [i, c, s] = n, + l = 0; + if (i.some((t => 0 !== e[t]))) { + for (r in c) a.o(c, r) && (a.m[r] = c[r]); + s && s(a) + } + for (t && t(n); l < i.length; l++) o = i[l], a.o(e, o) && e[o] && e[o][0](), e[o] = 0 + }, + n = self.webpackChunkmetapress = self.webpackChunkmetapress || []; + n.forEach(t.bind(null, 0)), n.push = t.bind(null, n.push.bind(n)) + })(), a.nc = void 0, (() => { + "use strict"; + var e = a(28721), + t = a(55293); + class n { + constructor() { + let e = document.createElement("style"); + e.innerText = '\n\n /** Default button */\n div.metapress.button {\n\n /* Position */\n position: fixed;\n bottom: 30px;\n left: calc(50% - 150px / 2);\n width: 150px;\n height: 40px;\n z-index: 200000;\n\n /* Appearance */\n background-color: #000;\n box-sizing: border-box;\n border-radius: 10px;\n cursor: pointer;\n transition: background-color 0.35s, box-shadow 0.35s, bottom 0.35s;\n\n /* Text appearance */\n display: flex;\n text-align: center;\n color: #FFF;\n font-size: 11px;\n align-items: center;\n\n }\n\n /** Button state when MetaPress is closed */\n div.metapress.button.closed {\n background-color: #138b34;\n box-shadow: 0 0.4rem 0 0 #056921e6, 0 5px 10px 0px rgba(0, 0, 0, 0.6);\n }\n div.metapress.button.closed:before {\n content: "Enter metaverse";\n text-align: center;\n flex: 1 1 auto;\n }\n\n /** Button state when MetaPress is open */\n div.metapress.button.opened {\n background-color: #954303;\n box-shadow: 0 0.4rem 0 0 #6b3205e6, 0 5px 10px 0px rgba(0, 0, 0, 0.6);\n }\n div.metapress.button.opened:before {\n content: "Close metaverse";\n text-align: center;\n flex: 1 1 auto;\n }\n\n ', document.body.appendChild(e), this.div = document.createElement("div"), this.div.className = "metapress button closed", this.div.addEventListener("click", metapress.toggle), document.body.appendChild(this.div) + } + metapressOpened(e) { + this.div.className = e ? "metapress button opened" : "metapress button closed" + } + } + var r = a(25108); + window.metapress || new class { + config = Object.assign({}, window.metapressConfig); + instanceID = (0, e.Z)(); + plugins = new t.ZP; + floatingButton = null; + contentDiv = null; + constructor() { + window.metapress = this.proxy, "1" != this.config.floatingButton || window.parent == window && !window.opener ? "1" == this.config.floatingButton && (this.floatingButton = new n) : r.debug("[MetaPress] Not showing the enter button due to being inside a popup or iframe"); + let e = document.createElement("style"); + e.innerText = `\n\n /** Import fonts */\n @import url('https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;600;700&display=swap');\n @import url('https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap');\n\n /** CSS applied to the main body while the Metaverse is open */\n body.metapress-open {\n height: 100%;\n overflow: hidden;\n }\n\n .metapress {\n font-family: 'Rubik', sans-serif;\n }\n\n /** Reset any styling applied globally to elements */\n .metapress.content * input {\n all: initial;\n }\n\n .metapress.content * input {\n font-family: 'Rubik', sans-serif;\n line-height: 1;\n }\n\n /** Hides spinner buttons for number input element */\n .metapress.content * input::-webkit-outer-spin-button,\n .metapress.content * input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .metapress.content * input[type=number] {\n -moz-appearance: textfield;\n }\n\n /** Reset any styling applied globally to elements */\n .metapress.content * select {\n all: initial;\n }\n\n .metapress.content * select {\n font-family: 'Rubik', sans-serif;\n line-height: 1;\n cursor: pointer;\n appearance: auto;\n -webkit-appearance: auto;\n }\n\n .metapress.content * select > option {\n padding: 0px 2px 1px;\n }\n\n /** Default content frame */\n div.metapress.content {\n\n /* Position */\n position: fixed; \n top: ${metapress.config["core.integration.wordpress"]?.adminBarShowing?"var(--wp-admin--admin-bar--height)":"0px"}; \n left: 0px; \n width: 100%; \n height: ${metapress.config["core.integration.wordpress"]?.adminBarShowing?"calc(100% - var(--wp-admin--admin-bar--height))":"100%"}; \n z-index: 100000; /* <-- Needs to be high up, to be above wordpress theme elements */\n margin: 0px;\n padding: 0px;\n\n /* Appearance */\n border: none;\n background: #000;\n outline: none;\n transition: opacity 0.35s;\n color: white;\n\n /* Prevent text selection on UI elements */\n user-select: none;\n -webkit-user-select: none;\n cursor: default;\n\n }\n\n /** Hidden content frame */\n div.metapress.content.hidden {\n opacity: 0;\n pointer-events: none;\n }\n\n /** Better looking scroll bars */\n div.metapress.content *::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n div.metapress.content *::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n }\n div.metapress.content *::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2);\n }\n\n /** Set all input elements font size to prevent zooming in */\n @supports (-webkit-touch-callout: none) {\n #metapress-content input,\n #metapress-content select,\n #metapress-content textarea,\n #metapress-content .fake-input {\n font-size: 16px !important;\n }\n }\n\n `, document.body.appendChild(e); + let t = !1; + try { + t = "0" === localStorage["mp.lastOpen"] + } catch (e) {} + window.parent != window || window.opener ? r.debug("[MetaPress] Not starting immediately due to being inside a popup or iframe") : "1" != this.config.autoOpen || t ? window.location.hash.startsWith("#mp.portal:") ? (r.debug("[MetaPress] Starting immediately due to incoming portal"), this.open()) : t && r.debug("[MetaPress] Not starting immediately due to being closed manually last time") : (r.debug("[MetaPress] Starting immediately due to 'autoOpen' config option"), this.open()) + } + get proxy() { + return this._proxy || (this._proxy = new Proxy(this, { + get: this.onProxyGet.bind(this), + set: this.onProxySet.bind(this) + })), this._proxy + } + onProxyGet(e, t, n) { + return "plugins" == t ? this.plugins : "config" == t ? this.config : "instanceID" == t ? this.instanceID : "worldID" == t ? this.getWorldID() : "loadPromise" == t ? this.loadPromise : "button" == t ? this.floatingButton : "contentDiv" == t ? this.contentDiv : "open" == t ? this.open.bind(this) : "close" == t ? this.close.bind(this) : "toggle" == t ? this.toggle.bind(this) : "addEventListener" == t ? this.plugins.addEventListener.bind(this.plugins) : "removeEventListener" == t ? this.plugins.removeEventListener.bind(this.plugins) : "isOpen" == t ? this.isOpen : this.plugins.getProvider(t) + } + onProxySet(e, t, n, r) { + throw new Error(`Manually setting providers is not allowed. Instead add "provides = ['${t}']" to your plugin.`) + } + getWorldID() { + if (this.config.worldID) return this.config.worldID; + if ("localhost" == window.location.hostname || "127.0.0.1" == window.location.hostname || "::1" == window.location.hostname || "0.0.0.0" == window.location.hostname) { + let t = localStorage["mp.local.worldID"]; + if (!t) { + t = (0, e.Z)(); + try { + localStorage["mp.local.worldID"] = t + } catch (e) { + r.warn(`[MetaPress] Unable to store world ID in local storage. ${e.message}`) + } + } + return "local:" + t + } + return window.location.hostname + } + async open() { + try { + localStorage["mp.lastOpen"] = "1" + } catch (e) {} + this.floatingButton && this.floatingButton.metapressOpened(!0), this.config.skipBodyStylingOnOpen || document.body.classList.add("metapress-open"), this.contentDiv ? this.contentDiv.classList.remove("hidden") : (this.contentDiv = document.createElement("div"), this.contentDiv.id = "metapress-content", this.contentDiv.className = "metapress content", document.body.appendChild(this.contentDiv), await this.plugins.start()) + } + async close() { + try { + localStorage["mp.lastOpen"] = "0" + } catch (e) {} + metapress.fullscreen.isFullscreen && document.exitFullscreen(), this.floatingButton && this.floatingButton.metapressOpened(!1), this.config.skipBodyStylingOnOpen || document.body.classList.remove("metapress-open"), this.contentDiv?.classList?.add("hidden"), metapress.audio.muted = !0 + } + async toggle() { + return this.isOpen ? this.close() : this.open() + } + get isOpen() { + return this.contentDiv && !this.contentDiv.classList.contains("hidden") + } + } + })() +})(); \ No newline at end of file diff --git a/files/custom-template/0_Globe_Data_Visualization_1280x720.mp4 b/files/custom-template/0_Globe_Data_Visualization_1280x720.mp4 new file mode 100644 index 0000000..23862d3 Binary files /dev/null and b/files/custom-template/0_Globe_Data_Visualization_1280x720.mp4 differ diff --git a/files/custom-template/1236-144355017_medium.mp4 b/files/custom-template/1236-144355017_medium.mp4 new file mode 100644 index 0000000..90a01da Binary files /dev/null and b/files/custom-template/1236-144355017_medium.mp4 differ diff --git a/files/custom-template/34eb3342b5964a04906143f54ffe0d1e.png b/files/custom-template/34eb3342b5964a04906143f54ffe0d1e.png new file mode 100644 index 0000000..43636f8 Binary files /dev/null and b/files/custom-template/34eb3342b5964a04906143f54ffe0d1e.png differ diff --git a/files/custom-template/3ab4ccec4d.mp4 b/files/custom-template/3ab4ccec4d.mp4 new file mode 100644 index 0000000..a55cfc3 Binary files /dev/null and b/files/custom-template/3ab4ccec4d.mp4 differ diff --git a/files/custom-template/532343__kjartan_abel__there-will-be-stars.mp3 b/files/custom-template/532343__kjartan_abel__there-will-be-stars.mp3 new file mode 100644 index 0000000..a7c8f05 Binary files /dev/null and b/files/custom-template/532343__kjartan_abel__there-will-be-stars.mp3 differ diff --git a/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4 b/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4 new file mode 100644 index 0000000..74e9655 Binary files /dev/null and b/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4 differ diff --git a/files/custom-template/92f820_0d376190281fde7ce5eaeec6bd289ec9.png b/files/custom-template/92f820_0d376190281fde7ce5eaeec6bd289ec9.png new file mode 100644 index 0000000..3c272de Binary files /dev/null and b/files/custom-template/92f820_0d376190281fde7ce5eaeec6bd289ec9.png differ diff --git a/files/custom-template/Captura de tela 2025-06-03 121621.png b/files/custom-template/Captura de tela 2025-06-03 121621.png new file mode 100644 index 0000000..841ee9a Binary files /dev/null and b/files/custom-template/Captura de tela 2025-06-03 121621.png differ diff --git a/files/custom-template/Captura de tela 2025-06-03 122446.png b/files/custom-template/Captura de tela 2025-06-03 122446.png new file mode 100644 index 0000000..cfdfa86 Binary files /dev/null and b/files/custom-template/Captura de tela 2025-06-03 122446.png differ diff --git a/files/custom-template/Database-Market-Map-1.png b/files/custom-template/Database-Market-Map-1.png new file mode 100644 index 0000000..d451f7b Binary files /dev/null and b/files/custom-template/Database-Market-Map-1.png differ diff --git a/files/custom-template/GHZVR-VERSEWEB.png b/files/custom-template/GHZVR-VERSEWEB.png new file mode 100644 index 0000000..f89a0a6 Binary files /dev/null and b/files/custom-template/GHZVR-VERSEWEB.png differ diff --git a/files/custom-template/GHZVR.png b/files/custom-template/GHZVR.png new file mode 100644 index 0000000..4d6e078 Binary files /dev/null and b/files/custom-template/GHZVR.png differ diff --git a/files/custom-template/Gemini_Generated_Image_14ervi14ervi14er.png b/files/custom-template/Gemini_Generated_Image_14ervi14ervi14er.png new file mode 100644 index 0000000..2b2bfd8 Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_14ervi14ervi14er.png differ diff --git a/files/custom-template/Gemini_Generated_Image_4rioou4rioou4rio.png b/files/custom-template/Gemini_Generated_Image_4rioou4rioou4rio.png new file mode 100644 index 0000000..c50b6f9 Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_4rioou4rioou4rio.png differ diff --git a/files/custom-template/Gemini_Generated_Image_9znw09znw09znw09.png b/files/custom-template/Gemini_Generated_Image_9znw09znw09znw09.png new file mode 100644 index 0000000..7d032e4 Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_9znw09znw09znw09.png differ diff --git a/files/custom-template/Gemini_Generated_Image_muml5omuml5omuml.png b/files/custom-template/Gemini_Generated_Image_muml5omuml5omuml.png new file mode 100644 index 0000000..ca735df Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_muml5omuml5omuml.png differ diff --git a/files/custom-template/Gemini_Generated_Image_rnewj3rnewj3rnew.png b/files/custom-template/Gemini_Generated_Image_rnewj3rnewj3rnew.png new file mode 100644 index 0000000..a230633 Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_rnewj3rnewj3rnew.png differ diff --git a/files/custom-template/Gemini_Generated_Image_xc1cxc1cxc1cxc1c.png b/files/custom-template/Gemini_Generated_Image_xc1cxc1cxc1cxc1c.png new file mode 100644 index 0000000..5e3b2fa Binary files /dev/null and b/files/custom-template/Gemini_Generated_Image_xc1cxc1cxc1cxc1c.png differ diff --git a/files/custom-template/LogoGHZHOST300px.png b/files/custom-template/LogoGHZHOST300px.png new file mode 100644 index 0000000..1ce91cd Binary files /dev/null and b/files/custom-template/LogoGHZHOST300px.png differ diff --git a/files/custom-template/Music_fx_epic_and_futuristic_soundtrack_for_a.mp3 b/files/custom-template/Music_fx_epic_and_futuristic_soundtrack_for_a.mp3 new file mode 100644 index 0000000..0962855 Binary files /dev/null and b/files/custom-template/Music_fx_epic_and_futuristic_soundtrack_for_a.mp3 differ diff --git a/files/custom-template/Music_fx_immersive_ambient_music_for_a_cyberp.mp3 b/files/custom-template/Music_fx_immersive_ambient_music_for_a_cyberp.mp3 new file mode 100644 index 0000000..0d11fe0 Binary files /dev/null and b/files/custom-template/Music_fx_immersive_ambient_music_for_a_cyberp.mp3 differ diff --git a/files/custom-template/Realism_equirectangular-jpg_abstract_modern_architecture_cubism_1218068226_10165482.jpg b/files/custom-template/Realism_equirectangular-jpg_abstract_modern_architecture_cubism_1218068226_10165482.jpg new file mode 100644 index 0000000..bcd9f2a Binary files /dev/null and b/files/custom-template/Realism_equirectangular-jpg_abstract_modern_architecture_cubism_1218068226_10165482.jpg differ diff --git a/files/custom-template/SGBDs-Mais-Usados-no-Mundo-1024x502.png b/files/custom-template/SGBDs-Mais-Usados-no-Mundo-1024x502.png new file mode 100644 index 0000000..d775314 Binary files /dev/null and b/files/custom-template/SGBDs-Mais-Usados-no-Mundo-1024x502.png differ diff --git a/files/custom-template/SQLite370.svg.png b/files/custom-template/SQLite370.svg.png new file mode 100644 index 0000000..86a600d Binary files /dev/null and b/files/custom-template/SQLite370.svg.png differ diff --git a/files/custom-template/Senac_logo.svg.png b/files/custom-template/Senac_logo.svg.png new file mode 100644 index 0000000..fa7bc1d Binary files /dev/null and b/files/custom-template/Senac_logo.svg.png differ diff --git a/files/custom-template/chain-reaction.glb b/files/custom-template/chain-reaction.glb new file mode 100644 index 0000000..003fc86 Binary files /dev/null and b/files/custom-template/chain-reaction.glb differ diff --git a/files/custom-template/chris-ried-ieic5Tq8YMk-unsplash-scaled.jpg b/files/custom-template/chris-ried-ieic5Tq8YMk-unsplash-scaled.jpg new file mode 100644 index 0000000..eab7e99 Binary files /dev/null and b/files/custom-template/chris-ried-ieic5Tq8YMk-unsplash-scaled.jpg differ diff --git a/files/custom-template/collider.glb b/files/custom-template/collider.glb new file mode 100644 index 0000000..6959e19 Binary files /dev/null and b/files/custom-template/collider.glb differ diff --git a/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg b/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg new file mode 100644 index 0000000..0f6e5d9 Binary files /dev/null and b/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg differ diff --git a/files/custom-template/discord.png b/files/custom-template/discord.png new file mode 100644 index 0000000..243abe5 Binary files /dev/null and b/files/custom-template/discord.png differ diff --git a/files/custom-template/favpng_0958d38c6c0b41d57b41cb8801163510.png b/files/custom-template/favpng_0958d38c6c0b41d57b41cb8801163510.png new file mode 100644 index 0000000..bd460de Binary files /dev/null and b/files/custom-template/favpng_0958d38c6c0b41d57b41cb8801163510.png differ diff --git a/files/custom-template/final1-collider.glb b/files/custom-template/final1-collider.glb new file mode 100644 index 0000000..404fbb2 Binary files /dev/null and b/files/custom-template/final1-collider.glb differ diff --git a/files/custom-template/ghz-gradient-technology-futuristic-background_23-2149155718.png b/files/custom-template/ghz-gradient-technology-futuristic-background_23-2149155718.png new file mode 100644 index 0000000..d84eeb5 Binary files /dev/null and b/files/custom-template/ghz-gradient-technology-futuristic-background_23-2149155718.png differ diff --git a/files/custom-template/gradient-technology-futuristic-background_23-2149155718.jpg b/files/custom-template/gradient-technology-futuristic-background_23-2149155718.jpg new file mode 100644 index 0000000..549a93e Binary files /dev/null and b/files/custom-template/gradient-technology-futuristic-background_23-2149155718.jpg differ diff --git a/files/custom-template/grandeur.glb b/files/custom-template/grandeur.glb new file mode 100644 index 0000000..46bfc80 Binary files /dev/null and b/files/custom-template/grandeur.glb differ diff --git a/files/custom-template/image-1.png b/files/custom-template/image-1.png new file mode 100644 index 0000000..18e9814 Binary files /dev/null and b/files/custom-template/image-1.png differ diff --git a/files/custom-template/images (1).jpg b/files/custom-template/images (1).jpg new file mode 100644 index 0000000..583dced Binary files /dev/null and b/files/custom-template/images (1).jpg differ diff --git a/files/custom-template/optimized_final_1024.glb b/files/custom-template/optimized_final_1024.glb new file mode 100644 index 0000000..03adb9e Binary files /dev/null and b/files/custom-template/optimized_final_1024.glb differ diff --git a/files/custom-template/pasted image 0 (1)_11zon.png b/files/custom-template/pasted image 0 (1)_11zon.png new file mode 100644 index 0000000..19edbbd Binary files /dev/null and b/files/custom-template/pasted image 0 (1)_11zon.png differ diff --git a/files/custom-template/pink_sunrise_2k.png b/files/custom-template/pink_sunrise_2k.png new file mode 100644 index 0000000..cdd23d4 Binary files /dev/null and b/files/custom-template/pink_sunrise_2k.png differ diff --git a/files/custom-template/png-transparent-postgresql-original-wordmark-logo-icon-thumbnail.png b/files/custom-template/png-transparent-postgresql-original-wordmark-logo-icon-thumbnail.png new file mode 100644 index 0000000..1c7f4c6 Binary files /dev/null and b/files/custom-template/png-transparent-postgresql-original-wordmark-logo-icon-thumbnail.png differ diff --git a/files/custom-template/pngtree-abstract-background-with-dots-and-lines-connecting-generated-by-4k-rendering-technology-photo-image_25044558.jpg b/files/custom-template/pngtree-abstract-background-with-dots-and-lines-connecting-generated-by-4k-rendering-technology-photo-image_25044558.jpg new file mode 100644 index 0000000..da52145 Binary files /dev/null and b/files/custom-template/pngtree-abstract-background-with-dots-and-lines-connecting-generated-by-4k-rendering-technology-photo-image_25044558.jpg differ diff --git a/files/custom-template/pngwing.com.png b/files/custom-template/pngwing.com.png new file mode 100644 index 0000000..e3a7d61 Binary files /dev/null and b/files/custom-template/pngwing.com.png differ diff --git a/files/custom-template/postgree.png b/files/custom-template/postgree.png new file mode 100644 index 0000000..ac97c71 Binary files /dev/null and b/files/custom-template/postgree.png differ diff --git a/files/custom-template/scifi_terminal (1).glb b/files/custom-template/scifi_terminal (1).glb new file mode 100644 index 0000000..f5a87c0 Binary files /dev/null and b/files/custom-template/scifi_terminal (1).glb differ diff --git a/files/custom-template/template.json b/files/custom-template/template.json new file mode 100644 index 0000000..3fa1132 --- /dev/null +++ b/files/custom-template/template.json @@ -0,0 +1 @@ +{"type":"metapress:custom-template","date":1749266941778,"entities":[{"id":"template-global-region","type":"region","name":"Global region","sync":"template","scaleX":9999999,"scaleY":9999999,"scaleZ":9999999,"region_preset":"core.custom","lastModified":1749266500024,"lastEdited":1749266499539,"modifier:skybox":true,"skybox_settings_hidden":false,"skybox_type":"equirectangular","skybox_nx":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_nx.c54bd67d3a1f4cf7dd40.jpg","skybox_px":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_px.e66bb446bf515c768c9d.jpg","skybox_ny":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_ny.f812cf466afd9b70f00b.jpg","skybox_py":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_py.712cc34a8de3bcb502c5.jpg","skybox_nz":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_nz.066f5b999c05ff9bc0d1.jpg","skybox_pz":"https://kev.metapress.dev/wp-content/plugins/metapress/mp-core/skybox3_pz.ae33242069c1dc3dad62.jpg","envmap_copy_skybox":true,"envmap_type":"","skybox_equirectangular":"http://localhost:3000/files/custom-template/pink_sunrise_2k.png","_lastCheckDate":0,"modifier:mediaoutlet":false,"modifier:fog":true,"x":0,"y":0,"z":0,"quatX":0,"quatY":0,"quatZ":0,"quatW":0,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"mesh","url":"http://localhost:3000/files/custom-template/test1-texture-bake7.glb","name":"test1.glb","sync":"template","x":-2.4976373839498094,"y":0,"z":6.023984509445565,"quatX":0,"quatY":1,"quatZ":8.040613248383182e-17,"quatW":0,"id":"32ebd8f3-9798-488e-bedf-feb7a69cd56e","lastModified":1749266499539,"lastEdited":1749266499539,"_lastCheckDate":0,"modifier:physics":false,"scaleX":1,"scaleY":1,"scaleZ":1,"physics_shape":"mesh","physics_enabled":true,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"spawnpoint","name":"Spawn Point","sync":"template","x":-65.77218711075886,"y":0.2170972387181419,"z":5.959075201836809,"id":"307dcc0c-d1eb-4ce8-ac78-4c11997e5ade","lastModified":1749266499539,"lastEdited":1749266499539,"scaleX":1,"scaleY":1,"scaleZ":1,"quatX":0,"quatY":-0.8281019321692848,"quatZ":0,"quatW":0.5605775503331342,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:mediaoutlet":true,"media_audio":true,"media_url":"http://localhost/dev-verse/wp-content/uploads/2025/06/Music_fx_a_major_key_melody_that_evokes_a_sen.wav","media_audio_volume":30},{"type":"mesh","url":"http://localhost:3000/files/custom-template/grandeur.glb","name":"grandeur.glb","sync":"template","x":-43.67375257796292,"y":4.104465116546647,"z":-8.326724484342048,"quatX":-1.232595164407831e-32,"quatY":-0.7071067811865476,"quatZ":-1.232595164407831e-32,"quatW":0.7071067811865475,"id":"cb99cc2c-d954-4dc6-8a32-f80a0a7e1d1b","lastModified":1749266499539,"lastEdited":1749266499539,"scaleX":0.6322665632096285,"scaleY":0.6322665632096285,"scaleZ":0.6322665632096285,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"mesh","url":"http://localhost:3000/files/custom-template/grandeur.glb","name":"grandeur.glb","sync":"template","x":-9.611428179421978,"y":4.024472250736817,"z":20.506624560563377,"quatX":-8.659560562354933e-17,"quatY":-0.7071067811865476,"quatZ":-8.659560562354933e-17,"quatW":-0.7071067811865475,"id":"36c09422-f814-4430-a447-0f63464daade","lastModified":1749266499539,"lastEdited":1749266499539,"scaleX":3.534993667004272,"scaleY":0.6303463613357562,"scaleZ":0.6303463613357562,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"mesh","url":"http://localhost:3000/files/custom-template/grandeur.glb","name":"grandeur.glb","sync":"template","x":-43.36454952330511,"y":4.0928007567506,"z":20.461401918500748,"quatX":-8.659560562354933e-17,"quatY":-0.7071067811865476,"quatZ":-8.659560562354933e-17,"quatW":-0.7071067811865475,"lastModified":1749266499539,"lastEdited":1749266499539,"scaleX":3.534993667004272,"scaleY":0.6303463613357562,"scaleZ":0.6303463613357562,"id":"7ae65d33-74fe-4238-9218-246f48c708d4","extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"mesh","url":"http://localhost:3000/files/custom-template/chain-reaction.glb","name":"chain-reaction.glb","sync":"template","x":-26.93041250708456,"y":4.20504959189717,"z":20.395532938126156,"quatX":-8.659560562354933e-17,"quatY":-0.7071067811865476,"quatZ":-8.659560562354933e-17,"quatW":-0.7071067811865475,"id":"4de7d798-594f-4ee2-b239-4f7d3abf7ce5","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":1,"scaleY":1,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"sync":"template","x":-46.421415569728936,"y":4.252999877964013,"z":20.271300562186273,"type":"plane","name":"GhzHost","scaleX":1.9946660270728995,"modifier:contentSlot":false,"contentSlot_source":"any:0","id":"6574fe75-ae63-4475-8995-887dc63beaf4","lastModified":1749266499540,"lastEdited":1749266499540,"scaleY":2.9208294553271337,"scaleZ":1,"quatX":6.855069208202937e-25,"quatY":1,"quatZ":1.224646799147353e-16,"quatW":-5.597588678629403e-9,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"contentSlot_displayType":"panel","modifier:action_scripter_click":true,"distance_trigger":false,"distance_value":50,"link_url":"https://br.ghzhost.com","_lastCheckDate":0,"modifier:object_interaction":false,"modifier:mediaoutlet":false,"placeholder_url":"http://localhost:3000/files/custom-template/discord.png?_=1749048292881","media_url":"http://localhost:3000/files/custom-template/LogoGHZHOST300px.png?_=1749048304431","modifier:materials":true,"url":"http://localhost:3000/files/custom-template/LogoGHZHOST300px.png?_=1749048376821","transparencyMode":"alpha"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/collider.glb","name":"collider.glb","sync":"template","x":-2.497,"y":0.01,"z":6.022,"quatX":0,"quatY":1,"quatZ":4.978996250514799e-17,"quatW":0,"id":"ca7bc6ad-626b-4083-a567-18998bb8a777","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":1,"scaleY":1,"scaleZ":1,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"hidden":true,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"sync":"template","x":-52.75931381067417,"y":7.708127174931163,"z":6.0247938158111,"type":"plane","modifier:materials":true,"id":"968e88bf-3e7c-4ed8-a24b-4e79041551e5","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":7.5,"scaleY":4.7,"scaleZ":0.255,"quatX":-0.0001093956336752806,"quatY":-0.7063847342149235,"quatZ":-0.008209295500925978,"quatW":0.7077804763965206,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/GHZVR-VERSEWEB.png?_=1749133910938","_lastCheckDate":0,"shaderMode":"standard","transparencyMode":""},{"sync":"template","x":-2.366066118445924,"y":4.677225941366821,"z":5.322402792158588,"type":"plane","modifier:materials":true,"id":"622b63eb-aba6-404f-a020-782df15d25f9","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":20,"scaleY":8,"scaleZ":19.461,"quatX":0,"quatY":0.7084435208013994,"quatZ":0,"quatW":-0.7057675097611942,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/Captura de tela 2025-06-03 122446.png?_=1748964517032","_lastCheckDate":0,"hidden":false,"shaderMode":"basic"},{"sync":"template","x":-30.701155182003735,"y":3.208669785294434,"z":5.690273507418131,"type":"region","modifier:materials":false,"id":"22b45a06-c230-4762-9dbb-22228486c168","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":1,"scaleY":1,"scaleZ":1,"quatX":0,"quatY":1,"quatZ":4.978996250514799e-17,"quatW":0,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"_lastCheckDate":0,"modifier:mediaoutlet":true,"media_audio":true,"media_audio_volume":30,"media_audio_spatial":false,"media_url":"http://localhost:3000/files/custom-template/Music_fx_epic_and_futuristic_soundtrack_for_a.mp3?_=1749011151772","media_audio_range":15},{"sync":"template","x":-59.93437668586849,"y":3.5324564496482784,"z":16.747567570595642,"type":"plane","modifier:materials":true,"id":"c08558fe-786d-4694-9817-e3fcec0e259a","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":10.864237794120163,"scaleY":5.812026642246026,"scaleZ":0.000010465759370972686,"quatX":0,"quatY":-0.8771202459736399,"quatZ":0,"quatW":0.48027083411669036,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/Senac_logo.svg.png?_=1749010114448","_lastCheckDate":0,"name":"SENAC"},{"sync":"template","x":-44.20183264187463,"y":4.2662424469359,"z":-8.261120970999583,"type":"plane","modifier:materials":true,"id":"eeba8f25-dc0a-41d2-a0d9-b295aad209a","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":10,"scaleY":5,"scaleZ":1,"quatX":0,"quatY":0,"quatZ":0,"quatW":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/SGBDs-Mais-Usados-no-Mundo-1024x502.png?_=1749011376693","_lastCheckDate":0,"transparencyMode":"","name":"SGBDs Mais Usados no Mundo","modifier:physics":false,"modifier:action_scripter_click":true,"link_url":"https://www.hashtagtreinamentos.com/sgbds-mais-usados-no-mundo-sql","modifier:object_interaction":true,"distance_trigger":true,"distance_value":5},{"sync":"template","x":-37.79890485079998,"y":2.0732372007485695,"z":-0.8328859709114962,"type":"plane","modifier:materials":true,"id":"1bbca17d-c1e9-481d-81dd-5478d39f113b","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":4,"scaleY":3,"scaleZ":1,"quatX":0,"quatY":-0.28564767193424667,"quatZ":0,"quatW":0.9583347053710123,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"name":"SQLite","url":"http://localhost:3000/files/custom-template/SQLite370.svg.png?_=1749012681274","_lastCheckDate":0,"modifier:action_scripter_click":true,"link_url":"https://www.sqlite.org/","distance_trigger":false,"post_display_type":"sidebar","modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"physics_lockRotation":false},{"sync":"template","x":-52.86294650795443,"y":5.047231647082568,"z":0.2456834390583291,"type":"plane","modifier:materials":false,"id":"5d1ff4e9-5795-42de-93da-16af9d250219","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":3.8,"scaleY":9,"scaleZ":1,"quatX":0.002403511939264481,"quatY":0.703414058083957,"quatZ":0.0018283311519437062,"quatW":0.7107739044347481,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"name":" backgroundvideo1","_lastCheckDate":0,"modifier:mediaoutlet":true,"media_video":true,"media_url":"http://localhost:3000/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4?_=1749015355636","media_video_range":100},{"sync":"template","x":-52.8,"y":5.039,"z":11.861,"type":"plane","modifier:materials":false,"id":"5e95efc3-27a1-4d18-821d-b3995da9848c","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":4,"scaleY":9,"scaleZ":1,"quatX":0,"quatY":0.7159181243581577,"quatZ":0,"quatW":0.6981842444623751,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"_lastCheckDate":0,"modifier:mediaoutlet":true,"media_video":true,"media_url":"http://localhost:3000/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4?_=1749015724344","media_video_range":100},{"sync":"template","x":-29.82,"y":3.887,"z":-8.338838096860005,"type":"plane","modifier:materials":true,"id":"7e47b07c-d6c2-4435-8491-0033f283b415","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":12,"scaleY":8,"scaleZ":1,"quatX":0,"quatY":0,"quatZ":0,"quatW":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"name":"Introdução SQLITE","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_14ervi14ervi14er.png?_=1749049662999","_lastCheckDate":0,"modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1YI4dopgioiXGSO8E9oyx46jqvifvSoF-WsR3ZckF7d0/embed?start=false&loop=false&delayms=3000&slide=id.p","distance_trigger":true,"distance_value":5},{"sync":"template","x":-23.04674705427365,"y":2.022210385513001,"z":-0.6517538783556013,"type":"plane","modifier:materials":true,"id":"4ef36a2a-b66e-4881-be61-8a99a8664d27","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":4,"scaleY":3,"scaleZ":1,"quatX":0,"quatY":-0.36521685914931196,"quatZ":0,"quatW":0.9309224703449324,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/postgree.png?_=1749264630750","_lastCheckDate":0,"transparencyMode":"clip","shaderMode":"basic","mirrorX":false,"mirrorY":false,"modifier:action_scripter_click":true,"link_url":"","modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"post_display_type":"sidebar"},{"sync":"template","x":-39.95464023381635,"y":4.32601328175218,"z":20.241752654355096,"type":"plane","modifier:materials":true,"id":"edc5d1b5-65a8-4df1-ace8-489c61057e6a","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":10,"scaleY":5.5,"scaleZ":1,"quatX":-6.123233995736766e-17,"quatY":-1,"quatZ":-6.123233995736766e-17,"quatW":3.749399456654644e-33,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/image-1.png?_=1749067689399","_lastCheckDate":0,"shaderMode":"basic","transparencyMode":"alpha","modifier:action_scripter_click":true,"link_url":"https://sesamedisk.com/top-10-databases-for-developers-a-comprehensive-guide-to-mysql-postgresql-mongodb-and-more/","distance_trigger":true,"distance_value":5},{"sync":"template","x":-37.6357984150025,"y":6.162181364605652,"z":-8.287075955379931,"type":"plane","modifier:materials":false,"lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":3.8,"scaleY":10,"scaleZ":1,"quatX":0.002998759694788425,"quatY":0.9997543108028838,"quatZ":-0.0003565175118660205,"quatW":0.02195901561108049,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"name":" backgroundvideo3","_lastCheckDate":0,"modifier:mediaoutlet":true,"media_video":true,"media_url":"http://localhost:3000/files/custom-template/7020078_Tunnel_Cube_1280x720.mp4?_=1749015355636","media_video_range":100,"id":"6b3f6527-6fb2-421b-9010-74d26d8eb91e"},{"sync":"template","x":-12.60887988668967,"y":1.908742433044492,"z":-0.9704541107063394,"type":"plane","modifier:materials":true,"id":"bd9b0e98-8b6f-4503-ae11-4594ae980626","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":4,"scaleY":3,"scaleZ":1,"quatX":0,"quatY":-0.27274215473635555,"quatZ":0,"quatW":0.962087167064279,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/favpng_0958d38c6c0b41d57b41cb8801163510.png?_=1749070543700","_lastCheckDate":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true},{"type":"plane","scaleX":1,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_14ervi14ervi14er.png","name":"Gemini_Generated_Image_14ervi14ervi14er.png","sync":"template","x":-3.2110367168187106,"y":9.743260292571302,"z":13.150877213593029,"quatX":8.944207109294834e-7,"quatY":0.7347548242855071,"quatZ":-0.6783327709814961,"quatW":9.688164282649333e-7,"id":"76d6227d-4029-4edb-9694-a0eff1ba8ef8","lastModified":1749266499540,"lastEdited":1749266499540,"scaleY":1,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"plane","scaleX":10,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_xc1cxc1cxc1cxc1c.png","name":"Introdução ao NoSQL","sync":"template","x":-8.280125765389968,"y":3.3942340233248616,"z":-8.333791407607658,"quatX":8.040613248383182e-17,"quatY":-6.123233995736766e-17,"quatZ":-4.9234556389071326e-33,"quatW":1,"id":"ec47e994-f86c-4dc3-900e-a721b53d4b24","lastModified":1749266499540,"lastEdited":1749266499540,"scaleY":8,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1-7upuY4m6OFL_4z-SYnAKe4nU9PrCYpRdzzdoLMMa1w/embed?start=false&loop=false&delayms=30000&slide=id.p","distance_trigger":true,"distance_value":5},{"type":"plane","scaleX":10.8,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_4rioou4rioou4rio.png","name":"PostGreSQL","sync":"template","x":-18.672092672660323,"y":3.8588907011729034,"z":-8.33662944269683,"quatX":8.040613248383182e-17,"quatY":-6.123233995736766e-17,"quatZ":-4.9234556389071326e-33,"quatW":1,"id":"07b6a207-3cfd-4c40-b14e-45ba4c582742","lastModified":1749266499540,"lastEdited":1749266499540,"scaleY":6,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1no6jGPlPZGmq9b22uTrEFManx-YrM2mOmg0e7KH-6Eo/embed?start=false&loop=false&delayms=30000&slide=id.p","distance_trigger":true,"distance_value":5},{"type":"plane","scaleX":12,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_muml5omuml5omuml.png?_=1749090877194","name":"Introdução MariaDB","sync":"template","x":-8.06789697679766,"y":4.344160822591505,"z":20.316523218219096,"quatX":7.478257298862197e-25,"quatY":1,"quatZ":1.224646799147353e-16,"quatW":-6.106460372160262e-9,"id":"ae411a21-0bf9-493b-8958-17351fbeec28","lastModified":1749266499540,"lastEdited":1749266499540,"scaleY":6,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"_lastCheckDate":0,"modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1FW-CbknUA-U2sJ014RaoacmBa27Z6OQXINdZGZ0BjCw/embed?start=false&loop=false&delayms=30000&slide=id.p","distance_trigger":true,"distance_value":5},{"sync":"template","x":-19.116747579638883,"y":3.6920091972268265,"z":20.31020651054777,"type":"plane","modifier:materials":true,"id":"026fbc2a-61ea-4ef3-a4e7-7626d0175f0e","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":10,"scaleY":7,"scaleZ":1,"quatX":-6.123233995736766e-17,"quatY":-1,"quatZ":-6.123233995736766e-17,"quatW":3.749399456654644e-33,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"name":"Introdução Microsoft SQL Server","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_rnewj3rnewj3rnew.png?_=1749096801361","_lastCheckDate":0,"modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1WFtR2Q4P08WirzIwdHyEjPcMmTbV6hVIiJIgNrM36BU/embed?start=false&loop=false&delayms=30000&slide=id.p","distance_trigger":true,"distance_value":5,"shaderMode":"basic"},{"sync":"template","x":-29.63,"y":3.9991529154692094,"z":20.298,"type":"plane","modifier:materials":true,"id":"565a847b-f248-433a-b5a6-506545bd88cb","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":11,"scaleY":6,"scaleZ":1,"quatX":-6.123233995736766e-17,"quatY":-1,"quatZ":-6.123233995736766e-17,"quatW":3.749399456654644e-33,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"shaderMode":"basic","url":"http://localhost:3000/files/custom-template/Gemini_Generated_Image_9znw09znw09znw09.png?_=1749100088443","_lastCheckDate":0,"name":"Oracle Database","modifier:action_scripter_click":true,"link_url":"https://docs.google.com/presentation/d/1vKvubjskkW5idBegY2DleGCXMbkGCWpkqMwDpJgI51E/embed?start=false&loop=false&delayms=30000&slide=id.p","distance_trigger":true,"distance_value":5},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Quiz Banco de Dados","sync":"template","x":-4.449,"y":0.473,"z":17.997,"quatX":4.8106024533922724e-17,"quatY":0.25787170427986594,"quatZ":1.2839422487233137e-17,"quatW":-0.9661791677177674,"id":"16e50c8c-868a-4ed9-967b-e9739a7f16a1","lastModified":1749266499540,"lastEdited":1749266499540,"scaleX":0.5,"scaleY":0.3363593838343832,"scaleZ":0.2907114790799495,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"http://localhost/dev-verse/quiz-postgree/index.html","distance_trigger":true,"distance_value":5},{"sync":"template","x":-12.407585185766294,"y":2.5099318968998987,"z":13.356770544554594,"type":"plane","modifier:materials":true,"id":"370157dd-b0f9-4913-9cd9-2f0926af2e8e","lastModified":1749266499541,"lastEdited":1749266499541,"scaleX":3,"scaleY":4,"scaleZ":1,"quatX":0,"quatY":0.9163430795802389,"quatZ":0,"quatW":-0.40039400658027324,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/pngwing.com.png?_=1749100722117","_lastCheckDate":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true},{"sync":"template","x":-23.558582620892658,"y":2.485326549861086,"z":13.34578927482,"type":"plane","modifier:materials":true,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleX":3,"scaleY":4,"scaleZ":1,"quatX":0,"quatY":0.9163430795802389,"quatZ":0,"quatW":-0.40039400658027324,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/92f820_0d376190281fde7ce5eaeec6bd289ec9.png?_=1749101099285","_lastCheckDate":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"id":"bdd1505a-ca43-4c0e-b348-b19fb4c598e3","shaderMode":"basic"},{"type":"plane","scaleX":35,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","name":"depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","sync":"template","x":-24.73567878483559,"y":0.5236756832784157,"z":8.556268902916942,"quatX":-0.7071067811865475,"quatY":-4.329780281177467e-17,"quatZ":4.329780281177466e-17,"quatW":0.7071067811865476,"id":"366a4176-73c8-4ca3-92ee-5a7398aceba7","lastModified":1749266499541,"lastEdited":1749266499541,"scaleY":3,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"mirrorY":true,"mirrorX":false,"tileX":10,"tileY":""},{"type":"plane","scaleX":35,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","name":"depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","sync":"template","x":-24.786962104234085,"y":0.5154166716993902,"z":3.527788527350786,"quatX":-0.7071067811865475,"quatY":-4.329780281177467e-17,"quatZ":4.329780281177466e-17,"quatW":0.7071067811865476,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleY":3,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"mirrorY":true,"mirrorX":false,"tileX":10,"tileY":"","id":"99300e8a-65d8-44a0-91de-46c8b29fa362"},{"type":"plane","scaleX":15,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","name":"depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","sync":"template","x":-3.957008005233133,"y":0.5311056306946957,"z":5.959991824460244,"quatX":-0.7071067811865475,"quatY":-4.329780281177467e-17,"quatZ":4.329780281177466e-17,"quatW":0.7071067811865476,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleY":21,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"mirrorY":true,"mirrorX":false,"tileX":20,"tileY":20,"id":"12760056-ee95-4dd2-b60e-84ad6ad274b0"},{"type":"plane","scaleX":15,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","name":"depositphotos_234786984-stock-photo-texture-red-carpet-background.jpg","sync":"template","x":-45.33986283652176,"y":0.5036774937617705,"z":6.090076092158858,"quatX":-0.7071067811865475,"quatY":-4.329780281177467e-17,"quatZ":4.329780281177466e-17,"quatW":0.7071067811865476,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleY":8,"scaleZ":1,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"mirrorY":true,"mirrorX":false,"tileX":20,"tileY":20,"id":"2ba63ccf-20ab-4623-858f-59cb443e9f85"},{"sync":"template","x":-34.52327005753918,"y":1.284548006515672,"z":13.395611612870127,"type":"plane","modifier:materials":true,"id":"857ee437-abeb-4127-8243-bddea3711def","lastModified":1749266499541,"lastEdited":1749266499541,"scaleX":5,"scaleY":5,"scaleZ":0.603,"quatX":0,"quatY":0.9358329378671626,"quatZ":0,"quatW":-0.3524439138400825,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"url":"http://localhost:3000/files/custom-template/34eb3342b5964a04906143f54ffe0d1e.png?_=1749102518108","_lastCheckDate":0,"shaderMode":"basic","transparencyMode":"alpha","modifier:physics":true,"physics_shape":"mesh","physics_enabled":true},{"type":"plane","scaleX":0.8573422700115768,"modifier:materials":true,"shaderMode":"basic","transparencyMode":"","url":"http://localhost:3000/files/custom-template/chris-ried-ieic5Tq8YMk-unsplash-scaled.jpg","name":"chris-ried-ieic5Tq8YMk-unsplash-scaled.jpg","sync":"template","x":-4.830529877595187,"y":2.108057451268042,"z":17.725310516674647,"quatX":0.16695446442065384,"quatY":0.8166100866528463,"quatZ":0.2874113535548637,"quatW":-0.4718780425434146,"id":"b2dedfeb-f002-4722-a8eb-afa1e070e40c","lastModified":1749266499541,"lastEdited":1749266499541,"scaleY":0.6007966757053242,"scaleZ":1.3304860010696449,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Front Clínica","sync":"template","x":-51.7,"y":0.3,"z":17.5,"quatX":3.671268584736875e-18,"quatY":0.9972778614279004,"quatZ":4.965442732770933e-17,"quatW":-0.07373511446925254,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleX":0.5,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codepen.io/Ghz-Host/embed/WbvjNgz?default-tab=result","distance_trigger":false,"distance_value":5,"id":"d9ec34a2-6c9d-45bd-8a51-01f59cae992d"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Código Front GameHub","sync":"template","x":-51.7,"y":0.3,"z":16,"quatX":3.671268584736875e-18,"quatY":0.9972778614279004,"quatZ":4.965442732770933e-17,"quatW":-0.07373511446925254,"lastModified":1749266499541,"lastEdited":1749266499541,"scaleX":0.473,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codepen.io/Ghz-Host/embed/GgJmjdd","distance_trigger":false,"distance_value":5,"id":"22bc8615-8f5b-4d8d-adf0-9e01ab1f7a9e"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Código Front Loja Virtual","sync":"template","x":-51.7,"y":0.3,"z":14.5,"quatX":3.671268584736875e-18,"quatY":0.9972778614279004,"quatZ":4.965442732770933e-17,"quatW":-0.07373511446925254,"lastModified":1749266900884,"lastEdited":1749266900884,"scaleX":0.473,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codepen.io/Ghz-Host/embed/QwbvNod","distance_trigger":false,"distance_value":5,"id":"d81839e7-79df-4ec6-a33c-4a3267f90a27"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Código Front Food Express","sync":"template","x":-51.7,"y":0.3,"z":13,"quatX":3.671268584736875e-18,"quatY":0.9972778614279004,"quatZ":4.965442732770933e-17,"quatW":-0.07373511446925254,"lastModified":1749266712152,"lastEdited":1749266712152,"scaleX":0.473,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codepen.io/Ghz-Host/embed/YPXVzGP","distance_trigger":false,"distance_value":5,"id":"404a10bb-090b-4f53-93e3-67cee0304237"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Código front NeonNET","sync":"template","x":-51.7,"y":0.3,"z":11.5,"quatX":2.174978006979577e-18,"quatY":0.9990454394648697,"quatZ":4.974243497189495e-17,"quatW":-0.043683061756768754,"lastModified":1749266939314,"lastEdited":1749266939314,"scaleX":0.473,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codepen.io/Ghz-Host/embed/JodNRgy","distance_trigger":false,"distance_value":5,"id":"b671f0ab-6192-4738-9a5a-0ecf1210b2cf"},{"type":"mesh","url":"http://localhost:3000/files/custom-template/scifi_terminal (1).glb","name":"Code","sync":"template","x":-52.122768288814,"y":0.37321526201425326,"z":0.16936573293489765,"quatX":-1.4703669424403803e-17,"quatY":0.9554002740568026,"quatZ":4.756934382269631e-17,"quatW":0.29531392844257576,"lastModified":1749266614312,"lastEdited":1749266614312,"scaleX":0.473,"scaleY":0.336,"scaleZ":0.291,"extra_offset_x":0,"extra_offset_y":0,"extra_offset_z":0,"extra_scale_x":1,"extra_scale_y":1,"extra_scale_z":1,"extra_rotation_x":0,"extra_rotation_y":0,"extra_rotation_z":0,"modifier:physics":true,"physics_shape":"mesh","physics_enabled":true,"modifier:action_scripter_click":true,"link_url":"https://codesandbox.io/s/rjk9n4zj7m?fork=true","distance_trigger":false,"distance_value":5,"id":"9bc81bf5-4679-437c-a4a4-d50d22a0b343"}]} \ No newline at end of file diff --git a/files/custom-template/test1-texture-bake7.glb b/files/custom-template/test1-texture-bake7.glb new file mode 100644 index 0000000..cbd9426 Binary files /dev/null and b/files/custom-template/test1-texture-bake7.glb differ diff --git a/index.html b/index.html index 0f9d706..0b8a773 100644 --- a/index.html +++ b/index.html @@ -1,213 +1,100 @@ - - - - .:: GhzhHost Desktop APP ::. - - - - - - Home - MCP - GCP - WCP - - - - - - - - Sem Conexão com a Internet - - Não foi possível conectar à internet. Por favor, verifique sua conexão e tente novamente. - - OK - - - - - - \ No newline at end of file + + + + + + .:: GHZ 💠VerseWeb ::. + + + + + + + + + + + diff --git a/logo.png b/logo.png deleted file mode 100644 index 0aff1a9..0000000 Binary files a/logo.png and /dev/null differ diff --git a/main.js b/main.js index 3348586..131ec4f 100644 --- a/main.js +++ b/main.js @@ -1,191 +1,198 @@ -const { app, BrowserWindow, ipcMain, dialog, session, BrowserView } = require('electron'); +const { app, BrowserWindow, Menu } = require('electron'); const path = require('path'); +const { spawn } = require('child_process'); let mainWindow; -let currentView = null; -let views = new Map(); +let serverProcess; function createWindow() { - mainWindow = new BrowserWindow({ - width: 1200, - height: 800, - minWidth: 800, - minHeight: 600, - webPreferences: { - nodeIntegration: true, - contextIsolation: true, - preload: path.join(__dirname, 'preload.js'), - webSecurity: false, - allowRunningInsecureContent: true - }, - frame: true, - fullscreenable: true, - show: false - }); - - // Configurar permissões de conteúdo - session.defaultSession.webRequest.onHeadersReceived((details, callback) => { - callback({ - responseHeaders: { - ...details.responseHeaders, - 'Content-Security-Policy': ["default-src 'self' 'unsafe-inline' 'unsafe-eval' https: http: data: blob:"] - } + // Criar a janela do navegador + mainWindow = new BrowserWindow({ + width: 1200, + height: 800, + webPreferences: { + nodeIntegration: false, + contextIsolation: true, + enableRemoteModule: false, + webSecurity: true + }, + icon: path.join(__dirname, 'files/custom-template/GHZVR-VERSEWEB.png'), + show: false // Não mostrar até estar pronto }); - }); - mainWindow.loadFile('index.html'); + // Carregar a aplicação quando a janela estiver pronta + mainWindow.once('ready-to-show', () => { + mainWindow.show(); + mainWindow.focus(); + }); - // Quando a janela estiver pronta, maximizar e mostrar - mainWindow.once('ready-to-show', () => { - mainWindow.maximize(); - mainWindow.show(); - }); + // Carregar a aplicação local + mainWindow.loadURL('http://localhost:3000'); - // Adicionar listener para redimensionamento da janela - mainWindow.on('resize', updateViewBounds); - mainWindow.on('maximize', updateViewBounds); - mainWindow.on('unmaximize', updateViewBounds); + // Abrir DevTools na inicialização + // mainWindow.webContents.openDevTools(); - // Check internet connection periodically - setInterval(checkInternetConnection, 5000); -} + // Evento quando a janela é fechada + mainWindow.on('closed', () => { + mainWindow = null; + }); -function updateViewBounds() { - if (currentView) { - const bounds = mainWindow.getBounds(); - const tabHeight = 60; // Altura aproximada da barra de abas - currentView.setBounds({ - x: 0, - y: tabHeight, - width: bounds.width, - height: bounds.height - tabHeight + // Evento para lidar com erros de carregamento + mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => { + console.error('Falha ao carregar:', errorDescription); + // Tentar recarregar após um delay + setTimeout(() => { + mainWindow.loadURL('http://localhost:3000'); + }, 2000); }); - } } -function createBrowserView(url) { - const view = new BrowserView({ - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - webSecurity: false, - allowRunningInsecureContent: true - } - }); - - mainWindow.addBrowserView(view); - - // Calcular as dimensões da view - const bounds = mainWindow.getBounds(); - const tabHeight = 60; // Altura aproximada da barra de abas - view.setBounds({ - x: 0, - y: tabHeight, - width: bounds.width, - height: bounds.height - tabHeight - }); - - // Carregar a URL - view.webContents.loadURL(url); - - // Listen for title updates - view.webContents.on('page-title-updated', (event, title) => { - mainWindow.webContents.send('title-update', title); - }); - - // Get title when page finishes loading - view.webContents.on('did-finish-load', () => { - const title = view.webContents.getTitle(); - if (title) { - mainWindow.webContents.send('title-update', title); - } - }); - - return view; +function startServer() { + return new Promise((resolve, reject) => { + console.log('Iniciando servidor VerseWEB...'); + + serverProcess = spawn('node', ['server.js'], { + stdio: 'pipe', + cwd: __dirname + }); + + serverProcess.stdout.on('data', (data) => { + const output = data.toString(); + console.log('Servidor:', output); + + // Verificar se o servidor está pronto + if (output.includes('Servidor rodando em http://localhost:3000')) { + console.log('Servidor iniciado com sucesso!'); + resolve(); + } + }); + + serverProcess.stderr.on('data', (data) => { + console.error('Erro do servidor:', data.toString()); + }); + + serverProcess.on('error', (error) => { + console.error('Erro ao iniciar servidor:', error); + reject(error); + }); + + serverProcess.on('close', (code) => { + console.log(`Servidor encerrado com código: ${code}`); + }); + + // Timeout para evitar espera infinita + setTimeout(() => { + reject(new Error('Timeout ao iniciar servidor')); + }, 10000); + }); } -function switchToView(view) { - if (currentView) { - mainWindow.removeBrowserView(currentView); - } - mainWindow.addBrowserView(view); - currentView = view; - updateViewBounds(); // Atualizar bounds ao trocar de view - - // Update title when switching views - if (view.webContents.getTitle()) { - mainWindow.webContents.send('title-update', view.webContents.getTitle()); - } +function createMenu() { + const template = [ + { + label: 'Arquivo', + submenu: [ + { + label: 'Recarregar', + accelerator: 'CmdOrCtrl+R', + click: () => { + if (mainWindow) { + mainWindow.reload(); + } + } + }, + { + label: 'Forçar Recarregamento', + accelerator: 'CmdOrCtrl+Shift+R', + click: () => { + if (mainWindow) { + mainWindow.webContents.reloadIgnoringCache(); + } + } + }, + { type: 'separator' }, + { + label: 'Sair', + accelerator: process.platform === 'darwin' ? 'Cmd+Q' : 'Ctrl+Q', + click: () => { + app.quit(); + } + } + ] + }, + { + label: 'Desenvolvimento', + submenu: [ + { + label: 'Abrir DevTools', + accelerator: 'F12', + click: () => { + if (mainWindow) { + mainWindow.webContents.toggleDevTools(); + } + } + }, + { + label: 'Alternar Tela Cheia', + accelerator: 'F11', + click: () => { + if (mainWindow) { + mainWindow.setFullScreen(!mainWindow.isFullScreen()); + } + } + } + ] + } + ]; + + const menu = Menu.buildFromTemplate(template); + Menu.setApplicationMenu(menu); } -// IPC Handlers -ipcMain.handle('load-tab', async (event, url) => { - if (views.has(url)) { - switchToView(views.get(url)); - } else { - const view = createBrowserView(url); - views.set(url, view); - switchToView(view); - } -}); - -function checkInternetConnection() { - const { net } = require('electron'); - const request = net.request('https://ghzhost.com'); - - request.on('response', (response) => { - const isOnline = response.statusCode === 200; - mainWindow.webContents.send('internet-status', isOnline); - if (!isOnline) { - showNoInternetDialog(); - } - }); - - request.on('error', () => { - mainWindow.webContents.send('internet-status', false); - //showNoInternetDialog(); - }); - request.end(); -} - -function showNoInternetDialog() { - dialog.showMessageBox(mainWindow, { - type: 'warning', - title: 'Sem Internet', - message: 'Não foi possível conectar à internet. Por favor, verifique sua conexão.', - buttons: ['OK'] - }); -} -// IPC Handlers -ipcMain.handle('check-internet', async () => { - return new Promise((resolve) => { - const { net } = require('electron'); - const request = net.request('https://ghzhost.com'); - - request.on('response', (response) => { - resolve(response.statusCode === 200); - }); +// Este método será chamado quando o Electron terminar de inicializar +app.whenReady().then(async () => { + try { + await startServer(); + createWindow(); + createMenu(); + } catch (error) { + console.error('Erro ao inicializar:', error); + app.quit(); + } +}); - request.on('error', () => { - resolve(false); - }); +// Quit quando todas as janelas estiverem fechadas +app.on('window-all-closed', () => { + // No macOS é comum para aplicações manterem a barra de menu ativa + // até que o usuário saia explicitamente com Cmd + Q + if (process.platform !== 'darwin') { + app.quit(); + } +}); - request.end(); - }); +app.on('activate', () => { + // No macOS é comum recriar uma janela na aplicação quando o + // ícone do dock é clicado e não há outras janelas abertas + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } }); -app.whenReady().then(createWindow); +// Encerrar o servidor quando a aplicação for fechada +app.on('before-quit', () => { + if (serverProcess) { + console.log('Encerrando servidor...'); + serverProcess.kill(); + } +}); -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit(); - } +// Tratamento de erros não capturados +process.on('uncaughtException', (error) => { + console.error('Erro não capturado:', error); }); -app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) { - createWindow(); - } +process.on('unhandledRejection', (reason, promise) => { + console.error('Promise rejeitada não tratada:', reason); }); \ No newline at end of file diff --git a/mp-core/100.ed693e9d3f50f224ea1c.bundle.js b/mp-core/100.ed693e9d3f50f224ea1c.bundle.js new file mode 100644 index 0000000..28fcaac --- /dev/null +++ b/mp-core/100.ed693e9d3f50f224ea1c.bundle.js @@ -0,0 +1,567 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [100], { + 40001: (e, t, a) => { + a.d(t, { + Lm: () => n, + U8: () => o, + lk: () => r, + sN: () => i + }); + var s = a(67294); + const r = e => s.createElement(s.Fragment, null, s.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, s.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? s.createElement("img", { + draggable: "false", + src: a(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), s.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto", + backgroundColor: "#00233f" + }, e.containerStyle) + }, e.children)), + n = e => { + let [t, r] = s.useState(!!e.openByDefault); + return !1 === e.visible ? s.createElement(s.Fragment, null) : s.createElement(s.Fragment, null, s.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => r(!t) + }, s.createElement("img", { + draggable: "false", + src: a(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), s.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? s.createElement("img", { + draggable: "false", + src: a(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + i = e => { + let [t, r] = s.useState(!1), [n, i] = s.useState(!1), o = s.useRef(null); + const l = e.avatar.avatar_name || e.avatar.avatar_id || "(no name)", + c = a(78226), + m = e.avatar.avatar_image; + return s.useEffect((() => { + i(o.current.offsetWidth < o.current.scrollWidth) + }), []), s.createElement("div", { + onMouseEnter: e => r(!0), + onMouseLeave: e => r(!1), + onClick: e.onClick, + style: { + display: "flex", + flexDirection: "column", + position: "relative", + transform: t ? "scale(1.1)" : null, + transition: "all 0.2s ease", + alignItems: "center", + cursor: "pointer" + } + }, e.selected ? s.createElement("div", { + style: { + position: "absolute", + top: 4, + right: 6, + width: 18, + height: 18, + backgroundColor: "#00bd28", + mask: `url(${c}) center / contain no-repeat`, + WebkitMask: `url(${c}) center / contain no-repeat` + } + }) : null, null != m ? s.createElement("img", { + draggable: "false", + src: e.avatar.avatar_image, + style: { + width: 110, + height: 80, + borderRadius: "6px 6px 0 0" + } + }) : s.createElement("div", { + style: { + display: "flex", + width: 110, + height: 80, + backgroundColor: "rgba(36, 33, 32, 0.4)", + borderRadius: "6px 6px 0 0", + justifyContent: "center", + alignItems: "center" + } + }, s.createElement("img", { + draggable: "false", + src: a(95186), + style: { + width: "90%", + height: "90%" + } + })), s.createElement("div", { + ref: o, + title: n ? l : null, + style: { + display: "block", + width: 110, + height: 23, + padding: "0 5px", + color: "white", + backgroundColor: "#202020", + fontSize: 13, + borderRadius: "0 0 6px 6px", + overflow: "hidden", + whiteSpace: "nowrap", + textOverflow: "ellipsis", + textAlign: "center", + boxSizing: "border-box" + } + }, l)) + } + }, + 30100: (e, t, a) => { + a.r(t), a.d(t, { + default: () => p + }); + var s = a(67294), + r = a(32589), + n = a(42321), + i = a(40001), + o = a(46839), + l = a(25108); + class c extends s.PureComponent { + state = { + page: "main", + profile_image_src: metapress.profile?.currentProfile?.fields?.profile_image_src + }; + get termsAndConditions() { + return { + title: "Verseweb Termos e condições", + noHeader: !1, + content: s.createElement("div", { + style: { + height: "100%", + padding: "10px 10px 60px 10px", + overflow: "hidden auto" + } + }, s.createElement("p", { + style: { + color: "#C7C7C7", + fontSize: 16, + fontWeight: 400, + fontFamily: "'Rubik', sans-serif" + } + }, "Olá Mundo")) + } + } + render() { + if ("avatar-select" == this.state.page) return s.createElement(n.Z, { + setPage: e => this.setState({ + page: e + }) + }); + metapress.plugins.callAll("getAccountLoginOptions").flat().sort(((e, t) => (e.name || "").localeCompare(t.name || ""))); + let e = metapress.plugins.callAll("siteSettings_getSettingSources"); + return s.createElement(i.lk, { + title: "Configurações", + onClose: () => metapress.menubar.closePanel() + }, s.createElement("img", { + draggable: "false", + src: this.state.profile_image_src || a(95186), + style: { + display: "block", + width: 100, + height: 100, + objectFit: "cover", + objectPosition: "center", + overflow: "hidden", + borderRadius: 50, + margin: "30px auto 10px auto", + cursor: "pointer" + }, + onClick: async () => await this.updateImage() + }), this.state.profile_image_src ? s.createElement("div", { + title: "Remover", + style: { + width: 26, + height: 26, + backgroundColor: "#333", + borderRadius: 12, + opacity: .8, + position: "relative", + top: -90, + left: 40, + margin: "-24px auto 0px auto", + display: "block", + cursor: "pointer", + backgroundSize: 16, + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + backgroundImage: `url(${a(86418)}` + }, + onClick: () => this.removeImage() + }) : null, s.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px 10px 20px", + textAlign: "center" + } + }, metapress.profile.get("name") || "Convidado"), this.getProfile(e), this.getHelpSection(e), this.getPluginSection(e), s.createElement("div", { + style: { + margin: 30, + opacity: .25, + fontSize: 11, + textAlign: "center" + }, + onClick: () => this.onVersionClick() + }, "VerseWeb 1.0 BETA")) + } + getUIType(e) { + switch (e.type) { + case "text": + return s.createElement(d, { + key: e.id | e.name, + name: e.name, + field: e.field, + placeholder: e.placeholder, + onValue: () => this.forceUpdate() + }); + case "button": + return s.createElement(r.zx, { + key: e.id | e.name, + title: e.name, + onClick: e.onClick + }); + case "actionField": + return s.createElement(r.N7, { + key: e.id | e.name, + fieldIcon: e.icon, + name: e.name, + value: e.value, + onClick: e.onClick + }); + case "header": + return s.createElement("div", { + key: e.id | e.name, + style: { + margin: "14px 32px -6px 32px", + fontSize: 12, + color: "rgba(255, 255, 255, 0.3)", + textAlign: "left" + } + }, e.text); + case "description": + return s.createElement("div", { + key: e.id | e.name, + style: { + margin: "10px calc(22px + 0.5%)", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, e.text); + case "checkbox": + return e.id ? s.createElement(CheckboxField, { + key: e.id | e.name, + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + onUpdate: e.onUpdate() + }) : null; + case "file": + return e.id ? s.createElement(FileField, { + key: e.id | e.name, + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + allowClear: e.allowClear ?? !1, + onUpdate: e.onUpdate() + }) : null; + case "select": + return e.id ? s.createElement(SelectField, { + key: e.id | e.name, + name: e.name || e.id, + tooltip: e.help, + default: e.default, + values: e.values, + labels: e.labels, + onUpdate: e.onUpdate() + }) : null; + case "number": + return e.id ? s.createElement(d, { + key: e.id | e.name, + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + type: e.fieldType + }) : null; + default: + return null + } + } + getProfile(e) { + if (e.length <= 0) return s.createElement(i.Lm, { + title: "Meu Perfil", + openByDefault: !0 + }, s.createElement(d, { + name: "Nome", + field: "name", + placeholder: "Convidado", + onValue: () => this.forceUpdate() + }), s.createElement(r.N7, { + fieldIcon: a(46314), + name: "Avatar", + value: metapress.avatars?.currentUserEntity?.avatar_name || metapress.avatars?.currentUserEntity?.avatar_id || "", + onClick: e => this.setState({ + page: "avatar-select" + }) + })); + let t = []; + for (let a of e) { + if ("profile" !== a.section) continue; + const e = this.getUIType(a); + e && t.push(e) + } + return s.createElement(i.Lm, { + title: "Meu Perfil", + openByDefault: !0 + }, s.createElement(d, { + name: "Nome", + field: "name", + placeholder: "Convidado", + onValue: () => this.forceUpdate() + }), s.createElement(r.N7, { + fieldIcon: a(46314), + name: "Avatar", + value: metapress.avatars?.currentUserEntity?.avatar_name || metapress.avatars?.currentUserEntity?.avatar_id || "", + onClick: e => this.setState({ + page: "avatar-select" + }) + }), t) + } + getHelpSection(e) { + if (e.length <= 0) return s.createElement(i.Lm, { + title: "Ajuda", + openByDefault: !0 + }, s.createElement(r.zx, { + title: "Renascer", + onClick: () => metapress.spawnpoints.respawn() + }), s.createElement(r.zx, { + title: "Termos e Condições", + onClick: () => metapress.dialogs.show(this.termsAndConditions) + })); + let t = []; + for (let a of e) { + if ("help" !== a.section) continue; + const e = this.getUIType(a); + e && t.push(e) + } + return s.createElement(i.Lm, { + title: "Ajuda", + openByDefault: !0 + }, s.createElement(r.zx, { + title: "Renascer", + onClick: () => metapress.spawnpoints.respawn() + }), s.createElement(r.zx, { + title: "Termos e Condições", + onClick: () => metapress.dialogs.show(this.termsAndConditions) + }), t) + } + getPluginSection(e) { + if (e.length <= 0) return; + let t = []; + for (let a of e) { + if ("help" == a.section || "profile" == a.section) continue; + const e = this.getUIType(a); + e && t.push(e) + } + return t.length <= 0 ? void 0 : s.createElement(i.Lm, { + title: "Plugins", + openByDefault: !0 + }, t) + } + onVersionClick() { + this._lastVersionClick && Date.now() - this._lastVersionClick < 500 ? this._versionClickCount++ : this._versionClickCount = 1, this._lastVersionClick = Date.now(), this._versionClickCount >= 4 && metapress.debug.showDebugMenu() + } + async updateImage() { + let e = ""; + try { + let t = (await m({ + multiple: !1, + accept: "image/*" + }))[0]; + if (!t) return; + let a = "Uploading $FILENAME..."; + a = a.replaceAll("$FILENAME", t.name), e = metapress.menubar.toasts.show({ + sticky: !0, + text: a + }), this.update(t) + } catch (e) { + l.warn(`[MetaPress] Unable to process file: ${e.message}`), metapress.menubar.toasts.show({ + text: `Failed: ${e.message}` + }) + } + metapress.menubar.toasts.close(e) + } + update(e) { + var t = new FileReader; + let a = null; + t.onloadend = e => { + var s = new Image; + s.src = t.result, s.onload = e => { + a = this.resize(s), metapress.profile.set("profile_image_src", a), this.setState({ + profile_image_src: a + }), "default" == metapress.avatars.configurationID && metapress.avatars.setConfigurationByID("default", !0) + } + }, t.readAsDataURL(e) + } + resize(e) { + let t = document.createElement("canvas"), + a = e.width, + s = e.height; + return a > s ? a > 300 && (s = Math.round(s *= 300 / a), a = 300) : s > 300 && (a = Math.round(a *= 300 / s), s = 300), t.width = a, t.height = s, t.getContext("2d").drawImage(e, 0, 0, a, s), t.toDataURL("image/jpeg", .7) + } + removeImage() { + metapress.profile.set("profile_image_src", ""), this.setState({ + profile_image_src: "" + }), "default" == metapress.avatars.configurationID && metapress.avatars.setConfigurationByID("default", !0) + } + } + const m = () => new Promise((e => { + const t = (() => { + const e = document.createElement("input"); + return e.type = "file", e.id = "file", e.accept = "image/*", e + })(); + document.body.appendChild(t), t.addEventListener("change", (() => { + e(t.files || null), document.body.removeChild(t) + })), t.click() + })), + d = e => { + let [t, a] = s.useState(metapress.profile.get(e.field) || ""); + return s.createElement(r.nv, { + name: e.name, + tooltip: e.tooltip, + placeholder: e.placeholder, + value: t, + onChange: t => { + metapress.profile.set(e.field, t.target.value), a(t.target.value), e.onValue?.(t.target.value) + } + }) + }; + class p { + id = "core.ui.settings"; + name = "Settings Panel"; + description = "This displays a settings menu for users to access."; + version = "1.0.0"; + requires = ["menubar"]; + provides = []; + onLoad() { + metapress.entities.add({ + id: "core.ui.settings.menu", + type: "menubar.item", + name: "Configurações", + description: "Can be used to change user name and avatar.", + is_panel: !0, + order: 100, + icon: a(65077), + onClick: () => this.toggleMenu() + }) + } + showMenu() { + metapress.menubar.openReactPanel("core.ui.settings.menu", (() => s.createElement(c, { + plugin: this + }))) + } + hideMenu() { + "core.ui.settings.menu" == metapress.menubar.openPanelID && metapress.menubar.closePanel() + } + toggleMenu() { + "core.ui.settings.menu" == metapress.menubar.openPanelID ? this.hideMenu() : this.showMenu() + } + } + }, + 40313: (e, t, a) => { + e.exports = a.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, a) => { + e.exports = a.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 83203: (e, t, a) => { + e.exports = a.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, a) => { + e.exports = a.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, a) => { + e.exports = a.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 12108: (e, t, a) => { + e.exports = a.p + "mp-core/back.6840705508068eb1b067.svg" + }, + 78226: (e, t, a) => { + e.exports = a.p + "mp-core/icon-good.332ed59028d6225e5a04.svg" + }, + 65077: (e, t, a) => { + e.exports = a.p + "mp-core/gear.8cb3aa11048e7d496917.svg" + }, + 95186: (e, t, a) => { + e.exports = a.p + "mp-core/avatar-default.18ad46433ff3942e17b8.svg" + }, + 46314: (e, t, a) => { + e.exports = a.p + "mp-core/field-avatar.21c2f9b9026f7b14f62a.svg" + }, + 86418: (e, t, a) => { + e.exports = a.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 4147: e => { + e.exports = { + i8: "VerseWeb 1.0 BETA" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1003.07365fe51405362eed1f.bundle.js b/mp-core/1003.07365fe51405362eed1f.bundle.js new file mode 100644 index 0000000..55bf47e --- /dev/null +++ b/mp-core/1003.07365fe51405362eed1f.bundle.js @@ -0,0 +1,258 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1003], { + 91003: (e, t, i) => { + i.r(t), i.d(t, { + default: () => l + }); + var s = i(69584), + r = i(48830), + a = i(62977), + n = i(84362), + o = i(25108); + class l { + id = "core.misc.tools.optimize_glb_imports"; + name = "Optimize GLB Imports"; + description = "Allows the user to optimize their .glb files for better performance."; + requires = ["entities"]; + texture = 2048; + strength = 0; + error = 8e-4; + async optimizeGLTF(e, t, i, l) { + this.texture = i, this.strength = t, this.error = l, this.requireExtensionsSet = new Set; + const c = { + KHR_materials_ior: n.S8, + KHR_materials_emissive_strength: n.SE, + KHR_draco_mesh_compression: n.r7, + EXT_mesh_gpu_instancing: n.Fb, + KHR_lights_punctual: n.bO, + KHR_texture_transform: n.c7, + KHR_texture_basisu: n.S3, + KHR_mesh_quantization: n.to, + KHR_materials_unlit: n.oN, + KHR_materials_clearcoat: n.X4, + KHR_materials_sheen: n.V$, + KHR_materials_specular: n.UW, + KHR_materials_transmission: n.y1, + KHR_materials_volume: n.Wh, + KHR_materials_anisotropy: n.HN, + KHR_materials_pbrSpecularGlossiness: n.z4, + KHR_materials_variants: n.vC, + KHR_xmp_json_ld: n.FC, + KHR_materials_iridescence: n.Gq, + EXT_texture_webp: n.oh, + EXT_texture_avif: n.t4, + EXT_meshopt_compression: n.XD + }, + g = new m(s.Yd.Verbosity.WARN); + let p = (new s.AH).setLogger(g); + try { + let i, s = await this.readFileAsUint8Array(e); + try { + await p.readBinary(s) + } catch (l) { + if (o.log("Failed to read binary: ", l), l.message.includes("Missing required extension")) { + const e = g.extractExtensionName(l.message); + e && g.missingExtensions.add(e) + }({ + io: p, + document: i + } = await this.SetupMissingExtensions(g, c, p, i, s)) + } + i = await p.readBinary(s), ({ + io: p, + document: i + } = await this.SetupMissingExtensions(g, c, p, i, s)); + try { + await i.transform((0, r.LV)(), (0, r.Qs)()) + } catch (e) { + o.log("Error during transformation, trying fallback approach:", e), await i.transform((0, r.Qs)()) + } + try { + await this.processTextures(i, this.texture) + } catch (l) { + o.log("Failed to process textures: ", l) + } + await i.transform((0, r.xH)(), (0, r.v_)(), (0, r.sr)(), (0, r.uC)({ + tolerance: 5e-7 + }), (0, r.og)({ + simplifier: a.BC, + ratio: t, + error: l + }), (0, r.VJ)()); + const n = await p.writeBinary(i), + m = new Blob([n], { + type: "model/gltf-binary" + }); + return new File([m], e.name, { + type: m.type, + lastModified: (new Date).getTime() + }) + } catch (l) { + o.error("Failed to optimize: ", l, "Returning original file") + } + } + async SetupMissingExtensions(e, t, i, r, a) { + const n = e.getMissingExtensions(), + o = []; + return n.forEach((e => { + t[e] && o.push(t[e]) + })), o.length > 0 && (i = (new s.AH).setLogger(e).registerExtensions(o), r = await i.readBinary(a)), { + io: i, + document: r + } + } + backfaceCulling(e) { + return t => { + for (const i of t.getRoot().listMaterials()) i.setDoubleSided(!e.cull) + } + } + readFileAsUint8Array(e) { + return new Promise(((t, i) => { + const s = new FileReader; + s.onload = () => { + const e = s.result, + i = new Uint8Array(e); + t(i) + }, s.onerror = i, s.readAsArrayBuffer(e) + })) + } + async processTextures(e, t) { + const i = e.getRoot(); + for (const e of i.listTextures()) { + let i = e.getImage(); + if (i) try { + let s = new Blob([i], { + type: e.getMimeType() + }), + r = await this.resizeImageToOriginalFormat(s, t, t, e.getMimeType()), + a = await this.convertAndResizeImage(s, t, t), + n = await this.getSmallestBlob([s, r, a]); + if (n === s) continue; + const o = await this.blobToUint8Array(n); + e.setImage(o), n === a && e.setMimeType("image/webp") + } catch (e) { + o.error("Failed to convert and resize image: ", e) + } + } + } + async getSmallestBlob(e) { + let t = 1 / 0, + i = null; + for (const s of e) { + const e = s.size; + e >= t || (t = e, i = s) + } + return i + } + async blobToUint8Array(e) { + const t = await e.arrayBuffer(); + return new Uint8Array(t) + } + async convertAndResizeImage(e, t, i) { + return new Promise(((s, r) => { + const a = new Image; + a.onload = () => { + const e = document.createElement("canvas"); + e.width = t, e.height = i, e.getContext("2d").drawImage(a, 0, 0, t, i), e.toBlob((e => s(e)), "image/webp", 1) + }, a.onerror = r, a.src = URL.createObjectURL(new Blob([e])) + })) + } + async resizeImageToOriginalFormat(e, t, i, s) { + return new Promise(((r, a) => { + const n = new Image; + n.onload = () => { + const e = document.createElement("canvas"); + e.width = t, e.height = i, e.getContext("2d").drawImage(n, 0, 0, t, i), e.toBlob((e => r(e)), s, 1) + }, n.onerror = a, n.src = URL.createObjectURL(new Blob([e])) + })) + } + $upload_getFileOptimizationStages = () => [{ + id: "optimize_glb_imports.optimize.glb", + name: "Optimize GLB Model", + filter: e => e.name.toLowerCase().endsWith(".glb"), + settings: [{ + type: "header", + id: "optimize.glb.header", + name: "3D Model Optimization" + }, { + type: "description", + id: "optimize.glb.decription", + name: "Optimize your 3D model for better performance." + }, { + type: "select", + id: "optimize.glb.texture", + name: "Texture Size", + placeholder: "2048", + values: [512, 1024, 2048, 4096], + labels: ["small(512)", "Medium(1024)", "Big(2048)", "Very Big(4096)"], + value: 2048, + help: "Select the maximum size of the textures in the model." + }, { + type: "select", + id: "optimize.glb.strength", + name: "Strength", + placeholder: "0.0", + values: [0, 5e-9, 5e-5, .005], + labels: ["None", "Low", "Medium", "High"], + value: 0, + help: "Select the strength of mesh the optimization" + }], + execute: async (e, t) => { + let i = e.settings.filter((e => "optimize.glb.texture" === e.id))[0].value, + s = e.settings.filter((e => "optimize.glb.strength" === e.id))[0].value; + return await this.optimizeGLTF(t, 0, i, s) + } + }, { + id: "optimize_glb_imports.optimize.img", + name: "Optimize Image", + filter: e => e.name.toLowerCase().endsWith(".png") || e.name.toLowerCase().endsWith(".jpg") || e.name.toLowerCase().endsWith(".jpeg") || e.name.toLowerCase().endsWith(".webp"), + settings: [{ + type: "header", + id: "optimize.img.header", + name: "Image Optimization" + }, { + type: "description", + id: "optimize.img.decription", + name: "Optimize your image for better performance." + }, { + type: "select", + id: "optimize.img.size", + name: "Image Size", + placeholder: "2048", + values: [512, 1024, 2048, 4096], + labels: ["small(512)", "Medium(1024)", "Big(2048)", "Very Big(4096)"], + value: 2048, + help: "Select the maximum size of the image." + }], + execute: async (e, t) => { + let i = e.settings.filter((e => "optimize.img.size" === e.id))[0].value, + s = t.type, + r = await this.resizeImageToOriginalFormat(t, i, i, s); + return o.log("Image", r, t), new File([r], t.name, { + type: r.type, + lastModified: (new Date).getTime() + }) + } + }] + } + class m extends s.Yd { + constructor(e) { + super(e), this.missingExtensions = new Set + } + warn(e) { + if (!e.includes("Missing optional extension")) return; + const t = this.extractExtensionName(e); + this.missingExtensions.add(t) + } + extractExtensionName(e) { + const t = e.match(/"([^"]+)"/); + return t ? t[1] : null + } + getMissingExtensions() { + return this.missingExtensions + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1023.8d8a93197f60c9a53862.bundle.js b/mp-core/1023.8d8a93197f60c9a53862.bundle.js new file mode 100644 index 0000000..d511e67 --- /dev/null +++ b/mp-core/1023.8d8a93197f60c9a53862.bundle.js @@ -0,0 +1,742 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1023], { + 46839: (e, t, i) => { + "use strict"; + i.d(t, { + Z: () => n + }); + const n = { + appVersion: i(4147).i8, + colors: { + darkGrey: "#272727", + black: "#1a1a1a" + } + } + }, + 66729: (e, t, i) => { + "use strict"; + i.d(t, { + u: () => s + }); + var n = i(46839); + class s { + constructor() { + this.div = document.createElement("div"), this.div.id = "metapress-menubar-tooltip-container", this.div.style.cssText = "position: absolute; top: 100px; left: 100px; display: none; z-index: 100; ", metapress.contentDiv.appendChild(this.div), this._x = 100, this._y = 100, this.div.innerHTML = `\n \n \x3c!-- Background + text --\x3e\n \n My text here\n \n\n \x3c!-- Chevron --\x3e\n \n \n \n \n ` + } + get x() { + return this._x + } + get y() { + return this._y + } + show(e, t, i) { + this._x = e, this._y = t, this.div.style.cssText += `display: block; left: ${this.x+10}px; top: ${this.y-22}px; `, this.div.querySelector("#metapress-menubar-tooltip-text").innerText = i + } + hide() { + this.div.style.cssText += "display: none; " + } + } + }, + 66579: (e, t, i) => { + "use strict"; + i.r(t), i.d(t, { + default: () => p + }); + var n = i(46839), + s = i(42321), + o = i(28721), + a = i(91036), + r = i.n(a); + class l { + activeToasts = []; + constructor() { + let e = document.createElement("style"); + e.innerHTML = `\n\n /* Menubar toast container */\n #metapress-menubar-toast-container {\n\n /* Layout */\n position: absolute; \n top: calc(50% - 22px);\n left: 84px;\n max-width: min(calc(100% - 84px - 20px), 400px);\n z-index: 10;\n\n }\n\n /* Menubar toast */\n #metapress-menubar-toast-container > .menubar-toast {\n\n /* Layout */\n display: block;\n min-width: 80px;\n min-height: 20px;\n max-width: 100%;\n max-height: 40%;\n margin-bottom: 20px;\n box-sizing: border-box;\n\n /* Appearance */\n background-color: ${n.Z.colors.darkGrey};\n border-radius: 10px;\n box-shadow: 0 0.4rem 0 0 ${n.Z.colors.black}, 0 0 10px 0px rgba(0, 0, 0, 0.6);\n overflow: hidden;\n font-size: 13px;\n color: white;\n padding: 13px 20px;\n line-height: 1.5;\n\n }\n\n /* Menubar toast when the panel is open */\n #metapress-menubar-toast-container.panel-open {\n\n /* Layout */\n width: 400px;\n max-width: 400px;\n top: calc(80% + 20px);\n\n }\n\n `, metapress.contentDiv.appendChild(e), this.div = document.createElement("div"), this.div.id = "metapress-menubar-toast-container", metapress.contentDiv.appendChild(this.div) + } + show(e) { + e.id && this.close(e.id); + let t = {}; + return t.id = e.id || (0, o.Z)(), t.sticky = e.sticky, t.div = document.createElement("div"), t.div.className = "menubar-toast", t.div.innerHTML = r()(e.text), this.div.appendChild(t.div), e.sticky || (t.timeout = setTimeout((() => { + this.close(t.id) + }), e.duration || 1e4)), this.activeToasts.push(t), t.id + } + close(e) { + if (!e) return; + let t = this.activeToasts.find((t => t.id == e)); + t && (t.div?.parentNode?.removeChild(t.div), this.activeToasts = this.activeToasts.filter((e => e != t))) + } + hide(e) { + this.close(e) + } + get menubarPanelOpen() { + return this._menubarPanelOpen + } + set menubarPanelOpen(e) { + this._menubarPanelOpen = e, this.div.className = e ? "panel-open" : "" + } + } + var h = i(66729), + d = i(67294), + c = i(20745); + class p { + id = "core.ui.menubar"; + name = "Menubar"; + description = "Provides the menubar on the side of the screen."; + version = "1.0.0"; + requires = ["entities", "audio"]; + provides = ["menubar", "render:menubar.item"]; + toasts = null; + tooltip = null; + currentPanel = null; + hoveringItem = null; + onLoad() { + let e = document.createElement("style"); + e.innerHTML = `\n\n /* Menubar panel */\n #metapress-menubar-panel {\n\n /* Layout */\n position: absolute; \n top: 20%;\n left: 84px;\n width: calc(100% - 84px - 20px);\n max-width: 400px;\n height: 60%;\n box-sizing: border-box;\n z-index: 10;\n\n /* Appearance */\n background-color: #00233f;\n border-radius: 10px;\n box-shadow: 0 0.4rem 0 0 ${n.Z.colors.black}, 0 0 10px 0px rgba(0, 0, 0, 0.6);\n overflow: hidden;\n color: white;\n\n }\n\n `, metapress.contentDiv.appendChild(e), this.toasts = new l, this.tooltip = new h.u, u.show(this) + } + createRenderer(e) { + return new m(this) + } + onMenuItemClicked(e) { + if ("suspended" == metapress.audio.context.state && metapress.audio.context.resume(), e.onClick) { + if (this.windowID == e.id) return this.closeWindow(); + "string" == typeof e.onClick ? metapress.plugins.sendEvent(e.onClick, e) : "function" == typeof e.onClick && e.onClick(e), this.tooltip.hide() + } + } + onMenuItemPointerOver(e, t) { + if (!e.name) return; + this.hoveringItem = e; + let i = t.getBoundingClientRect(), + n = metapress.contentDiv.getBoundingClientRect(), + s = i.x + i.width - n.x, + o = i.y + i.height / 2 - n.y; + this.tooltip.show(s, o, e.name) + } + onMenuItemPointerOut(e, t) { + this.hoveringItem = null, this.tooltip.hide() + } + get openPanelID() { + return this.currentPanel?.id + } + fade(e) { + metapress.plugins.sendEvent("menubar_fadeDisplay", { + type: e + }) + } + closePanel(e) { + this.currentPanel && (this.currentPanel.containerDiv.parentNode?.removeChild(this.currentPanel.containerDiv), this.currentPanel.onClose?.(this.currentPanel, this.currentPanel.containerDiv), this.currentPanel = null, e || (metapress.plugins.sendEvent("menubar_onPanelChange", null), window.postMessage({ + type: "metapress.menubar.onPanelChange" + }, "*")), this.toasts.menubarPanelOpen = !1, e || metapress.renderer.glrenderer.domElement.focus(), !e && this._wasPointerLocked && (this._wasPointerLocked = !1, metapress.renderer.glrenderer.domElement.requestPointerLock())) + } + openPanel(e) { + e.id = e.id || THREE.MathUtils.generateUUID(), e.id != this.currentPanel?.id && (this.currentPanel || (this._wasPointerLocked = !!document.pointerLockElement, this._wasPointerLocked && document.exitPointerLock()), this.closePanel(!0), this.currentPanel = e, metapress.plugins.sendEvent("menubar_onPanelChange", this.currentPanel.id), window.postMessage({ + type: "metapress.menubar.onPanelChange" + }, "*"), e.containerDiv = document.createElement("div"), e.containerDiv.id = "metapress-menubar-panel", metapress.contentDiv.appendChild(e.containerDiv), e.onOpen?.(e, e.containerDiv), this.toasts.menubarPanelOpen = !0, metapress.plugins.sendEvent("menubar_didOpenPanel", e)) + } + openReactPanel(e, t, i) { + this.openPanel({ + id: e, + onOpen: (e, n) => { + e.root = c.createRoot(n), e.root.render(d.createElement(t, i)) + }, + onClose: (e, t) => { + e.root.unmount() + } + }) + } + toggleReactPanel(e, t, i) { + this.openPanelID == e ? this.closePanel() : this.openReactPanel(e, t, i) + } + openAvatarSelectionPanel(e, t, i) { + return d.createElement(s.Z, { + selectedId: e, + onSelectAvatar: t, + setPage: i + }) + } + $onUnsavedFieldsChanged = () => { + metapress.loader && metapress.loader.finishedLoading && metapress.editor && window.postMessage({ + type: "metapress.menubar.render" + }, "*") + }; + $ai_getKnowledgeBaseEntries = () => [{ + id: "core.ui.menubar:clickItem", + type: "action", + name: "Click sidebar button", + tags: "Click sidebar, Open sidebar, Open, Click", + content: `Triggers a click on a button in the sidebar, opening the corresponding panel.\n Example: "core.ui.menubar:clickItem" with value "core.ui.settings.menu" will open the settings panel.\n Existing buttons are: ${metapress.entities.all.filter((e=>"menubar.item"==e.type)).map((e=>e.id)).join(", ")}.\n `, + action: e => { + let t = metapress.entities.get(e.value); + if (!t) throw new Error(`Item '${e.value}' not found`); + if ("menubar.item" != t.type) throw new Error(`Item '${e.value}' is not a menubar item`); + this.onMenuItemClicked(t) + } + }] + } + class m { + constructor(e) { + this.plugin = e + } + onLoad() { + metapress.plugins.sendEvent("menubar_iconsUpdated"), window.postMessage({ + type: "metapress.menubar.updateIcons" + }, "*") + } + onEntityUpdated() { + if (metapress.plugins.sendEvent("menubar_iconsUpdated"), window.postMessage({ + type: "metapress.menubar.updateIcons" + }, "*"), "core.audio.users:menubutton" === this.plugin.hoveringItem?.id) { + const e = metapress.entities.get("core.audio.users:menubutton").name; + this.plugin.tooltip.show(this.plugin.tooltip.x, this.plugin.tooltip.y, e) + } + } + } + class u extends d.PureComponent { + static div = null; + static root = null; + static show(e) { + this.div || (this.div = document.createElement("div"), this.div.setAttribute("id", "metapress-menubar-container"), document.getElementById("metapress-content").appendChild(this.div), this.root = c.createRoot(this.div), this.root.render(d.createElement(u, { + plugin: e + }))) + } + static hide() { + this.div && (this.div.parentElement.removeChild(this.div), this.div = null, this.root.unmount(), this.root = null) + } + state = { + height: 100, + top: "50%", + arrowTop: "50%", + isPanelOpen: !1, + isHoldingShortcut: !1, + hasUnsaved: !1, + leftPos: 20, + addScrollButtons: !1, + isScrollingUp: !1, + isScrollingDown: !0, + screenHeight: window.innerHeight + }; + menubarRef = null; + menuItemPrefix = "menu-item-"; + itemSize = 44; + items = []; + _lastHeight = 100; + _lastTop = "50%"; + _prevPanelID = null; + _keyCache = {}; + get isShowing() { + return 20 === this.state.leftPos + } + componentDidMount() { + window.addEventListener("message", this.onMessage), window.addEventListener("resize", this.handleResize), window.addEventListener("keyup", this.onKeyUp), window.addEventListener("keydown", this.onKeyDown), window.addEventListener("blur", this.cancel), document.addEventListener("visibilitychange", this.cancel), document.addEventListener("pointerlockchange", this.cancel), metapress.plugins.addEventListener("menubar_fadeDisplay", this.fadeDisplay), this.updateIcons() + } + componentWillUnmount() { + window.removeEventListener("message", this.onMessage), window.removeEventListener("keyup", this.onKeyUp), window.removeEventListener("keydown", this.onKeyDown), window.removeEventListener("blur", this.cancel), window.removeEventListener("resize", this.handleResize), document.removeEventListener("visibilitychange", this.cancel), document.removeEventListener("pointerlockchange", this.cancel), metapress.plugins.removeEventListener("menubar_fadeDisplay", this.fadeDisplay) + } + fadeDisplay = e => { + if (!e) return; + const { + type: t + } = e; + if ("in" !== t) + if ("out" !== t); + else { + if (!this.isShowing) return; + this.setState({ + leftPos: -55 + }) + } + else { + if (this.isShowing) return; + this.setState({ + leftPos: 20 + }) + } + }; + handleResize = () => { + window.innerHeight !== this.state.screenHeight && (this.setState({ + screenHeight: window.innerHeight + }), setTimeout((() => { + this.updateIcons() + }), 100)) + }; + updateIcons() { + let e = metapress.entities.all.filter((e => "menubar.item" == e.type)); + e.sort(((e, t) => (e.order || 0) - (t.order || 0))); + let t = this.itemSize * e.length, + i = e.length; + t > this.state.screenHeight - 200 ? (i = this.itemsCount(), t = i * this.itemSize > this.state.screenHeight - 200 ? this.state.screenHeight - 200 : i * this.itemSize, this.setState({ + addScrollButtons: i != e.length + })) : this.setState({ + addScrollButtons: !1 + }); + const n = `calc(50% - ${t/2}px)`; + this.items = e.length > 0 ? [...e] : []; + for (let e = 0; e < this.items.length; e++) this.items[e].id || (this.items[e].id = THREE.MathUtils.generateUUID()); + t !== this._lastHeight || n !== this._lastTop ? (t !== this._lastHeight && (this._lastHeight = t), n !== this._lastTop && (this._lastTop = n), this.setState({ + height: t, + top: n + }), i != e.length && this.reshuffleMenuItems()) : this.forceUpdate() + } + onMessage = e => { + if (!e?.data?.type) return; + const { + type: t + } = e.data; + "metapress.menubar.updateIcons" !== t ? "metapress.menubar.onPanelChange" !== t ? "metapress.menubar.render" !== t || setTimeout((() => this.setState({ + hasUnsaved: metapress.editor.hasUnsavedChanges + })), 200) : this.onItemPanelChange() : this.updateIcons() + }; + cancel = e => { + this.setState({ + isHoldingShortcut: !1 + }) + }; + onKeyUp = e => { + "Control" !== e.key && "Meta" !== e.key ? e.code && e.code.startsWith("Digit") && (this._keyCache[e.code] = !1) : this.setState({ + isHoldingShortcut: !1 + }) + }; + onKeyDown = e => { + if (!metapress.isOpen || "INPUT" === document.activeElement.tagName || "TEXTAREA" === document.activeElement.tagName) return; + (e.ctrlKey || e.metaKey || "Control" === e.key || "Meta" === e.key) && this.setState({ + isHoldingShortcut: !0 + }); + const t = e.code?.startsWith?.("Digit") ? parseInt(e.code.slice(5)) : null; + null != t && t > 0 && t <= this.items.length && !this._keyCache[e.code] && (this._keyCache[e.code] = !0, this.onItemClick(this.items[t - 1])) + }; + onItemPanelChange() { + if (this._prevPanelID === this.props.plugin.openPanelID) return void this.setState({ + isPanelOpen: !!this.props.plugin.openPanelID + }); + this._prevPanelID = this.props.plugin.openPanelID; + const e = [...this.menubarRef.children].findIndex((e => e.id === this.menuItemPrefix + this._prevPanelID)); + e < 0 ? this.setState({ + isPanelOpen: !1 + }) : this.setState({ + arrowTop: `calc(50% - ${this.itemSize*this.items.length/2}px + ${e*this.itemSize+11}px)`, + isPanelOpen: !!this._prevPanelID + }) + } + onItemClick = e => { + this.props.plugin.onMenuItemClicked(e) + }; + onItemHoverEnter = (e, t) => { + this.props.plugin.onMenuItemPointerOver(e, t) + }; + onItemHoverLeave = (e, t) => { + this.props.plugin.onMenuItemPointerOut(e, t) + }; + itemsCount = () => Math.floor((this.state.screenHeight - 200) / this.itemSize); + onClickScrollerButton = (e, t) => { + const i = this.itemsCount() - 1; + if ("up" === e) { + const e = this.items.findIndex((e => e === t[0])); + this.itemToDisplay = e <= i ? this.items.slice(0, i) : this.items.slice(e - (i - 1), e) + } else { + const e = this.items.findIndex((e => e === t[t.length - 1])), + n = this.items.length - (e + 1); + if (n <= i) + if (n === i) this.itemToDisplay = this.items.slice(-n); + else { + const t = e - (i - n) + 1; + this.itemToDisplay = this.items.slice(t) + } + else this.itemToDisplay = this.items.slice(e + 1, e + i) + } + this.checkScrollBtnState(), this.forceUpdate() + }; + checkScrollBtnState = () => { + const e = this.items.findIndex((e => e === this.itemToDisplay[0])), + t = this.items.findIndex((e => e === this.itemToDisplay[this.itemToDisplay.length - 1])); + 0 === e && t === this.items.length - 1 ? this.setState({ + isScrollingUp: !1, + isScrollingDown: !1 + }) : 0 === e ? this.setState({ + isScrollingUp: !1, + isScrollingDown: !0 + }) : t === this.items.length - 1 ? this.setState({ + isScrollingDown: !1, + isScrollingUp: !0 + }) : this.setState({ + isScrollingDown: !0, + isScrollingUp: !0 + }) + }; + reshuffleMenuItems = () => { + if (this.state.addScrollButtons) { + const e = this.itemsCount() - 1; + if (this.state.isScrollingDown && !this.state.isScrollingUp) this.itemToDisplay = this.items.slice(0, e); + else if (this.state.isScrollingUp && !this.state.isScrollingDown) this.itemToDisplay = this.items.slice(-e); + else { + if (0 === this.itemToDisplay.length || 1 === e) return this.itemToDisplay = this.items.slice(0, e), void this.checkScrollBtnState(); + const t = this.items.findIndex((e => e === this.itemToDisplay[0])); + if (t + e >= this.items.length - 1) this.itemToDisplay = this.items.slice(-e); + else { + const i = t + (e - 1); + this.itemToDisplay = this.items.slice(t, i) + } + } + this.checkScrollBtnState() + } + }; + render() { + if (!this.itemToDisplay && this.state.addScrollButtons) { + const e = this.itemsCount() - 1; + this.itemToDisplay = this.items.slice(0, e) + } + return d.createElement(d.Fragment, null, d.createElement("div", { + ref: e => this.menubarRef = e, + id: "metapress-menubar", + style: { + display: "flex", + flexDirection: "column", + position: "absolute", + width: this.itemSize, + height: this.state.height, + top: this.state.top, + left: this.state.leftPos, + backgroundColor: "#00233f", + borderRadius: 10, + boxShadow: `0 0.4rem 0 0 ${n.Z.colors.black}, 0 0 10px 0px rgba(0, 0, 0, 0.6)`, + cursor: "pointer", + overflow: "hidden", + transition: "left 0.35s ease", + zIndex: 10 + } + }, this.state.addScrollButtons ? d.createElement(d.Fragment, null, this.state.isScrollingUp ? d.createElement(g, { + key: "up-btn", + id: "up-btn", + index: 0, + item: i(55588), + size: this.itemSize, + onClick: e => this.onClickScrollerButton("up", this.itemToDisplay), + onPointerEnter: e => this.onItemHoverEnter(i(55588), e), + onPointerLeave: e => this.onItemHoverLeave(i(55588), e) + }) : null, this.itemToDisplay.map(((e, t) => d.createElement(g, { + key: e.id, + id: this.menuItemPrefix + e.id, + index: this.items.findIndex((t => t === e)) + 1, + item: e, + size: this.itemSize, + showShortcut: this.state.isHoldingShortcut, + showUnsavedIcon: "core.ui.editor.menu" === e.id && this.state.hasUnsaved, + onClick: t => this.onItemClick(e), + onPointerEnter: t => this.onItemHoverEnter(e, t), + onPointerLeave: t => this.onItemHoverLeave(e, t) + }))), this.state.isScrollingDown ? d.createElement(g, { + key: "down-btn", + id: "down-btn", + index: this.itemToDisplay.length + 1, + item: i(30959), + size: this.itemSize, + onClick: e => this.onClickScrollerButton("down", this.itemToDisplay), + onPointerEnter: e => this.onItemHoverEnter(i(30959), e), + onPointerLeave: e => this.onItemHoverLeave(i(30959), e) + }) : null) : d.createElement(d.Fragment, null, this.items.map(((e, t) => d.createElement(g, { + key: e.id, + id: this.menuItemPrefix + e.id, + index: t + 1, + item: e, + size: this.itemSize, + showShortcut: this.state.isHoldingShortcut, + showUnsavedIcon: "core.ui.editor.menu" === e.id && this.state.hasUnsaved, + onClick: t => this.onItemClick(e), + onPointerEnter: t => this.onItemHoverEnter(e, t), + onPointerLeave: t => this.onItemHoverLeave(e, t) + }))))), this.state.isPanelOpen ? d.createElement("div", { + id: "metapress-menubar-arrow", + style: { + display: "flex", + position: "absolute", + top: this.state.arrowTop, + left: `${this.state.leftPos+this.itemSize}px`, + width: 0, + height: 0, + borderLeft: "10px solid #00233f", + borderRight: "10px solid transparent", + borderTop: "10px solid transparent", + borderBottom: "10px solid transparent", + transition: "all 0.2s ease" + } + }) : null) + } + } + const g = e => { + let t = d.useRef(null), + [n, s] = d.useState(!1), + [o, a] = d.useState(0), + [r, l] = d.useState(0); + return d.createElement("div", { + ref: t, + id: e.id, + onClick: e.onClick, + onPointerEnter: i => (s(!0), a(-4), l(-1), void e.onPointerEnter?.(t.current)), + onPointerLeave: i => (s(!1), a(0), l(0), void e.onPointerLeave?.(t.current)), + style: { + display: "flex", + position: "relative", + width: e.size, + height: e.size, + backgroundColor: n ? "rgba(255, 255, 255, 0.1)" : "transparent", + justifyContent: "center", + alignItems: "center" + } + }, e.showShortcut ? d.createElement("div", { + style: { + display: "flex", + position: "absolute", + right: 3, + fontSize: 11, + fontFamily: "monospace", + color: "#9e9e9e", + justifyContent: "center", + alignItems: "center" + } + }, e.index) : null, e.showUnsavedIcon ? d.createElement("img", { + src: i(38765), + style: { + position: "absolute", + bottom: 12, + right: 8, + width: 12, + height: 12, + zIndex: 3 + } + }) : null, e.item?.icon ? d.createElement(d.Fragment, null, d.createElement("div", { + style: { + position: "absolute", + width: 20, + height: 20, + backgroundColor: "#161616", + maskImage: `url(${e.item.icon})`, + maskPosition: "center", + maskSize: 20, + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.item.icon})`, + WebkitMaskPosition: "center", + WebkitMaskSize: 20, + WebkitMaskRepeat: "no-repeat" + } + }), d.createElement("img", { + draggable: "false", + src: e.item.icon, + style: { + position: "relative", + top: o, + left: r, + width: 20, + height: 20, + transition: "all 0.1s ease" + } + })) : d.createElement("img", { + draggable: "false", + src: e.item, + style: { + position: "relative", + top: o, + left: r, + width: 20, + height: 20, + transition: "all 0.1s ease" + } + })) + } + }, + 42321: (e, t, i) => { + "use strict"; + i.d(t, { + Z: () => o + }); + var n = i(67294), + s = i(32589); + class o extends n.PureComponent { + render() { + let e = metapress.plugins.callAll("getAvatarConfigurations").flat().filter((e => !!e)); + e.sort(((e, t) => null != e.order ? null != t.order ? e.order - t.order : -1 : null != t.order ? null != e.order ? e.order - t.order : 1 : (e.avatar_name || "").localeCompare(t.avatar_name || ""))); + let t = "-"; + if (this.props.selectedId && "string" == typeof this.props.selectedId && this.props.selectedId.length > 0) t = this.props.selectedId; + else { + let e = metapress.profile.get("avatarConfig"); + t = e?.avatar_id || "-" + } + return n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%" + } + }, n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, n.createElement("img", { + draggable: "false", + src: i(12108), + onClick: e => this.props.setPage("main"), + style: { + width: 22, + height: 22, + margin: "0 20px", + cursor: "pointer" + } + }), n.createElement("div", { + style: { + fontSize: 15, + marginRight: 20, + flex: "1 1 1px" + } + }, "Select avatar")), n.createElement("div", { + style: { + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + } + }, n.createElement("div", { + style: { + display: "flex", + gap: "14px 8px", + flexWrap: "wrap", + marginTop: 14, + alignItems: "center", + justifyContent: "space-evenly" + } + }, e.map((e => n.createElement(a, { + key: e.avatar_id, + avatar: e, + selected: e.avatar_id === t, + onClick: t => this.props.onSelectAvatar ? this.props.onSelectAvatar(e) : this.onSelectAvatar(e) + })))), n.createElement(s.zx, { + title: "Voltar", + onClick: e => this.props.setPage("main") + }))) + } + async onSelectAvatar(e) { + metapress.avatars.setConfigurationByID(e.avatar_id), metapress.menubar.closePanel() + } + } + const a = e => { + let [t, s] = n.useState(!1), [o, a] = n.useState(!1), r = n.useRef(null); + const l = e.avatar.avatar_name || e.avatar.avatar_id || "(no name)", + h = i(78226), + d = e.avatar.avatar_image; + return n.useEffect((() => { + a(r.current.offsetWidth < r.current.scrollWidth) + }), []), n.createElement("div", { + onMouseEnter: e => s(!0), + onMouseLeave: e => s(!1), + onClick: e.onClick, + style: { + display: "flex", + flexDirection: "column", + position: "relative", + transform: t ? "scale(1.1)" : null, + transition: "all 0.2s ease", + alignItems: "center", + cursor: "pointer" + } + }, e.selected ? n.createElement("div", { + style: { + position: "absolute", + top: 4, + right: 6, + width: 18, + height: 18, + backgroundColor: "#00bd28", + mask: `url(${h}) center / contain no-repeat`, + WebkitMask: `url(${h}) center / contain no-repeat` + } + }) : null, null != d ? n.createElement("img", { + draggable: "false", + src: e.avatar.avatar_image, + style: { + width: 110, + height: 80, + borderRadius: "6px 6px 0 0" + } + }) : n.createElement("div", { + style: { + display: "flex", + width: 110, + height: 80, + backgroundColor: "rgba(36, 33, 32, 0.4)", + borderRadius: "6px 6px 0 0", + justifyContent: "center", + alignItems: "center" + } + }, n.createElement("img", { + draggable: "false", + src: i(95186), + style: { + width: "90%", + height: "90%" + } + })), n.createElement("div", { + ref: r, + title: o ? l : null, + style: { + display: "block", + width: 110, + height: 23, + padding: "0 5px", + color: "white", + backgroundColor: "#202020", + fontSize: 13, + borderRadius: "0 0 6px 6px", + overflow: "hidden", + whiteSpace: "nowrap", + textOverflow: "ellipsis", + textAlign: "center", + boxSizing: "border-box" + } + }, l)) + } + }, + 12108: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/back.6840705508068eb1b067.svg" + }, + 78226: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/icon-good.332ed59028d6225e5a04.svg" + }, + 38765: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/icon-warning.45f9e38b9fdce56ced4d.svg" + }, + 30959: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/arrow-down.94ccc6fa3c7667cb75f6.png" + }, + 55588: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/arrow-up.2544457d03931fe75201.png" + }, + 95186: (e, t, i) => { + "use strict"; + e.exports = i.p + "mp-core/avatar-default.18ad46433ff3942e17b8.svg" + }, + 22868: () => {}, + 14777: () => {}, + 99830: () => {}, + 70209: () => {}, + 87414: () => {}, + 4147: e => { + "use strict"; + e.exports = { + i8: "VerseWeb 1.0 BETA" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js b/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js new file mode 100644 index 0000000..c6f5cfe --- /dev/null +++ b/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js @@ -0,0 +1,6120 @@ +/*! For license information please see 1036.ffda2f3fca1d099fb52e.bundle.js.LICENSE.txt */ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1036], { + 9996: e => { + "use strict"; + var t = function(e) { + return function(e) { + return !!e && "object" == typeof e + }(e) && ! function(e) { + var t = Object.prototype.toString.call(e); + return "[object RegExp]" === t || "[object Date]" === t || function(e) { + return e.$$typeof === r + }(e) + }(e) + }, + r = "function" == typeof Symbol && Symbol.for ? Symbol.for("react.element") : 60103; + + function n(e, t) { + return !1 !== t.clone && t.isMergeableObject(e) ? a((r = e, Array.isArray(r) ? [] : {}), e, t) : e; + var r + } + + function i(e, t, r) { + return e.concat(t).map((function(e) { + return n(e, r) + })) + } + + function s(e) { + return Object.keys(e).concat(function(e) { + return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(e).filter((function(t) { + return e.propertyIsEnumerable(t) + })) : [] + }(e)) + } + + function o(e, t) { + try { + return t in e + } catch (e) { + return !1 + } + } + + function a(e, r, l) { + (l = l || {}).arrayMerge = l.arrayMerge || i, l.isMergeableObject = l.isMergeableObject || t, l.cloneUnlessOtherwiseSpecified = n; + var c = Array.isArray(r); + return c === Array.isArray(e) ? c ? l.arrayMerge(e, r, l) : function(e, t, r) { + var i = {}; + return r.isMergeableObject(e) && s(e).forEach((function(t) { + i[t] = n(e[t], r) + })), s(t).forEach((function(s) { + (function(e, t) { + return o(e, t) && !(Object.hasOwnProperty.call(e, t) && Object.propertyIsEnumerable.call(e, t)) + })(e, s) || (o(e, s) && r.isMergeableObject(t[s]) ? i[s] = function(e, t) { + if (!t.customMerge) return a; + var r = t.customMerge(e); + return "function" == typeof r ? r : a + }(s, r)(e[s], t[s], r) : i[s] = n(t[s], r)) + })), i + }(e, r, l) : n(r, l) + } + a.all = function(e, t) { + if (!Array.isArray(e)) throw new Error("first argument should be an array"); + return e.reduce((function(e, r) { + return a(e, r, t) + }), {}) + }; + var l = a; + e.exports = l + }, + 99960: (e, t) => { + "use strict"; + var r; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.Doctype = t.CDATA = t.Tag = t.Style = t.Script = t.Comment = t.Directive = t.Text = t.Root = t.isTag = t.ElementType = void 0, + function(e) { + e.Root = "root", e.Text = "text", e.Directive = "directive", e.Comment = "comment", e.Script = "script", e.Style = "style", e.Tag = "tag", e.CDATA = "cdata", e.Doctype = "doctype" + }(r = t.ElementType || (t.ElementType = {})), t.isTag = function(e) { + return e.type === r.Tag || e.type === r.Script || e.type === r.Style + }, t.Root = r.Root, t.Text = r.Text, t.Directive = r.Directive, t.Comment = r.Comment, t.Script = r.Script, t.Style = r.Style, t.Tag = r.Tag, t.CDATA = r.CDATA, t.Doctype = r.Doctype + }, + 79430: function(e, t, r) { + var n, i, s = r(25108); + void 0 === (i = "function" == typeof(n = function() { + return function(e) { + function t(e) { + return " " === e || "\t" === e || "\n" === e || "\f" === e || "\r" === e + } + + function r(t) { + var r, n = t.exec(e.substring(g)); + if (n) return r = n[0], g += r.length, r + } + for (var n, i, o, a, l, c = e.length, u = /^[ \t\n\r\u000c]+/, h = /^[, \t\n\r\u000c]+/, p = /^[^ \t\n\r\u000c]+/, d = /[,]+$/, f = /^\d+$/, m = /^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/, g = 0, b = [];;) { + if (r(h), g >= c) return b; + n = r(p), i = [], "," === n.slice(-1) ? (n = n.replace(d, ""), v()) : y() + } + + function y() { + for (r(u), o = "", a = "in descriptor";;) { + if (l = e.charAt(g), "in descriptor" === a) + if (t(l)) o && (i.push(o), o = "", a = "after descriptor"); + else { + if ("," === l) return g += 1, o && i.push(o), void v(); + if ("(" === l) o += l, a = "in parens"; + else { + if ("" === l) return o && i.push(o), void v(); + o += l + } + } + else if ("in parens" === a) + if (")" === l) o += l, a = "in descriptor"; + else { + if ("" === l) return i.push(o), void v(); + o += l + } + else if ("after descriptor" === a) + if (t(l)); + else { + if ("" === l) return void v(); + a = "in descriptor", g -= 1 + } g += 1 + } + } + + function v() { + var t, r, o, a, l, c, u, h, p, d = !1, + g = {}; + for (a = 0; a < i.length; a++) c = (l = i[a])[l.length - 1], u = l.substring(0, l.length - 1), h = parseInt(u, 10), p = parseFloat(u), f.test(u) && "w" === c ? ((t || r) && (d = !0), 0 === h ? d = !0 : t = h) : m.test(u) && "x" === c ? ((t || r || o) && (d = !0), p < 0 ? d = !0 : r = p) : f.test(u) && "h" === c ? ((o || r) && (d = !0), 0 === h ? d = !0 : o = h) : d = !0; + d ? s && s.log && s.log("Invalid srcset descriptor found in '" + e + "' at '" + l + "'.") : (g.url = n, t && (g.w = t), r && (g.d = r), o && (g.h = o), b.push(g)) + } + } + }) ? n.apply(t, []) : n) || (e.exports = i) + }, + 74241: e => { + var t = String, + r = function() { + return { + isColorSupported: !1, + reset: t, + bold: t, + dim: t, + italic: t, + underline: t, + inverse: t, + hidden: t, + strikethrough: t, + black: t, + red: t, + green: t, + yellow: t, + blue: t, + magenta: t, + cyan: t, + white: t, + gray: t, + bgBlack: t, + bgRed: t, + bgGreen: t, + bgYellow: t, + bgBlue: t, + bgMagenta: t, + bgCyan: t, + bgWhite: t + } + }; + e.exports = r(), e.exports.createColors = r + }, + 41353: (e, t, r) => { + "use strict"; + let n = r(21019); + class i extends n { + constructor(e) { + super(e), this.type = "atrule" + } + append(...e) { + return this.proxyOf.nodes || (this.nodes = []), super.append(...e) + } + prepend(...e) { + return this.proxyOf.nodes || (this.nodes = []), super.prepend(...e) + } + } + e.exports = i, i.default = i, n.registerAtRule(i) + }, + 69932: (e, t, r) => { + "use strict"; + let n = r(65631); + class i extends n { + constructor(e) { + super(e), this.type = "comment" + } + } + e.exports = i, i.default = i + }, + 21019: (e, t, r) => { + "use strict"; + let n, i, s, o, { + isClean: a, + my: l + } = r(65513), + c = r(94258), + u = r(69932), + h = r(65631); + + function p(e) { + return e.map((e => (e.nodes && (e.nodes = p(e.nodes)), delete e.source, e))) + } + + function d(e) { + if (e[a] = !1, e.proxyOf.nodes) + for (let t of e.proxyOf.nodes) d(t) + } + class f extends h { + push(e) { + return e.parent = this, this.proxyOf.nodes.push(e), this + } + each(e) { + if (!this.proxyOf.nodes) return; + let t, r, n = this.getIterator(); + for (; this.indexes[n] < this.proxyOf.nodes.length && (t = this.indexes[n], r = e(this.proxyOf.nodes[t], t), !1 !== r);) this.indexes[n] += 1; + return delete this.indexes[n], r + } + walk(e) { + return this.each(((t, r) => { + let n; + try { + n = e(t, r) + } catch (e) { + throw t.addToError(e) + } + return !1 !== n && t.walk && (n = t.walk(e)), n + })) + } + walkDecls(e, t) { + return t ? e instanceof RegExp ? this.walk(((r, n) => { + if ("decl" === r.type && e.test(r.prop)) return t(r, n) + })) : this.walk(((r, n) => { + if ("decl" === r.type && r.prop === e) return t(r, n) + })) : (t = e, this.walk(((e, r) => { + if ("decl" === e.type) return t(e, r) + }))) + } + walkRules(e, t) { + return t ? e instanceof RegExp ? this.walk(((r, n) => { + if ("rule" === r.type && e.test(r.selector)) return t(r, n) + })) : this.walk(((r, n) => { + if ("rule" === r.type && r.selector === e) return t(r, n) + })) : (t = e, this.walk(((e, r) => { + if ("rule" === e.type) return t(e, r) + }))) + } + walkAtRules(e, t) { + return t ? e instanceof RegExp ? this.walk(((r, n) => { + if ("atrule" === r.type && e.test(r.name)) return t(r, n) + })) : this.walk(((r, n) => { + if ("atrule" === r.type && r.name === e) return t(r, n) + })) : (t = e, this.walk(((e, r) => { + if ("atrule" === e.type) return t(e, r) + }))) + } + walkComments(e) { + return this.walk(((t, r) => { + if ("comment" === t.type) return e(t, r) + })) + } + append(...e) { + for (let t of e) { + let e = this.normalize(t, this.last); + for (let t of e) this.proxyOf.nodes.push(t) + } + return this.markDirty(), this + } + prepend(...e) { + e = e.reverse(); + for (let t of e) { + let e = this.normalize(t, this.first, "prepend").reverse(); + for (let t of e) this.proxyOf.nodes.unshift(t); + for (let t in this.indexes) this.indexes[t] = this.indexes[t] + e.length + } + return this.markDirty(), this + } + cleanRaws(e) { + if (super.cleanRaws(e), this.nodes) + for (let t of this.nodes) t.cleanRaws(e) + } + insertBefore(e, t) { + let r, n = this.index(e), + i = 0 === n && "prepend", + s = this.normalize(t, this.proxyOf.nodes[n], i).reverse(); + n = this.index(e); + for (let e of s) this.proxyOf.nodes.splice(n, 0, e); + for (let e in this.indexes) r = this.indexes[e], n <= r && (this.indexes[e] = r + s.length); + return this.markDirty(), this + } + insertAfter(e, t) { + let r, n = this.index(e), + i = this.normalize(t, this.proxyOf.nodes[n]).reverse(); + n = this.index(e); + for (let e of i) this.proxyOf.nodes.splice(n + 1, 0, e); + for (let e in this.indexes) r = this.indexes[e], n < r && (this.indexes[e] = r + i.length); + return this.markDirty(), this + } + removeChild(e) { + let t; + e = this.index(e), this.proxyOf.nodes[e].parent = void 0, this.proxyOf.nodes.splice(e, 1); + for (let r in this.indexes) t = this.indexes[r], t >= e && (this.indexes[r] = t - 1); + return this.markDirty(), this + } + removeAll() { + for (let e of this.proxyOf.nodes) e.parent = void 0; + return this.proxyOf.nodes = [], this.markDirty(), this + } + replaceValues(e, t, r) { + return r || (r = t, t = {}), this.walkDecls((n => { + t.props && !t.props.includes(n.prop) || t.fast && !n.value.includes(t.fast) || (n.value = n.value.replace(e, r)) + })), this.markDirty(), this + } + every(e) { + return this.nodes.every(e) + } + some(e) { + return this.nodes.some(e) + } + index(e) { + return "number" == typeof e ? e : (e.proxyOf && (e = e.proxyOf), this.proxyOf.nodes.indexOf(e)) + } + get first() { + if (this.proxyOf.nodes) return this.proxyOf.nodes[0] + } + get last() { + if (this.proxyOf.nodes) return this.proxyOf.nodes[this.proxyOf.nodes.length - 1] + } + normalize(e, t) { + if ("string" == typeof e) e = p(n(e).nodes); + else if (Array.isArray(e)) { + e = e.slice(0); + for (let t of e) t.parent && t.parent.removeChild(t, "ignore") + } else if ("root" === e.type && "document" !== this.type) { + e = e.nodes.slice(0); + for (let t of e) t.parent && t.parent.removeChild(t, "ignore") + } else if (e.type) e = [e]; + else if (e.prop) { + if (void 0 === e.value) throw new Error("Value field is missed in node creation"); + "string" != typeof e.value && (e.value = String(e.value)), e = [new c(e)] + } else if (e.selector) e = [new i(e)]; + else if (e.name) e = [new s(e)]; + else { + if (!e.text) throw new Error("Unknown node type in node creation"); + e = [new u(e)] + } + return e.map((e => (e[l] || f.rebuild(e), (e = e.proxyOf).parent && e.parent.removeChild(e), e[a] && d(e), void 0 === e.raws.before && t && void 0 !== t.raws.before && (e.raws.before = t.raws.before.replace(/\S/g, "")), e.parent = this.proxyOf, e))) + } + getProxyProcessor() { + return { + set: (e, t, r) => (e[t] === r || (e[t] = r, "name" !== t && "params" !== t && "selector" !== t || e.markDirty()), !0), + get: (e, t) => "proxyOf" === t ? e : e[t] ? "each" === t || "string" == typeof t && t.startsWith("walk") ? (...r) => e[t](...r.map((e => "function" == typeof e ? (t, r) => e(t.toProxy(), r) : e))) : "every" === t || "some" === t ? r => e[t](((e, ...t) => r(e.toProxy(), ...t))) : "root" === t ? () => e.root().toProxy() : "nodes" === t ? e.nodes.map((e => e.toProxy())) : "first" === t || "last" === t ? e[t].toProxy() : e[t] : e[t] + } + } + getIterator() { + this.lastEach || (this.lastEach = 0), this.indexes || (this.indexes = {}), this.lastEach += 1; + let e = this.lastEach; + return this.indexes[e] = 0, e + } + } + f.registerParse = e => { + n = e + }, f.registerRule = e => { + i = e + }, f.registerAtRule = e => { + s = e + }, f.registerRoot = e => { + o = e + }, e.exports = f, f.default = f, f.rebuild = e => { + "atrule" === e.type ? Object.setPrototypeOf(e, s.prototype) : "rule" === e.type ? Object.setPrototypeOf(e, i.prototype) : "decl" === e.type ? Object.setPrototypeOf(e, c.prototype) : "comment" === e.type ? Object.setPrototypeOf(e, u.prototype) : "root" === e.type && Object.setPrototypeOf(e, o.prototype), e[l] = !0, e.nodes && e.nodes.forEach((e => { + f.rebuild(e) + })) + } + }, + 42671: (e, t, r) => { + "use strict"; + let n = r(74241), + i = r(22868); + class s extends Error { + constructor(e, t, r, n, i, o) { + super(e), this.name = "CssSyntaxError", this.reason = e, i && (this.file = i), n && (this.source = n), o && (this.plugin = o), void 0 !== t && void 0 !== r && ("number" == typeof t ? (this.line = t, this.column = r) : (this.line = t.line, this.column = t.column, this.endLine = r.line, this.endColumn = r.column)), this.setMessage(), Error.captureStackTrace && Error.captureStackTrace(this, s) + } + setMessage() { + this.message = this.plugin ? this.plugin + ": " : "", this.message += this.file ? this.file : "", void 0 !== this.line && (this.message += ":" + this.line + ":" + this.column), this.message += ": " + this.reason + } + showSourceCode(e) { + if (!this.source) return ""; + let t = this.source; + null == e && (e = n.isColorSupported), i && e && (t = i(t)); + let r, s, o = t.split(/\r?\n/), + a = Math.max(this.line - 3, 0), + l = Math.min(this.line + 2, o.length), + c = String(l).length; + if (e) { + let { + bold: e, + red: t, + gray: i + } = n.createColors(!0); + r = r => e(t(r)), s = e => i(e) + } else r = s = e => e; + return o.slice(a, l).map(((e, t) => { + let n = a + 1 + t, + i = " " + (" " + n).slice(-c) + " | "; + if (n === this.line) { + let t = s(i.replace(/\d/g, " ")) + e.slice(0, this.column - 1).replace(/[^\t]/g, " "); + return r(">") + s(i) + e + "\n " + t + r("^") + } + return " " + s(i) + e + })).join("\n") + } + toString() { + let e = this.showSourceCode(); + return e && (e = "\n\n" + e + "\n"), this.name + ": " + this.message + e + } + } + e.exports = s, s.default = s + }, + 94258: (e, t, r) => { + "use strict"; + let n = r(65631); + class i extends n { + constructor(e) { + e && void 0 !== e.value && "string" != typeof e.value && (e = { + ...e, + value: String(e.value) + }), super(e), this.type = "decl" + } + get variable() { + return this.prop.startsWith("--") || "$" === this.prop[0] + } + } + e.exports = i, i.default = i + }, + 26461: (e, t, r) => { + "use strict"; + let n, i, s = r(21019); + class o extends s { + constructor(e) { + super({ + type: "document", + ...e + }), this.nodes || (this.nodes = []) + } + toResult(e = {}) { + return new n(new i, this, e).stringify() + } + } + o.registerLazyResult = e => { + n = e + }, o.registerProcessor = e => { + i = e + }, e.exports = o, o.default = o + }, + 50250: (e, t, r) => { + "use strict"; + let n = r(94258), + i = r(47981), + s = r(69932), + o = r(41353), + a = r(5995), + l = r(41025), + c = r(31675); + + function u(e, t) { + if (Array.isArray(e)) return e.map((e => u(e))); + let { + inputs: r, + ...h + } = e; + if (r) { + t = []; + for (let e of r) { + let r = { + ...e, + __proto__: a.prototype + }; + r.map && (r.map = { + ...r.map, + __proto__: i.prototype + }), t.push(r) + } + } + if (h.nodes && (h.nodes = e.nodes.map((e => u(e, t)))), h.source) { + let { + inputId: e, + ...r + } = h.source; + h.source = r, null != e && (h.source.input = t[e]) + } + if ("root" === h.type) return new l(h); + if ("decl" === h.type) return new n(h); + if ("rule" === h.type) return new c(h); + if ("comment" === h.type) return new s(h); + if ("atrule" === h.type) return new o(h); + throw new Error("Unknown node type: " + e.type) + } + e.exports = u, u.default = u + }, + 5995: (e, t, r) => { + "use strict"; + let { + SourceMapConsumer: n, + SourceMapGenerator: i + } = r(70209), { + fileURLToPath: s, + pathToFileURL: o + } = r(87414), { + resolve: a, + isAbsolute: l + } = r(99830), { + nanoid: c + } = r(32618), u = r(22868), h = r(42671), p = r(47981), d = Symbol("fromOffsetCache"), f = Boolean(n && i), m = Boolean(a && l); + class g { + constructor(e, t = {}) { + if (null == e || "object" == typeof e && !e.toString) throw new Error(`PostCSS received ${e} instead of CSS string`); + if (this.css = e.toString(), "\ufeff" === this.css[0] || "" === this.css[0] ? (this.hasBOM = !0, this.css = this.css.slice(1)) : this.hasBOM = !1, t.from && (!m || /^\w+:\/\//.test(t.from) || l(t.from) ? this.file = t.from : this.file = a(t.from)), m && f) { + let e = new p(this.css, t); + if (e.text) { + this.map = e; + let t = e.consumer().file; + !this.file && t && (this.file = this.mapResolve(t)) + } + } + this.file || (this.id = ""), this.map && (this.map.file = this.from) + } + fromOffset(e) { + let t, r; + if (this[d]) r = this[d]; + else { + let e = this.css.split("\n"); + r = new Array(e.length); + let t = 0; + for (let n = 0, i = e.length; n < i; n++) r[n] = t, t += e[n].length + 1; + this[d] = r + } + t = r[r.length - 1]; + let n = 0; + if (e >= t) n = r.length - 1; + else { + let t, i = r.length - 2; + for (; n < i;) + if (t = n + (i - n >> 1), e < r[t]) i = t - 1; + else { + if (!(e >= r[t + 1])) { + n = t; + break + } + n = t + 1 + } + } + return { + line: n + 1, + col: e - r[n] + 1 + } + } + error(e, t, r, n = {}) { + let i, s, a; + if (t && "object" == typeof t) { + let e = t, + n = r; + if ("number" == typeof t.offset) { + let n = this.fromOffset(e.offset); + t = n.line, r = n.col + } else t = e.line, r = e.column; + if ("number" == typeof n.offset) { + let e = this.fromOffset(n.offset); + s = e.line, a = e.col + } else s = n.line, a = n.column + } else if (!r) { + let e = this.fromOffset(t); + t = e.line, r = e.col + } + let l = this.origin(t, r, s, a); + return i = l ? new h(e, void 0 === l.endLine ? l.line : { + line: l.line, + column: l.column + }, void 0 === l.endLine ? l.column : { + line: l.endLine, + column: l.endColumn + }, l.source, l.file, n.plugin) : new h(e, void 0 === s ? t : { + line: t, + column: r + }, void 0 === s ? r : { + line: s, + column: a + }, this.css, this.file, n.plugin), i.input = { + line: t, + column: r, + endLine: s, + endColumn: a, + source: this.css + }, this.file && (o && (i.input.url = o(this.file).toString()), i.input.file = this.file), i + } + origin(e, t, r, n) { + if (!this.map) return !1; + let i, a, c = this.map.consumer(), + u = c.originalPositionFor({ + line: e, + column: t + }); + if (!u.source) return !1; + "number" == typeof r && (i = c.originalPositionFor({ + line: r, + column: n + })), a = l(u.source) ? o(u.source) : new URL(u.source, this.map.consumer().sourceRoot || o(this.map.mapFile)); + let h = { + url: a.toString(), + line: u.line, + column: u.column, + endLine: i && i.line, + endColumn: i && i.column + }; + if ("file:" === a.protocol) { + if (!s) throw new Error("file: protocol is not available in this PostCSS build"); + h.file = s(a) + } + let p = c.sourceContentFor(u.source); + return p && (h.source = p), h + } + mapResolve(e) { + return /^\w+:\/\//.test(e) ? e : a(this.map.consumer().sourceRoot || this.map.root || ".", e) + } + get from() { + return this.file || this.id + } + toJSON() { + let e = {}; + for (let t of ["hasBOM", "css", "file", "id"]) null != this[t] && (e[t] = this[t]); + return this.map && (e.map = { + ...this.map + }, e.map.consumerCache && (e.map.consumerCache = void 0)), e + } + } + e.exports = g, g.default = g, u && u.registerInput && u.registerInput(g) + }, + 21939: (e, t, r) => { + "use strict"; + var n = r(25108); + let { + isClean: i, + my: s + } = r(65513), o = r(48505), a = r(67088), l = r(21019), c = r(26461), u = (r(72448), r(83632)), h = r(66939), p = r(41025); + const d = { + document: "Document", + root: "Root", + atrule: "AtRule", + rule: "Rule", + decl: "Declaration", + comment: "Comment" + }, + f = { + postcssPlugin: !0, + prepare: !0, + Once: !0, + Document: !0, + Root: !0, + Declaration: !0, + Rule: !0, + AtRule: !0, + Comment: !0, + DeclarationExit: !0, + RuleExit: !0, + AtRuleExit: !0, + CommentExit: !0, + RootExit: !0, + DocumentExit: !0, + OnceExit: !0 + }, + m = { + postcssPlugin: !0, + prepare: !0, + Once: !0 + }; + + function g(e) { + return "object" == typeof e && "function" == typeof e.then + } + + function b(e) { + let t = !1, + r = d[e.type]; + return "decl" === e.type ? t = e.prop.toLowerCase() : "atrule" === e.type && (t = e.name.toLowerCase()), t && e.append ? [r, r + "-" + t, 0, r + "Exit", r + "Exit-" + t] : t ? [r, r + "-" + t, r + "Exit", r + "Exit-" + t] : e.append ? [r, 0, r + "Exit"] : [r, r + "Exit"] + } + + function y(e) { + let t; + return t = "document" === e.type ? ["Document", 0, "DocumentExit"] : "root" === e.type ? ["Root", 0, "RootExit"] : b(e), { + node: e, + events: t, + eventIndex: 0, + visitors: [], + visitorIndex: 0, + iterator: 0 + } + } + + function v(e) { + return e[i] = !1, e.nodes && e.nodes.forEach((e => v(e))), e + } + let w = {}; + class x { + constructor(e, t, r) { + let n; + if (this.stringified = !1, this.processed = !1, "object" != typeof t || null === t || "root" !== t.type && "document" !== t.type) + if (t instanceof x || t instanceof u) n = v(t.root), t.map && (void 0 === r.map && (r.map = {}), r.map.inline || (r.map.inline = !1), r.map.prev = t.map); + else { + let e = h; + r.syntax && (e = r.syntax.parse), r.parser && (e = r.parser), e.parse && (e = e.parse); + try { + n = e(t, r) + } catch (e) { + this.processed = !0, this.error = e + } + n && !n[s] && l.rebuild(n) + } + else n = v(t); + this.result = new u(e, n, r), this.helpers = { + ...w, + result: this.result, + postcss: w + }, this.plugins = this.processor.plugins.map((e => "object" == typeof e && e.prepare ? { + ...e, + ...e.prepare(this.result) + } : e)) + } + get[Symbol.toStringTag]() { + return "LazyResult" + } + get processor() { + return this.result.processor + } + get opts() { + return this.result.opts + } + get css() { + return this.stringify().css + } + get content() { + return this.stringify().content + } + get map() { + return this.stringify().map + } + get root() { + return this.sync().root + } + get messages() { + return this.sync().messages + } + warnings() { + return this.sync().warnings() + } + toString() { + return this.css + } + then(e, t) { + return this.async().then(e, t) + } catch (e) { + return this.async().catch(e) + } finally(e) { + return this.async().then(e, e) + } + async () { + return this.error ? Promise.reject(this.error) : this.processed ? Promise.resolve(this.result) : (this.processing || (this.processing = this.runAsync()), this.processing) + } + sync() { + if (this.error) throw this.error; + if (this.processed) return this.result; + if (this.processed = !0, this.processing) throw this.getAsyncError(); + for (let e of this.plugins) + if (g(this.runOnRoot(e))) throw this.getAsyncError(); + if (this.prepareVisitors(), this.hasListener) { + let e = this.result.root; + for (; !e[i];) e[i] = !0, this.walkSync(e); + if (this.listeners.OnceExit) + if ("document" === e.type) + for (let t of e.nodes) this.visitSync(this.listeners.OnceExit, t); + else this.visitSync(this.listeners.OnceExit, e) + } + return this.result + } + stringify() { + if (this.error) throw this.error; + if (this.stringified) return this.result; + this.stringified = !0, this.sync(); + let e = this.result.opts, + t = a; + e.syntax && (t = e.syntax.stringify), e.stringifier && (t = e.stringifier), t.stringify && (t = t.stringify); + let r = new o(t, this.result.root, this.result.opts).generate(); + return this.result.css = r[0], this.result.map = r[1], this.result + } + walkSync(e) { + e[i] = !0; + let t = b(e); + for (let r of t) + if (0 === r) e.nodes && e.each((e => { + e[i] || this.walkSync(e) + })); + else { + let t = this.listeners[r]; + if (t && this.visitSync(t, e.toProxy())) return + } + } + visitSync(e, t) { + for (let [r, n] of e) { + let e; + this.result.lastPlugin = r; + try { + e = n(t, this.helpers) + } catch (e) { + throw this.handleError(e, t.proxyOf) + } + if ("root" !== t.type && "document" !== t.type && !t.parent) return !0; + if (g(e)) throw this.getAsyncError() + } + } + runOnRoot(e) { + this.result.lastPlugin = e; + try { + if ("object" == typeof e && e.Once) { + if ("document" === this.result.root.type) { + let t = this.result.root.nodes.map((t => e.Once(t, this.helpers))); + return g(t[0]) ? Promise.all(t) : t + } + return e.Once(this.result.root, this.helpers) + } + if ("function" == typeof e) return e(this.result.root, this.result) + } catch (e) { + throw this.handleError(e) + } + } + getAsyncError() { + throw new Error("Use process(css).then(cb) to work with async plugins") + } + handleError(e, t) { + let r = this.result.lastPlugin; + try { + t && t.addToError(e), this.error = e, "CssSyntaxError" !== e.name || e.plugin ? r.postcssVersion : (e.plugin = r.postcssPlugin, e.setMessage()) + } catch (e) { + n && n.error && n.error(e) + } + return e + } + async runAsync() { + this.plugin = 0; + for (let e = 0; e < this.plugins.length; e++) { + let t = this.plugins[e], + r = this.runOnRoot(t); + if (g(r)) try { + await r + } catch (e) { + throw this.handleError(e) + } + } + if (this.prepareVisitors(), this.hasListener) { + let e = this.result.root; + for (; !e[i];) { + e[i] = !0; + let t = [y(e)]; + for (; t.length > 0;) { + let e = this.visitTick(t); + if (g(e)) try { + await e + } catch (e) { + let r = t[t.length - 1].node; + throw this.handleError(e, r) + } + } + } + if (this.listeners.OnceExit) + for (let [t, r] of this.listeners.OnceExit) { + this.result.lastPlugin = t; + try { + if ("document" === e.type) { + let t = e.nodes.map((e => r(e, this.helpers))); + await Promise.all(t) + } else await r(e, this.helpers) + } catch (e) { + throw this.handleError(e) + } + } + } + return this.processed = !0, this.stringify() + } + prepareVisitors() { + this.listeners = {}; + let e = (e, t, r) => { + this.listeners[t] || (this.listeners[t] = []), this.listeners[t].push([e, r]) + }; + for (let t of this.plugins) + if ("object" == typeof t) + for (let r in t) { + if (!f[r] && /^[A-Z]/.test(r)) throw new Error(`Unknown event ${r} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`); + if (!m[r]) + if ("object" == typeof t[r]) + for (let n in t[r]) e(t, "*" === n ? r : r + "-" + n.toLowerCase(), t[r][n]); + else "function" == typeof t[r] && e(t, r, t[r]) + } + this.hasListener = Object.keys(this.listeners).length > 0 + } + visitTick(e) { + let t = e[e.length - 1], + { + node: r, + visitors: n + } = t; + if ("root" !== r.type && "document" !== r.type && !r.parent) return void e.pop(); + if (n.length > 0 && t.visitorIndex < n.length) { + let [e, i] = n[t.visitorIndex]; + t.visitorIndex += 1, t.visitorIndex === n.length && (t.visitors = [], t.visitorIndex = 0), this.result.lastPlugin = e; + try { + return i(r.toProxy(), this.helpers) + } catch (e) { + throw this.handleError(e, r) + } + } + if (0 !== t.iterator) { + let n, s = t.iterator; + for (; n = r.nodes[r.indexes[s]];) + if (r.indexes[s] += 1, !n[i]) return n[i] = !0, void e.push(y(n)); + t.iterator = 0, delete r.indexes[s] + } + let s = t.events; + for (; t.eventIndex < s.length;) { + let e = s[t.eventIndex]; + if (t.eventIndex += 1, 0 === e) return void(r.nodes && r.nodes.length && (r[i] = !0, t.iterator = r.getIterator())); + if (this.listeners[e]) return void(t.visitors = this.listeners[e]) + } + e.pop() + } + } + x.registerPostcss = e => { + w = e + }, e.exports = x, x.default = x, p.registerLazyResult(x), c.registerLazyResult(x) + }, + 54715: e => { + "use strict"; + let t = { + split(e, t, r) { + let n = [], + i = "", + s = !1, + o = 0, + a = !1, + l = "", + c = !1; + for (let r of e) c ? c = !1 : "\\" === r ? c = !0 : a ? r === l && (a = !1) : '"' === r || "'" === r ? (a = !0, l = r) : "(" === r ? o += 1 : ")" === r ? o > 0 && (o -= 1) : 0 === o && t.includes(r) && (s = !0), s ? ("" !== i && n.push(i.trim()), i = "", s = !1) : i += r; + return (r || "" !== i) && n.push(i.trim()), n + }, + space: e => t.split(e, [" ", "\n", "\t"]), + comma: e => t.split(e, [","], !0) + }; + e.exports = t, t.default = t + }, + 48505: (e, t, r) => { + "use strict"; + var n = r(48764).Buffer; + let { + SourceMapConsumer: i, + SourceMapGenerator: s + } = r(70209), { + dirname: o, + resolve: a, + relative: l, + sep: c + } = r(99830), { + pathToFileURL: u + } = r(87414), h = r(5995), p = Boolean(i && s), d = Boolean(o && a && l && c); + e.exports = class { + constructor(e, t, r, n) { + this.stringify = e, this.mapOpts = r.map || {}, this.root = t, this.opts = r, this.css = n, this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute + } + isMap() { + return void 0 !== this.opts.map ? !!this.opts.map : this.previous().length > 0 + } + previous() { + if (!this.previousMaps) + if (this.previousMaps = [], this.root) this.root.walk((e => { + if (e.source && e.source.input.map) { + let t = e.source.input.map; + this.previousMaps.includes(t) || this.previousMaps.push(t) + } + })); + else { + let e = new h(this.css, this.opts); + e.map && this.previousMaps.push(e.map) + } return this.previousMaps + } + isInline() { + if (void 0 !== this.mapOpts.inline) return this.mapOpts.inline; + let e = this.mapOpts.annotation; + return (void 0 === e || !0 === e) && (!this.previous().length || this.previous().some((e => e.inline))) + } + isSourcesContent() { + return void 0 !== this.mapOpts.sourcesContent ? this.mapOpts.sourcesContent : !this.previous().length || this.previous().some((e => e.withContent())) + } + clearAnnotation() { + if (!1 !== this.mapOpts.annotation) + if (this.root) { + let e; + for (let t = this.root.nodes.length - 1; t >= 0; t--) e = this.root.nodes[t], "comment" === e.type && 0 === e.text.indexOf("# sourceMappingURL=") && this.root.removeChild(t) + } else this.css && (this.css = this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm, "")) + } + setSourcesContent() { + let e = {}; + if (this.root) this.root.walk((t => { + if (t.source) { + let r = t.source.input.from; + if (r && !e[r]) { + e[r] = !0; + let n = this.usesFileUrls ? this.toFileUrl(r) : this.toUrl(this.path(r)); + this.map.setSourceContent(n, t.source.input.css) + } + } + })); + else if (this.css) { + let e = this.opts.from ? this.toUrl(this.path(this.opts.from)) : ""; + this.map.setSourceContent(e, this.css) + } + } + applyPrevMaps() { + for (let e of this.previous()) { + let t, r = this.toUrl(this.path(e.file)), + n = e.root || o(e.file); + !1 === this.mapOpts.sourcesContent ? (t = new i(e.text), t.sourcesContent && (t.sourcesContent = t.sourcesContent.map((() => null)))) : t = e.consumer(), this.map.applySourceMap(t, r, this.toUrl(this.path(n))) + } + } + isAnnotation() { + return !!this.isInline() || (void 0 !== this.mapOpts.annotation ? this.mapOpts.annotation : !this.previous().length || this.previous().some((e => e.annotation))) + } + toBase64(e) { + return n ? n.from(e).toString("base64") : window.btoa(unescape(encodeURIComponent(e))) + } + addAnnotation() { + let e; + e = this.isInline() ? "data:application/json;base64," + this.toBase64(this.map.toString()) : "string" == typeof this.mapOpts.annotation ? this.mapOpts.annotation : "function" == typeof this.mapOpts.annotation ? this.mapOpts.annotation(this.opts.to, this.root) : this.outputFile() + ".map"; + let t = "\n"; + this.css.includes("\r\n") && (t = "\r\n"), this.css += t + "/*# sourceMappingURL=" + e + " */" + } + outputFile() { + return this.opts.to ? this.path(this.opts.to) : this.opts.from ? this.path(this.opts.from) : "to.css" + } + generateMap() { + if (this.root) this.generateString(); + else if (1 === this.previous().length) { + let e = this.previous()[0].consumer(); + e.file = this.outputFile(), this.map = s.fromSourceMap(e) + } else this.map = new s({ + file: this.outputFile() + }), this.map.addMapping({ + source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "", + generated: { + line: 1, + column: 0 + }, + original: { + line: 1, + column: 0 + } + }); + return this.isSourcesContent() && this.setSourcesContent(), this.root && this.previous().length > 0 && this.applyPrevMaps(), this.isAnnotation() && this.addAnnotation(), this.isInline() ? [this.css] : [this.css, this.map] + } + path(e) { + if (0 === e.indexOf("<")) return e; + if (/^\w+:\/\//.test(e)) return e; + if (this.mapOpts.absolute) return e; + let t = this.opts.to ? o(this.opts.to) : "."; + return "string" == typeof this.mapOpts.annotation && (t = o(a(t, this.mapOpts.annotation))), l(t, e) + } + toUrl(e) { + return "\\" === c && (e = e.replace(/\\/g, "/")), encodeURI(e).replace(/[#?]/g, encodeURIComponent) + } + toFileUrl(e) { + if (u) return u(e).toString(); + throw new Error("`map.absolute` option is not available in this PostCSS build") + } + sourcePath(e) { + return this.mapOpts.from ? this.toUrl(this.mapOpts.from) : this.usesFileUrls ? this.toFileUrl(e.source.input.from) : this.toUrl(this.path(e.source.input.from)) + } + generateString() { + this.css = "", this.map = new s({ + file: this.outputFile() + }); + let e, t, r = 1, + n = 1, + i = "", + o = { + source: "", + generated: { + line: 0, + column: 0 + }, + original: { + line: 0, + column: 0 + } + }; + this.stringify(this.root, ((s, a, l) => { + if (this.css += s, a && "end" !== l && (o.generated.line = r, o.generated.column = n - 1, a.source && a.source.start ? (o.source = this.sourcePath(a), o.original.line = a.source.start.line, o.original.column = a.source.start.column - 1, this.map.addMapping(o)) : (o.source = i, o.original.line = 1, o.original.column = 0, this.map.addMapping(o))), e = s.match(/\n/g), e ? (r += e.length, t = s.lastIndexOf("\n"), n = s.length - t) : n += s.length, a && "start" !== l) { + let e = a.parent || { + raws: {} + }; + ("decl" !== a.type || a !== e.last || e.raws.semicolon) && (a.source && a.source.end ? (o.source = this.sourcePath(a), o.original.line = a.source.end.line, o.original.column = a.source.end.column - 1, o.generated.line = r, o.generated.column = n - 2, this.map.addMapping(o)) : (o.source = i, o.original.line = 1, o.original.column = 0, o.generated.line = r, o.generated.column = n - 1, this.map.addMapping(o))) + } + })) + } + generate() { + if (this.clearAnnotation(), d && p && this.isMap()) return this.generateMap(); + { + let e = ""; + return this.stringify(this.root, (t => { + e += t + })), [e] + } + } + } + }, + 47647: (e, t, r) => { + "use strict"; + let n = r(48505), + i = r(67088), + s = (r(72448), r(66939)); + const o = r(83632); + class a { + constructor(e, t, r) { + let s; + t = t.toString(), this.stringified = !1, this._processor = e, this._css = t, this._opts = r, this._map = void 0; + let a = i; + this.result = new o(this._processor, s, this._opts), this.result.css = t; + let l = this; + Object.defineProperty(this.result, "root", { + get: () => l.root + }); + let c = new n(a, s, this._opts, t); + if (c.isMap()) { + let [e, t] = c.generate(); + e && (this.result.css = e), t && (this.result.map = t) + } + } + get[Symbol.toStringTag]() { + return "NoWorkResult" + } + get processor() { + return this.result.processor + } + get opts() { + return this.result.opts + } + get css() { + return this.result.css + } + get content() { + return this.result.css + } + get map() { + return this.result.map + } + get root() { + if (this._root) return this._root; + let e, t = s; + try { + e = t(this._css, this._opts) + } catch (e) { + this.error = e + } + if (this.error) throw this.error; + return this._root = e, e + } + get messages() { + return [] + } + warnings() { + return [] + } + toString() { + return this._css + } + then(e, t) { + return this.async().then(e, t) + } catch (e) { + return this.async().catch(e) + } finally(e) { + return this.async().then(e, e) + } + async () { + return this.error ? Promise.reject(this.error) : Promise.resolve(this.result) + } + sync() { + if (this.error) throw this.error; + return this.result + } + } + e.exports = a, a.default = a + }, + 65631: (e, t, r) => { + "use strict"; + let { + isClean: n, + my: i + } = r(65513), s = r(42671), o = r(1062), a = r(67088); + + function l(e, t) { + let r = new e.constructor; + for (let n in e) { + if (!Object.prototype.hasOwnProperty.call(e, n)) continue; + if ("proxyCache" === n) continue; + let i = e[n], + s = typeof i; + "parent" === n && "object" === s ? t && (r[n] = t) : "source" === n ? r[n] = i : Array.isArray(i) ? r[n] = i.map((e => l(e, r))) : ("object" === s && null !== i && (i = l(i)), r[n] = i) + } + return r + } + class c { + constructor(e = {}) { + this.raws = {}, this[n] = !1, this[i] = !0; + for (let t in e) + if ("nodes" === t) { + this.nodes = []; + for (let r of e[t]) "function" == typeof r.clone ? this.append(r.clone()) : this.append(r) + } else this[t] = e[t] + } + error(e, t = {}) { + if (this.source) { + let { + start: r, + end: n + } = this.rangeBy(t); + return this.source.input.error(e, { + line: r.line, + column: r.column + }, { + line: n.line, + column: n.column + }, t) + } + return new s(e) + } + warn(e, t, r) { + let n = { + node: this + }; + for (let e in r) n[e] = r[e]; + return e.warn(t, n) + } + remove() { + return this.parent && this.parent.removeChild(this), this.parent = void 0, this + } + toString(e = a) { + e.stringify && (e = e.stringify); + let t = ""; + return e(this, (e => { + t += e + })), t + } + assign(e = {}) { + for (let t in e) this[t] = e[t]; + return this + } + clone(e = {}) { + let t = l(this); + for (let r in e) t[r] = e[r]; + return t + } + cloneBefore(e = {}) { + let t = this.clone(e); + return this.parent.insertBefore(this, t), t + } + cloneAfter(e = {}) { + let t = this.clone(e); + return this.parent.insertAfter(this, t), t + } + replaceWith(...e) { + if (this.parent) { + let t = this, + r = !1; + for (let n of e) n === this ? r = !0 : r ? (this.parent.insertAfter(t, n), t = n) : this.parent.insertBefore(t, n); + r || this.remove() + } + return this + } + next() { + if (!this.parent) return; + let e = this.parent.index(this); + return this.parent.nodes[e + 1] + } + prev() { + if (!this.parent) return; + let e = this.parent.index(this); + return this.parent.nodes[e - 1] + } + before(e) { + return this.parent.insertBefore(this, e), this + } + after(e) { + return this.parent.insertAfter(this, e), this + } + root() { + let e = this; + for (; e.parent && "document" !== e.parent.type;) e = e.parent; + return e + } + raw(e, t) { + return (new o).raw(this, e, t) + } + cleanRaws(e) { + delete this.raws.before, delete this.raws.after, e || delete this.raws.between + } + toJSON(e, t) { + let r = {}, + n = null == t; + t = t || new Map; + let i = 0; + for (let e in this) { + if (!Object.prototype.hasOwnProperty.call(this, e)) continue; + if ("parent" === e || "proxyCache" === e) continue; + let n = this[e]; + if (Array.isArray(n)) r[e] = n.map((e => "object" == typeof e && e.toJSON ? e.toJSON(null, t) : e)); + else if ("object" == typeof n && n.toJSON) r[e] = n.toJSON(null, t); + else if ("source" === e) { + let s = t.get(n.input); + null == s && (s = i, t.set(n.input, i), i++), r[e] = { + inputId: s, + start: n.start, + end: n.end + } + } else r[e] = n + } + return n && (r.inputs = [...t.keys()].map((e => e.toJSON()))), r + } + positionInside(e) { + let t = this.toString(), + r = this.source.start.column, + n = this.source.start.line; + for (let i = 0; i < e; i++) "\n" === t[i] ? (r = 1, n += 1) : r += 1; + return { + line: n, + column: r + } + } + positionBy(e) { + let t = this.source.start; + if (e.index) t = this.positionInside(e.index); + else if (e.word) { + let r = this.toString().indexOf(e.word); - 1 !== r && (t = this.positionInside(r)) + } + return t + } + rangeBy(e) { + let t = { + line: this.source.start.line, + column: this.source.start.column + }, + r = this.source.end ? { + line: this.source.end.line, + column: this.source.end.column + 1 + } : { + line: t.line, + column: t.column + 1 + }; + if (e.word) { + let n = this.toString().indexOf(e.word); - 1 !== n && (t = this.positionInside(n), r = this.positionInside(n + e.word.length)) + } else e.start ? t = { + line: e.start.line, + column: e.start.column + } : e.index && (t = this.positionInside(e.index)), e.end ? r = { + line: e.end.line, + column: e.end.column + } : e.endIndex ? r = this.positionInside(e.endIndex) : e.index && (r = this.positionInside(e.index + 1)); + return (r.line < t.line || r.line === t.line && r.column <= t.column) && (r = { + line: t.line, + column: t.column + 1 + }), { + start: t, + end: r + } + } + getProxyProcessor() { + return { + set: (e, t, r) => (e[t] === r || (e[t] = r, "prop" !== t && "value" !== t && "name" !== t && "params" !== t && "important" !== t && "text" !== t || e.markDirty()), !0), + get: (e, t) => "proxyOf" === t ? e : "root" === t ? () => e.root().toProxy() : e[t] + } + } + toProxy() { + return this.proxyCache || (this.proxyCache = new Proxy(this, this.getProxyProcessor())), this.proxyCache + } + addToError(e) { + if (e.postcssNode = this, e.stack && this.source && /\n\s{4}at /.test(e.stack)) { + let t = this.source; + e.stack = e.stack.replace(/\n\s{4}at /, `$&${t.input.from}:${t.start.line}:${t.start.column}$&`) + } + return e + } + markDirty() { + if (this[n]) { + this[n] = !1; + let e = this; + for (; e = e.parent;) e[n] = !1 + } + } + get proxyOf() { + return this + } + } + e.exports = c, c.default = c + }, + 66939: (e, t, r) => { + "use strict"; + let n = r(21019), + i = r(68867), + s = r(5995); + + function o(e, t) { + let r = new s(e, t), + n = new i(r); + try { + n.parse() + } catch (e) { + throw e + } + return n.root + } + e.exports = o, o.default = o, n.registerParse(o) + }, + 68867: (e, t, r) => { + "use strict"; + let n = r(94258), + i = r(83852), + s = r(69932), + o = r(41353), + a = r(41025), + l = r(31675); + const c = { + empty: !0, + space: !0 + }; + e.exports = class { + constructor(e) { + this.input = e, this.root = new a, this.current = this.root, this.spaces = "", this.semicolon = !1, this.customProperty = !1, this.createTokenizer(), this.root.source = { + input: e, + start: { + offset: 0, + line: 1, + column: 1 + } + } + } + createTokenizer() { + this.tokenizer = i(this.input) + } + parse() { + let e; + for (; !this.tokenizer.endOfFile();) switch (e = this.tokenizer.nextToken(), e[0]) { + case "space": + this.spaces += e[1]; + break; + case ";": + this.freeSemicolon(e); + break; + case "}": + this.end(e); + break; + case "comment": + this.comment(e); + break; + case "at-word": + this.atrule(e); + break; + case "{": + this.emptyRule(e); + break; + default: + this.other(e) + } + this.endFile() + } + comment(e) { + let t = new s; + this.init(t, e[2]), t.source.end = this.getPosition(e[3] || e[2]); + let r = e[1].slice(2, -2); + if (/^\s*$/.test(r)) t.text = "", t.raws.left = r, t.raws.right = ""; + else { + let e = r.match(/^(\s*)([^]*\S)(\s*)$/); + t.text = e[2], t.raws.left = e[1], t.raws.right = e[3] + } + } + emptyRule(e) { + let t = new l; + this.init(t, e[2]), t.selector = "", t.raws.between = "", this.current = t + } + other(e) { + let t = !1, + r = null, + n = !1, + i = null, + s = [], + o = e[1].startsWith("--"), + a = [], + l = e; + for (; l;) { + if (r = l[0], a.push(l), "(" === r || "[" === r) i || (i = l), s.push("(" === r ? ")" : "]"); + else if (o && n && "{" === r) i || (i = l), s.push("}"); + else if (0 === s.length) { + if (";" === r) { + if (n) return void this.decl(a, o); + break + } + if ("{" === r) return void this.rule(a); + if ("}" === r) { + this.tokenizer.back(a.pop()), t = !0; + break + } + ":" === r && (n = !0) + } else r === s[s.length - 1] && (s.pop(), 0 === s.length && (i = null)); + l = this.tokenizer.nextToken() + } + if (this.tokenizer.endOfFile() && (t = !0), s.length > 0 && this.unclosedBracket(i), t && n) { + if (!o) + for (; a.length && (l = a[a.length - 1][0], "space" === l || "comment" === l);) this.tokenizer.back(a.pop()); + this.decl(a, o) + } else this.unknownWord(a) + } + rule(e) { + e.pop(); + let t = new l; + this.init(t, e[0][2]), t.raws.between = this.spacesAndCommentsFromEnd(e), this.raw(t, "selector", e), this.current = t + } + decl(e, t) { + let r = new n; + this.init(r, e[0][2]); + let i, s = e[e.length - 1]; + for (";" === s[0] && (this.semicolon = !0, e.pop()), r.source.end = this.getPosition(s[3] || s[2] || function(e) { + for (let t = e.length - 1; t >= 0; t--) { + let r = e[t], + n = r[3] || r[2]; + if (n) return n + } + }(e)); + "word" !== e[0][0];) 1 === e.length && this.unknownWord(e), r.raws.before += e.shift()[1]; + for (r.source.start = this.getPosition(e[0][2]), r.prop = ""; e.length;) { + let t = e[0][0]; + if (":" === t || "space" === t || "comment" === t) break; + r.prop += e.shift()[1] + } + for (r.raws.between = ""; e.length;) { + if (i = e.shift(), ":" === i[0]) { + r.raws.between += i[1]; + break + } + "word" === i[0] && /\w/.test(i[1]) && this.unknownWord([i]), r.raws.between += i[1] + } + "_" !== r.prop[0] && "*" !== r.prop[0] || (r.raws.before += r.prop[0], r.prop = r.prop.slice(1)); + let o, a = []; + for (; e.length && (o = e[0][0], "space" === o || "comment" === o);) a.push(e.shift()); + this.precheckMissedSemicolon(e); + for (let t = e.length - 1; t >= 0; t--) { + if (i = e[t], "!important" === i[1].toLowerCase()) { + r.important = !0; + let n = this.stringFrom(e, t); + n = this.spacesFromEnd(e) + n, " !important" !== n && (r.raws.important = n); + break + } + if ("important" === i[1].toLowerCase()) { + let n = e.slice(0), + i = ""; + for (let e = t; e > 0; e--) { + let t = n[e][0]; + if (0 === i.trim().indexOf("!") && "space" !== t) break; + i = n.pop()[1] + i + } + 0 === i.trim().indexOf("!") && (r.important = !0, r.raws.important = i, e = n) + } + if ("space" !== i[0] && "comment" !== i[0]) break + } + e.some((e => "space" !== e[0] && "comment" !== e[0])) && (r.raws.between += a.map((e => e[1])).join(""), a = []), this.raw(r, "value", a.concat(e), t), r.value.includes(":") && !t && this.checkMissedSemicolon(e) + } + atrule(e) { + let t, r, n, i = new o; + i.name = e[1].slice(1), "" === i.name && this.unnamedAtrule(i, e), this.init(i, e[2]); + let s = !1, + a = !1, + l = [], + c = []; + for (; !this.tokenizer.endOfFile();) { + if (t = (e = this.tokenizer.nextToken())[0], "(" === t || "[" === t ? c.push("(" === t ? ")" : "]") : "{" === t && c.length > 0 ? c.push("}") : t === c[c.length - 1] && c.pop(), 0 === c.length) { + if (";" === t) { + i.source.end = this.getPosition(e[2]), this.semicolon = !0; + break + } + if ("{" === t) { + a = !0; + break + } + if ("}" === t) { + if (l.length > 0) { + for (n = l.length - 1, r = l[n]; r && "space" === r[0];) r = l[--n]; + r && (i.source.end = this.getPosition(r[3] || r[2])) + } + this.end(e); + break + } + l.push(e) + } else l.push(e); + if (this.tokenizer.endOfFile()) { + s = !0; + break + } + } + i.raws.between = this.spacesAndCommentsFromEnd(l), l.length ? (i.raws.afterName = this.spacesAndCommentsFromStart(l), this.raw(i, "params", l), s && (e = l[l.length - 1], i.source.end = this.getPosition(e[3] || e[2]), this.spaces = i.raws.between, i.raws.between = "")) : (i.raws.afterName = "", i.params = ""), a && (i.nodes = [], this.current = i) + } + end(e) { + this.current.nodes && this.current.nodes.length && (this.current.raws.semicolon = this.semicolon), this.semicolon = !1, this.current.raws.after = (this.current.raws.after || "") + this.spaces, this.spaces = "", this.current.parent ? (this.current.source.end = this.getPosition(e[2]), this.current = this.current.parent) : this.unexpectedClose(e) + } + endFile() { + this.current.parent && this.unclosedBlock(), this.current.nodes && this.current.nodes.length && (this.current.raws.semicolon = this.semicolon), this.current.raws.after = (this.current.raws.after || "") + this.spaces + } + freeSemicolon(e) { + if (this.spaces += e[1], this.current.nodes) { + let e = this.current.nodes[this.current.nodes.length - 1]; + e && "rule" === e.type && !e.raws.ownSemicolon && (e.raws.ownSemicolon = this.spaces, this.spaces = "") + } + } + getPosition(e) { + let t = this.input.fromOffset(e); + return { + offset: e, + line: t.line, + column: t.col + } + } + init(e, t) { + this.current.push(e), e.source = { + start: this.getPosition(t), + input: this.input + }, e.raws.before = this.spaces, this.spaces = "", "comment" !== e.type && (this.semicolon = !1) + } + raw(e, t, r, n) { + let i, s, o, a, l = r.length, + u = "", + h = !0; + for (let e = 0; e < l; e += 1) i = r[e], s = i[0], "space" !== s || e !== l - 1 || n ? "comment" === s ? (a = r[e - 1] ? r[e - 1][0] : "empty", o = r[e + 1] ? r[e + 1][0] : "empty", c[a] || c[o] || "," === u.slice(-1) ? h = !1 : u += i[1]) : u += i[1] : h = !1; + if (!h) { + let n = r.reduce(((e, t) => e + t[1]), ""); + e.raws[t] = { + value: u, + raw: n + } + } + e[t] = u + } + spacesAndCommentsFromEnd(e) { + let t, r = ""; + for (; e.length && (t = e[e.length - 1][0], "space" === t || "comment" === t);) r = e.pop()[1] + r; + return r + } + spacesAndCommentsFromStart(e) { + let t, r = ""; + for (; e.length && (t = e[0][0], "space" === t || "comment" === t);) r += e.shift()[1]; + return r + } + spacesFromEnd(e) { + let t, r = ""; + for (; e.length && (t = e[e.length - 1][0], "space" === t);) r = e.pop()[1] + r; + return r + } + stringFrom(e, t) { + let r = ""; + for (let n = t; n < e.length; n++) r += e[n][1]; + return e.splice(t, e.length - t), r + } + colon(e) { + let t, r, n, i = 0; + for (let [s, o] of e.entries()) { + if (t = o, r = t[0], "(" === r && (i += 1), ")" === r && (i -= 1), 0 === i && ":" === r) { + if (n) { + if ("word" === n[0] && "progid" === n[1]) continue; + return s + } + this.doubleColon(t) + } + n = t + } + return !1 + } + unclosedBracket(e) { + throw this.input.error("Unclosed bracket", { + offset: e[2] + }, { + offset: e[2] + 1 + }) + } + unknownWord(e) { + throw this.input.error("Unknown word", { + offset: e[0][2] + }, { + offset: e[0][2] + e[0][1].length + }) + } + unexpectedClose(e) { + throw this.input.error("Unexpected }", { + offset: e[2] + }, { + offset: e[2] + 1 + }) + } + unclosedBlock() { + let e = this.current.source.start; + throw this.input.error("Unclosed block", e.line, e.column) + } + doubleColon(e) { + throw this.input.error("Double colon", { + offset: e[2] + }, { + offset: e[2] + e[1].length + }) + } + unnamedAtrule(e, t) { + throw this.input.error("At-rule without name", { + offset: t[2] + }, { + offset: t[2] + t[1].length + }) + } + precheckMissedSemicolon() {} + checkMissedSemicolon(e) { + let t = this.colon(e); + if (!1 === t) return; + let r, n = 0; + for (let i = t - 1; i >= 0 && (r = e[i], "space" === r[0] || (n += 1, 2 !== n)); i--); + throw this.input.error("Missed semicolon", "word" === r[0] ? r[3] + 1 : r[2]) + } + } + }, + 50020: (e, t, r) => { + "use strict"; + var n = r(25108), + i = r(34155); + let s = r(42671), + o = r(94258), + a = r(21939), + l = r(21019), + c = r(71723), + u = r(67088), + h = r(50250), + p = r(26461), + d = r(11728), + f = r(69932), + m = r(41353), + g = r(83632), + b = r(5995), + y = r(66939), + v = r(54715), + w = r(31675), + x = r(41025), + S = r(65631); + + function T(...e) { + return 1 === e.length && Array.isArray(e[0]) && (e = e[0]), new c(e) + } + T.plugin = function(e, t) { + let r, s = !1; + + function o(...r) { + n && n.warn && !s && (s = !0, n.warn(e + ": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"), i.env.LANG && i.env.LANG.startsWith("cn") && n.warn(e + ": 里面 postcss.plugin 被弃用. 迁移指南:\nhttps://www.w3ctech.com/topic/2226")); + let o = t(...r); + return o.postcssPlugin = e, o.postcssVersion = (new c).version, o + } + return Object.defineProperty(o, "postcss", { + get: () => (r || (r = o()), r) + }), o.process = function(e, t, r) { + return T([o(r)]).process(e, t) + }, o + }, T.stringify = u, T.parse = y, T.fromJSON = h, T.list = v, T.comment = e => new f(e), T.atRule = e => new m(e), T.decl = e => new o(e), T.rule = e => new w(e), T.root = e => new x(e), T.document = e => new p(e), T.CssSyntaxError = s, T.Declaration = o, T.Container = l, T.Processor = c, T.Document = p, T.Comment = f, T.Warning = d, T.AtRule = m, T.Result = g, T.Input = b, T.Rule = w, T.Root = x, T.Node = S, a.registerPostcss(T), e.exports = T, T.default = T + }, + 47981: (e, t, r) => { + "use strict"; + var n = r(48764).Buffer; + let { + SourceMapConsumer: i, + SourceMapGenerator: s + } = r(70209), { + existsSync: o, + readFileSync: a + } = r(14777), { + dirname: l, + join: c + } = r(99830); + class u { + constructor(e, t) { + if (!1 === t.map) return; + this.loadAnnotation(e), this.inline = this.startWith(this.annotation, "data:"); + let r = t.map ? t.map.prev : void 0, + n = this.loadMap(t.from, r); + !this.mapFile && t.from && (this.mapFile = t.from), this.mapFile && (this.root = l(this.mapFile)), n && (this.text = n) + } + consumer() { + return this.consumerCache || (this.consumerCache = new i(this.text)), this.consumerCache + } + withContent() { + return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0) + } + startWith(e, t) { + return !!e && e.substr(0, t.length) === t + } + getAnnotationURL(e) { + return e.replace(/^\/\*\s*# sourceMappingURL=/, "").trim() + } + loadAnnotation(e) { + let t = e.match(/\/\*\s*# sourceMappingURL=/gm); + if (!t) return; + let r = e.lastIndexOf(t.pop()), + n = e.indexOf("*/", r); + r > -1 && n > -1 && (this.annotation = this.getAnnotationURL(e.substring(r, n))) + } + decodeInline(e) { + if (/^data:application\/json;charset=utf-?8,/.test(e) || /^data:application\/json,/.test(e)) return decodeURIComponent(e.substr(RegExp.lastMatch.length)); + if (/^data:application\/json;charset=utf-?8;base64,/.test(e) || /^data:application\/json;base64,/.test(e)) return t = e.substr(RegExp.lastMatch.length), n ? n.from(t, "base64").toString() : window.atob(t); + var t; + let r = e.match(/data:application\/json;([^,]+),/)[1]; + throw new Error("Unsupported source map encoding " + r) + } + loadFile(e) { + if (this.root = l(e), o(e)) return this.mapFile = e, a(e, "utf-8").toString().trim() + } + loadMap(e, t) { + if (!1 === t) return !1; + if (t) { + if ("string" == typeof t) return t; + if ("function" != typeof t) { + if (t instanceof i) return s.fromSourceMap(t).toString(); + if (t instanceof s) return t.toString(); + if (this.isMap(t)) return JSON.stringify(t); + throw new Error("Unsupported previous source map format: " + t.toString()) + } { + let r = t(e); + if (r) { + let e = this.loadFile(r); + if (!e) throw new Error("Unable to load previous source map: " + r.toString()); + return e + } + } + } else { + if (this.inline) return this.decodeInline(this.annotation); + if (this.annotation) { + let t = this.annotation; + return e && (t = c(l(e), t)), this.loadFile(t) + } + } + } + isMap(e) { + return "object" == typeof e && ("string" == typeof e.mappings || "string" == typeof e._mappings || Array.isArray(e.sections)) + } + } + e.exports = u, u.default = u + }, + 71723: (e, t, r) => { + "use strict"; + let n = r(47647), + i = r(21939), + s = r(26461), + o = r(41025); + class a { + constructor(e = []) { + this.version = "8.4.19", this.plugins = this.normalize(e) + } + use(e) { + return this.plugins = this.plugins.concat(this.normalize([e])), this + } + process(e, t = {}) { + return 0 === this.plugins.length && void 0 === t.parser && void 0 === t.stringifier && void 0 === t.syntax ? new n(this, e, t) : new i(this, e, t) + } + normalize(e) { + let t = []; + for (let r of e) + if (!0 === r.postcss ? r = r() : r.postcss && (r = r.postcss), "object" == typeof r && Array.isArray(r.plugins)) t = t.concat(r.plugins); + else if ("object" == typeof r && r.postcssPlugin) t.push(r); + else if ("function" == typeof r) t.push(r); + else if ("object" != typeof r || !r.parse && !r.stringify) throw new Error(r + " is not a PostCSS plugin"); + return t + } + } + e.exports = a, a.default = a, o.registerProcessor(a), s.registerProcessor(a) + }, + 83632: (e, t, r) => { + "use strict"; + let n = r(11728); + class i { + constructor(e, t, r) { + this.processor = e, this.messages = [], this.root = t, this.opts = r, this.css = void 0, this.map = void 0 + } + toString() { + return this.css + } + warn(e, t = {}) { + t.plugin || this.lastPlugin && this.lastPlugin.postcssPlugin && (t.plugin = this.lastPlugin.postcssPlugin); + let r = new n(e, t); + return this.messages.push(r), r + } + warnings() { + return this.messages.filter((e => "warning" === e.type)) + } + get content() { + return this.css + } + } + e.exports = i, i.default = i + }, + 41025: (e, t, r) => { + "use strict"; + let n, i, s = r(21019); + class o extends s { + constructor(e) { + super(e), this.type = "root", this.nodes || (this.nodes = []) + } + removeChild(e, t) { + let r = this.index(e); + return !t && 0 === r && this.nodes.length > 1 && (this.nodes[1].raws.before = this.nodes[r].raws.before), super.removeChild(e) + } + normalize(e, t, r) { + let n = super.normalize(e); + if (t) + if ("prepend" === r) this.nodes.length > 1 ? t.raws.before = this.nodes[1].raws.before : delete t.raws.before; + else if (this.first !== t) + for (let e of n) e.raws.before = t.raws.before; + return n + } + toResult(e = {}) { + return new n(new i, this, e).stringify() + } + } + o.registerLazyResult = e => { + n = e + }, o.registerProcessor = e => { + i = e + }, e.exports = o, o.default = o, s.registerRoot(o) + }, + 31675: (e, t, r) => { + "use strict"; + let n = r(21019), + i = r(54715); + class s extends n { + constructor(e) { + super(e), this.type = "rule", this.nodes || (this.nodes = []) + } + get selectors() { + return i.comma(this.selector) + } + set selectors(e) { + let t = this.selector ? this.selector.match(/,\s*/) : null, + r = t ? t[0] : "," + this.raw("between", "beforeOpen"); + this.selector = e.join(r) + } + } + e.exports = s, s.default = s, n.registerRule(s) + }, + 1062: e => { + "use strict"; + const t = { + colon: ": ", + indent: " ", + beforeDecl: "\n", + beforeRule: "\n", + beforeOpen: " ", + beforeClose: "\n", + beforeComment: "\n", + after: "\n", + emptyBody: "", + commentLeft: " ", + commentRight: " ", + semicolon: !1 + }; + class r { + constructor(e) { + this.builder = e + } + stringify(e, t) { + if (!this[e.type]) throw new Error("Unknown AST node type " + e.type + ". Maybe you need to change PostCSS stringifier."); + this[e.type](e, t) + } + document(e) { + this.body(e) + } + root(e) { + this.body(e), e.raws.after && this.builder(e.raws.after) + } + comment(e) { + let t = this.raw(e, "left", "commentLeft"), + r = this.raw(e, "right", "commentRight"); + this.builder("/*" + t + e.text + r + "*/", e) + } + decl(e, t) { + let r = this.raw(e, "between", "colon"), + n = e.prop + r + this.rawValue(e, "value"); + e.important && (n += e.raws.important || " !important"), t && (n += ";"), this.builder(n, e) + } + rule(e) { + this.block(e, this.rawValue(e, "selector")), e.raws.ownSemicolon && this.builder(e.raws.ownSemicolon, e, "end") + } + atrule(e, t) { + let r = "@" + e.name, + n = e.params ? this.rawValue(e, "params") : ""; + if (void 0 !== e.raws.afterName ? r += e.raws.afterName : n && (r += " "), e.nodes) this.block(e, r + n); + else { + let i = (e.raws.between || "") + (t ? ";" : ""); + this.builder(r + n + i, e) + } + } + body(e) { + let t = e.nodes.length - 1; + for (; t > 0 && "comment" === e.nodes[t].type;) t -= 1; + let r = this.raw(e, "semicolon"); + for (let n = 0; n < e.nodes.length; n++) { + let i = e.nodes[n], + s = this.raw(i, "before"); + s && this.builder(s), this.stringify(i, t !== n || r) + } + } + block(e, t) { + let r, n = this.raw(e, "between", "beforeOpen"); + this.builder(t + n + "{", e, "start"), e.nodes && e.nodes.length ? (this.body(e), r = this.raw(e, "after")) : r = this.raw(e, "after", "emptyBody"), r && this.builder(r), this.builder("}", e, "end") + } + raw(e, r, n) { + let i; + if (n || (n = r), r && (i = e.raws[r], void 0 !== i)) return i; + let s = e.parent; + if ("before" === n) { + if (!s || "root" === s.type && s.first === e) return ""; + if (s && "document" === s.type) return "" + } + if (!s) return t[n]; + let o = e.root(); + if (o.rawCache || (o.rawCache = {}), void 0 !== o.rawCache[n]) return o.rawCache[n]; + if ("before" === n || "after" === n) return this.beforeAfter(e, n); + { + let t = "raw" + ((a = n)[0].toUpperCase() + a.slice(1)); + this[t] ? i = this[t](o, e) : o.walk((e => { + if (i = e.raws[r], void 0 !== i) return !1 + })) + } + var a; + return void 0 === i && (i = t[n]), o.rawCache[n] = i, i + } + rawSemicolon(e) { + let t; + return e.walk((e => { + if (e.nodes && e.nodes.length && "decl" === e.last.type && (t = e.raws.semicolon, void 0 !== t)) return !1 + })), t + } + rawEmptyBody(e) { + let t; + return e.walk((e => { + if (e.nodes && 0 === e.nodes.length && (t = e.raws.after, void 0 !== t)) return !1 + })), t + } + rawIndent(e) { + if (e.raws.indent) return e.raws.indent; + let t; + return e.walk((r => { + let n = r.parent; + if (n && n !== e && n.parent && n.parent === e && void 0 !== r.raws.before) { + let e = r.raws.before.split("\n"); + return t = e[e.length - 1], t = t.replace(/\S/g, ""), !1 + } + })), t + } + rawBeforeComment(e, t) { + let r; + return e.walkComments((e => { + if (void 0 !== e.raws.before) return r = e.raws.before, r.includes("\n") && (r = r.replace(/[^\n]+$/, "")), !1 + })), void 0 === r ? r = this.raw(t, null, "beforeDecl") : r && (r = r.replace(/\S/g, "")), r + } + rawBeforeDecl(e, t) { + let r; + return e.walkDecls((e => { + if (void 0 !== e.raws.before) return r = e.raws.before, r.includes("\n") && (r = r.replace(/[^\n]+$/, "")), !1 + })), void 0 === r ? r = this.raw(t, null, "beforeRule") : r && (r = r.replace(/\S/g, "")), r + } + rawBeforeRule(e) { + let t; + return e.walk((r => { + if (r.nodes && (r.parent !== e || e.first !== r) && void 0 !== r.raws.before) return t = r.raws.before, t.includes("\n") && (t = t.replace(/[^\n]+$/, "")), !1 + })), t && (t = t.replace(/\S/g, "")), t + } + rawBeforeClose(e) { + let t; + return e.walk((e => { + if (e.nodes && e.nodes.length > 0 && void 0 !== e.raws.after) return t = e.raws.after, t.includes("\n") && (t = t.replace(/[^\n]+$/, "")), !1 + })), t && (t = t.replace(/\S/g, "")), t + } + rawBeforeOpen(e) { + let t; + return e.walk((e => { + if ("decl" !== e.type && (t = e.raws.between, void 0 !== t)) return !1 + })), t + } + rawColon(e) { + let t; + return e.walkDecls((e => { + if (void 0 !== e.raws.between) return t = e.raws.between.replace(/[^\s:]/g, ""), !1 + })), t + } + beforeAfter(e, t) { + let r; + r = "decl" === e.type ? this.raw(e, null, "beforeDecl") : "comment" === e.type ? this.raw(e, null, "beforeComment") : "before" === t ? this.raw(e, null, "beforeRule") : this.raw(e, null, "beforeClose"); + let n = e.parent, + i = 0; + for (; n && "root" !== n.type;) i += 1, n = n.parent; + if (r.includes("\n")) { + let t = this.raw(e, null, "indent"); + if (t.length) + for (let e = 0; e < i; e++) r += t + } + return r + } + rawValue(e, t) { + let r = e[t], + n = e.raws[t]; + return n && n.value === r ? n.raw : r + } + } + e.exports = r, r.default = r + }, + 67088: (e, t, r) => { + "use strict"; + let n = r(1062); + + function i(e, t) { + new n(t).stringify(e) + } + e.exports = i, i.default = i + }, + 65513: e => { + "use strict"; + e.exports.isClean = Symbol("isClean"), e.exports.my = Symbol("my") + }, + 83852: e => { + "use strict"; + const t = "'".charCodeAt(0), + r = '"'.charCodeAt(0), + n = "\\".charCodeAt(0), + i = "/".charCodeAt(0), + s = "\n".charCodeAt(0), + o = " ".charCodeAt(0), + a = "\f".charCodeAt(0), + l = "\t".charCodeAt(0), + c = "\r".charCodeAt(0), + u = "[".charCodeAt(0), + h = "]".charCodeAt(0), + p = "(".charCodeAt(0), + d = ")".charCodeAt(0), + f = "{".charCodeAt(0), + m = "}".charCodeAt(0), + g = ";".charCodeAt(0), + b = "*".charCodeAt(0), + y = ":".charCodeAt(0), + v = "@".charCodeAt(0), + w = /[\t\n\f\r "#'()/;[\\\]{}]/g, + x = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g, + S = /.[\n"'(/\\]/, + T = /[\da-f]/i; + e.exports = function(e, A = {}) { + let E, C, O, k, I, N, D, L, q, P, M = e.css.valueOf(), + B = A.ignoreErrors, + R = M.length, + j = 0, + _ = [], + U = []; + + function H(t) { + throw e.error("Unclosed " + t, j) + } + return { + back: function(e) { + U.push(e) + }, + nextToken: function(e) { + if (U.length) return U.pop(); + if (j >= R) return; + let A = !!e && e.ignoreUnclosed; + switch (E = M.charCodeAt(j), E) { + case s: + case o: + case l: + case c: + case a: + C = j; + do { + C += 1, E = M.charCodeAt(C) + } while (E === o || E === s || E === l || E === c || E === a); + P = ["space", M.slice(j, C)], j = C - 1; + break; + case u: + case h: + case f: + case m: + case y: + case g: + case d: { + let e = String.fromCharCode(E); + P = [e, e, j]; + break + } + case p: + if (L = _.length ? _.pop()[1] : "", q = M.charCodeAt(j + 1), "url" === L && q !== t && q !== r && q !== o && q !== s && q !== l && q !== a && q !== c) { + C = j; + do { + if (N = !1, C = M.indexOf(")", C + 1), -1 === C) { + if (B || A) { + C = j; + break + } + H("bracket") + } + for (D = C; M.charCodeAt(D - 1) === n;) D -= 1, N = !N + } while (N); + P = ["brackets", M.slice(j, C + 1), j, C], j = C + } else C = M.indexOf(")", j + 1), k = M.slice(j, C + 1), -1 === C || S.test(k) ? P = ["(", "(", j] : (P = ["brackets", k, j, C], j = C); + break; + case t: + case r: + O = E === t ? "'" : '"', C = j; + do { + if (N = !1, C = M.indexOf(O, C + 1), -1 === C) { + if (B || A) { + C = j + 1; + break + } + H("string") + } + for (D = C; M.charCodeAt(D - 1) === n;) D -= 1, N = !N + } while (N); + P = ["string", M.slice(j, C + 1), j, C], j = C; + break; + case v: + w.lastIndex = j + 1, w.test(M), C = 0 === w.lastIndex ? M.length - 1 : w.lastIndex - 2, P = ["at-word", M.slice(j, C + 1), j, C], j = C; + break; + case n: + for (C = j, I = !0; M.charCodeAt(C + 1) === n;) C += 1, I = !I; + if (E = M.charCodeAt(C + 1), I && E !== i && E !== o && E !== s && E !== l && E !== c && E !== a && (C += 1, T.test(M.charAt(C)))) { + for (; T.test(M.charAt(C + 1));) C += 1; + M.charCodeAt(C + 1) === o && (C += 1) + } + P = ["word", M.slice(j, C + 1), j, C], j = C; + break; + default: + E === i && M.charCodeAt(j + 1) === b ? (C = M.indexOf("*/", j + 2) + 1, 0 === C && (B || A ? C = M.length : H("comment")), P = ["comment", M.slice(j, C + 1), j, C], j = C) : (x.lastIndex = j + 1, x.test(M), C = 0 === x.lastIndex ? M.length - 1 : x.lastIndex - 2, P = ["word", M.slice(j, C + 1), j, C], _.push(P), j = C) + } + return j++, P + }, + endOfFile: function() { + return 0 === U.length && j >= R + }, + position: function() { + return j + } + } + } + }, + 72448: (e, t, r) => { + "use strict"; + var n = r(25108); + let i = {}; + e.exports = function(e) { + i[e] || (i[e] = !0, void 0 !== n && n.warn && n.warn(e)) + } + }, + 11728: e => { + "use strict"; + class t { + constructor(e, t = {}) { + if (this.type = "warning", this.text = e, t.node && t.node.source) { + let e = t.node.rangeBy(t); + this.line = e.start.line, this.column = e.start.column, this.endLine = e.end.line, this.endColumn = e.end.column + } + for (let e in t) this[e] = t[e] + } + toString() { + return this.node ? this.node.error(this.text, { + plugin: this.plugin, + index: this.index, + word: this.word + }).message : this.plugin ? this.plugin + ": " + this.text : this.text + } + } + e.exports = t, t.default = t + }, + 91036: (e, t, r) => { + var n = r(25108); + const i = r(35106), + s = r(22997), + { + isPlainObject: o + } = r(10977), + a = r(9996), + l = r(79430), + { + parse: c + } = r(50020), + u = ["img", "audio", "video", "picture", "svg", "object", "map", "iframe", "embed"], + h = ["script", "style"]; + + function p(e, t) { + e && Object.keys(e).forEach((function(r) { + t(e[r], r) + })) + } + + function d(e, t) { + return {}.hasOwnProperty.call(e, t) + } + + function f(e, t) { + const r = []; + return p(e, (function(e) { + t(e) && r.push(e) + })), r + } + e.exports = g; + const m = /^[^\0\t\n\f\r /<=>]+$/; + + function g(e, t, r) { + if (null == e) return ""; + "number" == typeof e && (e = e.toString()); + let y = "", + v = ""; + + function w(e, t) { + const r = this; + this.tag = e, this.attribs = t || {}, this.tagPosition = y.length, this.text = "", this.mediaChildren = [], this.updateParentNodeText = function() { + D.length && (D[D.length - 1].text += r.text) + }, this.updateParentNodeMediaChildren = function() { + D.length && u.includes(this.tag) && D[D.length - 1].mediaChildren.push(this.tag) + } + }(t = Object.assign({}, g.defaults, t)).parser = Object.assign({}, b, t.parser); + const x = function(e) { + return !1 === t.allowedTags || (t.allowedTags || []).indexOf(e) > -1 + }; + h.forEach((function(e) { + x(e) && !t.allowVulnerableTags && n.warn(`\n\n⚠️ Your \`allowedTags\` option includes, \`${e}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`) + })); + const S = t.nonTextTags || ["script", "style", "textarea", "option"]; + let T, A; + t.allowedAttributes && (T = {}, A = {}, p(t.allowedAttributes, (function(e, t) { + T[t] = []; + const r = []; + e.forEach((function(e) { + "string" == typeof e && e.indexOf("*") >= 0 ? r.push(s(e).replace(/\\\*/g, ".*")) : T[t].push(e) + })), r.length && (A[t] = new RegExp("^(" + r.join("|") + ")$")) + }))); + const E = {}, + C = {}, + O = {}; + p(t.allowedClasses, (function(e, t) { + if (T && (d(T, t) || (T[t] = []), T[t].push("class")), E[t] = e, Array.isArray(e)) { + const r = []; + E[t] = [], O[t] = [], e.forEach((function(e) { + "string" == typeof e && e.indexOf("*") >= 0 ? r.push(s(e).replace(/\\\*/g, ".*")) : e instanceof RegExp ? O[t].push(e) : E[t].push(e) + })), r.length && (C[t] = new RegExp("^(" + r.join("|") + ")$")) + } + })); + const k = {}; + let I, N, D, L, q, P, M; + p(t.transformTags, (function(e, t) { + let r; + "function" == typeof e ? r = e : "string" == typeof e && (r = g.simpleTransform(e)), "*" === t ? I = r : k[t] = r + })); + let B = !1; + j(); + const R = new i.Parser({ + onopentag: function(e, r) { + if (t.enforceHtmlBoundary && "html" === e && j(), P) return void M++; + const i = new w(e, r); + D.push(i); + let s = !1; + const u = !!i.text; + let h; + if (d(k, e) && (h = k[e](e, r), i.attribs = r = h.attribs, void 0 !== h.text && (i.innerText = h.text), e !== h.tagName && (i.name = e = h.tagName, q[N] = h.tagName)), I && (h = I(e, r), i.attribs = r = h.attribs, e !== h.tagName && (i.name = e = h.tagName, q[N] = h.tagName)), (!x(e) || "recursiveEscape" === t.disallowedTagsMode && ! function(e) { + for (const t in e) + if (d(e, t)) return !1; + return !0 + }(L) || null != t.nestingLimit && N >= t.nestingLimit) && (s = !0, L[N] = !0, "discard" === t.disallowedTagsMode && -1 !== S.indexOf(e) && (P = !0, M = 1), L[N] = !0), N++, s) { + if ("discard" === t.disallowedTagsMode) return; + v = y, y = "" + } + y += "<" + e, "script" === e && (t.allowedScriptHostnames || t.allowedScriptDomains) && (i.innerText = ""), (!T || d(T, e) || T["*"]) && p(r, (function(r, s) { + if (!m.test(s)) return void delete i.attribs[s]; + if ("" === r && (t.nonBooleanAttributes.includes(s) || t.nonBooleanAttributes.includes("*"))) return void delete i.attribs[s]; + let u = !1; + if (!T || d(T, e) && -1 !== T[e].indexOf(s) || T["*"] && -1 !== T["*"].indexOf(s) || d(A, e) && A[e].test(s) || A["*"] && A["*"].test(s)) u = !0; + else if (T && T[e]) + for (const t of T[e]) + if (o(t) && t.name && t.name === s) { + u = !0; + let e = ""; + if (!0 === t.multiple) { + const n = r.split(" "); + for (const r of n) - 1 !== t.values.indexOf(r) && ("" === e ? e = r : e += " " + r) + } else t.values.indexOf(r) >= 0 && (e = r); + r = e + } if (u) { + if (-1 !== t.allowedSchemesAppliedToAttributes.indexOf(s) && U(e, r)) return void delete i.attribs[s]; + if ("script" === e && "src" === s) { + let e = !0; + try { + const n = H(r); + if (t.allowedScriptHostnames || t.allowedScriptDomains) { + const r = (t.allowedScriptHostnames || []).find((function(e) { + return e === n.url.hostname + })), + i = (t.allowedScriptDomains || []).find((function(e) { + return n.url.hostname === e || n.url.hostname.endsWith(`.${e}`) + })); + e = r || i + } + } catch (t) { + e = !1 + } + if (!e) return void delete i.attribs[s] + } + if ("iframe" === e && "src" === s) { + let e = !0; + try { + const n = H(r); + if (n.isRelativeUrl) e = d(t, "allowIframeRelativeUrls") ? t.allowIframeRelativeUrls : !t.allowedIframeHostnames && !t.allowedIframeDomains; + else if (t.allowedIframeHostnames || t.allowedIframeDomains) { + const r = (t.allowedIframeHostnames || []).find((function(e) { + return e === n.url.hostname + })), + i = (t.allowedIframeDomains || []).find((function(e) { + return n.url.hostname === e || n.url.hostname.endsWith(`.${e}`) + })); + e = r || i + } + } catch (t) { + e = !1 + } + if (!e) return void delete i.attribs[s] + } + if ("srcset" === s) try { + let e = l(r); + if (e.forEach((function(e) { + U("srcset", e.url) && (e.evil = !0) + })), e = f(e, (function(e) { + return !e.evil + })), !e.length) return void delete i.attribs[s]; + r = f(e, (function(e) { + return !e.evil + })).map((function(e) { + if (!e.url) throw new Error("URL missing"); + return e.url + (e.w ? ` ${e.w}w` : "") + (e.h ? ` ${e.h}h` : "") + (e.d ? ` ${e.d}x` : "") + })).join(", "), i.attribs[s] = r + } catch (e) { + return void delete i.attribs[s] + } + if ("class" === s) { + const t = E[e], + n = E["*"], + o = C[e], + l = O[e], + c = [o, C["*"]].concat(l).filter((function(e) { + return e + })); + if (!(h = r, p = t && n ? a(t, n) : t || n, g = c, r = p ? (h = h.split(/\s+/)).filter((function(e) { + return -1 !== p.indexOf(e) || g.some((function(t) { + return t.test(e) + })) + })).join(" ") : h).length) return void delete i.attribs[s] + } + if ("style" === s) + if (t.parseStyleAttributes) try { + if (0 === (r = function(e) { + return e.nodes[0].nodes.reduce((function(e, t) { + return e.push(`${t.prop}:${t.value}${t.important?" !important":""}`), e + }), []).join(";") + }(function(e, t) { + if (!t) return e; + const r = e.nodes[0]; + let n; + return n = t[r.selector] && t["*"] ? a(t[r.selector], t["*"]) : t[r.selector] || t["*"], n && (e.nodes[0].nodes = r.nodes.reduce(function(e) { + return function(t, r) { + return d(e, r.prop) && e[r.prop].some((function(e) { + return e.test(r.value) + })) && t.push(r), t + } + }(n), [])), e + }(c(e + " {" + r + "}"), t.allowedStyles))).length) return void delete i.attribs[s] + } catch (t) { + return "undefined" != typeof window && n.warn('Failed to parse "' + e + " {" + r + "}\", If you're running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547"), void delete i.attribs[s] + } else if (t.allowedStyles) throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false."); + y += " " + s, r && r.length && (y += '="' + _(r, !0) + '"') + } else delete i.attribs[s]; + var h, p, g + })), -1 !== t.selfClosing.indexOf(e) ? y += " />" : (y += ">", !i.innerText || u || t.textFilter || (y += _(i.innerText), B = !0)), s && (y = v + _(y), v = "") + }, + ontext: function(e) { + if (P) return; + const r = D[D.length - 1]; + let n; + if (r && (n = r.tag, e = void 0 !== r.innerText ? r.innerText : e), "discard" !== t.disallowedTagsMode || "script" !== n && "style" !== n) { + const r = _(e, !1); + t.textFilter && !B ? y += t.textFilter(r, n) : B || (y += r) + } else y += e; + D.length && (D[D.length - 1].text += e) + }, + onclosetag: function(e, r) { + if (P) { + if (M--, M) return; + P = !1 + } + const n = D.pop(); + if (!n) return; + if (n.tag !== e) return void D.push(n); + P = !!t.enforceHtmlBoundary && "html" === e, N--; + const i = L[N]; + if (i) { + if (delete L[N], "discard" === t.disallowedTagsMode) return void n.updateParentNodeText(); + v = y, y = "" + } + q[N] && (e = q[N], delete q[N]), t.exclusiveFilter && t.exclusiveFilter(n) ? y = y.substr(0, n.tagPosition) : (n.updateParentNodeMediaChildren(), n.updateParentNodeText(), -1 !== t.selfClosing.indexOf(e) || r && !x(e) && ["escape", "recursiveEscape"].indexOf(t.disallowedTagsMode) >= 0 ? i && (y = v, v = "") : (y += "" + e + ">", i && (y = v + _(y), v = ""), B = !1)) + } + }, t.parser); + return R.write(e), R.end(), y; + + function j() { + y = "", N = 0, D = [], L = {}, q = {}, P = !1, M = 0 + } + + function _(e, r) { + return "string" != typeof e && (e += ""), t.parser.decodeEntities && (e = e.replace(/&/g, "&").replace(//g, ">"), r && (e = e.replace(/"/g, """))), e = e.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, "&").replace(//g, ">"), r && (e = e.replace(/"/g, """)), e + } + + function U(e, r) { + for (r = r.replace(/[\x00-\x20]+/g, "");;) { + const e = r.indexOf("\x3c!--"); + if (-1 === e) break; + const t = r.indexOf("--\x3e", e + 4); + if (-1 === t) break; + r = r.substring(0, e) + r.substring(t + 3) + } + const n = r.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/); + if (!n) return !!r.match(/^[/\\]{2}/) && !t.allowProtocolRelative; + const i = n[1].toLowerCase(); + return d(t.allowedSchemesByTag, e) ? -1 === t.allowedSchemesByTag[e].indexOf(i) : !t.allowedSchemes || -1 === t.allowedSchemes.indexOf(i) + } + + function H(e) { + if ((e = e.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, "$1//")).startsWith("relative:")) throw new Error("relative: exploit attempt"); + let t = "relative://relative-site"; + for (let e = 0; e < 100; e++) t += `/${e}`; + const r = new URL(e, t); + return { + isRelativeUrl: r && "relative-site" === r.hostname && "relative:" === r.protocol, + url: r + } + } + } + const b = { + decodeEntities: !0 + }; + g.defaults = { + allowedTags: ["address", "article", "aside", "footer", "header", "h1", "h2", "h3", "h4", "h5", "h6", "hgroup", "main", "nav", "section", "blockquote", "dd", "div", "dl", "dt", "figcaption", "figure", "hr", "li", "main", "ol", "p", "pre", "ul", "a", "abbr", "b", "bdi", "bdo", "br", "cite", "code", "data", "dfn", "em", "i", "kbd", "mark", "q", "rb", "rp", "rt", "rtc", "ruby", "s", "samp", "small", "span", "strong", "sub", "sup", "time", "u", "var", "wbr", "caption", "col", "colgroup", "table", "tbody", "td", "tfoot", "th", "thead", "tr"], + nonBooleanAttributes: ["abbr", "accept", "accept-charset", "accesskey", "action", "allow", "alt", "as", "autocapitalize", "autocomplete", "blocking", "charset", "cite", "class", "color", "cols", "colspan", "content", "contenteditable", "coords", "crossorigin", "data", "datetime", "decoding", "dir", "dirname", "download", "draggable", "enctype", "enterkeyhint", "fetchpriority", "for", "form", "formaction", "formenctype", "formmethod", "formtarget", "headers", "height", "hidden", "high", "href", "hreflang", "http-equiv", "id", "imagesizes", "imagesrcset", "inputmode", "integrity", "is", "itemid", "itemprop", "itemref", "itemtype", "kind", "label", "lang", "list", "loading", "low", "max", "maxlength", "media", "method", "min", "minlength", "name", "nonce", "optimum", "pattern", "ping", "placeholder", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "referrerpolicy", "rel", "rows", "rowspan", "sandbox", "scope", "shape", "size", "sizes", "slot", "span", "spellcheck", "src", "srcdoc", "srclang", "srcset", "start", "step", "style", "tabindex", "target", "title", "translate", "type", "usemap", "value", "width", "wrap", "onauxclick", "onafterprint", "onbeforematch", "onbeforeprint", "onbeforeunload", "onbeforetoggle", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextlost", "oncontextmenu", "oncontextrestored", "oncopy", "oncuechange", "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "onformdata", "onhashchange", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onlanguagechange", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmessage", "onmessageerror", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onoffline", "ononline", "onpagehide", "onpageshow", "onpaste", "onpause", "onplay", "onplaying", "onpopstate", "onprogress", "onratechange", "onreset", "onresize", "onrejectionhandled", "onscroll", "onscrollend", "onsecuritypolicyviolation", "onseeked", "onseeking", "onselect", "onslotchange", "onstalled", "onstorage", "onsubmit", "onsuspend", "ontimeupdate", "ontoggle", "onunhandledrejection", "onunload", "onvolumechange", "onwaiting", "onwheel"], + disallowedTagsMode: "discard", + allowedAttributes: { + a: ["href", "name", "target"], + img: ["src", "srcset", "alt", "title", "width", "height", "loading"] + }, + selfClosing: ["img", "br", "hr", "area", "base", "basefont", "input", "link", "meta"], + allowedSchemes: ["http", "https", "ftp", "mailto", "tel"], + allowedSchemesByTag: {}, + allowedSchemesAppliedToAttributes: ["href", "src", "cite"], + allowProtocolRelative: !0, + enforceHtmlBoundary: !1, + parseStyleAttributes: !0 + }, g.simpleTransform = function(e, t, r) { + return r = void 0 === r || r, t = t || {}, + function(n, i) { + let s; + if (r) + for (s in t) i[s] = t[s]; + else i = t; + return { + tagName: e, + attribs: i + } + } + } + }, + 32734: (e, t) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.attributeNames = t.elementNames = void 0, t.elementNames = new Map(["altGlyph", "altGlyphDef", "altGlyphItem", "animateColor", "animateMotion", "animateTransform", "clipPath", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "foreignObject", "glyphRef", "linearGradient", "radialGradient", "textPath"].map((function(e) { + return [e.toLowerCase(), e] + }))), t.attributeNames = new Map(["definitionURL", "attributeName", "attributeType", "baseFrequency", "baseProfile", "calcMode", "clipPathUnits", "diffuseConstant", "edgeMode", "filterUnits", "glyphRef", "gradientTransform", "gradientUnits", "kernelMatrix", "kernelUnitLength", "keyPoints", "keySplines", "keyTimes", "lengthAdjust", "limitingConeAngle", "markerHeight", "markerUnits", "markerWidth", "maskContentUnits", "maskUnits", "numOctaves", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "refX", "refY", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "specularConstant", "specularExponent", "spreadMethod", "startOffset", "stdDeviation", "stitchTiles", "surfaceScale", "systemLanguage", "tableValues", "targetX", "targetY", "textLength", "viewBox", "viewTarget", "xChannelSelector", "yChannelSelector", "zoomAndPan"].map((function(e) { + return [e.toLowerCase(), e] + }))) + }, + 58427: function(e, t, r) { + "use strict"; + var n = this && this.__assign || function() { + return n = Object.assign || function(e) { + for (var t, r = 1, n = arguments.length; r < n; r++) + for (var i in t = arguments[r]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }, n.apply(this, arguments) + }, + i = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + void 0 === n && (n = r); + var i = Object.getOwnPropertyDescriptor(t, r); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, n, i) + } : function(e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r] + }), + s = this && this.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + o = this && this.__importStar || function(e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) + for (var r in e) "default" !== r && Object.prototype.hasOwnProperty.call(e, r) && i(t, e, r); + return s(t, e), t + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.render = void 0; + var a = o(r(99960)), + l = r(67772), + c = r(32734), + u = new Set(["style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript"]); + + function h(e) { + return e.replace(/"/g, """) + } + var p = new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]); + + function d(e, t) { + void 0 === t && (t = {}); + for (var r = ("length" in e ? e : [e]), n = "", i = 0; i < r.length; i++) n += f(r[i], t); + return n + } + + function f(e, t) { + switch (e.type) { + case a.Root: + return d(e.children, t); + case a.Doctype: + case a.Directive: + return "<".concat(e.data, ">"); + case a.Comment: + return "\x3c!--".concat(e.data, "--\x3e"); + case a.CDATA: + return function(e) { + return "") + }(e); + case a.Script: + case a.Style: + case a.Tag: + return function(e, t) { + var r; + "foreign" === t.xmlMode && (e.name = null !== (r = c.elementNames.get(e.name)) && void 0 !== r ? r : e.name, e.parent && m.has(e.parent.name) && (t = n(n({}, t), { + xmlMode: !1 + }))), !t.xmlMode && g.has(e.name) && (t = n(n({}, t), { + xmlMode: "foreign" + })); + var i = "<".concat(e.name), + s = function(e, t) { + var r; + if (e) { + var n = !1 === (null !== (r = t.encodeEntities) && void 0 !== r ? r : t.decodeEntities) ? h : t.xmlMode || "utf8" !== t.encodeEntities ? l.encodeXML : l.escapeAttribute; + return Object.keys(e).map((function(r) { + var i, s, o = null !== (i = e[r]) && void 0 !== i ? i : ""; + return "foreign" === t.xmlMode && (r = null !== (s = c.attributeNames.get(r)) && void 0 !== s ? s : r), t.emptyAttrs || t.xmlMode || "" !== o ? "".concat(r, '="').concat(n(o), '"') : r + })).join(" ") + } + }(e.attribs, t); + return s && (i += " ".concat(s)), 0 === e.children.length && (t.xmlMode ? !1 !== t.selfClosingTags : t.selfClosingTags && p.has(e.name)) ? (t.xmlMode || (i += " "), i += "/>") : (i += ">", e.children.length > 0 && (i += d(e.children, t)), !t.xmlMode && p.has(e.name) || (i += "".concat(e.name, ">"))), i + }(e, t); + case a.Text: + return function(e, t) { + var r, n = e.data || ""; + return !1 === (null !== (r = t.encodeEntities) && void 0 !== r ? r : t.decodeEntities) || !t.xmlMode && e.parent && u.has(e.parent.name) || (n = t.xmlMode || "utf8" !== t.encodeEntities ? (0, l.encodeXML)(n) : (0, l.escapeText)(n)), n + }(e, t) + } + } + t.render = d, t.default = d; + var m = new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title"]), + g = new Set(["svg", "math"]) + }, + 61142: function(e, t, r) { + "use strict"; + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + void 0 === n && (n = r); + var i = Object.getOwnPropertyDescriptor(t, r); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, n, i) + } : function(e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r] + }), + i = this && this.__exportStar || function(e, t) { + for (var r in e) "default" === r || Object.prototype.hasOwnProperty.call(t, r) || n(t, e, r) + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.DomHandler = void 0; + var s = r(99960), + o = r(46218); + i(r(46218), t); + var a = { + withStartIndices: !1, + withEndIndices: !1, + xmlMode: !1 + }, + l = function() { + function e(e, t, r) { + this.dom = [], this.root = new o.Document(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null, "function" == typeof t && (r = t, t = a), "object" == typeof e && (t = e, e = void 0), this.callback = null != e ? e : null, this.options = null != t ? t : a, this.elementCB = null != r ? r : null + } + return e.prototype.onparserinit = function(e) { + this.parser = e + }, e.prototype.onreset = function() { + this.dom = [], this.root = new o.Document(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null + }, e.prototype.onend = function() { + this.done || (this.done = !0, this.parser = null, this.handleCallback(null)) + }, e.prototype.onerror = function(e) { + this.handleCallback(e) + }, e.prototype.onclosetag = function() { + this.lastNode = null; + var e = this.tagStack.pop(); + this.options.withEndIndices && (e.endIndex = this.parser.endIndex), this.elementCB && this.elementCB(e) + }, e.prototype.onopentag = function(e, t) { + var r = this.options.xmlMode ? s.ElementType.Tag : void 0, + n = new o.Element(e, t, void 0, r); + this.addNode(n), this.tagStack.push(n) + }, e.prototype.ontext = function(e) { + var t = this.lastNode; + if (t && t.type === s.ElementType.Text) t.data += e, this.options.withEndIndices && (t.endIndex = this.parser.endIndex); + else { + var r = new o.Text(e); + this.addNode(r), this.lastNode = r + } + }, e.prototype.oncomment = function(e) { + if (this.lastNode && this.lastNode.type === s.ElementType.Comment) this.lastNode.data += e; + else { + var t = new o.Comment(e); + this.addNode(t), this.lastNode = t + } + }, e.prototype.oncommentend = function() { + this.lastNode = null + }, e.prototype.oncdatastart = function() { + var e = new o.Text(""), + t = new o.CDATA([e]); + this.addNode(t), e.parent = t, this.lastNode = e + }, e.prototype.oncdataend = function() { + this.lastNode = null + }, e.prototype.onprocessinginstruction = function(e, t) { + var r = new o.ProcessingInstruction(e, t); + this.addNode(r) + }, e.prototype.handleCallback = function(e) { + if ("function" == typeof this.callback) this.callback(e, this.dom); + else if (e) throw e + }, e.prototype.addNode = function(e) { + var t = this.tagStack[this.tagStack.length - 1], + r = t.children[t.children.length - 1]; + this.options.withStartIndices && (e.startIndex = this.parser.startIndex), this.options.withEndIndices && (e.endIndex = this.parser.endIndex), t.children.push(e), r && (e.prev = r, r.next = e), e.parent = t, this.lastNode = null + }, e + }(); + t.DomHandler = l, t.default = l + }, + 46218: function(e, t, r) { + "use strict"; + var n, i = this && this.__extends || (n = function(e, t) { + return n = Object.setPrototypeOf || { + __proto__: [] + } + instanceof Array && function(e, t) { + e.__proto__ = t + } || function(e, t) { + for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (e[r] = t[r]) + }, n(e, t) + }, function(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); + + function r() { + this.constructor = e + } + n(e, t), e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype, new r) + }), + s = this && this.__assign || function() { + return s = Object.assign || function(e) { + for (var t, r = 1, n = arguments.length; r < n; r++) + for (var i in t = arguments[r]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }, s.apply(this, arguments) + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.cloneNode = t.hasChildren = t.isDocument = t.isDirective = t.isComment = t.isText = t.isCDATA = t.isTag = t.Element = t.Document = t.CDATA = t.NodeWithChildren = t.ProcessingInstruction = t.Comment = t.Text = t.DataNode = t.Node = void 0; + var o = r(99960), + a = function() { + function e() { + this.parent = null, this.prev = null, this.next = null, this.startIndex = null, this.endIndex = null + } + return Object.defineProperty(e.prototype, "parentNode", { + get: function() { + return this.parent + }, + set: function(e) { + this.parent = e + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(e.prototype, "previousSibling", { + get: function() { + return this.prev + }, + set: function(e) { + this.prev = e + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(e.prototype, "nextSibling", { + get: function() { + return this.next + }, + set: function(e) { + this.next = e + }, + enumerable: !1, + configurable: !0 + }), e.prototype.cloneNode = function(e) { + return void 0 === e && (e = !1), S(this, e) + }, e + }(); + t.Node = a; + var l = function(e) { + function t(t) { + var r = e.call(this) || this; + return r.data = t, r + } + return i(t, e), Object.defineProperty(t.prototype, "nodeValue", { + get: function() { + return this.data + }, + set: function(e) { + this.data = e + }, + enumerable: !1, + configurable: !0 + }), t + }(a); + t.DataNode = l; + var c = function(e) { + function t() { + var t = null !== e && e.apply(this, arguments) || this; + return t.type = o.ElementType.Text, t + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 3 + }, + enumerable: !1, + configurable: !0 + }), t + }(l); + t.Text = c; + var u = function(e) { + function t() { + var t = null !== e && e.apply(this, arguments) || this; + return t.type = o.ElementType.Comment, t + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 8 + }, + enumerable: !1, + configurable: !0 + }), t + }(l); + t.Comment = u; + var h = function(e) { + function t(t, r) { + var n = e.call(this, r) || this; + return n.name = t, n.type = o.ElementType.Directive, n + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 1 + }, + enumerable: !1, + configurable: !0 + }), t + }(l); + t.ProcessingInstruction = h; + var p = function(e) { + function t(t) { + var r = e.call(this) || this; + return r.children = t, r + } + return i(t, e), Object.defineProperty(t.prototype, "firstChild", { + get: function() { + var e; + return null !== (e = this.children[0]) && void 0 !== e ? e : null + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(t.prototype, "lastChild", { + get: function() { + return this.children.length > 0 ? this.children[this.children.length - 1] : null + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(t.prototype, "childNodes", { + get: function() { + return this.children + }, + set: function(e) { + this.children = e + }, + enumerable: !1, + configurable: !0 + }), t + }(a); + t.NodeWithChildren = p; + var d = function(e) { + function t() { + var t = null !== e && e.apply(this, arguments) || this; + return t.type = o.ElementType.CDATA, t + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 4 + }, + enumerable: !1, + configurable: !0 + }), t + }(p); + t.CDATA = d; + var f = function(e) { + function t() { + var t = null !== e && e.apply(this, arguments) || this; + return t.type = o.ElementType.Root, t + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 9 + }, + enumerable: !1, + configurable: !0 + }), t + }(p); + t.Document = f; + var m = function(e) { + function t(t, r, n, i) { + void 0 === n && (n = []), void 0 === i && (i = "script" === t ? o.ElementType.Script : "style" === t ? o.ElementType.Style : o.ElementType.Tag); + var s = e.call(this, n) || this; + return s.name = t, s.attribs = r, s.type = i, s + } + return i(t, e), Object.defineProperty(t.prototype, "nodeType", { + get: function() { + return 1 + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(t.prototype, "tagName", { + get: function() { + return this.name + }, + set: function(e) { + this.name = e + }, + enumerable: !1, + configurable: !0 + }), Object.defineProperty(t.prototype, "attributes", { + get: function() { + var e = this; + return Object.keys(this.attribs).map((function(t) { + var r, n; + return { + name: t, + value: e.attribs[t], + namespace: null === (r = e["x-attribsNamespace"]) || void 0 === r ? void 0 : r[t], + prefix: null === (n = e["x-attribsPrefix"]) || void 0 === n ? void 0 : n[t] + } + })) + }, + enumerable: !1, + configurable: !0 + }), t + }(p); + + function g(e) { + return (0, o.isTag)(e) + } + + function b(e) { + return e.type === o.ElementType.CDATA + } + + function y(e) { + return e.type === o.ElementType.Text + } + + function v(e) { + return e.type === o.ElementType.Comment + } + + function w(e) { + return e.type === o.ElementType.Directive + } + + function x(e) { + return e.type === o.ElementType.Root + } + + function S(e, t) { + var r; + if (void 0 === t && (t = !1), y(e)) r = new c(e.data); + else if (v(e)) r = new u(e.data); + else if (g(e)) { + var n = t ? T(e.children) : [], + i = new m(e.name, s({}, e.attribs), n); + n.forEach((function(e) { + return e.parent = i + })), null != e.namespace && (i.namespace = e.namespace), e["x-attribsNamespace"] && (i["x-attribsNamespace"] = s({}, e["x-attribsNamespace"])), e["x-attribsPrefix"] && (i["x-attribsPrefix"] = s({}, e["x-attribsPrefix"])), r = i + } else if (b(e)) { + n = t ? T(e.children) : []; + var o = new d(n); + n.forEach((function(e) { + return e.parent = o + })), r = o + } else if (x(e)) { + n = t ? T(e.children) : []; + var a = new f(n); + n.forEach((function(e) { + return e.parent = a + })), e["x-mode"] && (a["x-mode"] = e["x-mode"]), r = a + } else { + if (!w(e)) throw new Error("Not implemented yet: ".concat(e.type)); + var l = new h(e.name, e.data); + null != e["x-name"] && (l["x-name"] = e["x-name"], l["x-publicId"] = e["x-publicId"], l["x-systemId"] = e["x-systemId"]), r = l + } + return r.startIndex = e.startIndex, r.endIndex = e.endIndex, null != e.sourceCodeLocation && (r.sourceCodeLocation = e.sourceCodeLocation), r + } + + function T(e) { + for (var t = e.map((function(e) { + return S(e, !0) + })), r = 1; r < t.length; r++) t[r].prev = t[r - 1], t[r - 1].next = t[r]; + return t + } + t.Element = m, t.isTag = g, t.isCDATA = b, t.isText = y, t.isComment = v, t.isDirective = w, t.isDocument = x, t.hasChildren = function(e) { + return Object.prototype.hasOwnProperty.call(e, "children") + }, t.cloneNode = S + }, + 22903: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.getFeed = void 0; + var n = r(45283), + i = r(99473); + t.getFeed = function(e) { + var t = l(h, e); + return t ? "feed" === t.name ? function(e) { + var t, r = e.children, + n = { + type: "atom", + items: (0, i.getElementsByTagName)("entry", r).map((function(e) { + var t, r = e.children, + n = { + media: a(r) + }; + u(n, "id", "id", r), u(n, "title", "title", r); + var i = null === (t = l("link", r)) || void 0 === t ? void 0 : t.attribs.href; + i && (n.link = i); + var s = c("summary", r) || c("content", r); + s && (n.description = s); + var o = c("updated", r); + return o && (n.pubDate = new Date(o)), n + })) + }; + u(n, "id", "id", r), u(n, "title", "title", r); + var s = null === (t = l("link", r)) || void 0 === t ? void 0 : t.attribs.href; + s && (n.link = s), u(n, "description", "subtitle", r); + var o = c("updated", r); + return o && (n.updated = new Date(o)), u(n, "author", "email", r, !0), n + }(t) : function(e) { + var t, r, n = null !== (r = null === (t = l("channel", e.children)) || void 0 === t ? void 0 : t.children) && void 0 !== r ? r : [], + s = { + type: e.name.substr(0, 3), + id: "", + items: (0, i.getElementsByTagName)("item", e.children).map((function(e) { + var t = e.children, + r = { + media: a(t) + }; + u(r, "id", "guid", t), u(r, "title", "title", t), u(r, "link", "link", t), u(r, "description", "description", t); + var n = c("pubDate", t); + return n && (r.pubDate = new Date(n)), r + })) + }; + u(s, "title", "title", n), u(s, "link", "link", n), u(s, "description", "description", n); + var o = c("lastBuildDate", n); + return o && (s.updated = new Date(o)), u(s, "author", "managingEditor", n, !0), s + }(t) : null + }; + var s = ["url", "type", "lang"], + o = ["fileSize", "bitrate", "framerate", "samplingrate", "channels", "duration", "height", "width"]; + + function a(e) { + return (0, i.getElementsByTagName)("media:content", e).map((function(e) { + for (var t = e.attribs, r = { + medium: t.medium, + isDefault: !!t.isDefault + }, n = 0, i = s; n < i.length; n++) t[c = i[n]] && (r[c] = t[c]); + for (var a = 0, l = o; a < l.length; a++) { + var c; + t[c = l[a]] && (r[c] = parseInt(t[c], 10)) + } + return t.expression && (r.expression = t.expression), r + })) + } + + function l(e, t) { + return (0, i.getElementsByTagName)(e, t, !0, 1)[0] + } + + function c(e, t, r) { + return void 0 === r && (r = !1), (0, n.textContent)((0, i.getElementsByTagName)(e, t, r, 1)).trim() + } + + function u(e, t, r, n, i) { + void 0 === i && (i = !1); + var s = c(r, n, i); + s && (e[t] = s) + } + + function h(e) { + return "rss" === e || "feed" === e || "rdf:RDF" === e + } + }, + 67701: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.uniqueSort = t.compareDocumentPosition = t.DocumentPosition = t.removeSubsets = void 0; + var n, i = r(61142); + + function s(e, t) { + var r = [], + s = []; + if (e === t) return 0; + for (var o = (0, i.hasChildren)(e) ? e : e.parent; o;) r.unshift(o), o = o.parent; + for (o = (0, i.hasChildren)(t) ? t : t.parent; o;) s.unshift(o), o = o.parent; + for (var a = Math.min(r.length, s.length), l = 0; l < a && r[l] === s[l];) l++; + if (0 === l) return n.DISCONNECTED; + var c = r[l - 1], + u = c.children, + h = r[l], + p = s[l]; + return u.indexOf(h) > u.indexOf(p) ? c === t ? n.FOLLOWING | n.CONTAINED_BY : n.FOLLOWING : c === e ? n.PRECEDING | n.CONTAINS : n.PRECEDING + } + t.removeSubsets = function(e) { + for (var t = e.length; --t >= 0;) { + var r = e[t]; + if (t > 0 && e.lastIndexOf(r, t - 1) >= 0) e.splice(t, 1); + else + for (var n = r.parent; n; n = n.parent) + if (e.includes(n)) { + e.splice(t, 1); + break + } + } + return e + }, + function(e) { + e[e.DISCONNECTED = 1] = "DISCONNECTED", e[e.PRECEDING = 2] = "PRECEDING", e[e.FOLLOWING = 4] = "FOLLOWING", e[e.CONTAINS = 8] = "CONTAINS", e[e.CONTAINED_BY = 16] = "CONTAINED_BY" + }(n = t.DocumentPosition || (t.DocumentPosition = {})), t.compareDocumentPosition = s, t.uniqueSort = function(e) { + return (e = e.filter((function(e, t, r) { + return !r.includes(e, t + 1) + }))).sort((function(e, t) { + var r = s(e, t); + return r & n.PRECEDING ? -1 : r & n.FOLLOWING ? 1 : 0 + })), e + } + }, + 47241: function(e, t, r) { + "use strict"; + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + void 0 === n && (n = r); + var i = Object.getOwnPropertyDescriptor(t, r); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, n, i) + } : function(e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r] + }), + i = this && this.__exportStar || function(e, t) { + for (var r in e) "default" === r || Object.prototype.hasOwnProperty.call(t, r) || n(t, e, r) + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.hasChildren = t.isDocument = t.isComment = t.isText = t.isCDATA = t.isTag = void 0, i(r(45283), t), i(r(17972), t), i(r(14541), t), i(r(2764), t), i(r(99473), t), i(r(67701), t), i(r(22903), t); + var s = r(61142); + Object.defineProperty(t, "isTag", { + enumerable: !0, + get: function() { + return s.isTag + } + }), Object.defineProperty(t, "isCDATA", { + enumerable: !0, + get: function() { + return s.isCDATA + } + }), Object.defineProperty(t, "isText", { + enumerable: !0, + get: function() { + return s.isText + } + }), Object.defineProperty(t, "isComment", { + enumerable: !0, + get: function() { + return s.isComment + } + }), Object.defineProperty(t, "isDocument", { + enumerable: !0, + get: function() { + return s.isDocument + } + }), Object.defineProperty(t, "hasChildren", { + enumerable: !0, + get: function() { + return s.hasChildren + } + }) + }, + 99473: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.getElementsByTagType = t.getElementsByTagName = t.getElementById = t.getElements = t.testElement = void 0; + var n = r(61142), + i = r(2764), + s = { + tag_name: function(e) { + return "function" == typeof e ? function(t) { + return (0, n.isTag)(t) && e(t.name) + } : "*" === e ? n.isTag : function(t) { + return (0, n.isTag)(t) && t.name === e + } + }, + tag_type: function(e) { + return "function" == typeof e ? function(t) { + return e(t.type) + } : function(t) { + return t.type === e + } + }, + tag_contains: function(e) { + return "function" == typeof e ? function(t) { + return (0, n.isText)(t) && e(t.data) + } : function(t) { + return (0, n.isText)(t) && t.data === e + } + } + }; + + function o(e, t) { + return "function" == typeof t ? function(r) { + return (0, n.isTag)(r) && t(r.attribs[e]) + } : function(r) { + return (0, n.isTag)(r) && r.attribs[e] === t + } + } + + function a(e, t) { + return function(r) { + return e(r) || t(r) + } + } + + function l(e) { + var t = Object.keys(e).map((function(t) { + var r = e[t]; + return Object.prototype.hasOwnProperty.call(s, t) ? s[t](r) : o(t, r) + })); + return 0 === t.length ? null : t.reduce(a) + } + t.testElement = function(e, t) { + var r = l(e); + return !r || r(t) + }, t.getElements = function(e, t, r, n) { + void 0 === n && (n = 1 / 0); + var s = l(e); + return s ? (0, i.filter)(s, t, r, n) : [] + }, t.getElementById = function(e, t, r) { + return void 0 === r && (r = !0), Array.isArray(t) || (t = [t]), (0, i.findOne)(o("id", e), t, r) + }, t.getElementsByTagName = function(e, t, r, n) { + return void 0 === r && (r = !0), void 0 === n && (n = 1 / 0), (0, i.filter)(s.tag_name(e), t, r, n) + }, t.getElementsByTagType = function(e, t, r, n) { + return void 0 === r && (r = !0), void 0 === n && (n = 1 / 0), (0, i.filter)(s.tag_type(e), t, r, n) + } + }, + 14541: (e, t) => { + "use strict"; + + function r(e) { + if (e.prev && (e.prev.next = e.next), e.next && (e.next.prev = e.prev), e.parent) { + var t = e.parent.children; + t.splice(t.lastIndexOf(e), 1) + } + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.prepend = t.prependChild = t.append = t.appendChild = t.replaceElement = t.removeElement = void 0, t.removeElement = r, t.replaceElement = function(e, t) { + var r = t.prev = e.prev; + r && (r.next = t); + var n = t.next = e.next; + n && (n.prev = t); + var i = t.parent = e.parent; + if (i) { + var s = i.children; + s[s.lastIndexOf(e)] = t, e.parent = null + } + }, t.appendChild = function(e, t) { + if (r(t), t.next = null, t.parent = e, e.children.push(t) > 1) { + var n = e.children[e.children.length - 2]; + n.next = t, t.prev = n + } else t.prev = null + }, t.append = function(e, t) { + r(t); + var n = e.parent, + i = e.next; + if (t.next = i, t.prev = e, e.next = t, t.parent = n, i) { + if (i.prev = t, n) { + var s = n.children; + s.splice(s.lastIndexOf(i), 0, t) + } + } else n && n.children.push(t) + }, t.prependChild = function(e, t) { + if (r(t), t.parent = e, t.prev = null, 1 !== e.children.unshift(t)) { + var n = e.children[1]; + n.prev = t, t.next = n + } else t.next = null + }, t.prepend = function(e, t) { + r(t); + var n = e.parent; + if (n) { + var i = n.children; + i.splice(i.indexOf(e), 0, t) + } + e.prev && (e.prev.next = t), t.parent = n, t.prev = e.prev, t.next = e, e.prev = t + } + }, + 2764: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.findAll = t.existsOne = t.findOne = t.findOneChild = t.find = t.filter = void 0; + var n = r(61142); + + function i(e, t, r, s) { + for (var o = [], a = 0, l = t; a < l.length; a++) { + var c = l[a]; + if (e(c) && (o.push(c), --s <= 0)) break; + if (r && (0, n.hasChildren)(c) && c.children.length > 0) { + var u = i(e, c.children, r, s); + if (o.push.apply(o, u), (s -= u.length) <= 0) break + } + } + return o + } + t.filter = function(e, t, r, n) { + return void 0 === r && (r = !0), void 0 === n && (n = 1 / 0), Array.isArray(t) || (t = [t]), i(e, t, r, n) + }, t.find = i, t.findOneChild = function(e, t) { + return t.find(e) + }, t.findOne = function e(t, r, i) { + void 0 === i && (i = !0); + for (var s = null, o = 0; o < r.length && !s; o++) { + var a = r[o]; + (0, n.isTag)(a) && (t(a) ? s = a : i && a.children.length > 0 && (s = e(t, a.children, !0))) + } + return s + }, t.existsOne = function e(t, r) { + return r.some((function(r) { + return (0, n.isTag)(r) && (t(r) || r.children.length > 0 && e(t, r.children)) + })) + }, t.findAll = function(e, t) { + for (var r, i, s = [], o = t.filter(n.isTag); i = o.shift();) { + var a = null === (r = i.children) || void 0 === r ? void 0 : r.filter(n.isTag); + a && a.length > 0 && o.unshift.apply(o, a), e(i) && s.push(i) + } + return s + } + }, + 45283: function(e, t, r) { + "use strict"; + var n = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.innerText = t.textContent = t.getText = t.getInnerHTML = t.getOuterHTML = void 0; + var i = r(61142), + s = n(r(58427)), + o = r(99960); + + function a(e, t) { + return (0, s.default)(e, t) + } + t.getOuterHTML = a, t.getInnerHTML = function(e, t) { + return (0, i.hasChildren)(e) ? e.children.map((function(e) { + return a(e, t) + })).join("") : "" + }, t.getText = function e(t) { + return Array.isArray(t) ? t.map(e).join("") : (0, i.isTag)(t) ? "br" === t.name ? "\n" : e(t.children) : (0, i.isCDATA)(t) ? e(t.children) : (0, i.isText)(t) ? t.data : "" + }, t.textContent = function e(t) { + return Array.isArray(t) ? t.map(e).join("") : (0, i.hasChildren)(t) && !(0, i.isComment)(t) ? e(t.children) : (0, i.isText)(t) ? t.data : "" + }, t.innerText = function e(t) { + return Array.isArray(t) ? t.map(e).join("") : (0, i.hasChildren)(t) && (t.type === o.ElementType.Tag || (0, i.isCDATA)(t)) ? e(t.children) : (0, i.isText)(t) ? t.data : "" + } + }, + 17972: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.prevElementSibling = t.nextElementSibling = t.getName = t.hasAttrib = t.getAttributeValue = t.getSiblings = t.getParent = t.getChildren = void 0; + var n = r(61142); + + function i(e) { + return (0, n.hasChildren)(e) ? e.children : [] + } + + function s(e) { + return e.parent || null + } + t.getChildren = i, t.getParent = s, t.getSiblings = function(e) { + var t = s(e); + if (null != t) return i(t); + for (var r = [e], n = e.prev, o = e.next; null != n;) r.unshift(n), n = n.prev; + for (; null != o;) r.push(o), o = o.next; + return r + }, t.getAttributeValue = function(e, t) { + var r; + return null === (r = e.attribs) || void 0 === r ? void 0 : r[t] + }, t.hasAttrib = function(e, t) { + return null != e.attribs && Object.prototype.hasOwnProperty.call(e.attribs, t) && null != e.attribs[t] + }, t.getName = function(e) { + return e.name + }, t.nextElementSibling = function(e) { + for (var t = e.next; null !== t && !(0, n.isTag)(t);) t = t.next; + return t + }, t.prevElementSibling = function(e) { + for (var t = e.prev; null !== t && !(0, n.isTag)(t);) t = t.prev; + return t + } + }, + 40722: function(e, t, r) { + "use strict"; + var n = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.decodeXML = t.decodeHTMLStrict = t.decodeHTML = t.determineBranch = t.BinTrieFlags = t.fromCodePoint = t.replaceCodePoint = t.decodeCodePoint = t.xmlDecodeTree = t.htmlDecodeTree = void 0; + var i = n(r(50039)); + t.htmlDecodeTree = i.default; + var s = n(r(65518)); + t.xmlDecodeTree = s.default; + var o = n(r(42913)); + t.decodeCodePoint = o.default; + var a, l, c = r(42913); + + function u(e) { + return function(t, r) { + for (var n = "", i = 0, s = 0; + (s = t.indexOf("&", s)) >= 0;) + if (n += t.slice(i, s), i = s, s += 1, t.charCodeAt(s) !== a.NUM) { + for (var c = 0, u = 1, p = 0, d = e[p]; s < t.length && !((p = h(e, d, p + 1, t.charCodeAt(s))) < 0); s++, u++) { + var f = (d = e[p]) & l.VALUE_LENGTH; + if (f) { + var m; + if (r && t.charCodeAt(s) !== a.SEMI || (c = p, u = 0), 0 == (m = (f >> 14) - 1)) break; + p += m + } + } + 0 !== c && (n += 1 == (m = (e[c] & l.VALUE_LENGTH) >> 14) ? String.fromCharCode(e[c] & ~l.VALUE_LENGTH) : 2 === m ? String.fromCharCode(e[c + 1]) : String.fromCharCode(e[c + 1], e[c + 2]), i = s - u + 1) + } else { + var g = s + 1, + b = 10, + y = t.charCodeAt(g); + (y | a.To_LOWER_BIT) === a.LOWER_X && (b = 16, s += 1, g += 1); + do { + y = t.charCodeAt(++s) + } while (y >= a.ZERO && y <= a.NINE || 16 === b && (y | a.To_LOWER_BIT) >= a.LOWER_A && (y | a.To_LOWER_BIT) <= a.LOWER_F); + if (g !== s) { + var v = t.substring(g, s), + w = parseInt(v, b); + if (t.charCodeAt(s) === a.SEMI) s += 1; + else if (r) continue; + n += (0, o.default)(w), i = s + } + } return n + t.slice(i) + } + } + + function h(e, t, r, n) { + var i = (t & l.BRANCH_LENGTH) >> 7, + s = t & l.JUMP_TABLE; + if (0 === i) return 0 !== s && n === s ? r : -1; + if (s) { + var o = n - s; + return o < 0 || o >= i ? -1 : e[r + o] - 1 + } + for (var a = r, c = a + i - 1; a <= c;) { + var u = a + c >>> 1, + h = e[u]; + if (h < n) a = u + 1; + else { + if (!(h > n)) return e[u + i]; + c = u - 1 + } + } + return -1 + } + Object.defineProperty(t, "replaceCodePoint", { + enumerable: !0, + get: function() { + return c.replaceCodePoint + } + }), Object.defineProperty(t, "fromCodePoint", { + enumerable: !0, + get: function() { + return c.fromCodePoint + } + }), + function(e) { + e[e.NUM = 35] = "NUM", e[e.SEMI = 59] = "SEMI", e[e.ZERO = 48] = "ZERO", e[e.NINE = 57] = "NINE", e[e.LOWER_A = 97] = "LOWER_A", e[e.LOWER_F = 102] = "LOWER_F", e[e.LOWER_X = 120] = "LOWER_X", e[e.To_LOWER_BIT = 32] = "To_LOWER_BIT" + }(a || (a = {})), + function(e) { + e[e.VALUE_LENGTH = 49152] = "VALUE_LENGTH", e[e.BRANCH_LENGTH = 16256] = "BRANCH_LENGTH", e[e.JUMP_TABLE = 127] = "JUMP_TABLE" + }(l = t.BinTrieFlags || (t.BinTrieFlags = {})), t.determineBranch = h; + var p = u(i.default), + d = u(s.default); + t.decodeHTML = function(e) { + return p(e, !1) + }, t.decodeHTMLStrict = function(e) { + return p(e, !0) + }, t.decodeXML = function(e) { + return d(e, !0) + } + }, + 42913: (e, t) => { + "use strict"; + var r; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.replaceCodePoint = t.fromCodePoint = void 0; + var n = new Map([ + [0, 65533], + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376] + ]); + + function i(e) { + var t; + return e >= 55296 && e <= 57343 || e > 1114111 ? 65533 : null !== (t = n.get(e)) && void 0 !== t ? t : e + } + t.fromCodePoint = null !== (r = String.fromCodePoint) && void 0 !== r ? r : function(e) { + var t = ""; + return e > 65535 && (e -= 65536, t += String.fromCharCode(e >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), t + String.fromCharCode(e) + }, t.replaceCodePoint = i, t.default = function(e) { + return (0, t.fromCodePoint)(i(e)) + } + }, + 10571: function(e, t, r) { + "use strict"; + var n = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.encodeNonAsciiHTML = t.encodeHTML = void 0; + var i = n(r(49829)), + s = r(77084), + o = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; + + function a(e, t) { + for (var r, n = "", o = 0; null !== (r = e.exec(t));) { + var a = r.index; + n += t.substring(o, a); + var l = t.charCodeAt(a), + c = i.default.get(l); + if ("object" == typeof c) { + if (a + 1 < t.length) { + var u = t.charCodeAt(a + 1), + h = "number" == typeof c.n ? c.n === u ? c.o : void 0 : c.n.get(u); + if (void 0 !== h) { + n += h, o = e.lastIndex += 1; + continue + } + } + c = c.v + } + if (void 0 !== c) n += c, o = a + 1; + else { + var p = (0, s.getCodePoint)(t, a); + n += "".concat(p.toString(16), ";"), o = e.lastIndex += Number(p !== l) + } + } + return n + t.substr(o) + } + t.encodeHTML = function(e) { + return a(o, e) + }, t.encodeNonAsciiHTML = function(e) { + return a(s.xmlReplacer, e) + } + }, + 77084: (e, t) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.escapeText = t.escapeAttribute = t.escapeUTF8 = t.escape = t.encodeXML = t.getCodePoint = t.xmlReplacer = void 0, t.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; + var r = new Map([ + [34, """], + [38, "&"], + [39, "'"], + [60, "<"], + [62, ">"] + ]); + + function n(e) { + for (var n, i = "", s = 0; null !== (n = t.xmlReplacer.exec(e));) { + var o = n.index, + a = e.charCodeAt(o), + l = r.get(a); + void 0 !== l ? (i += e.substring(s, o) + l, s = o + 1) : (i += "".concat(e.substring(s, o), "").concat((0, t.getCodePoint)(e, o).toString(16), ";"), s = t.xmlReplacer.lastIndex += Number(55296 == (64512 & a))) + } + return i + e.substr(s) + } + + function i(e, t) { + return function(r) { + for (var n, i = 0, s = ""; n = e.exec(r);) i !== n.index && (s += r.substring(i, n.index)), s += t.get(n[0].charCodeAt(0)), i = n.index + 1; + return s + r.substring(i) + } + } + t.getCodePoint = null != String.prototype.codePointAt ? function(e, t) { + return e.codePointAt(t) + } : function(e, t) { + return 55296 == (64512 & e.charCodeAt(t)) ? 1024 * (e.charCodeAt(t) - 55296) + e.charCodeAt(t + 1) - 56320 + 65536 : e.charCodeAt(t) + }, t.encodeXML = n, t.escape = n, t.escapeUTF8 = i(/[&<>'"]/g, r), t.escapeAttribute = i(/["&\u00A0]/g, new Map([ + [34, """], + [38, "&"], + [160, " "] + ])), t.escapeText = i(/[&<>\u00A0]/g, new Map([ + [38, "&"], + [60, "<"], + [62, ">"], + [160, " "] + ])) + }, + 50039: (e, t) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.default = new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏઑඡ༉༦ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲϏϢϸontourIntegraìȹoɴ\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲy;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱còJTabcdfgorstרׯؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ߂ߐĀiyޱrc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣসে্ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४ĀnrࢃgleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpwਖਛgȀLRlr৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼અઋp;椅y;䐜Ādl੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑඞcy;䐊cute;䅃ƀaeyહાron;䅇dil;䅅;䐝ƀgswે૰ativeƀMTV૨ediumSpace;怋hiĀcn૦ëeryThiîtedĀGLଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷreak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater;EFGLSTஶஷ扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨setĀ;Eೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂෛ෧ขภยา฿ไlig;䅒cute耻Ó䃓Āiyීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲcr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬืde耻Õ䃕es;樷ml耻Ö䃖erĀBP๋Āar๐๓r;怾acĀek๚;揞et;掴arenthesis;揜ҀacfhilorsງຊຏຒດຝະrtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ檻cedesȀ;EST່້扺qual;檯lantEqual;扼ilde;找me;怳Ādpuct;戏ortionĀ;aȥl;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL憒ar;懥eftArrow;懄eiling;按oǵ\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄቕቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHcቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗ĀeiቻDzኀ\0ኇefore;戴a;䎘ĀcnኘkSpace;쀀 Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtèa;䎖r;愨pf;愤cr;쀀𝒵ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒;Eaeiopᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;eᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;eᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰᝃᝈ០៦ᠹᡐᜍ᥈ᥰot;櫭ĀcrᛶkȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀakoᠦᠵĀcn៲ᠣkƀlst֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ;敛;敘;攘;攔;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģbar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;elƀ;bhᥨᥩᥫ䁜;槅sub;柈ŬᥴlĀ;e怢t»pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭒\0᯽\0ᰌƀcprᦲute;䄇̀;abcdsᦿᧀᧄ᧕᧙戩nd;橄rcup;橉Āau᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r;Ecefms᩠ᩢᩫ᪤᪪旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ\0\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»eóɍǧ\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯delprvw᭠᭬᭷ᮂᮬᯔarrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;pᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰻᰿ᱝᱩᱵᲞᲬᲷᴍᵻᶑᶫᶻ᷆᷍ròar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂᳖᳜᳠mƀ;oș᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄĀDoḆᴴoôĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»ṺƀaeiἒἚls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧\0耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₥₰₴⃰℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽ƀ;qsؾٌlanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqrⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0proør;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼ròòΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonóquigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roøurĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨íistĀ;sடr;쀀𝔫ȀEest⩦⩹⩼ƀ;qs⩭ƀ;qs⩴lanôií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast⭕⭚⭟lleìl;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖchimpqu⮽⯍⯙⬄⯤⯯Ȁ;cerല⯆ഷ⯉uå;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭ååഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñĀ;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;cⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācrir;榿;쀀𝔬ͯ\0\0\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕⶥⶨrò᪀Āirⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔǒr;榷rp;榹;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ\0\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ脀¶;l䂶leìЃɩ\0\0m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳ᤈ⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t⾴ïrel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⋢⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔ABHabcdefhilmnoprstuxけさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstwガクシスゼゾダッデナp;極Ā;fゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ìâヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘rrowĀ;tㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowóarpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓ròaòՑ;怏oustĀ;a㈞掱che»mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì耻䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;qኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫwar;椪lig耻ß䃟㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rëƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproøim»ኬsðኞĀas㚺㚮ðrn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈadempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xôheadĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roðtré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜtré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((function(e) { + return e.charCodeAt(0) + }))) + }, + 65518: (e, t) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.default = new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((function(e) { + return e.charCodeAt(0) + }))) + }, + 49829: (e, t) => { + "use strict"; + + function r(e) { + for (var t = 1; t < e.length; t++) e[t][0] += e[t - 1][0] + 1; + return e + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.default = new Map(r([ + [9, "	"], + [0, "
"], + [22, "!"], + [0, """], + [0, "#"], + [0, "$"], + [0, "%"], + [0, "&"], + [0, "'"], + [0, "("], + [0, ")"], + [0, "*"], + [0, "+"], + [0, ","], + [1, "."], + [0, "/"], + [10, ":"], + [0, ";"], + [0, { + v: "<", + n: 8402, + o: "<⃒" + }], + [0, { + v: "=", + n: 8421, + o: "=⃥" + }], + [0, { + v: ">", + n: 8402, + o: ">⃒" + }], + [0, "?"], + [0, "@"], + [26, "["], + [0, "\"], + [0, "]"], + [0, "^"], + [0, "_"], + [0, "`"], + [5, { + n: 106, + o: "fj" + }], + [20, "{"], + [0, "|"], + [0, "}"], + [34, " "], + [0, "¡"], + [0, "¢"], + [0, "£"], + [0, "¤"], + [0, "¥"], + [0, "¦"], + [0, "§"], + [0, "¨"], + [0, "©"], + [0, "ª"], + [0, "«"], + [0, "¬"], + [0, ""], + [0, "®"], + [0, "¯"], + [0, "°"], + [0, "±"], + [0, "²"], + [0, "³"], + [0, "´"], + [0, "µ"], + [0, "¶"], + [0, "·"], + [0, "¸"], + [0, "¹"], + [0, "º"], + [0, "»"], + [0, "¼"], + [0, "½"], + [0, "¾"], + [0, "¿"], + [0, "À"], + [0, "Á"], + [0, "Â"], + [0, "Ã"], + [0, "Ä"], + [0, "Å"], + [0, "Æ"], + [0, "Ç"], + [0, "È"], + [0, "É"], + [0, "Ê"], + [0, "Ë"], + [0, "Ì"], + [0, "Í"], + [0, "Î"], + [0, "Ï"], + [0, "Ð"], + [0, "Ñ"], + [0, "Ò"], + [0, "Ó"], + [0, "Ô"], + [0, "Õ"], + [0, "Ö"], + [0, "×"], + [0, "Ø"], + [0, "Ù"], + [0, "Ú"], + [0, "Û"], + [0, "Ü"], + [0, "Ý"], + [0, "Þ"], + [0, "ß"], + [0, "à"], + [0, "á"], + [0, "â"], + [0, "ã"], + [0, "ä"], + [0, "å"], + [0, "æ"], + [0, "ç"], + [0, "è"], + [0, "é"], + [0, "ê"], + [0, "ë"], + [0, "ì"], + [0, "í"], + [0, "î"], + [0, "ï"], + [0, "ð"], + [0, "ñ"], + [0, "ò"], + [0, "ó"], + [0, "ô"], + [0, "õ"], + [0, "ö"], + [0, "÷"], + [0, "ø"], + [0, "ù"], + [0, "ú"], + [0, "û"], + [0, "ü"], + [0, "ý"], + [0, "þ"], + [0, "ÿ"], + [0, "Ā"], + [0, "ā"], + [0, "Ă"], + [0, "ă"], + [0, "Ą"], + [0, "ą"], + [0, "Ć"], + [0, "ć"], + [0, "Ĉ"], + [0, "ĉ"], + [0, "Ċ"], + [0, "ċ"], + [0, "Č"], + [0, "č"], + [0, "Ď"], + [0, "ď"], + [0, "Đ"], + [0, "đ"], + [0, "Ē"], + [0, "ē"], + [2, "Ė"], + [0, "ė"], + [0, "Ę"], + [0, "ę"], + [0, "Ě"], + [0, "ě"], + [0, "Ĝ"], + [0, "ĝ"], + [0, "Ğ"], + [0, "ğ"], + [0, "Ġ"], + [0, "ġ"], + [0, "Ģ"], + [1, "Ĥ"], + [0, "ĥ"], + [0, "Ħ"], + [0, "ħ"], + [0, "Ĩ"], + [0, "ĩ"], + [0, "Ī"], + [0, "ī"], + [2, "Į"], + [0, "į"], + [0, "İ"], + [0, "ı"], + [0, "IJ"], + [0, "ij"], + [0, "Ĵ"], + [0, "ĵ"], + [0, "Ķ"], + [0, "ķ"], + [0, "ĸ"], + [0, "Ĺ"], + [0, "ĺ"], + [0, "Ļ"], + [0, "ļ"], + [0, "Ľ"], + [0, "ľ"], + [0, "Ŀ"], + [0, "ŀ"], + [0, "Ł"], + [0, "ł"], + [0, "Ń"], + [0, "ń"], + [0, "Ņ"], + [0, "ņ"], + [0, "Ň"], + [0, "ň"], + [0, "ʼn"], + [0, "Ŋ"], + [0, "ŋ"], + [0, "Ō"], + [0, "ō"], + [2, "Ő"], + [0, "ő"], + [0, "Œ"], + [0, "œ"], + [0, "Ŕ"], + [0, "ŕ"], + [0, "Ŗ"], + [0, "ŗ"], + [0, "Ř"], + [0, "ř"], + [0, "Ś"], + [0, "ś"], + [0, "Ŝ"], + [0, "ŝ"], + [0, "Ş"], + [0, "ş"], + [0, "Š"], + [0, "š"], + [0, "Ţ"], + [0, "ţ"], + [0, "Ť"], + [0, "ť"], + [0, "Ŧ"], + [0, "ŧ"], + [0, "Ũ"], + [0, "ũ"], + [0, "Ū"], + [0, "ū"], + [0, "Ŭ"], + [0, "ŭ"], + [0, "Ů"], + [0, "ů"], + [0, "Ű"], + [0, "ű"], + [0, "Ų"], + [0, "ų"], + [0, "Ŵ"], + [0, "ŵ"], + [0, "Ŷ"], + [0, "ŷ"], + [0, "Ÿ"], + [0, "Ź"], + [0, "ź"], + [0, "Ż"], + [0, "ż"], + [0, "Ž"], + [0, "ž"], + [19, "ƒ"], + [34, "Ƶ"], + [63, "ǵ"], + [65, "ȷ"], + [142, "ˆ"], + [0, "ˇ"], + [16, "˘"], + [0, "˙"], + [0, "˚"], + [0, "˛"], + [0, "˜"], + [0, "˝"], + [51, "̑"], + [127, "Α"], + [0, "Β"], + [0, "Γ"], + [0, "Δ"], + [0, "Ε"], + [0, "Ζ"], + [0, "Η"], + [0, "Θ"], + [0, "Ι"], + [0, "Κ"], + [0, "Λ"], + [0, "Μ"], + [0, "Ν"], + [0, "Ξ"], + [0, "Ο"], + [0, "Π"], + [0, "Ρ"], + [1, "Σ"], + [0, "Τ"], + [0, "Υ"], + [0, "Φ"], + [0, "Χ"], + [0, "Ψ"], + [0, "Ω"], + [7, "α"], + [0, "β"], + [0, "γ"], + [0, "δ"], + [0, "ε"], + [0, "ζ"], + [0, "η"], + [0, "θ"], + [0, "ι"], + [0, "κ"], + [0, "λ"], + [0, "μ"], + [0, "ν"], + [0, "ξ"], + [0, "ο"], + [0, "π"], + [0, "ρ"], + [0, "ς"], + [0, "σ"], + [0, "τ"], + [0, "υ"], + [0, "φ"], + [0, "χ"], + [0, "ψ"], + [0, "ω"], + [7, "ϑ"], + [0, "ϒ"], + [2, "ϕ"], + [0, "ϖ"], + [5, "Ϝ"], + [0, "ϝ"], + [18, "ϰ"], + [0, "ϱ"], + [3, "ϵ"], + [0, "϶"], + [10, "Ё"], + [0, "Ђ"], + [0, "Ѓ"], + [0, "Є"], + [0, "Ѕ"], + [0, "І"], + [0, "Ї"], + [0, "Ј"], + [0, "Љ"], + [0, "Њ"], + [0, "Ћ"], + [0, "Ќ"], + [1, "Ў"], + [0, "Џ"], + [0, "А"], + [0, "Б"], + [0, "В"], + [0, "Г"], + [0, "Д"], + [0, "Е"], + [0, "Ж"], + [0, "З"], + [0, "И"], + [0, "Й"], + [0, "К"], + [0, "Л"], + [0, "М"], + [0, "Н"], + [0, "О"], + [0, "П"], + [0, "Р"], + [0, "С"], + [0, "Т"], + [0, "У"], + [0, "Ф"], + [0, "Х"], + [0, "Ц"], + [0, "Ч"], + [0, "Ш"], + [0, "Щ"], + [0, "Ъ"], + [0, "Ы"], + [0, "Ь"], + [0, "Э"], + [0, "Ю"], + [0, "Я"], + [0, "а"], + [0, "б"], + [0, "в"], + [0, "г"], + [0, "д"], + [0, "е"], + [0, "ж"], + [0, "з"], + [0, "и"], + [0, "й"], + [0, "к"], + [0, "л"], + [0, "м"], + [0, "н"], + [0, "о"], + [0, "п"], + [0, "р"], + [0, "с"], + [0, "т"], + [0, "у"], + [0, "ф"], + [0, "х"], + [0, "ц"], + [0, "ч"], + [0, "ш"], + [0, "щ"], + [0, "ъ"], + [0, "ы"], + [0, "ь"], + [0, "э"], + [0, "ю"], + [0, "я"], + [1, "ё"], + [0, "ђ"], + [0, "ѓ"], + [0, "є"], + [0, "ѕ"], + [0, "і"], + [0, "ї"], + [0, "ј"], + [0, "љ"], + [0, "њ"], + [0, "ћ"], + [0, "ќ"], + [1, "ў"], + [0, "џ"], + [7074, " "], + [0, " "], + [0, " "], + [0, " "], + [1, " "], + [0, " "], + [0, " "], + [0, " "], + [0, "​"], + [0, ""], + [0, ""], + [0, ""], + [0, ""], + [0, "‐"], + [2, "–"], + [0, "—"], + [0, "―"], + [0, "‖"], + [1, "‘"], + [0, "’"], + [0, "‚"], + [1, "“"], + [0, "”"], + [0, "„"], + [1, "†"], + [0, "‡"], + [0, "•"], + [2, "‥"], + [0, "…"], + [9, "‰"], + [0, "‱"], + [0, "′"], + [0, "″"], + [0, "‴"], + [0, "‵"], + [3, "‹"], + [0, "›"], + [3, "‾"], + [2, "⁁"], + [1, "⁃"], + [0, "⁄"], + [10, "⁏"], + [7, "⁗"], + [7, { + v: " ", + n: 8202, + o: "  " + }], + [0, "⁠"], + [0, "⁡"], + [0, "⁢"], + [0, "⁣"], + [72, "€"], + [46, "⃛"], + [0, "⃜"], + [37, "ℂ"], + [2, "℅"], + [4, "ℊ"], + [0, "ℋ"], + [0, "ℌ"], + [0, "ℍ"], + [0, "ℎ"], + [0, "ℏ"], + [0, "ℐ"], + [0, "ℑ"], + [0, "ℒ"], + [0, "ℓ"], + [1, "ℕ"], + [0, "№"], + [0, "℗"], + [0, "℘"], + [0, "ℙ"], + [0, "ℚ"], + [0, "ℛ"], + [0, "ℜ"], + [0, "ℝ"], + [0, "℞"], + [3, "™"], + [1, "ℤ"], + [2, "℧"], + [0, "ℨ"], + [0, "℩"], + [2, "ℬ"], + [0, "ℭ"], + [1, "ℯ"], + [0, "ℰ"], + [0, "ℱ"], + [1, "ℳ"], + [0, "ℴ"], + [0, "ℵ"], + [0, "ℶ"], + [0, "ℷ"], + [0, "ℸ"], + [12, "ⅅ"], + [0, "ⅆ"], + [0, "ⅇ"], + [0, "ⅈ"], + [10, "⅓"], + [0, "⅔"], + [0, "⅕"], + [0, "⅖"], + [0, "⅗"], + [0, "⅘"], + [0, "⅙"], + [0, "⅚"], + [0, "⅛"], + [0, "⅜"], + [0, "⅝"], + [0, "⅞"], + [49, "←"], + [0, "↑"], + [0, "→"], + [0, "↓"], + [0, "↔"], + [0, "↕"], + [0, "↖"], + [0, "↗"], + [0, "↘"], + [0, "↙"], + [0, "↚"], + [0, "↛"], + [1, { + v: "↝", + n: 824, + o: "↝̸" + }], + [0, "↞"], + [0, "↟"], + [0, "↠"], + [0, "↡"], + [0, "↢"], + [0, "↣"], + [0, "↤"], + [0, "↥"], + [0, "↦"], + [0, "↧"], + [1, "↩"], + [0, "↪"], + [0, "↫"], + [0, "↬"], + [0, "↭"], + [0, "↮"], + [1, "↰"], + [0, "↱"], + [0, "↲"], + [0, "↳"], + [1, "↵"], + [0, "↶"], + [0, "↷"], + [2, "↺"], + [0, "↻"], + [0, "↼"], + [0, "↽"], + [0, "↾"], + [0, "↿"], + [0, "⇀"], + [0, "⇁"], + [0, "⇂"], + [0, "⇃"], + [0, "⇄"], + [0, "⇅"], + [0, "⇆"], + [0, "⇇"], + [0, "⇈"], + [0, "⇉"], + [0, "⇊"], + [0, "⇋"], + [0, "⇌"], + [0, "⇍"], + [0, "⇎"], + [0, "⇏"], + [0, "⇐"], + [0, "⇑"], + [0, "⇒"], + [0, "⇓"], + [0, "⇔"], + [0, "⇕"], + [0, "⇖"], + [0, "⇗"], + [0, "⇘"], + [0, "⇙"], + [0, "⇚"], + [0, "⇛"], + [1, "⇝"], + [6, "⇤"], + [0, "⇥"], + [15, "⇵"], + [7, "⇽"], + [0, "⇾"], + [0, "⇿"], + [0, "∀"], + [0, "∁"], + [0, { + v: "∂", + n: 824, + o: "∂̸" + }], + [0, "∃"], + [0, "∄"], + [0, "∅"], + [1, "∇"], + [0, "∈"], + [0, "∉"], + [1, "∋"], + [0, "∌"], + [2, "∏"], + [0, "∐"], + [0, "∑"], + [0, "−"], + [0, "∓"], + [0, "∔"], + [1, "∖"], + [0, "∗"], + [0, "∘"], + [1, "√"], + [2, "∝"], + [0, "∞"], + [0, "∟"], + [0, { + v: "∠", + n: 8402, + o: "∠⃒" + }], + [0, "∡"], + [0, "∢"], + [0, "∣"], + [0, "∤"], + [0, "∥"], + [0, "∦"], + [0, "∧"], + [0, "∨"], + [0, { + v: "∩", + n: 65024, + o: "∩︀" + }], + [0, { + v: "∪", + n: 65024, + o: "∪︀" + }], + [0, "∫"], + [0, "∬"], + [0, "∭"], + [0, "∮"], + [0, "∯"], + [0, "∰"], + [0, "∱"], + [0, "∲"], + [0, "∳"], + [0, "∴"], + [0, "∵"], + [0, "∶"], + [0, "∷"], + [0, "∸"], + [1, "∺"], + [0, "∻"], + [0, { + v: "∼", + n: 8402, + o: "∼⃒" + }], + [0, { + v: "∽", + n: 817, + o: "∽̱" + }], + [0, { + v: "∾", + n: 819, + o: "∾̳" + }], + [0, "∿"], + [0, "≀"], + [0, "≁"], + [0, { + v: "≂", + n: 824, + o: "≂̸" + }], + [0, "≃"], + [0, "≄"], + [0, "≅"], + [0, "≆"], + [0, "≇"], + [0, "≈"], + [0, "≉"], + [0, "≊"], + [0, { + v: "≋", + n: 824, + o: "≋̸" + }], + [0, "≌"], + [0, { + v: "≍", + n: 8402, + o: "≍⃒" + }], + [0, { + v: "≎", + n: 824, + o: "≎̸" + }], + [0, { + v: "≏", + n: 824, + o: "≏̸" + }], + [0, { + v: "≐", + n: 824, + o: "≐̸" + }], + [0, "≑"], + [0, "≒"], + [0, "≓"], + [0, "≔"], + [0, "≕"], + [0, "≖"], + [0, "≗"], + [1, "≙"], + [0, "≚"], + [1, "≜"], + [2, "≟"], + [0, "≠"], + [0, { + v: "≡", + n: 8421, + o: "≡⃥" + }], + [0, "≢"], + [1, { + v: "≤", + n: 8402, + o: "≤⃒" + }], + [0, { + v: "≥", + n: 8402, + o: "≥⃒" + }], + [0, { + v: "≦", + n: 824, + o: "≦̸" + }], + [0, { + v: "≧", + n: 824, + o: "≧̸" + }], + [0, { + v: "≨", + n: 65024, + o: "≨︀" + }], + [0, { + v: "≩", + n: 65024, + o: "≩︀" + }], + [0, { + v: "≪", + n: new Map(r([ + [824, "≪̸"], + [7577, "≪⃒"] + ])) + }], + [0, { + v: "≫", + n: new Map(r([ + [824, "≫̸"], + [7577, "≫⃒"] + ])) + }], + [0, "≬"], + [0, "≭"], + [0, "≮"], + [0, "≯"], + [0, "≰"], + [0, "≱"], + [0, "≲"], + [0, "≳"], + [0, "≴"], + [0, "≵"], + [0, "≶"], + [0, "≷"], + [0, "≸"], + [0, "≹"], + [0, "≺"], + [0, "≻"], + [0, "≼"], + [0, "≽"], + [0, "≾"], + [0, { + v: "≿", + n: 824, + o: "≿̸" + }], + [0, "⊀"], + [0, "⊁"], + [0, { + v: "⊂", + n: 8402, + o: "⊂⃒" + }], + [0, { + v: "⊃", + n: 8402, + o: "⊃⃒" + }], + [0, "⊄"], + [0, "⊅"], + [0, "⊆"], + [0, "⊇"], + [0, "⊈"], + [0, "⊉"], + [0, { + v: "⊊", + n: 65024, + o: "⊊︀" + }], + [0, { + v: "⊋", + n: 65024, + o: "⊋︀" + }], + [1, "⊍"], + [0, "⊎"], + [0, { + v: "⊏", + n: 824, + o: "⊏̸" + }], + [0, { + v: "⊐", + n: 824, + o: "⊐̸" + }], + [0, "⊑"], + [0, "⊒"], + [0, { + v: "⊓", + n: 65024, + o: "⊓︀" + }], + [0, { + v: "⊔", + n: 65024, + o: "⊔︀" + }], + [0, "⊕"], + [0, "⊖"], + [0, "⊗"], + [0, "⊘"], + [0, "⊙"], + [0, "⊚"], + [0, "⊛"], + [1, "⊝"], + [0, "⊞"], + [0, "⊟"], + [0, "⊠"], + [0, "⊡"], + [0, "⊢"], + [0, "⊣"], + [0, "⊤"], + [0, "⊥"], + [1, "⊧"], + [0, "⊨"], + [0, "⊩"], + [0, "⊪"], + [0, "⊫"], + [0, "⊬"], + [0, "⊭"], + [0, "⊮"], + [0, "⊯"], + [0, "⊰"], + [1, "⊲"], + [0, "⊳"], + [0, { + v: "⊴", + n: 8402, + o: "⊴⃒" + }], + [0, { + v: "⊵", + n: 8402, + o: "⊵⃒" + }], + [0, "⊶"], + [0, "⊷"], + [0, "⊸"], + [0, "⊹"], + [0, "⊺"], + [0, "⊻"], + [1, "⊽"], + [0, "⊾"], + [0, "⊿"], + [0, "⋀"], + [0, "⋁"], + [0, "⋂"], + [0, "⋃"], + [0, "⋄"], + [0, "⋅"], + [0, "⋆"], + [0, "⋇"], + [0, "⋈"], + [0, "⋉"], + [0, "⋊"], + [0, "⋋"], + [0, "⋌"], + [0, "⋍"], + [0, "⋎"], + [0, "⋏"], + [0, "⋐"], + [0, "⋑"], + [0, "⋒"], + [0, "⋓"], + [0, "⋔"], + [0, "⋕"], + [0, "⋖"], + [0, "⋗"], + [0, { + v: "⋘", + n: 824, + o: "⋘̸" + }], + [0, { + v: "⋙", + n: 824, + o: "⋙̸" + }], + [0, { + v: "⋚", + n: 65024, + o: "⋚︀" + }], + [0, { + v: "⋛", + n: 65024, + o: "⋛︀" + }], + [2, "⋞"], + [0, "⋟"], + [0, "⋠"], + [0, "⋡"], + [0, "⋢"], + [0, "⋣"], + [2, "⋦"], + [0, "⋧"], + [0, "⋨"], + [0, "⋩"], + [0, "⋪"], + [0, "⋫"], + [0, "⋬"], + [0, "⋭"], + [0, "⋮"], + [0, "⋯"], + [0, "⋰"], + [0, "⋱"], + [0, "⋲"], + [0, "⋳"], + [0, "⋴"], + [0, { + v: "⋵", + n: 824, + o: "⋵̸" + }], + [0, "⋶"], + [0, "⋷"], + [1, { + v: "⋹", + n: 824, + o: "⋹̸" + }], + [0, "⋺"], + [0, "⋻"], + [0, "⋼"], + [0, "⋽"], + [0, "⋾"], + [6, "⌅"], + [0, "⌆"], + [1, "⌈"], + [0, "⌉"], + [0, "⌊"], + [0, "⌋"], + [0, "⌌"], + [0, "⌍"], + [0, "⌎"], + [0, "⌏"], + [0, "⌐"], + [1, "⌒"], + [0, "⌓"], + [1, "⌕"], + [0, "⌖"], + [5, "⌜"], + [0, "⌝"], + [0, "⌞"], + [0, "⌟"], + [2, "⌢"], + [0, "⌣"], + [9, "⌭"], + [0, "⌮"], + [7, "⌶"], + [6, "⌽"], + [1, "⌿"], + [60, "⍼"], + [51, "⎰"], + [0, "⎱"], + [2, "⎴"], + [0, "⎵"], + [0, "⎶"], + [37, "⏜"], + [0, "⏝"], + [0, "⏞"], + [0, "⏟"], + [2, "⏢"], + [4, "⏧"], + [59, "␣"], + [164, "Ⓢ"], + [55, "─"], + [1, "│"], + [9, "┌"], + [3, "┐"], + [3, "└"], + [3, "┘"], + [3, "├"], + [7, "┤"], + [7, "┬"], + [7, "┴"], + [7, "┼"], + [19, "═"], + [0, "║"], + [0, "╒"], + [0, "╓"], + [0, "╔"], + [0, "╕"], + [0, "╖"], + [0, "╗"], + [0, "╘"], + [0, "╙"], + [0, "╚"], + [0, "╛"], + [0, "╜"], + [0, "╝"], + [0, "╞"], + [0, "╟"], + [0, "╠"], + [0, "╡"], + [0, "╢"], + [0, "╣"], + [0, "╤"], + [0, "╥"], + [0, "╦"], + [0, "╧"], + [0, "╨"], + [0, "╩"], + [0, "╪"], + [0, "╫"], + [0, "╬"], + [19, "▀"], + [3, "▄"], + [3, "█"], + [8, "░"], + [0, "▒"], + [0, "▓"], + [13, "□"], + [8, "▪"], + [0, "▫"], + [1, "▭"], + [0, "▮"], + [2, "▱"], + [1, "△"], + [0, "▴"], + [0, "▵"], + [2, "▸"], + [0, "▹"], + [3, "▽"], + [0, "▾"], + [0, "▿"], + [2, "◂"], + [0, "◃"], + [6, "◊"], + [0, "○"], + [32, "◬"], + [2, "◯"], + [8, "◸"], + [0, "◹"], + [0, "◺"], + [0, "◻"], + [0, "◼"], + [8, "★"], + [0, "☆"], + [7, "☎"], + [49, "♀"], + [1, "♂"], + [29, "♠"], + [2, "♣"], + [1, "♥"], + [0, "♦"], + [3, "♪"], + [2, "♭"], + [0, "♮"], + [0, "♯"], + [163, "✓"], + [3, "✗"], + [8, "✠"], + [21, "✶"], + [33, "❘"], + [25, "❲"], + [0, "❳"], + [84, "⟈"], + [0, "⟉"], + [28, "⟦"], + [0, "⟧"], + [0, "〈"], + [0, "〉"], + [0, "⟪"], + [0, "⟫"], + [0, "⟬"], + [0, "⟭"], + [7, "⟵"], + [0, "⟶"], + [0, "⟷"], + [0, "⟸"], + [0, "⟹"], + [0, "⟺"], + [1, "⟼"], + [2, "⟿"], + [258, "⤂"], + [0, "⤃"], + [0, "⤄"], + [0, "⤅"], + [6, "⤌"], + [0, "⤍"], + [0, "⤎"], + [0, "⤏"], + [0, "⤐"], + [0, "⤑"], + [0, "⤒"], + [0, "⤓"], + [2, "⤖"], + [2, "⤙"], + [0, "⤚"], + [0, "⤛"], + [0, "⤜"], + [0, "⤝"], + [0, "⤞"], + [0, "⤟"], + [0, "⤠"], + [2, "⤣"], + [0, "⤤"], + [0, "⤥"], + [0, "⤦"], + [0, "⤧"], + [0, "⤨"], + [0, "⤩"], + [0, "⤪"], + [8, { + v: "⤳", + n: 824, + o: "⤳̸" + }], + [1, "⤵"], + [0, "⤶"], + [0, "⤷"], + [0, "⤸"], + [0, "⤹"], + [2, "⤼"], + [0, "⤽"], + [7, "⥅"], + [2, "⥈"], + [0, "⥉"], + [0, "⥊"], + [0, "⥋"], + [2, "⥎"], + [0, "⥏"], + [0, "⥐"], + [0, "⥑"], + [0, "⥒"], + [0, "⥓"], + [0, "⥔"], + [0, "⥕"], + [0, "⥖"], + [0, "⥗"], + [0, "⥘"], + [0, "⥙"], + [0, "⥚"], + [0, "⥛"], + [0, "⥜"], + [0, "⥝"], + [0, "⥞"], + [0, "⥟"], + [0, "⥠"], + [0, "⥡"], + [0, "⥢"], + [0, "⥣"], + [0, "⥤"], + [0, "⥥"], + [0, "⥦"], + [0, "⥧"], + [0, "⥨"], + [0, "⥩"], + [0, "⥪"], + [0, "⥫"], + [0, "⥬"], + [0, "⥭"], + [0, "⥮"], + [0, "⥯"], + [0, "⥰"], + [0, "⥱"], + [0, "⥲"], + [0, "⥳"], + [0, "⥴"], + [0, "⥵"], + [0, "⥶"], + [1, "⥸"], + [0, "⥹"], + [1, "⥻"], + [0, "⥼"], + [0, "⥽"], + [0, "⥾"], + [0, "⥿"], + [5, "⦅"], + [0, "⦆"], + [4, "⦋"], + [0, "⦌"], + [0, "⦍"], + [0, "⦎"], + [0, "⦏"], + [0, "⦐"], + [0, "⦑"], + [0, "⦒"], + [0, "⦓"], + [0, "⦔"], + [0, "⦕"], + [0, "⦖"], + [3, "⦚"], + [1, "⦜"], + [0, "⦝"], + [6, "⦤"], + [0, "⦥"], + [0, "⦦"], + [0, "⦧"], + [0, "⦨"], + [0, "⦩"], + [0, "⦪"], + [0, "⦫"], + [0, "⦬"], + [0, "⦭"], + [0, "⦮"], + [0, "⦯"], + [0, "⦰"], + [0, "⦱"], + [0, "⦲"], + [0, "⦳"], + [0, "⦴"], + [0, "⦵"], + [0, "⦶"], + [0, "⦷"], + [1, "⦹"], + [1, "⦻"], + [0, "⦼"], + [1, "⦾"], + [0, "⦿"], + [0, "⧀"], + [0, "⧁"], + [0, "⧂"], + [0, "⧃"], + [0, "⧄"], + [0, "⧅"], + [3, "⧉"], + [3, "⧍"], + [0, "⧎"], + [0, { + v: "⧏", + n: 824, + o: "⧏̸" + }], + [0, { + v: "⧐", + n: 824, + o: "⧐̸" + }], + [11, "⧜"], + [0, "⧝"], + [0, "⧞"], + [4, "⧣"], + [0, "⧤"], + [0, "⧥"], + [5, "⧫"], + [8, "⧴"], + [1, "⧶"], + [9, "⨀"], + [0, "⨁"], + [0, "⨂"], + [1, "⨄"], + [1, "⨆"], + [5, "⨌"], + [0, "⨍"], + [2, "⨐"], + [0, "⨑"], + [0, "⨒"], + [0, "⨓"], + [0, "⨔"], + [0, "⨕"], + [0, "⨖"], + [0, "⨗"], + [10, "⨢"], + [0, "⨣"], + [0, "⨤"], + [0, "⨥"], + [0, "⨦"], + [0, "⨧"], + [1, "⨩"], + [0, "⨪"], + [2, "⨭"], + [0, "⨮"], + [0, "⨯"], + [0, "⨰"], + [0, "⨱"], + [1, "⨳"], + [0, "⨴"], + [0, "⨵"], + [0, "⨶"], + [0, "⨷"], + [0, "⨸"], + [0, "⨹"], + [0, "⨺"], + [0, "⨻"], + [0, "⨼"], + [2, "⨿"], + [0, "⩀"], + [1, "⩂"], + [0, "⩃"], + [0, "⩄"], + [0, "⩅"], + [0, "⩆"], + [0, "⩇"], + [0, "⩈"], + [0, "⩉"], + [0, "⩊"], + [0, "⩋"], + [0, "⩌"], + [0, "⩍"], + [2, "⩐"], + [2, "⩓"], + [0, "⩔"], + [0, "⩕"], + [0, "⩖"], + [0, "⩗"], + [0, "⩘"], + [1, "⩚"], + [0, "⩛"], + [0, "⩜"], + [0, "⩝"], + [1, "⩟"], + [6, "⩦"], + [3, "⩪"], + [2, { + v: "⩭", + n: 824, + o: "⩭̸" + }], + [0, "⩮"], + [0, "⩯"], + [0, { + v: "⩰", + n: 824, + o: "⩰̸" + }], + [0, "⩱"], + [0, "⩲"], + [0, "⩳"], + [0, "⩴"], + [0, "⩵"], + [1, "⩷"], + [0, "⩸"], + [0, "⩹"], + [0, "⩺"], + [0, "⩻"], + [0, "⩼"], + [0, { + v: "⩽", + n: 824, + o: "⩽̸" + }], + [0, { + v: "⩾", + n: 824, + o: "⩾̸" + }], + [0, "⩿"], + [0, "⪀"], + [0, "⪁"], + [0, "⪂"], + [0, "⪃"], + [0, "⪄"], + [0, "⪅"], + [0, "⪆"], + [0, "⪇"], + [0, "⪈"], + [0, "⪉"], + [0, "⪊"], + [0, "⪋"], + [0, "⪌"], + [0, "⪍"], + [0, "⪎"], + [0, "⪏"], + [0, "⪐"], + [0, "⪑"], + [0, "⪒"], + [0, "⪓"], + [0, "⪔"], + [0, "⪕"], + [0, "⪖"], + [0, "⪗"], + [0, "⪘"], + [0, "⪙"], + [0, "⪚"], + [2, "⪝"], + [0, "⪞"], + [0, "⪟"], + [0, "⪠"], + [0, { + v: "⪡", + n: 824, + o: "⪡̸" + }], + [0, { + v: "⪢", + n: 824, + o: "⪢̸" + }], + [1, "⪤"], + [0, "⪥"], + [0, "⪦"], + [0, "⪧"], + [0, "⪨"], + [0, "⪩"], + [0, "⪪"], + [0, "⪫"], + [0, { + v: "⪬", + n: 65024, + o: "⪬︀" + }], + [0, { + v: "⪭", + n: 65024, + o: "⪭︀" + }], + [0, "⪮"], + [0, { + v: "⪯", + n: 824, + o: "⪯̸" + }], + [0, { + v: "⪰", + n: 824, + o: "⪰̸" + }], + [2, "⪳"], + [0, "⪴"], + [0, "⪵"], + [0, "⪶"], + [0, "⪷"], + [0, "⪸"], + [0, "⪹"], + [0, "⪺"], + [0, "⪻"], + [0, "⪼"], + [0, "⪽"], + [0, "⪾"], + [0, "⪿"], + [0, "⫀"], + [0, "⫁"], + [0, "⫂"], + [0, "⫃"], + [0, "⫄"], + [0, { + v: "⫅", + n: 824, + o: "⫅̸" + }], + [0, { + v: "⫆", + n: 824, + o: "⫆̸" + }], + [0, "⫇"], + [0, "⫈"], + [2, { + v: "⫋", + n: 65024, + o: "⫋︀" + }], + [0, { + v: "⫌", + n: 65024, + o: "⫌︀" + }], + [2, "⫏"], + [0, "⫐"], + [0, "⫑"], + [0, "⫒"], + [0, "⫓"], + [0, "⫔"], + [0, "⫕"], + [0, "⫖"], + [0, "⫗"], + [0, "⫘"], + [0, "⫙"], + [0, "⫚"], + [0, "⫛"], + [8, "⫤"], + [1, "⫦"], + [0, "⫧"], + [0, "⫨"], + [0, "⫩"], + [1, "⫫"], + [0, "⫬"], + [0, "⫭"], + [0, "⫮"], + [0, "⫯"], + [0, "⫰"], + [0, "⫱"], + [0, "⫲"], + [0, "⫳"], + [9, { + v: "⫽", + n: 8421, + o: "⫽⃥" + }], + [44343, { + n: new Map(r([ + [56476, "𝒜"], + [1, "𝒞"], + [0, "𝒟"], + [2, "𝒢"], + [2, "𝒥"], + [0, "𝒦"], + [2, "𝒩"], + [0, "𝒪"], + [0, "𝒫"], + [0, "𝒬"], + [1, "𝒮"], + [0, "𝒯"], + [0, "𝒰"], + [0, "𝒱"], + [0, "𝒲"], + [0, "𝒳"], + [0, "𝒴"], + [0, "𝒵"], + [0, "𝒶"], + [0, "𝒷"], + [0, "𝒸"], + [0, "𝒹"], + [1, "𝒻"], + [1, "𝒽"], + [0, "𝒾"], + [0, "𝒿"], + [0, "𝓀"], + [0, "𝓁"], + [0, "𝓂"], + [0, "𝓃"], + [1, "𝓅"], + [0, "𝓆"], + [0, "𝓇"], + [0, "𝓈"], + [0, "𝓉"], + [0, "𝓊"], + [0, "𝓋"], + [0, "𝓌"], + [0, "𝓍"], + [0, "𝓎"], + [0, "𝓏"], + [52, "𝔄"], + [0, "𝔅"], + [1, "𝔇"], + [0, "𝔈"], + [0, "𝔉"], + [0, "𝔊"], + [2, "𝔍"], + [0, "𝔎"], + [0, "𝔏"], + [0, "𝔐"], + [0, "𝔑"], + [0, "𝔒"], + [0, "𝔓"], + [0, "𝔔"], + [1, "𝔖"], + [0, "𝔗"], + [0, "𝔘"], + [0, "𝔙"], + [0, "𝔚"], + [0, "𝔛"], + [0, "𝔜"], + [1, "𝔞"], + [0, "𝔟"], + [0, "𝔠"], + [0, "𝔡"], + [0, "𝔢"], + [0, "𝔣"], + [0, "𝔤"], + [0, "𝔥"], + [0, "𝔦"], + [0, "𝔧"], + [0, "𝔨"], + [0, "𝔩"], + [0, "𝔪"], + [0, "𝔫"], + [0, "𝔬"], + [0, "𝔭"], + [0, "𝔮"], + [0, "𝔯"], + [0, "𝔰"], + [0, "𝔱"], + [0, "𝔲"], + [0, "𝔳"], + [0, "𝔴"], + [0, "𝔵"], + [0, "𝔶"], + [0, "𝔷"], + [0, "𝔸"], + [0, "𝔹"], + [1, "𝔻"], + [0, "𝔼"], + [0, "𝔽"], + [0, "𝔾"], + [1, "𝕀"], + [0, "𝕁"], + [0, "𝕂"], + [0, "𝕃"], + [0, "𝕄"], + [1, "𝕆"], + [3, "𝕊"], + [0, "𝕋"], + [0, "𝕌"], + [0, "𝕍"], + [0, "𝕎"], + [0, "𝕏"], + [0, "𝕐"], + [1, "𝕒"], + [0, "𝕓"], + [0, "𝕔"], + [0, "𝕕"], + [0, "𝕖"], + [0, "𝕗"], + [0, "𝕘"], + [0, "𝕙"], + [0, "𝕚"], + [0, "𝕛"], + [0, "𝕜"], + [0, "𝕝"], + [0, "𝕞"], + [0, "𝕟"], + [0, "𝕠"], + [0, "𝕡"], + [0, "𝕢"], + [0, "𝕣"], + [0, "𝕤"], + [0, "𝕥"], + [0, "𝕦"], + [0, "𝕧"], + [0, "𝕨"], + [0, "𝕩"], + [0, "𝕪"], + [0, "𝕫"] + ])) + }], + [8906, "ff"], + [0, "fi"], + [0, "fl"], + [0, "ffi"], + [0, "ffl"] + ])) + }, + 67772: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.decodeXMLStrict = t.decodeHTML5Strict = t.decodeHTML4Strict = t.decodeHTML5 = t.decodeHTML4 = t.decodeHTMLStrict = t.decodeHTML = t.decodeXML = t.encodeHTML5 = t.encodeHTML4 = t.encodeNonAsciiHTML = t.encodeHTML = t.escapeText = t.escapeAttribute = t.escapeUTF8 = t.escape = t.encodeXML = t.encode = t.decodeStrict = t.decode = t.EncodingMode = t.DecodingMode = t.EntityLevel = void 0; + var n, i, s, o = r(40722), + a = r(10571), + l = r(77084); + ! function(e) { + e[e.XML = 0] = "XML", e[e.HTML = 1] = "HTML" + }(n = t.EntityLevel || (t.EntityLevel = {})), + function(e) { + e[e.Legacy = 0] = "Legacy", e[e.Strict = 1] = "Strict" + }(i = t.DecodingMode || (t.DecodingMode = {})), + function(e) { + e[e.UTF8 = 0] = "UTF8", e[e.ASCII = 1] = "ASCII", e[e.Extensive = 2] = "Extensive", e[e.Attribute = 3] = "Attribute", e[e.Text = 4] = "Text" + }(s = t.EncodingMode || (t.EncodingMode = {})), t.decode = function(e, t) { + void 0 === t && (t = n.XML); + var r = "number" == typeof t ? { + level: t + } : t; + return r.level === n.HTML ? r.mode === i.Strict ? (0, o.decodeHTMLStrict)(e) : (0, o.decodeHTML)(e) : (0, o.decodeXML)(e) + }, t.decodeStrict = function(e, t) { + void 0 === t && (t = n.XML); + var r = "number" == typeof t ? { + level: t + } : t; + return r.level === n.HTML ? r.mode === i.Legacy ? (0, o.decodeHTML)(e) : (0, o.decodeHTMLStrict)(e) : (0, o.decodeXML)(e) + }, t.encode = function(e, t) { + void 0 === t && (t = n.XML); + var r = "number" == typeof t ? { + level: t + } : t; + return r.mode === s.UTF8 ? (0, l.escapeUTF8)(e) : r.mode === s.Attribute ? (0, l.escapeAttribute)(e) : r.mode === s.Text ? (0, l.escapeText)(e) : r.level === n.HTML ? r.mode === s.ASCII ? (0, a.encodeNonAsciiHTML)(e) : (0, a.encodeHTML)(e) : (0, l.encodeXML)(e) + }; + var c = r(77084); + Object.defineProperty(t, "encodeXML", { + enumerable: !0, + get: function() { + return c.encodeXML + } + }), Object.defineProperty(t, "escape", { + enumerable: !0, + get: function() { + return c.escape + } + }), Object.defineProperty(t, "escapeUTF8", { + enumerable: !0, + get: function() { + return c.escapeUTF8 + } + }), Object.defineProperty(t, "escapeAttribute", { + enumerable: !0, + get: function() { + return c.escapeAttribute + } + }), Object.defineProperty(t, "escapeText", { + enumerable: !0, + get: function() { + return c.escapeText + } + }); + var u = r(10571); + Object.defineProperty(t, "encodeHTML", { + enumerable: !0, + get: function() { + return u.encodeHTML + } + }), Object.defineProperty(t, "encodeNonAsciiHTML", { + enumerable: !0, + get: function() { + return u.encodeNonAsciiHTML + } + }), Object.defineProperty(t, "encodeHTML4", { + enumerable: !0, + get: function() { + return u.encodeHTML + } + }), Object.defineProperty(t, "encodeHTML5", { + enumerable: !0, + get: function() { + return u.encodeHTML + } + }); + var h = r(40722); + Object.defineProperty(t, "decodeXML", { + enumerable: !0, + get: function() { + return h.decodeXML + } + }), Object.defineProperty(t, "decodeHTML", { + enumerable: !0, + get: function() { + return h.decodeHTML + } + }), Object.defineProperty(t, "decodeHTMLStrict", { + enumerable: !0, + get: function() { + return h.decodeHTMLStrict + } + }), Object.defineProperty(t, "decodeHTML4", { + enumerable: !0, + get: function() { + return h.decodeHTML + } + }), Object.defineProperty(t, "decodeHTML5", { + enumerable: !0, + get: function() { + return h.decodeHTML + } + }), Object.defineProperty(t, "decodeHTML4Strict", { + enumerable: !0, + get: function() { + return h.decodeHTMLStrict + } + }), Object.defineProperty(t, "decodeHTML5Strict", { + enumerable: !0, + get: function() { + return h.decodeHTMLStrict + } + }), Object.defineProperty(t, "decodeXMLStrict", { + enumerable: !0, + get: function() { + return h.decodeXML + } + }) + }, + 22997: e => { + "use strict"; + e.exports = e => { + if ("string" != typeof e) throw new TypeError("Expected a string"); + return e.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") + } + }, + 16666: function(e, t, r) { + "use strict"; + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + void 0 === n && (n = r); + var i = Object.getOwnPropertyDescriptor(t, r); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, n, i) + } : function(e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r] + }), + i = this && this.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + s = this && this.__importStar || function(e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) + for (var r in e) "default" !== r && Object.prototype.hasOwnProperty.call(e, r) && n(t, e, r); + return i(t, e), t + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.Parser = void 0; + var o = s(r(10034)), + a = r(40722), + l = new Set(["input", "option", "optgroup", "select", "button", "datalist", "textarea"]), + c = new Set(["p"]), + u = new Set(["thead", "tbody"]), + h = new Set(["dd", "dt"]), + p = new Set(["rt", "rp"]), + d = new Map([ + ["tr", new Set(["tr", "th", "td"])], + ["th", new Set(["th"])], + ["td", new Set(["thead", "th", "td"])], + ["body", new Set(["head", "link", "script"])], + ["li", new Set(["li"])], + ["p", c], + ["h1", c], + ["h2", c], + ["h3", c], + ["h4", c], + ["h5", c], + ["h6", c], + ["select", l], + ["input", l], + ["output", l], + ["button", l], + ["datalist", l], + ["textarea", l], + ["option", new Set(["option"])], + ["optgroup", new Set(["optgroup", "option"])], + ["dd", h], + ["dt", h], + ["address", c], + ["article", c], + ["aside", c], + ["blockquote", c], + ["details", c], + ["div", c], + ["dl", c], + ["fieldset", c], + ["figcaption", c], + ["figure", c], + ["footer", c], + ["form", c], + ["header", c], + ["hr", c], + ["main", c], + ["nav", c], + ["ol", c], + ["pre", c], + ["section", c], + ["table", c], + ["ul", c], + ["rt", p], + ["rp", p], + ["tbody", u], + ["tfoot", u] + ]), + f = new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]), + m = new Set(["math", "svg"]), + g = new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignobject", "desc", "title"]), + b = /\s|\//, + y = function() { + function e(e, t) { + var r, n, i, s, a; + void 0 === t && (t = {}), this.options = t, this.startIndex = 0, this.endIndex = 0, this.openTagStart = 0, this.tagname = "", this.attribname = "", this.attribvalue = "", this.attribs = null, this.stack = [], this.foreignContext = [], this.buffers = [], this.bufferOffset = 0, this.writeIndex = 0, this.ended = !1, this.cbs = null != e ? e : {}, this.lowerCaseTagNames = null !== (r = t.lowerCaseTags) && void 0 !== r ? r : !t.xmlMode, this.lowerCaseAttributeNames = null !== (n = t.lowerCaseAttributeNames) && void 0 !== n ? n : !t.xmlMode, this.tokenizer = new(null !== (i = t.Tokenizer) && void 0 !== i ? i : o.default)(this.options, this), null === (a = (s = this.cbs).onparserinit) || void 0 === a || a.call(s, this) + } + return e.prototype.ontext = function(e, t) { + var r, n, i = this.getSlice(e, t); + this.endIndex = t - 1, null === (n = (r = this.cbs).ontext) || void 0 === n || n.call(r, i), this.startIndex = t + }, e.prototype.ontextentity = function(e) { + var t, r, n = this.tokenizer.getSectionStart(); + this.endIndex = n - 1, null === (r = (t = this.cbs).ontext) || void 0 === r || r.call(t, (0, a.fromCodePoint)(e)), this.startIndex = n + }, e.prototype.isVoidElement = function(e) { + return !this.options.xmlMode && f.has(e) + }, e.prototype.onopentagname = function(e, t) { + this.endIndex = t; + var r = this.getSlice(e, t); + this.lowerCaseTagNames && (r = r.toLowerCase()), this.emitOpenTag(r) + }, e.prototype.emitOpenTag = function(e) { + var t, r, n, i; + this.openTagStart = this.startIndex, this.tagname = e; + var s = !this.options.xmlMode && d.get(e); + if (s) + for (; this.stack.length > 0 && s.has(this.stack[this.stack.length - 1]);) { + var o = this.stack.pop(); + null === (r = (t = this.cbs).onclosetag) || void 0 === r || r.call(t, o, !0) + } + this.isVoidElement(e) || (this.stack.push(e), m.has(e) ? this.foreignContext.push(!0) : g.has(e) && this.foreignContext.push(!1)), null === (i = (n = this.cbs).onopentagname) || void 0 === i || i.call(n, e), this.cbs.onopentag && (this.attribs = {}) + }, e.prototype.endOpenTag = function(e) { + var t, r; + this.startIndex = this.openTagStart, this.attribs && (null === (r = (t = this.cbs).onopentag) || void 0 === r || r.call(t, this.tagname, this.attribs, e), this.attribs = null), this.cbs.onclosetag && this.isVoidElement(this.tagname) && this.cbs.onclosetag(this.tagname, !0), this.tagname = "" + }, e.prototype.onopentagend = function(e) { + this.endIndex = e, this.endOpenTag(!1), this.startIndex = e + 1 + }, e.prototype.onclosetag = function(e, t) { + var r, n, i, s, o, a; + this.endIndex = t; + var l = this.getSlice(e, t); + if (this.lowerCaseTagNames && (l = l.toLowerCase()), (m.has(l) || g.has(l)) && this.foreignContext.pop(), this.isVoidElement(l)) this.options.xmlMode || "br" !== l || (null === (n = (r = this.cbs).onopentagname) || void 0 === n || n.call(r, "br"), null === (s = (i = this.cbs).onopentag) || void 0 === s || s.call(i, "br", {}, !0), null === (a = (o = this.cbs).onclosetag) || void 0 === a || a.call(o, "br", !1)); + else { + var c = this.stack.lastIndexOf(l); + if (-1 !== c) + if (this.cbs.onclosetag) + for (var u = this.stack.length - c; u--;) this.cbs.onclosetag(this.stack.pop(), 0 !== u); + else this.stack.length = c; + else this.options.xmlMode || "p" !== l || (this.emitOpenTag("p"), this.closeCurrentTag(!0)) + } + this.startIndex = t + 1 + }, e.prototype.onselfclosingtag = function(e) { + this.endIndex = e, this.options.xmlMode || this.options.recognizeSelfClosing || this.foreignContext[this.foreignContext.length - 1] ? (this.closeCurrentTag(!1), this.startIndex = e + 1) : this.onopentagend(e) + }, e.prototype.closeCurrentTag = function(e) { + var t, r, n = this.tagname; + this.endOpenTag(e), this.stack[this.stack.length - 1] === n && (null === (r = (t = this.cbs).onclosetag) || void 0 === r || r.call(t, n, !e), this.stack.pop()) + }, e.prototype.onattribname = function(e, t) { + this.startIndex = e; + var r = this.getSlice(e, t); + this.attribname = this.lowerCaseAttributeNames ? r.toLowerCase() : r + }, e.prototype.onattribdata = function(e, t) { + this.attribvalue += this.getSlice(e, t) + }, e.prototype.onattribentity = function(e) { + this.attribvalue += (0, a.fromCodePoint)(e) + }, e.prototype.onattribend = function(e, t) { + var r, n; + this.endIndex = t, null === (n = (r = this.cbs).onattribute) || void 0 === n || n.call(r, this.attribname, this.attribvalue, e === o.QuoteType.Double ? '"' : e === o.QuoteType.Single ? "'" : e === o.QuoteType.NoValue ? void 0 : null), this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname) && (this.attribs[this.attribname] = this.attribvalue), this.attribvalue = "" + }, e.prototype.getInstructionName = function(e) { + var t = e.search(b), + r = t < 0 ? e : e.substr(0, t); + return this.lowerCaseTagNames && (r = r.toLowerCase()), r + }, e.prototype.ondeclaration = function(e, t) { + this.endIndex = t; + var r = this.getSlice(e, t); + if (this.cbs.onprocessinginstruction) { + var n = this.getInstructionName(r); + this.cbs.onprocessinginstruction("!".concat(n), "!".concat(r)) + } + this.startIndex = t + 1 + }, e.prototype.onprocessinginstruction = function(e, t) { + this.endIndex = t; + var r = this.getSlice(e, t); + if (this.cbs.onprocessinginstruction) { + var n = this.getInstructionName(r); + this.cbs.onprocessinginstruction("?".concat(n), "?".concat(r)) + } + this.startIndex = t + 1 + }, e.prototype.oncomment = function(e, t, r) { + var n, i, s, o; + this.endIndex = t, null === (i = (n = this.cbs).oncomment) || void 0 === i || i.call(n, this.getSlice(e, t - r)), null === (o = (s = this.cbs).oncommentend) || void 0 === o || o.call(s), this.startIndex = t + 1 + }, e.prototype.oncdata = function(e, t, r) { + var n, i, s, o, a, l, c, u, h, p; + this.endIndex = t; + var d = this.getSlice(e, t - r); + this.options.xmlMode || this.options.recognizeCDATA ? (null === (i = (n = this.cbs).oncdatastart) || void 0 === i || i.call(n), null === (o = (s = this.cbs).ontext) || void 0 === o || o.call(s, d), null === (l = (a = this.cbs).oncdataend) || void 0 === l || l.call(a)) : (null === (u = (c = this.cbs).oncomment) || void 0 === u || u.call(c, "[CDATA[".concat(d, "]]")), null === (p = (h = this.cbs).oncommentend) || void 0 === p || p.call(h)), this.startIndex = t + 1 + }, e.prototype.onend = function() { + var e, t; + if (this.cbs.onclosetag) { + this.endIndex = this.startIndex; + for (var r = this.stack.length; r > 0; this.cbs.onclosetag(this.stack[--r], !0)); + } + null === (t = (e = this.cbs).onend) || void 0 === t || t.call(e) + }, e.prototype.reset = function() { + var e, t, r, n; + null === (t = (e = this.cbs).onreset) || void 0 === t || t.call(e), this.tokenizer.reset(), this.tagname = "", this.attribname = "", this.attribs = null, this.stack.length = 0, this.startIndex = 0, this.endIndex = 0, null === (n = (r = this.cbs).onparserinit) || void 0 === n || n.call(r, this), this.buffers.length = 0, this.bufferOffset = 0, this.writeIndex = 0, this.ended = !1 + }, e.prototype.parseComplete = function(e) { + this.reset(), this.end(e) + }, e.prototype.getSlice = function(e, t) { + for (; e - this.bufferOffset >= this.buffers[0].length;) this.shiftBuffer(); + for (var r = this.buffers[0].slice(e - this.bufferOffset, t - this.bufferOffset); t - this.bufferOffset > this.buffers[0].length;) this.shiftBuffer(), r += this.buffers[0].slice(0, t - this.bufferOffset); + return r + }, e.prototype.shiftBuffer = function() { + this.bufferOffset += this.buffers[0].length, this.writeIndex--, this.buffers.shift() + }, e.prototype.write = function(e) { + var t, r; + this.ended ? null === (r = (t = this.cbs).onerror) || void 0 === r || r.call(t, new Error(".write() after done!")) : (this.buffers.push(e), this.tokenizer.running && (this.tokenizer.write(e), this.writeIndex++)) + }, e.prototype.end = function(e) { + var t, r; + this.ended ? null === (r = (t = this.cbs).onerror) || void 0 === r || r.call(t, Error(".end() after done!")) : (e && this.write(e), this.ended = !0, this.tokenizer.end()) + }, e.prototype.pause = function() { + this.tokenizer.pause() + }, e.prototype.resume = function() { + for (this.tokenizer.resume(); this.tokenizer.running && this.writeIndex < this.buffers.length;) this.tokenizer.write(this.buffers[this.writeIndex++]); + this.ended && this.tokenizer.end() + }, e.prototype.parseChunk = function(e) { + this.write(e) + }, e.prototype.done = function(e) { + this.end(e) + }, e + }(); + t.Parser = y + }, + 10034: (e, t, r) => { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.QuoteType = void 0; + var n, i, s, o = r(40722); + + function a(e) { + return e === n.Space || e === n.NewLine || e === n.Tab || e === n.FormFeed || e === n.CarriageReturn + } + + function l(e) { + return e === n.Slash || e === n.Gt || a(e) + } + + function c(e) { + return e >= n.Zero && e <= n.Nine + }! function(e) { + e[e.Tab = 9] = "Tab", e[e.NewLine = 10] = "NewLine", e[e.FormFeed = 12] = "FormFeed", e[e.CarriageReturn = 13] = "CarriageReturn", e[e.Space = 32] = "Space", e[e.ExclamationMark = 33] = "ExclamationMark", e[e.Num = 35] = "Num", e[e.Amp = 38] = "Amp", e[e.SingleQuote = 39] = "SingleQuote", e[e.DoubleQuote = 34] = "DoubleQuote", e[e.Dash = 45] = "Dash", e[e.Slash = 47] = "Slash", e[e.Zero = 48] = "Zero", e[e.Nine = 57] = "Nine", e[e.Semi = 59] = "Semi", e[e.Lt = 60] = "Lt", e[e.Eq = 61] = "Eq", e[e.Gt = 62] = "Gt", e[e.Questionmark = 63] = "Questionmark", e[e.UpperA = 65] = "UpperA", e[e.LowerA = 97] = "LowerA", e[e.UpperF = 70] = "UpperF", e[e.LowerF = 102] = "LowerF", e[e.UpperZ = 90] = "UpperZ", e[e.LowerZ = 122] = "LowerZ", e[e.LowerX = 120] = "LowerX", e[e.OpeningSquareBracket = 91] = "OpeningSquareBracket" + }(n || (n = {})), + function(e) { + e[e.Text = 1] = "Text", e[e.BeforeTagName = 2] = "BeforeTagName", e[e.InTagName = 3] = "InTagName", e[e.InSelfClosingTag = 4] = "InSelfClosingTag", e[e.BeforeClosingTagName = 5] = "BeforeClosingTagName", e[e.InClosingTagName = 6] = "InClosingTagName", e[e.AfterClosingTagName = 7] = "AfterClosingTagName", e[e.BeforeAttributeName = 8] = "BeforeAttributeName", e[e.InAttributeName = 9] = "InAttributeName", e[e.AfterAttributeName = 10] = "AfterAttributeName", e[e.BeforeAttributeValue = 11] = "BeforeAttributeValue", e[e.InAttributeValueDq = 12] = "InAttributeValueDq", e[e.InAttributeValueSq = 13] = "InAttributeValueSq", e[e.InAttributeValueNq = 14] = "InAttributeValueNq", e[e.BeforeDeclaration = 15] = "BeforeDeclaration", e[e.InDeclaration = 16] = "InDeclaration", e[e.InProcessingInstruction = 17] = "InProcessingInstruction", e[e.BeforeComment = 18] = "BeforeComment", e[e.CDATASequence = 19] = "CDATASequence", e[e.InSpecialComment = 20] = "InSpecialComment", e[e.InCommentLike = 21] = "InCommentLike", e[e.BeforeSpecialS = 22] = "BeforeSpecialS", e[e.SpecialStartSequence = 23] = "SpecialStartSequence", e[e.InSpecialTag = 24] = "InSpecialTag", e[e.BeforeEntity = 25] = "BeforeEntity", e[e.BeforeNumericEntity = 26] = "BeforeNumericEntity", e[e.InNamedEntity = 27] = "InNamedEntity", e[e.InNumericEntity = 28] = "InNumericEntity", e[e.InHexEntity = 29] = "InHexEntity" + }(i || (i = {})), + function(e) { + e[e.NoValue = 0] = "NoValue", e[e.Unquoted = 1] = "Unquoted", e[e.Single = 2] = "Single", e[e.Double = 3] = "Double" + }(s = t.QuoteType || (t.QuoteType = {})); + var u = { + Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]), + CdataEnd: new Uint8Array([93, 93, 62]), + CommentEnd: new Uint8Array([45, 45, 62]), + ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]), + StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]), + TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]) + }, + h = function() { + function e(e, t) { + var r = e.xmlMode, + n = void 0 !== r && r, + s = e.decodeEntities, + a = void 0 === s || s; + this.cbs = t, this.state = i.Text, this.buffer = "", this.sectionStart = 0, this.index = 0, this.baseState = i.Text, this.isSpecial = !1, this.running = !0, this.offset = 0, this.sequenceIndex = 0, this.trieIndex = 0, this.trieCurrent = 0, this.entityResult = 0, this.entityExcess = 0, this.xmlMode = n, this.decodeEntities = a, this.entityTrie = n ? o.xmlDecodeTree : o.htmlDecodeTree + } + return e.prototype.reset = function() { + this.state = i.Text, this.buffer = "", this.sectionStart = 0, this.index = 0, this.baseState = i.Text, this.currentSequence = void 0, this.running = !0, this.offset = 0 + }, e.prototype.write = function(e) { + this.offset += this.buffer.length, this.buffer = e, this.parse() + }, e.prototype.end = function() { + this.running && this.finish() + }, e.prototype.pause = function() { + this.running = !1 + }, e.prototype.resume = function() { + this.running = !0, this.index < this.buffer.length + this.offset && this.parse() + }, e.prototype.getIndex = function() { + return this.index + }, e.prototype.getSectionStart = function() { + return this.sectionStart + }, e.prototype.stateText = function(e) { + e === n.Lt || !this.decodeEntities && this.fastForwardTo(n.Lt) ? (this.index > this.sectionStart && this.cbs.ontext(this.sectionStart, this.index), this.state = i.BeforeTagName, this.sectionStart = this.index) : this.decodeEntities && e === n.Amp && (this.state = i.BeforeEntity) + }, e.prototype.stateSpecialStartSequence = function(e) { + var t = this.sequenceIndex === this.currentSequence.length; + if (t ? l(e) : (32 | e) === this.currentSequence[this.sequenceIndex]) { + if (!t) return void this.sequenceIndex++ + } else this.isSpecial = !1; + this.sequenceIndex = 0, this.state = i.InTagName, this.stateInTagName(e) + }, e.prototype.stateInSpecialTag = function(e) { + if (this.sequenceIndex === this.currentSequence.length) { + if (e === n.Gt || a(e)) { + var t = this.index - this.currentSequence.length; + if (this.sectionStart < t) { + var r = this.index; + this.index = t, this.cbs.ontext(this.sectionStart, t), this.index = r + } + return this.isSpecial = !1, this.sectionStart = t + 2, void this.stateInClosingTagName(e) + } + this.sequenceIndex = 0 + }(32 | e) === this.currentSequence[this.sequenceIndex] ? this.sequenceIndex += 1 : 0 === this.sequenceIndex ? this.currentSequence === u.TitleEnd ? this.decodeEntities && e === n.Amp && (this.state = i.BeforeEntity) : this.fastForwardTo(n.Lt) && (this.sequenceIndex = 1) : this.sequenceIndex = Number(e === n.Lt) + }, e.prototype.stateCDATASequence = function(e) { + e === u.Cdata[this.sequenceIndex] ? ++this.sequenceIndex === u.Cdata.length && (this.state = i.InCommentLike, this.currentSequence = u.CdataEnd, this.sequenceIndex = 0, this.sectionStart = this.index + 1) : (this.sequenceIndex = 0, this.state = i.InDeclaration, this.stateInDeclaration(e)) + }, e.prototype.fastForwardTo = function(e) { + for (; ++this.index < this.buffer.length + this.offset;) + if (this.buffer.charCodeAt(this.index - this.offset) === e) return !0; + return this.index = this.buffer.length + this.offset - 1, !1 + }, e.prototype.stateInCommentLike = function(e) { + e === this.currentSequence[this.sequenceIndex] ? ++this.sequenceIndex === this.currentSequence.length && (this.currentSequence === u.CdataEnd ? this.cbs.oncdata(this.sectionStart, this.index, 2) : this.cbs.oncomment(this.sectionStart, this.index, 2), this.sequenceIndex = 0, this.sectionStart = this.index + 1, this.state = i.Text) : 0 === this.sequenceIndex ? this.fastForwardTo(this.currentSequence[0]) && (this.sequenceIndex = 1) : e !== this.currentSequence[this.sequenceIndex - 1] && (this.sequenceIndex = 0) + }, e.prototype.isTagStartChar = function(e) { + return this.xmlMode ? !l(e) : function(e) { + return e >= n.LowerA && e <= n.LowerZ || e >= n.UpperA && e <= n.UpperZ + }(e) + }, e.prototype.startSpecial = function(e, t) { + this.isSpecial = !0, this.currentSequence = e, this.sequenceIndex = t, this.state = i.SpecialStartSequence + }, e.prototype.stateBeforeTagName = function(e) { + if (e === n.ExclamationMark) this.state = i.BeforeDeclaration, this.sectionStart = this.index + 1; + else if (e === n.Questionmark) this.state = i.InProcessingInstruction, this.sectionStart = this.index + 1; + else if (this.isTagStartChar(e)) { + var t = 32 | e; + this.sectionStart = this.index, this.xmlMode || t !== u.TitleEnd[2] ? this.state = this.xmlMode || t !== u.ScriptEnd[2] ? i.InTagName : i.BeforeSpecialS : this.startSpecial(u.TitleEnd, 3) + } else e === n.Slash ? this.state = i.BeforeClosingTagName : (this.state = i.Text, this.stateText(e)) + }, e.prototype.stateInTagName = function(e) { + l(e) && (this.cbs.onopentagname(this.sectionStart, this.index), this.sectionStart = -1, this.state = i.BeforeAttributeName, this.stateBeforeAttributeName(e)) + }, e.prototype.stateBeforeClosingTagName = function(e) { + a(e) || (e === n.Gt ? this.state = i.Text : (this.state = this.isTagStartChar(e) ? i.InClosingTagName : i.InSpecialComment, this.sectionStart = this.index)) + }, e.prototype.stateInClosingTagName = function(e) { + (e === n.Gt || a(e)) && (this.cbs.onclosetag(this.sectionStart, this.index), this.sectionStart = -1, this.state = i.AfterClosingTagName, this.stateAfterClosingTagName(e)) + }, e.prototype.stateAfterClosingTagName = function(e) { + (e === n.Gt || this.fastForwardTo(n.Gt)) && (this.state = i.Text, this.sectionStart = this.index + 1) + }, e.prototype.stateBeforeAttributeName = function(e) { + e === n.Gt ? (this.cbs.onopentagend(this.index), this.isSpecial ? (this.state = i.InSpecialTag, this.sequenceIndex = 0) : this.state = i.Text, this.baseState = this.state, this.sectionStart = this.index + 1) : e === n.Slash ? this.state = i.InSelfClosingTag : a(e) || (this.state = i.InAttributeName, this.sectionStart = this.index) + }, e.prototype.stateInSelfClosingTag = function(e) { + e === n.Gt ? (this.cbs.onselfclosingtag(this.index), this.state = i.Text, this.baseState = i.Text, this.sectionStart = this.index + 1, this.isSpecial = !1) : a(e) || (this.state = i.BeforeAttributeName, this.stateBeforeAttributeName(e)) + }, e.prototype.stateInAttributeName = function(e) { + (e === n.Eq || l(e)) && (this.cbs.onattribname(this.sectionStart, this.index), this.sectionStart = -1, this.state = i.AfterAttributeName, this.stateAfterAttributeName(e)) + }, e.prototype.stateAfterAttributeName = function(e) { + e === n.Eq ? this.state = i.BeforeAttributeValue : e === n.Slash || e === n.Gt ? (this.cbs.onattribend(s.NoValue, this.index), this.state = i.BeforeAttributeName, this.stateBeforeAttributeName(e)) : a(e) || (this.cbs.onattribend(s.NoValue, this.index), this.state = i.InAttributeName, this.sectionStart = this.index) + }, e.prototype.stateBeforeAttributeValue = function(e) { + e === n.DoubleQuote ? (this.state = i.InAttributeValueDq, this.sectionStart = this.index + 1) : e === n.SingleQuote ? (this.state = i.InAttributeValueSq, this.sectionStart = this.index + 1) : a(e) || (this.sectionStart = this.index, this.state = i.InAttributeValueNq, this.stateInAttributeValueNoQuotes(e)) + }, e.prototype.handleInAttributeValue = function(e, t) { + e === t || !this.decodeEntities && this.fastForwardTo(t) ? (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = -1, this.cbs.onattribend(t === n.DoubleQuote ? s.Double : s.Single, this.index), this.state = i.BeforeAttributeName) : this.decodeEntities && e === n.Amp && (this.baseState = this.state, this.state = i.BeforeEntity) + }, e.prototype.stateInAttributeValueDoubleQuotes = function(e) { + this.handleInAttributeValue(e, n.DoubleQuote) + }, e.prototype.stateInAttributeValueSingleQuotes = function(e) { + this.handleInAttributeValue(e, n.SingleQuote) + }, e.prototype.stateInAttributeValueNoQuotes = function(e) { + a(e) || e === n.Gt ? (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = -1, this.cbs.onattribend(s.Unquoted, this.index), this.state = i.BeforeAttributeName, this.stateBeforeAttributeName(e)) : this.decodeEntities && e === n.Amp && (this.baseState = this.state, this.state = i.BeforeEntity) + }, e.prototype.stateBeforeDeclaration = function(e) { + e === n.OpeningSquareBracket ? (this.state = i.CDATASequence, this.sequenceIndex = 0) : this.state = e === n.Dash ? i.BeforeComment : i.InDeclaration + }, e.prototype.stateInDeclaration = function(e) { + (e === n.Gt || this.fastForwardTo(n.Gt)) && (this.cbs.ondeclaration(this.sectionStart, this.index), this.state = i.Text, this.sectionStart = this.index + 1) + }, e.prototype.stateInProcessingInstruction = function(e) { + (e === n.Gt || this.fastForwardTo(n.Gt)) && (this.cbs.onprocessinginstruction(this.sectionStart, this.index), this.state = i.Text, this.sectionStart = this.index + 1) + }, e.prototype.stateBeforeComment = function(e) { + e === n.Dash ? (this.state = i.InCommentLike, this.currentSequence = u.CommentEnd, this.sequenceIndex = 2, this.sectionStart = this.index + 1) : this.state = i.InDeclaration + }, e.prototype.stateInSpecialComment = function(e) { + (e === n.Gt || this.fastForwardTo(n.Gt)) && (this.cbs.oncomment(this.sectionStart, this.index, 0), this.state = i.Text, this.sectionStart = this.index + 1) + }, e.prototype.stateBeforeSpecialS = function(e) { + var t = 32 | e; + t === u.ScriptEnd[3] ? this.startSpecial(u.ScriptEnd, 4) : t === u.StyleEnd[3] ? this.startSpecial(u.StyleEnd, 4) : (this.state = i.InTagName, this.stateInTagName(e)) + }, e.prototype.stateBeforeEntity = function(e) { + this.entityExcess = 1, this.entityResult = 0, e === n.Num ? this.state = i.BeforeNumericEntity : e === n.Amp || (this.trieIndex = 0, this.trieCurrent = this.entityTrie[0], this.state = i.InNamedEntity, this.stateInNamedEntity(e)) + }, e.prototype.stateInNamedEntity = function(e) { + if (this.entityExcess += 1, this.trieIndex = (0, o.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, e), this.trieIndex < 0) return this.emitNamedEntity(), void this.index--; + this.trieCurrent = this.entityTrie[this.trieIndex]; + var t = this.trieCurrent & o.BinTrieFlags.VALUE_LENGTH; + if (t) { + var r = (t >> 14) - 1; + if (this.allowLegacyEntity() || e === n.Semi) { + var i = this.index - this.entityExcess + 1; + i > this.sectionStart && this.emitPartial(this.sectionStart, i), this.entityResult = this.trieIndex, this.trieIndex += r, this.entityExcess = 0, this.sectionStart = this.index + 1, 0 === r && this.emitNamedEntity() + } else this.trieIndex += r + } + }, e.prototype.emitNamedEntity = function() { + if (this.state = this.baseState, 0 !== this.entityResult) switch ((this.entityTrie[this.entityResult] & o.BinTrieFlags.VALUE_LENGTH) >> 14) { + case 1: + this.emitCodePoint(this.entityTrie[this.entityResult] & ~o.BinTrieFlags.VALUE_LENGTH); + break; + case 2: + this.emitCodePoint(this.entityTrie[this.entityResult + 1]); + break; + case 3: + this.emitCodePoint(this.entityTrie[this.entityResult + 1]), this.emitCodePoint(this.entityTrie[this.entityResult + 2]) + } + }, e.prototype.stateBeforeNumericEntity = function(e) { + (32 | e) === n.LowerX ? (this.entityExcess++, this.state = i.InHexEntity) : (this.state = i.InNumericEntity, this.stateInNumericEntity(e)) + }, e.prototype.emitNumericEntity = function(e) { + var t = this.index - this.entityExcess - 1; + t + 2 + Number(this.state === i.InHexEntity) !== this.index && (t > this.sectionStart && this.emitPartial(this.sectionStart, t), this.sectionStart = this.index + Number(e), this.emitCodePoint((0, o.replaceCodePoint)(this.entityResult))), this.state = this.baseState + }, e.prototype.stateInNumericEntity = function(e) { + e === n.Semi ? this.emitNumericEntity(!0) : c(e) ? (this.entityResult = 10 * this.entityResult + (e - n.Zero), this.entityExcess++) : (this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state = this.baseState, this.index--) + }, e.prototype.stateInHexEntity = function(e) { + e === n.Semi ? this.emitNumericEntity(!0) : c(e) ? (this.entityResult = 16 * this.entityResult + (e - n.Zero), this.entityExcess++) : function(e) { + return e >= n.UpperA && e <= n.UpperF || e >= n.LowerA && e <= n.LowerF + }(e) ? (this.entityResult = 16 * this.entityResult + ((32 | e) - n.LowerA + 10), this.entityExcess++) : (this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state = this.baseState, this.index--) + }, e.prototype.allowLegacyEntity = function() { + return !this.xmlMode && (this.baseState === i.Text || this.baseState === i.InSpecialTag) + }, e.prototype.cleanup = function() { + this.running && this.sectionStart !== this.index && (this.state === i.Text || this.state === i.InSpecialTag && 0 === this.sequenceIndex ? (this.cbs.ontext(this.sectionStart, this.index), this.sectionStart = this.index) : this.state !== i.InAttributeValueDq && this.state !== i.InAttributeValueSq && this.state !== i.InAttributeValueNq || (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = this.index)) + }, e.prototype.shouldContinue = function() { + return this.index < this.buffer.length + this.offset && this.running + }, e.prototype.parse = function() { + for (; this.shouldContinue();) { + var e = this.buffer.charCodeAt(this.index - this.offset); + this.state === i.Text ? this.stateText(e) : this.state === i.SpecialStartSequence ? this.stateSpecialStartSequence(e) : this.state === i.InSpecialTag ? this.stateInSpecialTag(e) : this.state === i.CDATASequence ? this.stateCDATASequence(e) : this.state === i.InAttributeValueDq ? this.stateInAttributeValueDoubleQuotes(e) : this.state === i.InAttributeName ? this.stateInAttributeName(e) : this.state === i.InCommentLike ? this.stateInCommentLike(e) : this.state === i.InSpecialComment ? this.stateInSpecialComment(e) : this.state === i.BeforeAttributeName ? this.stateBeforeAttributeName(e) : this.state === i.InTagName ? this.stateInTagName(e) : this.state === i.InClosingTagName ? this.stateInClosingTagName(e) : this.state === i.BeforeTagName ? this.stateBeforeTagName(e) : this.state === i.AfterAttributeName ? this.stateAfterAttributeName(e) : this.state === i.InAttributeValueSq ? this.stateInAttributeValueSingleQuotes(e) : this.state === i.BeforeAttributeValue ? this.stateBeforeAttributeValue(e) : this.state === i.BeforeClosingTagName ? this.stateBeforeClosingTagName(e) : this.state === i.AfterClosingTagName ? this.stateAfterClosingTagName(e) : this.state === i.BeforeSpecialS ? this.stateBeforeSpecialS(e) : this.state === i.InAttributeValueNq ? this.stateInAttributeValueNoQuotes(e) : this.state === i.InSelfClosingTag ? this.stateInSelfClosingTag(e) : this.state === i.InDeclaration ? this.stateInDeclaration(e) : this.state === i.BeforeDeclaration ? this.stateBeforeDeclaration(e) : this.state === i.BeforeComment ? this.stateBeforeComment(e) : this.state === i.InProcessingInstruction ? this.stateInProcessingInstruction(e) : this.state === i.InNamedEntity ? this.stateInNamedEntity(e) : this.state === i.BeforeEntity ? this.stateBeforeEntity(e) : this.state === i.InHexEntity ? this.stateInHexEntity(e) : this.state === i.InNumericEntity ? this.stateInNumericEntity(e) : this.stateBeforeNumericEntity(e), this.index++ + } + this.cleanup() + }, e.prototype.finish = function() { + this.state === i.InNamedEntity && this.emitNamedEntity(), this.sectionStart < this.index && this.handleTrailingData(), this.cbs.onend() + }, e.prototype.handleTrailingData = function() { + var e = this.buffer.length + this.offset; + this.state === i.InCommentLike ? this.currentSequence === u.CdataEnd ? this.cbs.oncdata(this.sectionStart, e, 0) : this.cbs.oncomment(this.sectionStart, e, 0) : this.state === i.InNumericEntity && this.allowLegacyEntity() || this.state === i.InHexEntity && this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state === i.InTagName || this.state === i.BeforeAttributeName || this.state === i.BeforeAttributeValue || this.state === i.AfterAttributeName || this.state === i.InAttributeName || this.state === i.InAttributeValueSq || this.state === i.InAttributeValueDq || this.state === i.InAttributeValueNq || this.state === i.InClosingTagName || this.cbs.ontext(this.sectionStart, e) + }, e.prototype.emitPartial = function(e, t) { + this.baseState !== i.Text && this.baseState !== i.InSpecialTag ? this.cbs.onattribdata(e, t) : this.cbs.ontext(e, t) + }, e.prototype.emitCodePoint = function(e) { + this.baseState !== i.Text && this.baseState !== i.InSpecialTag ? this.cbs.onattribentity(e) : this.cbs.ontextentity(e) + }, e + }(); + t.default = h + }, + 35106: function(e, t, r) { + "use strict"; + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + void 0 === n && (n = r); + var i = Object.getOwnPropertyDescriptor(t, r); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, n, i) + } : function(e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r] + }), + i = this && this.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + s = this && this.__importStar || function(e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) + for (var r in e) "default" !== r && Object.prototype.hasOwnProperty.call(e, r) && n(t, e, r); + return i(t, e), t + }, + o = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.DefaultHandler = t.DomUtils = t.parseFeed = t.getFeed = t.ElementType = t.Tokenizer = t.createDomStream = t.parseDOM = t.parseDocument = t.DomHandler = t.Parser = void 0; + var a = r(16666); + Object.defineProperty(t, "Parser", { + enumerable: !0, + get: function() { + return a.Parser + } + }); + var l = r(61142); + + function c(e, t) { + var r = new l.DomHandler(void 0, t); + return new a.Parser(r, t).end(e), r.root + } + + function u(e, t) { + return c(e, t).children + } + Object.defineProperty(t, "DomHandler", { + enumerable: !0, + get: function() { + return l.DomHandler + } + }), Object.defineProperty(t, "DefaultHandler", { + enumerable: !0, + get: function() { + return l.DomHandler + } + }), t.parseDocument = c, t.parseDOM = u, t.createDomStream = function(e, t, r) { + var n = new l.DomHandler(e, t, r); + return new a.Parser(n, t) + }; + var h = r(10034); + Object.defineProperty(t, "Tokenizer", { + enumerable: !0, + get: function() { + return o(h).default + } + }); + var p = s(r(99960)); + t.ElementType = p; + var d = r(47241); + Object.defineProperty(t, "getFeed", { + enumerable: !0, + get: function() { + return d.getFeed + } + }), t.parseFeed = function(e, t) { + return void 0 === t && (t = { + xmlMode: !0 + }), (0, d.getFeed)(u(e, t)) + }, t.DomUtils = s(r(47241)) + }, + 10977: (e, t) => { + "use strict"; + + function r(e) { + return "[object Object]" === Object.prototype.toString.call(e) + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.isPlainObject = function(e) { + var t, n; + return !1 !== r(e) && (void 0 === (t = e.constructor) || !1 !== r(n = t.prototype) && !1 !== n.hasOwnProperty("isPrototypeOf")) + } + }, + 32618: e => { + e.exports = { + nanoid: (e = 21) => { + let t = "", + r = e; + for (; r--;) t += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict" [64 * Math.random() | 0]; + return t + }, + customAlphabet: (e, t = 21) => (r = t) => { + let n = "", + i = r; + for (; i--;) n += e[Math.random() * e.length | 0]; + return n + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js.LICENSE.txt b/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js.LICENSE.txt new file mode 100644 index 0000000..fe4c1fe --- /dev/null +++ b/mp-core/1036.ffda2f3fca1d099fb52e.bundle.js.LICENSE.txt @@ -0,0 +1,6 @@ +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ diff --git a/mp-core/1217.0936a1194f22a3351250.bundle.js b/mp-core/1217.0936a1194f22a3351250.bundle.js new file mode 100644 index 0000000..f278617 --- /dev/null +++ b/mp-core/1217.0936a1194f22a3351250.bundle.js @@ -0,0 +1,1605 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1217], { + 1217: (e, t, s) => { + s.d(t, { + E: () => o + }); + var n = s(99477), + r = s(40140), + i = s(25108); + class o extends n.Loader { + constructor(e) { + super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register((function(e) { + return new d(e) + })), this.register((function(e) { + return new p(e) + })), this.register((function(e) { + return new E(e) + })), this.register((function(e) { + return new v(e) + })), this.register((function(e) { + return new S(e) + })), this.register((function(e) { + return new f(e) + })), this.register((function(e) { + return new A(e) + })), this.register((function(e) { + return new g(e) + })), this.register((function(e) { + return new T(e) + })), this.register((function(e) { + return new h(e) + })), this.register((function(e) { + return new x(e) + })), this.register((function(e) { + return new m(e) + })), this.register((function(e) { + return new _(e) + })), this.register((function(e) { + return new R(e) + })), this.register((function(e) { + return new l(e) + })), this.register((function(e) { + return new M(e) + })), this.register((function(e) { + return new L(e) + })) + } + load(e, t, s, r) { + const o = this; + let a; + if ("" !== this.resourcePath) a = this.resourcePath; + else if ("" !== this.path) { + const t = n.LoaderUtils.extractUrlBase(e); + a = n.LoaderUtils.resolveURL(t, this.path) + } else a = n.LoaderUtils.extractUrlBase(e); + this.manager.itemStart(e); + const c = function(t) { + r ? r(t) : i.error(t), o.manager.itemError(e), o.manager.itemEnd(e) + }, + l = new n.FileLoader(this.manager); + l.setPath(this.path), l.setResponseType("arraybuffer"), l.setRequestHeader(this.requestHeader), l.setWithCredentials(this.withCredentials), l.load(e, (function(s) { + try { + o.parse(s, a, (function(s) { + t(s), o.manager.itemEnd(e) + }), c) + } catch (e) { + c(e) + } + }), s, c) + } + setDRACOLoader(e) { + return this.dracoLoader = e, this + } + setDDSLoader() { + throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".') + } + setKTX2Loader(e) { + return this.ktx2Loader = e, this + } + setMeshoptDecoder(e) { + return this.meshoptDecoder = e, this + } + register(e) { + return -1 === this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.push(e), this + } + unregister(e) { + return -1 !== this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this + } + parse(e, t, s, n) { + let r; + const o = {}, + a = {}, + l = new TextDecoder; + if ("string" == typeof e) r = JSON.parse(e); + else if (e instanceof ArrayBuffer) + if (l.decode(new Uint8Array(e, 0, 4)) === w) { + try { + o[c.KHR_BINARY_GLTF] = new y(e) + } catch (e) { + return void(n && n(e)) + } + r = JSON.parse(o[c.KHR_BINARY_GLTF].content) + } else r = JSON.parse(l.decode(e)); + else r = e; + if (void 0 === r.asset || r.asset.version[0] < 2) return void(n && n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."))); + const h = new Y(r, { + path: t || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + h.fileLoader.setRequestHeader(this.requestHeader); + for (let e = 0; e < this.pluginCallbacks.length; e++) { + const t = this.pluginCallbacks[e](h); + t.name || i.error("THREE.GLTFLoader: Invalid plugin found: missing name"), a[t.name] = t, o[t.name] = !0 + } + if (r.extensionsUsed) + for (let e = 0; e < r.extensionsUsed.length; ++e) { + const t = r.extensionsUsed[e], + s = r.extensionsRequired || []; + switch (t) { + case c.KHR_MATERIALS_UNLIT: + o[t] = new u; + break; + case c.KHR_DRACO_MESH_COMPRESSION: + o[t] = new I(r, this.dracoLoader); + break; + case c.KHR_TEXTURE_TRANSFORM: + o[t] = new b; + break; + case c.KHR_MESH_QUANTIZATION: + o[t] = new C; + break; + default: + s.indexOf(t) >= 0 && void 0 === a[t] && i.warn('THREE.GLTFLoader: Unknown extension "' + t + '".') + } + } + h.setExtensions(o), h.setPlugins(a), h.parse(s, n) + } + parseAsync(e, t) { + const s = this; + return new Promise((function(n, r) { + s.parse(e, t, n, r) + })) + } + } + + function a() { + let e = {}; + return { + get: function(t) { + return e[t] + }, + add: function(t, s) { + e[t] = s + }, + remove: function(t) { + delete e[t] + }, + removeAll: function() { + e = {} + } + } + } + const c = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" + }; + class l { + constructor(e) { + this.parser = e, this.name = c.KHR_LIGHTS_PUNCTUAL, this.cache = { + refs: {}, + uses: {} + } + } + _markDefs() { + const e = this.parser, + t = this.parser.json.nodes || []; + for (let s = 0, n = t.length; s < n; s++) { + const n = t[s]; + n.extensions && n.extensions[this.name] && void 0 !== n.extensions[this.name].light && e._addNodeRef(this.cache, n.extensions[this.name].light) + } + } + _loadLight(e) { + const t = this.parser, + s = "light:" + e; + let r = t.cache.get(s); + if (r) return r; + const i = t.json, + o = ((i.extensions && i.extensions[this.name] || {}).lights || [])[e]; + let a; + const c = new n.Color(16777215); + void 0 !== o.color && c.setRGB(o.color[0], o.color[1], o.color[2], n.LinearSRGBColorSpace); + const l = void 0 !== o.range ? o.range : 0; + switch (o.type) { + case "directional": + a = new n.DirectionalLight(c), a.target.position.set(0, 0, -1), a.add(a.target); + break; + case "point": + a = new n.PointLight(c), a.distance = l; + break; + case "spot": + a = new n.SpotLight(c), a.distance = l, o.spot = o.spot || {}, o.spot.innerConeAngle = void 0 !== o.spot.innerConeAngle ? o.spot.innerConeAngle : 0, o.spot.outerConeAngle = void 0 !== o.spot.outerConeAngle ? o.spot.outerConeAngle : Math.PI / 4, a.angle = o.spot.outerConeAngle, a.penumbra = 1 - o.spot.innerConeAngle / o.spot.outerConeAngle, a.target.position.set(0, 0, -1), a.add(a.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + o.type) + } + return a.position.set(0, 0, 0), a.decay = 2, V(a, o), void 0 !== o.intensity && (a.intensity = o.intensity), a.name = t.createUniqueName(o.name || "light_" + e), r = Promise.resolve(a), t.cache.add(s, r), r + } + getDependency(e, t) { + if ("light" === e) return this._loadLight(t) + } + createNodeAttachment(e) { + const t = this, + s = this.parser, + n = s.json.nodes[e], + r = (n.extensions && n.extensions[this.name] || {}).light; + return void 0 === r ? null : this._loadLight(r).then((function(e) { + return s._getNodeRef(t.cache, r, e) + })) + } + } + class u { + constructor() { + this.name = c.KHR_MATERIALS_UNLIT + } + getMaterialType() { + return n.MeshBasicMaterial + } + extendParams(e, t, s) { + const r = []; + e.color = new n.Color(1, 1, 1), e.opacity = 1; + const i = t.pbrMetallicRoughness; + if (i) { + if (Array.isArray(i.baseColorFactor)) { + const t = i.baseColorFactor; + e.color.setRGB(t[0], t[1], t[2], n.LinearSRGBColorSpace), e.opacity = t[3] + } + void 0 !== i.baseColorTexture && r.push(s.assignTexture(e, "map", i.baseColorTexture, n.SRGBColorSpace)) + } + return Promise.all(r) + } + } + class h { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_EMISSIVE_STRENGTH + } + extendMaterialParams(e, t) { + const s = this.parser.json.materials[e]; + if (!s.extensions || !s.extensions[this.name]) return Promise.resolve(); + const n = s.extensions[this.name].emissiveStrength; + return void 0 !== n && (t.emissiveIntensity = n), Promise.resolve() + } + } + class d { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_CLEARCOAT + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + r = s.json.materials[e]; + if (!r.extensions || !r.extensions[this.name]) return Promise.resolve(); + const i = [], + o = r.extensions[this.name]; + if (void 0 !== o.clearcoatFactor && (t.clearcoat = o.clearcoatFactor), void 0 !== o.clearcoatTexture && i.push(s.assignTexture(t, "clearcoatMap", o.clearcoatTexture)), void 0 !== o.clearcoatRoughnessFactor && (t.clearcoatRoughness = o.clearcoatRoughnessFactor), void 0 !== o.clearcoatRoughnessTexture && i.push(s.assignTexture(t, "clearcoatRoughnessMap", o.clearcoatRoughnessTexture)), void 0 !== o.clearcoatNormalTexture && (i.push(s.assignTexture(t, "clearcoatNormalMap", o.clearcoatNormalTexture)), void 0 !== o.clearcoatNormalTexture.scale)) { + const e = o.clearcoatNormalTexture.scale; + t.clearcoatNormalScale = new n.Vector2(e, e) + } + return Promise.all(i) + } + } + class p { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_DISPERSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser.json.materials[e]; + if (!s.extensions || !s.extensions[this.name]) return Promise.resolve(); + const n = s.extensions[this.name]; + return t.dispersion = void 0 !== n.dispersion ? n.dispersion : 0, Promise.resolve() + } + } + class m { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_IRIDESCENCE + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + n = s.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const r = [], + i = n.extensions[this.name]; + return void 0 !== i.iridescenceFactor && (t.iridescence = i.iridescenceFactor), void 0 !== i.iridescenceTexture && r.push(s.assignTexture(t, "iridescenceMap", i.iridescenceTexture)), void 0 !== i.iridescenceIor && (t.iridescenceIOR = i.iridescenceIor), void 0 === t.iridescenceThicknessRange && (t.iridescenceThicknessRange = [100, 400]), void 0 !== i.iridescenceThicknessMinimum && (t.iridescenceThicknessRange[0] = i.iridescenceThicknessMinimum), void 0 !== i.iridescenceThicknessMaximum && (t.iridescenceThicknessRange[1] = i.iridescenceThicknessMaximum), void 0 !== i.iridescenceThicknessTexture && r.push(s.assignTexture(t, "iridescenceThicknessMap", i.iridescenceThicknessTexture)), Promise.all(r) + } + } + class f { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_SHEEN + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + r = s.json.materials[e]; + if (!r.extensions || !r.extensions[this.name]) return Promise.resolve(); + const i = []; + t.sheenColor = new n.Color(0, 0, 0), t.sheenRoughness = 0, t.sheen = 1; + const o = r.extensions[this.name]; + if (void 0 !== o.sheenColorFactor) { + const e = o.sheenColorFactor; + t.sheenColor.setRGB(e[0], e[1], e[2], n.LinearSRGBColorSpace) + } + return void 0 !== o.sheenRoughnessFactor && (t.sheenRoughness = o.sheenRoughnessFactor), void 0 !== o.sheenColorTexture && i.push(s.assignTexture(t, "sheenColorMap", o.sheenColorTexture, n.SRGBColorSpace)), void 0 !== o.sheenRoughnessTexture && i.push(s.assignTexture(t, "sheenRoughnessMap", o.sheenRoughnessTexture)), Promise.all(i) + } + } + class A { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_TRANSMISSION + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + n = s.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const r = [], + i = n.extensions[this.name]; + return void 0 !== i.transmissionFactor && (t.transmission = i.transmissionFactor), void 0 !== i.transmissionTexture && r.push(s.assignTexture(t, "transmissionMap", i.transmissionTexture)), Promise.all(r) + } + } + class g { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_VOLUME + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + r = s.json.materials[e]; + if (!r.extensions || !r.extensions[this.name]) return Promise.resolve(); + const i = [], + o = r.extensions[this.name]; + t.thickness = void 0 !== o.thicknessFactor ? o.thicknessFactor : 0, void 0 !== o.thicknessTexture && i.push(s.assignTexture(t, "thicknessMap", o.thicknessTexture)), t.attenuationDistance = o.attenuationDistance || 1 / 0; + const a = o.attenuationColor || [1, 1, 1]; + return t.attenuationColor = (new n.Color).setRGB(a[0], a[1], a[2], n.LinearSRGBColorSpace), Promise.all(i) + } + } + class T { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_IOR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser.json.materials[e]; + if (!s.extensions || !s.extensions[this.name]) return Promise.resolve(); + const n = s.extensions[this.name]; + return t.ior = void 0 !== n.ior ? n.ior : 1.5, Promise.resolve() + } + } + class x { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_SPECULAR + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + r = s.json.materials[e]; + if (!r.extensions || !r.extensions[this.name]) return Promise.resolve(); + const i = [], + o = r.extensions[this.name]; + t.specularIntensity = void 0 !== o.specularFactor ? o.specularFactor : 1, void 0 !== o.specularTexture && i.push(s.assignTexture(t, "specularIntensityMap", o.specularTexture)); + const a = o.specularColorFactor || [1, 1, 1]; + return t.specularColor = (new n.Color).setRGB(a[0], a[1], a[2], n.LinearSRGBColorSpace), void 0 !== o.specularColorTexture && i.push(s.assignTexture(t, "specularColorMap", o.specularColorTexture, n.SRGBColorSpace)), Promise.all(i) + } + } + class R { + constructor(e) { + this.parser = e, this.name = c.EXT_MATERIALS_BUMP + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + n = s.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const r = [], + i = n.extensions[this.name]; + return t.bumpScale = void 0 !== i.bumpFactor ? i.bumpFactor : 1, void 0 !== i.bumpTexture && r.push(s.assignTexture(t, "bumpMap", i.bumpTexture)), Promise.all(r) + } + } + class _ { + constructor(e) { + this.parser = e, this.name = c.KHR_MATERIALS_ANISOTROPY + } + getMaterialType(e) { + const t = this.parser.json.materials[e]; + return t.extensions && t.extensions[this.name] ? n.MeshPhysicalMaterial : null + } + extendMaterialParams(e, t) { + const s = this.parser, + n = s.json.materials[e]; + if (!n.extensions || !n.extensions[this.name]) return Promise.resolve(); + const r = [], + i = n.extensions[this.name]; + return void 0 !== i.anisotropyStrength && (t.anisotropy = i.anisotropyStrength), void 0 !== i.anisotropyRotation && (t.anisotropyRotation = i.anisotropyRotation), void 0 !== i.anisotropyTexture && r.push(s.assignTexture(t, "anisotropyMap", i.anisotropyTexture)), Promise.all(r) + } + } + class E { + constructor(e) { + this.parser = e, this.name = c.KHR_TEXTURE_BASISU + } + loadTexture(e) { + const t = this.parser, + s = t.json, + n = s.textures[e]; + if (!n.extensions || !n.extensions[this.name]) return null; + const r = n.extensions[this.name], + i = t.options.ktx2Loader; + if (!i) { + if (s.extensionsRequired && s.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + return null + } + return t.loadTextureImage(e, r.source, i) + } + } + class v { + constructor(e) { + this.parser = e, this.name = c.EXT_TEXTURE_WEBP, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + s = this.parser, + n = s.json, + r = n.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const i = r.extensions[t], + o = n.images[i.source]; + let a = s.textureLoader; + if (o.uri) { + const e = s.options.manager.getHandler(o.uri); + null !== e && (a = e) + } + return this.detectSupport().then((function(r) { + if (r) return s.loadTextureImage(e, i.source, a); + if (n.extensionsRequired && n.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + return s.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class S { + constructor(e) { + this.parser = e, this.name = c.EXT_TEXTURE_AVIF, this.isSupported = null + } + loadTexture(e) { + const t = this.name, + s = this.parser, + n = s.json, + r = n.textures[e]; + if (!r.extensions || !r.extensions[t]) return null; + const i = r.extensions[t], + o = n.images[i.source]; + let a = s.textureLoader; + if (o.uri) { + const e = s.options.manager.getHandler(o.uri); + null !== e && (a = e) + } + return this.detectSupport().then((function(r) { + if (r) return s.loadTextureImage(e, i.source, a); + if (n.extensionsRequired && n.extensionsRequired.indexOf(t) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + return s.loadTexture(e) + })) + } + detectSupport() { + return this.isSupported || (this.isSupported = new Promise((function(e) { + const t = new Image; + t.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", t.onload = t.onerror = function() { + e(1 === t.height) + } + }))), this.isSupported + } + } + class M { + constructor(e) { + this.name = c.EXT_MESHOPT_COMPRESSION, this.parser = e + } + loadBufferView(e) { + const t = this.parser.json, + s = t.bufferViews[e]; + if (s.extensions && s.extensions[this.name]) { + const e = s.extensions[this.name], + n = this.parser.getDependency("buffer", e.buffer), + r = this.parser.options.meshoptDecoder; + if (!r || !r.supported) { + if (t.extensionsRequired && t.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + return null + } + return n.then((function(t) { + const s = e.byteOffset || 0, + n = e.byteLength || 0, + i = e.count, + o = e.byteStride, + a = new Uint8Array(t, s, n); + return r.decodeGltfBufferAsync ? r.decodeGltfBufferAsync(i, o, a, e.mode, e.filter).then((function(e) { + return e.buffer + })) : r.ready.then((function() { + const t = new ArrayBuffer(i * o); + return r.decodeGltfBuffer(new Uint8Array(t), i, o, a, e.mode, e.filter), t + })) + })) + } + return null + } + } + class L { + constructor(e) { + this.name = c.EXT_MESH_GPU_INSTANCING, this.parser = e + } + createNodeMesh(e) { + const t = this.parser.json, + s = t.nodes[e]; + if (!s.extensions || !s.extensions[this.name] || void 0 === s.mesh) return null; + const r = t.meshes[s.mesh]; + for (const e of r.primitives) + if (e.mode !== H.TRIANGLES && e.mode !== H.TRIANGLE_STRIP && e.mode !== H.TRIANGLE_FAN && void 0 !== e.mode) return null; + const i = s.extensions[this.name].attributes, + o = [], + a = {}; + for (const e in i) o.push(this.parser.getDependency("accessor", i[e]).then((t => (a[e] = t, a[e])))); + return o.length < 1 ? null : (o.push(this.parser.createNodeMesh(e)), Promise.all(o).then((e => { + const t = e.pop(), + s = t.isGroup ? t.children : [t], + r = e[0].count, + i = []; + for (const e of s) { + const t = new n.Matrix4, + s = new n.Vector3, + o = new n.Quaternion, + c = new n.Vector3(1, 1, 1), + l = new n.InstancedMesh(e.geometry, e.material, r); + for (let e = 0; e < r; e++) a.TRANSLATION && s.fromBufferAttribute(a.TRANSLATION, e), a.ROTATION && o.fromBufferAttribute(a.ROTATION, e), a.SCALE && c.fromBufferAttribute(a.SCALE, e), l.setMatrixAt(e, t.compose(s, o, c)); + for (const t in a) + if ("_COLOR_0" === t) { + const e = a[t]; + l.instanceColor = new n.InstancedBufferAttribute(e.array, e.itemSize, e.normalized) + } else "TRANSLATION" !== t && "ROTATION" !== t && "SCALE" !== t && e.geometry.setAttribute(t, a[t]); + n.Object3D.prototype.copy.call(l, e), this.parser.assignFinalMaterial(l), i.push(l) + } + return t.isGroup ? (t.clear(), t.add(...i), t) : i[0] + }))) + } + } + const w = "glTF"; + class y { + constructor(e) { + this.name = c.KHR_BINARY_GLTF, this.content = null, this.body = null; + const t = new DataView(e, 0, 12), + s = new TextDecoder; + if (this.header = { + magic: s.decode(new Uint8Array(e.slice(0, 4))), + version: t.getUint32(4, !0), + length: t.getUint32(8, !0) + }, this.header.magic !== w) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + const n = this.header.length - 12, + r = new DataView(e, 12); + let i = 0; + for (; i < n;) { + const t = r.getUint32(i, !0); + i += 4; + const n = r.getUint32(i, !0); + if (i += 4, 1313821514 === n) { + const n = new Uint8Array(e, 12 + i, t); + this.content = s.decode(n) + } else if (5130562 === n) { + const s = 12 + i; + this.body = e.slice(s, s + t) + } + i += t + } + if (null === this.content) throw new Error("THREE.GLTFLoader: JSON content not found.") + } + } + class I { + constructor(e, t) { + if (!t) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = c.KHR_DRACO_MESH_COMPRESSION, this.json = e, this.dracoLoader = t, this.dracoLoader.preload() + } + decodePrimitive(e, t) { + const s = this.json, + r = this.dracoLoader, + i = e.extensions[this.name].bufferView, + o = e.extensions[this.name].attributes, + a = {}, + c = {}, + l = {}; + for (const e in o) { + const t = G[e] || e.toLowerCase(); + a[t] = o[e] + } + for (const t in e.attributes) { + const n = G[t] || t.toLowerCase(); + if (void 0 !== o[t]) { + const r = s.accessors[e.attributes[t]], + i = F[r.componentType]; + l[n] = i.name, c[n] = !0 === r.normalized + } + } + return t.getDependency("bufferView", i).then((function(e) { + return new Promise((function(t, s) { + r.decodeDracoFile(e, (function(e) { + for (const t in e.attributes) { + const s = e.attributes[t], + n = c[t]; + void 0 !== n && (s.normalized = n) + } + t(e) + }), a, l, n.LinearSRGBColorSpace, s) + })) + })) + } + } + class b { + constructor() { + this.name = c.KHR_TEXTURE_TRANSFORM + } + extendTexture(e, t) { + return void 0 !== t.texCoord && t.texCoord !== e.channel || void 0 !== t.offset || void 0 !== t.rotation || void 0 !== t.scale ? (e = e.clone(), void 0 !== t.texCoord && (e.channel = t.texCoord), void 0 !== t.offset && e.offset.fromArray(t.offset), void 0 !== t.rotation && (e.rotation = t.rotation), void 0 !== t.scale && e.repeat.fromArray(t.scale), e.needsUpdate = !0, e) : e + } + } + class C { + constructor() { + this.name = c.KHR_MESH_QUANTIZATION + } + } + class N extends n.Interpolant { + constructor(e, t, s, n) { + super(e, t, s, n) + } + copySampleValue_(e) { + const t = this.resultBuffer, + s = this.sampleValues, + n = this.valueSize, + r = e * n * 3 + n; + for (let e = 0; e !== n; e++) t[e] = s[r + e]; + return t + } + interpolate_(e, t, s, n) { + const r = this.resultBuffer, + i = this.sampleValues, + o = this.valueSize, + a = 2 * o, + c = 3 * o, + l = n - t, + u = (s - t) / l, + h = u * u, + d = h * u, + p = e * c, + m = p - c, + f = -2 * d + 3 * h, + A = d - h, + g = 1 - f, + T = A - h + u; + for (let e = 0; e !== o; e++) { + const t = i[m + e + o], + s = i[m + e + a] * l, + n = i[p + e + o], + c = i[p + e] * l; + r[e] = g * t + T * s + f * n + A * c + } + return r + } + } + const O = new n.Quaternion; + class P extends N { + interpolate_(e, t, s, n) { + const r = super.interpolate_(e, t, s, n); + return O.fromArray(r).normalize().toArray(r), r + } + } + const H = { + FLOAT: 5126, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }, + F = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }, + k = { + 9728: n.NearestFilter, + 9729: n.LinearFilter, + 9984: n.NearestMipmapNearestFilter, + 9985: n.LinearMipmapNearestFilter, + 9986: n.NearestMipmapLinearFilter, + 9987: n.LinearMipmapLinearFilter + }, + B = { + 33071: n.ClampToEdgeWrapping, + 33648: n.MirroredRepeatWrapping, + 10497: n.RepeatWrapping + }, + D = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 + }, + G = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" + }, + U = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" + }, + K = { + CUBICSPLINE: void 0, + LINEAR: n.InterpolateLinear, + STEP: n.InterpolateDiscrete + }; + + function j(e, t, s) { + for (const n in s.extensions) void 0 === e[n] && (t.userData.gltfExtensions = t.userData.gltfExtensions || {}, t.userData.gltfExtensions[n] = s.extensions[n]) + } + + function V(e, t) { + void 0 !== t.extras && ("object" == typeof t.extras ? Object.assign(e.userData, t.extras) : i.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + t.extras)) + } + + function X(e, t) { + if (e.updateMorphTargets(), void 0 !== t.weights) + for (let s = 0, n = t.weights.length; s < n; s++) e.morphTargetInfluences[s] = t.weights[s]; + if (t.extras && Array.isArray(t.extras.targetNames)) { + const s = t.extras.targetNames; + if (e.morphTargetInfluences.length === s.length) { + e.morphTargetDictionary = {}; + for (let t = 0, n = s.length; t < n; t++) e.morphTargetDictionary[s[t]] = t + } else i.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") + } + } + + function q(e) { + let t; + const s = e.extensions && e.extensions[c.KHR_DRACO_MESH_COMPRESSION]; + if (t = s ? "draco:" + s.bufferView + ":" + s.indices + ":" + z(s.attributes) : e.indices + ":" + z(e.attributes) + ":" + e.mode, void 0 !== e.targets) + for (let s = 0, n = e.targets.length; s < n; s++) t += ":" + z(e.targets[s]); + return t + } + + function z(e) { + let t = ""; + const s = Object.keys(e).sort(); + for (let n = 0, r = s.length; n < r; n++) t += s[n] + ":" + e[s[n]] + ";"; + return t + } + + function W(e) { + switch (e) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.") + } + } + const Q = new n.Matrix4; + class Y { + constructor(e = {}, t = {}) { + this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new a, this.associations = new Map, this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { + refs: {}, + uses: {} + }, this.cameraCache = { + refs: {}, + uses: {} + }, this.lightCache = { + refs: {}, + uses: {} + }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {}; + let s = !1, + r = !1, + i = -1; + "undefined" != typeof navigator && (s = !0 === /^((?!chrome|android).)*safari/i.test(navigator.userAgent), r = navigator.userAgent.indexOf("Firefox") > -1, i = r ? navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1), "undefined" == typeof createImageBitmap || s || r && i < 98 ? this.textureLoader = new n.TextureLoader(this.options.manager) : this.textureLoader = new n.ImageBitmapLoader(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new n.FileLoader(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) + } + setExtensions(e) { + this.extensions = e + } + setPlugins(e) { + this.plugins = e + } + parse(e, t) { + const s = this, + n = this.json, + r = this.extensions; + this.cache.removeAll(), this.nodeCache = {}, this._invokeAll((function(e) { + return e._markDefs && e._markDefs() + })), Promise.all(this._invokeAll((function(e) { + return e.beforeRoot && e.beforeRoot() + }))).then((function() { + return Promise.all([s.getDependencies("scene"), s.getDependencies("animation"), s.getDependencies("camera")]) + })).then((function(t) { + const i = { + scene: t[0][n.scene || 0], + scenes: t[0], + animations: t[1], + cameras: t[2], + asset: n.asset, + parser: s, + userData: {} + }; + return j(r, i, n), V(i, n), Promise.all(s._invokeAll((function(e) { + return e.afterRoot && e.afterRoot(i) + }))).then((function() { + for (const e of i.scenes) e.updateMatrixWorld(); + e(i) + })) + })).catch(t) + } + _markDefs() { + const e = this.json.nodes || [], + t = this.json.skins || [], + s = this.json.meshes || []; + for (let s = 0, n = t.length; s < n; s++) { + const n = t[s].joints; + for (let t = 0, s = n.length; t < s; t++) e[n[t]].isBone = !0 + } + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + void 0 !== n.mesh && (this._addNodeRef(this.meshCache, n.mesh), void 0 !== n.skin && (s[n.mesh].isSkinnedMesh = !0)), void 0 !== n.camera && this._addNodeRef(this.cameraCache, n.camera) + } + } + _addNodeRef(e, t) { + void 0 !== t && (void 0 === e.refs[t] && (e.refs[t] = e.uses[t] = 0), e.refs[t]++) + } + _getNodeRef(e, t, s) { + if (e.refs[t] <= 1) return s; + const n = s.clone(), + r = (e, t) => { + const s = this.associations.get(e); + null != s && this.associations.set(t, s); + for (const [s, n] of e.children.entries()) r(n, t.children[s]) + }; + return r(s, n), n.name += "_instance_" + e.uses[t]++, n + } + _invokeOne(e) { + const t = Object.values(this.plugins); + t.push(this); + for (let s = 0; s < t.length; s++) { + const n = e(t[s]); + if (n) return n + } + return null + } + _invokeAll(e) { + const t = Object.values(this.plugins); + t.unshift(this); + const s = []; + for (let n = 0; n < t.length; n++) { + const r = e(t[n]); + r && s.push(r) + } + return s + } + getDependency(e, t) { + const s = e + ":" + t; + let n = this.cache.get(s); + if (!n) { + switch (e) { + case "scene": + n = this.loadScene(t); + break; + case "node": + n = this._invokeOne((function(e) { + return e.loadNode && e.loadNode(t) + })); + break; + case "mesh": + n = this._invokeOne((function(e) { + return e.loadMesh && e.loadMesh(t) + })); + break; + case "accessor": + n = this.loadAccessor(t); + break; + case "bufferView": + n = this._invokeOne((function(e) { + return e.loadBufferView && e.loadBufferView(t) + })); + break; + case "buffer": + n = this.loadBuffer(t); + break; + case "material": + n = this._invokeOne((function(e) { + return e.loadMaterial && e.loadMaterial(t) + })); + break; + case "texture": + n = this._invokeOne((function(e) { + return e.loadTexture && e.loadTexture(t) + })); + break; + case "skin": + n = this.loadSkin(t); + break; + case "animation": + n = this._invokeOne((function(e) { + return e.loadAnimation && e.loadAnimation(t) + })); + break; + case "camera": + n = this.loadCamera(t); + break; + default: + if (n = this._invokeOne((function(s) { + return s != this && s.getDependency && s.getDependency(e, t) + })), !n) throw new Error("Unknown type: " + e) + } + this.cache.add(s, n) + } + return n + } + getDependencies(e) { + let t = this.cache.get(e); + if (!t) { + const s = this, + n = this.json[e + ("mesh" === e ? "es" : "s")] || []; + t = Promise.all(n.map((function(t, n) { + return s.getDependency(e, n) + }))), this.cache.add(e, t) + } + return t + } + loadBuffer(e) { + const t = this.json.buffers[e], + s = this.fileLoader; + if (t.type && "arraybuffer" !== t.type) throw new Error("THREE.GLTFLoader: " + t.type + " buffer type is not supported."); + if (void 0 === t.uri && 0 === e) return Promise.resolve(this.extensions[c.KHR_BINARY_GLTF].body); + const r = this.options; + return new Promise((function(e, i) { + s.load(n.LoaderUtils.resolveURL(t.uri, r.path), e, void 0, (function() { + i(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".')) + })) + })) + } + loadBufferView(e) { + const t = this.json.bufferViews[e]; + return this.getDependency("buffer", t.buffer).then((function(e) { + const s = t.byteLength || 0, + n = t.byteOffset || 0; + return e.slice(n, n + s) + })) + } + loadAccessor(e) { + const t = this, + s = this.json, + r = this.json.accessors[e]; + if (void 0 === r.bufferView && void 0 === r.sparse) { + const e = D[r.type], + t = F[r.componentType], + s = !0 === r.normalized, + i = new t(r.count * e); + return Promise.resolve(new n.BufferAttribute(i, e, s)) + } + const i = []; + return void 0 !== r.bufferView ? i.push(this.getDependency("bufferView", r.bufferView)) : i.push(null), void 0 !== r.sparse && (i.push(this.getDependency("bufferView", r.sparse.indices.bufferView)), i.push(this.getDependency("bufferView", r.sparse.values.bufferView))), Promise.all(i).then((function(e) { + const i = e[0], + o = D[r.type], + a = F[r.componentType], + c = a.BYTES_PER_ELEMENT, + l = c * o, + u = r.byteOffset || 0, + h = void 0 !== r.bufferView ? s.bufferViews[r.bufferView].byteStride : void 0, + d = !0 === r.normalized; + let p, m; + if (h && h !== l) { + const e = Math.floor(u / h), + s = "InterleavedBuffer:" + r.bufferView + ":" + r.componentType + ":" + e + ":" + r.count; + let l = t.cache.get(s); + l || (p = new a(i, e * h, r.count * h / c), l = new n.InterleavedBuffer(p, h / c), t.cache.add(s, l)), m = new n.InterleavedBufferAttribute(l, o, u % h / c, d) + } else p = null === i ? new a(r.count * o) : new a(i, u, r.count * o), m = new n.BufferAttribute(p, o, d); + if (void 0 !== r.sparse) { + const t = D.SCALAR, + s = F[r.sparse.indices.componentType], + c = r.sparse.indices.byteOffset || 0, + l = r.sparse.values.byteOffset || 0, + u = new s(e[1], c, r.sparse.count * t), + h = new a(e[2], l, r.sparse.count * o); + null !== i && (m = new n.BufferAttribute(m.array.slice(), m.itemSize, m.normalized)); + for (let e = 0, t = u.length; e < t; e++) { + const t = u[e]; + if (m.setX(t, h[e * o]), o >= 2 && m.setY(t, h[e * o + 1]), o >= 3 && m.setZ(t, h[e * o + 2]), o >= 4 && m.setW(t, h[e * o + 3]), o >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") + } + } + return m + })) + } + loadTexture(e) { + const t = this.json, + s = this.options, + n = t.textures[e].source, + r = t.images[n]; + let i = this.textureLoader; + if (r.uri) { + const e = s.manager.getHandler(r.uri); + null !== e && (i = e) + } + return this.loadTextureImage(e, n, i) + } + loadTextureImage(e, t, s) { + const r = this, + i = this.json, + o = i.textures[e], + a = i.images[t], + c = (a.uri || a.bufferView) + ":" + o.sampler; + if (this.textureCache[c]) return this.textureCache[c]; + const l = this.loadImageSource(t, s).then((function(t) { + t.flipY = !1, t.name = o.name || a.name || "", "" === t.name && "string" == typeof a.uri && !1 === a.uri.startsWith("data:image/") && (t.name = a.uri); + const s = (i.samplers || {})[o.sampler] || {}; + return t.magFilter = k[s.magFilter] || n.LinearFilter, t.minFilter = k[s.minFilter] || n.LinearMipmapLinearFilter, t.wrapS = B[s.wrapS] || n.RepeatWrapping, t.wrapT = B[s.wrapT] || n.RepeatWrapping, r.associations.set(t, { + textures: e + }), t + })).catch((function() { + return null + })); + return this.textureCache[c] = l, l + } + loadImageSource(e, t) { + const s = this.json, + r = this.options; + if (void 0 !== this.sourceCache[e]) return this.sourceCache[e].then((e => e.clone())); + const o = s.images[e], + a = self.URL || self.webkitURL; + let c = o.uri || "", + l = !1; + if (void 0 !== o.bufferView) c = this.getDependency("bufferView", o.bufferView).then((function(e) { + l = !0; + const t = new Blob([e], { + type: o.mimeType + }); + return c = a.createObjectURL(t), c + })); + else if (void 0 === o.uri) throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView"); + const u = Promise.resolve(c).then((function(e) { + return new Promise((function(s, i) { + let o = s; + !0 === t.isImageBitmapLoader && (o = function(e) { + const t = new n.Texture(e); + t.needsUpdate = !0, s(t) + }), t.load(n.LoaderUtils.resolveURL(e, r.path), o, void 0, i) + })) + })).then((function(e) { + var t; + return !0 === l && a.revokeObjectURL(c), e.userData.mimeType = o.mimeType || ((t = o.uri).search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/) ? "image/jpeg" : t.search(/\.webp($|\?)/i) > 0 || 0 === t.search(/^data\:image\/webp/) ? "image/webp" : "image/png"), e + })).catch((function(e) { + throw i.error("THREE.GLTFLoader: Couldn't load texture", c), e + })); + return this.sourceCache[e] = u, u + } + assignTexture(e, t, s, n) { + const r = this; + return this.getDependency("texture", s.index).then((function(i) { + if (!i) return null; + if (void 0 !== s.texCoord && s.texCoord > 0 && ((i = i.clone()).channel = s.texCoord), r.extensions[c.KHR_TEXTURE_TRANSFORM]) { + const e = void 0 !== s.extensions ? s.extensions[c.KHR_TEXTURE_TRANSFORM] : void 0; + if (e) { + const t = r.associations.get(i); + i = r.extensions[c.KHR_TEXTURE_TRANSFORM].extendTexture(i, e), r.associations.set(i, t) + } + } + return void 0 !== n && (i.colorSpace = n), e[t] = i, i + })) + } + assignFinalMaterial(e) { + const t = e.geometry; + let s = e.material; + const r = void 0 === t.attributes.tangent, + i = void 0 !== t.attributes.color, + o = void 0 === t.attributes.normal; + if (e.isPoints) { + const e = "PointsMaterial:" + s.uuid; + let t = this.cache.get(e); + t || (t = new n.PointsMaterial, n.Material.prototype.copy.call(t, s), t.color.copy(s.color), t.map = s.map, t.sizeAttenuation = !1, this.cache.add(e, t)), s = t + } else if (e.isLine) { + const e = "LineBasicMaterial:" + s.uuid; + let t = this.cache.get(e); + t || (t = new n.LineBasicMaterial, n.Material.prototype.copy.call(t, s), t.color.copy(s.color), t.map = s.map, this.cache.add(e, t)), s = t + } + if (r || i || o) { + let e = "ClonedMaterial:" + s.uuid + ":"; + r && (e += "derivative-tangents:"), i && (e += "vertex-colors:"), o && (e += "flat-shading:"); + let t = this.cache.get(e); + t || (t = s.clone(), i && (t.vertexColors = !0), o && (t.flatShading = !0), r && (t.normalScale && (t.normalScale.y *= -1), t.clearcoatNormalScale && (t.clearcoatNormalScale.y *= -1)), this.cache.add(e, t), this.associations.set(t, this.associations.get(s))), s = t + } + e.material = s + } + getMaterialType() { + return n.MeshStandardMaterial + } + loadMaterial(e) { + const t = this, + s = this.json, + r = this.extensions, + i = s.materials[e]; + let o; + const a = {}, + l = []; + if ((i.extensions || {})[c.KHR_MATERIALS_UNLIT]) { + const e = r[c.KHR_MATERIALS_UNLIT]; + o = e.getMaterialType(), l.push(e.extendParams(a, i, t)) + } else { + const s = i.pbrMetallicRoughness || {}; + if (a.color = new n.Color(1, 1, 1), a.opacity = 1, Array.isArray(s.baseColorFactor)) { + const e = s.baseColorFactor; + a.color.setRGB(e[0], e[1], e[2], n.LinearSRGBColorSpace), a.opacity = e[3] + } + void 0 !== s.baseColorTexture && l.push(t.assignTexture(a, "map", s.baseColorTexture, n.SRGBColorSpace)), a.metalness = void 0 !== s.metallicFactor ? s.metallicFactor : 1, a.roughness = void 0 !== s.roughnessFactor ? s.roughnessFactor : 1, void 0 !== s.metallicRoughnessTexture && (l.push(t.assignTexture(a, "metalnessMap", s.metallicRoughnessTexture)), l.push(t.assignTexture(a, "roughnessMap", s.metallicRoughnessTexture))), o = this._invokeOne((function(t) { + return t.getMaterialType && t.getMaterialType(e) + })), l.push(Promise.all(this._invokeAll((function(t) { + return t.extendMaterialParams && t.extendMaterialParams(e, a) + })))) + }!0 === i.doubleSided && (a.side = n.DoubleSide); + const u = i.alphaMode || "OPAQUE"; + if ("BLEND" === u ? (a.transparent = !0, a.depthWrite = !1) : (a.transparent = !1, "MASK" === u && (a.alphaTest = void 0 !== i.alphaCutoff ? i.alphaCutoff : .5)), void 0 !== i.normalTexture && o !== n.MeshBasicMaterial && (l.push(t.assignTexture(a, "normalMap", i.normalTexture)), a.normalScale = new n.Vector2(1, 1), void 0 !== i.normalTexture.scale)) { + const e = i.normalTexture.scale; + a.normalScale.set(e, e) + } + if (void 0 !== i.occlusionTexture && o !== n.MeshBasicMaterial && (l.push(t.assignTexture(a, "aoMap", i.occlusionTexture)), void 0 !== i.occlusionTexture.strength && (a.aoMapIntensity = i.occlusionTexture.strength)), void 0 !== i.emissiveFactor && o !== n.MeshBasicMaterial) { + const e = i.emissiveFactor; + a.emissive = (new n.Color).setRGB(e[0], e[1], e[2], n.LinearSRGBColorSpace) + } + return void 0 !== i.emissiveTexture && o !== n.MeshBasicMaterial && l.push(t.assignTexture(a, "emissiveMap", i.emissiveTexture, n.SRGBColorSpace)), Promise.all(l).then((function() { + const s = new o(a); + return i.name && (s.name = i.name), V(s, i), t.associations.set(s, { + materials: e + }), i.extensions && j(r, s, i), s + })) + } + createUniqueName(e) { + const t = n.PropertyBinding.sanitizeNodeName(e || ""); + return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t) + } + loadGeometries(e) { + const t = this, + s = this.extensions, + r = this.primitiveCache; + + function i(e) { + return s[c.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e, t).then((function(s) { + return Z(s, e, t) + })) + } + const o = []; + for (let s = 0, a = e.length; s < a; s++) { + const a = e[s], + l = q(a), + u = r[l]; + if (u) o.push(u.promise); + else { + let e; + e = a.extensions && a.extensions[c.KHR_DRACO_MESH_COMPRESSION] ? i(a) : Z(new n.BufferGeometry, a, t), r[l] = { + primitive: a, + promise: e + }, o.push(e) + } + } + return Promise.all(o) + } + loadMesh(e) { + const t = this, + s = this.json, + i = this.extensions, + o = s.meshes[e], + a = o.primitives, + c = []; + for (let e = 0, t = a.length; e < t; e++) { + const t = void 0 === a[e].material ? (void 0 === (l = this.cache).DefaultMaterial && (l.DefaultMaterial = new n.MeshStandardMaterial({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: !1, + depthTest: !0, + side: n.FrontSide + })), l.DefaultMaterial) : this.getDependency("material", a[e].material); + c.push(t) + } + var l; + return c.push(t.loadGeometries(a)), Promise.all(c).then((function(s) { + const c = s.slice(0, s.length - 1), + l = s[s.length - 1], + u = []; + for (let s = 0, h = l.length; s < h; s++) { + const h = l[s], + d = a[s]; + let p; + const m = c[s]; + if (d.mode === H.TRIANGLES || d.mode === H.TRIANGLE_STRIP || d.mode === H.TRIANGLE_FAN || void 0 === d.mode) p = !0 === o.isSkinnedMesh ? new n.SkinnedMesh(h, m) : new n.Mesh(h, m), !0 === p.isSkinnedMesh && p.normalizeSkinWeights(), d.mode === H.TRIANGLE_STRIP ? p.geometry = (0, r.Vs)(p.geometry, n.TriangleStripDrawMode) : d.mode === H.TRIANGLE_FAN && (p.geometry = (0, r.Vs)(p.geometry, n.TriangleFanDrawMode)); + else if (d.mode === H.LINES) p = new n.LineSegments(h, m); + else if (d.mode === H.LINE_STRIP) p = new n.Line(h, m); + else if (d.mode === H.LINE_LOOP) p = new n.LineLoop(h, m); + else { + if (d.mode !== H.POINTS) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + d.mode); + p = new n.Points(h, m) + } + Object.keys(p.geometry.morphAttributes).length > 0 && X(p, o), p.name = t.createUniqueName(o.name || "mesh_" + e), V(p, o), d.extensions && j(i, p, d), t.assignFinalMaterial(p), u.push(p) + } + for (let s = 0, n = u.length; s < n; s++) t.associations.set(u[s], { + meshes: e, + primitives: s + }); + if (1 === u.length) return o.extensions && j(i, u[0], o), u[0]; + const h = new n.Group; + o.extensions && j(i, h, o), t.associations.set(h, { + meshes: e + }); + for (let e = 0, t = u.length; e < t; e++) h.add(u[e]); + return h + })) + } + loadCamera(e) { + let t; + const s = this.json.cameras[e], + r = s[s.type]; + if (r) return "perspective" === s.type ? t = new n.PerspectiveCamera(n.MathUtils.radToDeg(r.yfov), r.aspectRatio || 1, r.znear || 1, r.zfar || 2e6) : "orthographic" === s.type && (t = new n.OrthographicCamera(-r.xmag, r.xmag, r.ymag, -r.ymag, r.znear, r.zfar)), s.name && (t.name = this.createUniqueName(s.name)), V(t, s), Promise.resolve(t); + i.warn("THREE.GLTFLoader: Missing camera parameters.") + } + loadSkin(e) { + const t = this.json.skins[e], + s = []; + for (let e = 0, n = t.joints.length; e < n; e++) s.push(this._loadNodeShallow(t.joints[e])); + return void 0 !== t.inverseBindMatrices ? s.push(this.getDependency("accessor", t.inverseBindMatrices)) : s.push(null), Promise.all(s).then((function(e) { + const s = e.pop(), + r = e, + o = [], + a = []; + for (let e = 0, c = r.length; e < c; e++) { + const c = r[e]; + if (c) { + o.push(c); + const t = new n.Matrix4; + null !== s && t.fromArray(s.array, 16 * e), a.push(t) + } else i.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[e]) + } + return new n.Skeleton(o, a) + })) + } + loadAnimation(e) { + const t = this.json, + s = this, + r = t.animations[e], + i = r.name ? r.name : "animation_" + e, + o = [], + a = [], + c = [], + l = [], + u = []; + for (let e = 0, t = r.channels.length; e < t; e++) { + const t = r.channels[e], + s = r.samplers[t.sampler], + n = t.target, + i = n.node, + h = void 0 !== r.parameters ? r.parameters[s.input] : s.input, + d = void 0 !== r.parameters ? r.parameters[s.output] : s.output; + void 0 !== n.node && (o.push(this.getDependency("node", i)), a.push(this.getDependency("accessor", h)), c.push(this.getDependency("accessor", d)), l.push(s), u.push(n)) + } + return Promise.all([Promise.all(o), Promise.all(a), Promise.all(c), Promise.all(l), Promise.all(u)]).then((function(e) { + const t = e[0], + r = e[1], + o = e[2], + a = e[3], + c = e[4], + l = []; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e], + i = r[e], + u = o[e], + h = a[e], + d = c[e]; + if (void 0 === n) continue; + n.updateMatrix && n.updateMatrix(); + const p = s._createAnimationTracks(n, i, u, h, d); + if (p) + for (let e = 0; e < p.length; e++) l.push(p[e]) + } + return new n.AnimationClip(i, void 0, l) + })) + } + createNodeMesh(e) { + const t = this.json, + s = this, + n = t.nodes[e]; + return void 0 === n.mesh ? null : s.getDependency("mesh", n.mesh).then((function(e) { + const t = s._getNodeRef(s.meshCache, n.mesh, e); + return void 0 !== n.weights && t.traverse((function(e) { + if (e.isMesh) + for (let t = 0, s = n.weights.length; t < s; t++) e.morphTargetInfluences[t] = n.weights[t] + })), t + })) + } + loadNode(e) { + const t = this, + s = this.json.nodes[e], + n = t._loadNodeShallow(e), + r = [], + i = s.children || []; + for (let e = 0, s = i.length; e < s; e++) r.push(t.getDependency("node", i[e])); + const o = void 0 === s.skin ? Promise.resolve(null) : t.getDependency("skin", s.skin); + return Promise.all([n, Promise.all(r), o]).then((function(e) { + const t = e[0], + s = e[1], + n = e[2]; + null !== n && t.traverse((function(e) { + e.isSkinnedMesh && e.bind(n, Q) + })); + for (let e = 0, n = s.length; e < n; e++) t.add(s[e]); + return t + })) + } + _loadNodeShallow(e) { + const t = this.json, + s = this.extensions, + r = this; + if (void 0 !== this.nodeCache[e]) return this.nodeCache[e]; + const i = t.nodes[e], + o = i.name ? r.createUniqueName(i.name) : "", + a = [], + c = r._invokeOne((function(t) { + return t.createNodeMesh && t.createNodeMesh(e) + })); + return c && a.push(c), void 0 !== i.camera && a.push(r.getDependency("camera", i.camera).then((function(e) { + return r._getNodeRef(r.cameraCache, i.camera, e) + }))), r._invokeAll((function(t) { + return t.createNodeAttachment && t.createNodeAttachment(e) + })).forEach((function(e) { + a.push(e) + })), this.nodeCache[e] = Promise.all(a).then((function(t) { + let a; + if (a = !0 === i.isBone ? new n.Bone : t.length > 1 ? new n.Group : 1 === t.length ? t[0] : new n.Object3D, a !== t[0]) + for (let e = 0, s = t.length; e < s; e++) a.add(t[e]); + if (i.name && (a.userData.name = i.name, a.name = o), V(a, i), i.extensions && j(s, a, i), void 0 !== i.matrix) { + const e = new n.Matrix4; + e.fromArray(i.matrix), a.applyMatrix4(e) + } else void 0 !== i.translation && a.position.fromArray(i.translation), void 0 !== i.rotation && a.quaternion.fromArray(i.rotation), void 0 !== i.scale && a.scale.fromArray(i.scale); + return r.associations.has(a) || r.associations.set(a, {}), r.associations.get(a).nodes = e, a + })), this.nodeCache[e] + } + loadScene(e) { + const t = this.extensions, + s = this.json.scenes[e], + r = this, + i = new n.Group; + s.name && (i.name = r.createUniqueName(s.name)), V(i, s), s.extensions && j(t, i, s); + const o = s.nodes || [], + a = []; + for (let e = 0, t = o.length; e < t; e++) a.push(r.getDependency("node", o[e])); + return Promise.all(a).then((function(e) { + for (let t = 0, s = e.length; t < s; t++) i.add(e[t]); + return r.associations = (e => { + const t = new Map; + for (const [e, s] of r.associations)(e instanceof n.Material || e instanceof n.Texture) && t.set(e, s); + return e.traverse((e => { + const s = r.associations.get(e); + null != s && t.set(e, s) + })), t + })(i), i + })) + } + _createAnimationTracks(e, t, s, r, i) { + const o = [], + a = e.name ? e.name : e.uuid, + c = []; + let l; + switch (U[i.path] === U.weights ? e.traverse((function(e) { + e.morphTargetInfluences && c.push(e.name ? e.name : e.uuid) + })) : c.push(a), U[i.path]) { + case U.weights: + l = n.NumberKeyframeTrack; + break; + case U.rotation: + l = n.QuaternionKeyframeTrack; + break; + case U.position: + case U.scale: + l = n.VectorKeyframeTrack; + break; + default: + l = 1 === s.itemSize ? n.NumberKeyframeTrack : n.VectorKeyframeTrack + } + const u = void 0 !== r.interpolation ? K[r.interpolation] : n.InterpolateLinear, + h = this._getArrayFromAccessor(s); + for (let e = 0, s = c.length; e < s; e++) { + const s = new l(c[e] + "." + U[i.path], t.array, h, u); + "CUBICSPLINE" === r.interpolation && this._createCubicSplineTrackInterpolant(s), o.push(s) + } + return o + } + _getArrayFromAccessor(e) { + let t = e.array; + if (e.normalized) { + const e = W(t.constructor), + s = new Float32Array(t.length); + for (let n = 0, r = t.length; n < r; n++) s[n] = t[n] * e; + t = s + } + return t + } + _createCubicSplineTrackInterpolant(e) { + e.createInterpolant = function(e) { + return new(this instanceof n.QuaternionKeyframeTrack ? P : N)(this.times, this.values, this.getValueSize() / 3, e) + }, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0 + } + } + + function Z(e, t, s) { + const r = t.attributes, + o = []; + + function a(t, n) { + return s.getDependency("accessor", t).then((function(t) { + e.setAttribute(n, t) + })) + } + for (const t in r) { + const s = G[t] || t.toLowerCase(); + s in e.attributes || o.push(a(r[t], s)) + } + if (void 0 !== t.indices && !e.index) { + const n = s.getDependency("accessor", t.indices).then((function(t) { + e.setIndex(t) + })); + o.push(n) + } + return n.ColorManagement.workingColorSpace !== n.LinearSRGBColorSpace && "COLOR_0" in r && i.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${n.ColorManagement.workingColorSpace}" not supported.`), V(e, t), + function(e, t, s) { + const r = t.attributes, + o = new n.Box3; + if (void 0 === r.POSITION) return; + { + const e = s.json.accessors[r.POSITION], + t = e.min, + a = e.max; + if (void 0 === t || void 0 === a) return void i.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + if (o.set(new n.Vector3(t[0], t[1], t[2]), new n.Vector3(a[0], a[1], a[2])), e.normalized) { + const t = W(F[e.componentType]); + o.min.multiplyScalar(t), o.max.multiplyScalar(t) + } + } + const a = t.targets; + if (void 0 !== a) { + const e = new n.Vector3, + t = new n.Vector3; + for (let n = 0, r = a.length; n < r; n++) { + const r = a[n]; + if (void 0 !== r.POSITION) { + const n = s.json.accessors[r.POSITION], + o = n.min, + a = n.max; + if (void 0 !== o && void 0 !== a) { + if (t.setX(Math.max(Math.abs(o[0]), Math.abs(a[0]))), t.setY(Math.max(Math.abs(o[1]), Math.abs(a[1]))), t.setZ(Math.max(Math.abs(o[2]), Math.abs(a[2]))), n.normalized) { + const e = W(F[n.componentType]); + t.multiplyScalar(e) + } + e.max(t) + } else i.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + } + o.expandByVector(e) + } + e.boundingBox = o; + const c = new n.Sphere; + o.getCenter(c.center), c.radius = o.min.distanceTo(o.max) / 2, e.boundingSphere = c + }(e, t, s), Promise.all(o).then((function() { + return void 0 !== t.targets ? function(e, t, s) { + let n = !1, + r = !1, + i = !1; + for (let e = 0, s = t.length; e < s; e++) { + const s = t[e]; + if (void 0 !== s.POSITION && (n = !0), void 0 !== s.NORMAL && (r = !0), void 0 !== s.COLOR_0 && (i = !0), n && r && i) break + } + if (!n && !r && !i) return Promise.resolve(e); + const o = [], + a = [], + c = []; + for (let l = 0, u = t.length; l < u; l++) { + const u = t[l]; + if (n) { + const t = void 0 !== u.POSITION ? s.getDependency("accessor", u.POSITION) : e.attributes.position; + o.push(t) + } + if (r) { + const t = void 0 !== u.NORMAL ? s.getDependency("accessor", u.NORMAL) : e.attributes.normal; + a.push(t) + } + if (i) { + const t = void 0 !== u.COLOR_0 ? s.getDependency("accessor", u.COLOR_0) : e.attributes.color; + c.push(t) + } + } + return Promise.all([Promise.all(o), Promise.all(a), Promise.all(c)]).then((function(t) { + const s = t[0], + o = t[1], + a = t[2]; + return n && (e.morphAttributes.position = s), r && (e.morphAttributes.normal = o), i && (e.morphAttributes.color = a), e.morphTargetsRelative = !0, e + })) + }(e, t.targets, s) : e + })) + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1259.027b0491163c90f3c509.bundle.js b/mp-core/1259.027b0491163c90f3c509.bundle.js new file mode 100644 index 0000000..a87e7a6 --- /dev/null +++ b/mp-core/1259.027b0491163c90f3c509.bundle.js @@ -0,0 +1,947 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1259], { + 91259: (e, t, n) => { + n.d(t, { + I: () => i + }); + var r = n(99477), + o = n(78646), + l = n(25108); + class i extends r.DataTextureLoader { + constructor(e) { + super(e), this.type = r.HalfFloatType + } + parse(e) { + const t = 65536, + n = 14, + i = 65537, + s = Math.pow(2.7182818, 2.2), + a = { + l: 0, + c: 0, + lc: 0 + }; + + function c(e, t, n, r, o) { + for (; n < e;) t = t << 8 | B(r, o), n += 8; + n -= e, a.l = t >> n & (1 << e) - 1, a.c = t, a.lc = n + } + const u = new Array(59); + + function f(e) { + return 63 & e + } + + function h(e) { + return e >> 6 + } + const p = { + c: 0, + lc: 0 + }; + + function w(e, t, n, r) { + e = e << 8 | B(n, r), t += 8, p.c = e, p.lc = t + } + const d = { + c: 0, + lc: 0 + }; + + function y(e, t, n, r, o, l, i, s, a) { + if (e == t) { + r < 8 && (w(n, r, o, l), n = p.c, r = p.lc); + let e = n >> (r -= 8); + if (e = new Uint8Array([e])[0], s.value + e > a) return !1; + const t = i[s.value - 1]; + for (; e-- > 0;) i[s.value++] = t + } else { + if (!(s.value < a)) return !1; + i[s.value++] = e + } + d.c = n, d.lc = r + } + + function g(e) { + return 65535 & e + } + + function v(e) { + const t = g(e); + return t > 32767 ? t - 65536 : t + } + const m = { + a: 0, + b: 0 + }; + + function b(e, t) { + const n = v(e), + r = v(t), + o = n + (1 & r) + (r >> 1), + l = o, + i = o - r; + m.a = l, m.b = i + } + + function E(e, t) { + const n = g(e), + r = g(t), + o = n - (r >> 1) & 65535, + l = r + o - 32768 & 65535; + m.a = l, m.b = o + } + + function S(e, t, n, r, o, l, i) { + const s = i < 16384, + a = n > o ? o : n; + let c, u, f = 1; + for (; f <= a;) f <<= 1; + for (f >>= 1, c = f, f >>= 1; f >= 1;) { + u = 0; + const i = u + l * (o - c), + a = l * f, + h = l * c, + p = r * f, + w = r * c; + let d, y, g, v; + for (; u <= i; u += h) { + let o = u; + const l = u + r * (n - c); + for (; o <= l; o += w) { + const n = o + p, + r = o + a, + l = r + p; + s ? (b(e[o + t], e[r + t]), d = m.a, g = m.b, b(e[n + t], e[l + t]), y = m.a, v = m.b, b(d, y), e[o + t] = m.a, e[n + t] = m.b, b(g, v), e[r + t] = m.a, e[l + t] = m.b) : (E(e[o + t], e[r + t]), d = m.a, g = m.b, E(e[n + t], e[l + t]), y = m.a, v = m.b, E(d, y), e[o + t] = m.a, e[n + t] = m.b, E(g, v), e[r + t] = m.a, e[l + t] = m.b) + } + if (n & f) { + const n = o + a; + s ? b(e[o + t], e[n + t]) : E(e[o + t], e[n + t]), d = m.a, e[n + t] = m.b, e[o + t] = d + } + } + if (o & f) { + let o = u; + const l = u + r * (n - c); + for (; o <= l; o += w) { + const n = o + p; + s ? b(e[o + t], e[n + t]) : E(e[o + t], e[n + t]), d = m.a, e[n + t] = m.b, e[o + t] = d + } + } + c = f, f >>= 1 + } + return u + } + + function A(e, t, r, o, l, s) { + const g = r.value, + v = D(t, r), + m = D(t, r); + r.value += 4; + const b = D(t, r); + if (r.value += 4, v < 0 || v >= i || m < 0 || m >= i) throw new Error("Something wrong with HUF_ENCSIZE"); + const E = new Array(i), + S = new Array(16384); + if (function(e) { + for (let t = 0; t < 16384; t++) e[t] = {}, e[t].len = 0, e[t].lit = 0, e[t].p = null + }(S), function(e, t, n, r, o, l) { + const s = t; + let f = 0, + h = 0; + for (; r <= o; r++) { + if (s.value - t.value > n) return !1; + c(6, f, h, e, s); + const i = a.l; + if (f = a.c, h = a.lc, l[r] = i, 63 == i) { + if (s.value - t.value > n) throw new Error("Something wrong with hufUnpackEncTable"); + c(8, f, h, e, s); + let i = a.l + 6; + if (f = a.c, h = a.lc, r + i > o + 1) throw new Error("Something wrong with hufUnpackEncTable"); + for (; i--;) l[r++] = 0; + r-- + } else if (i >= 59) { + let e = i - 59 + 2; + if (r + e > o + 1) throw new Error("Something wrong with hufUnpackEncTable"); + for (; e--;) l[r++] = 0; + r-- + } + }! function(e) { + for (let e = 0; e <= 58; ++e) u[e] = 0; + for (let t = 0; t < i; ++t) u[e[t]] += 1; + let t = 0; + for (let e = 58; e > 0; --e) { + const n = t + u[e] >> 1; + u[e] = t, t = n + } + for (let t = 0; t < i; ++t) { + const n = e[t]; + n > 0 && (e[t] = n | u[n]++ << 6) + } + }(l) + }(e, r, o - (r.value - g), v, m, E), b > 8 * (o - (r.value - g))) throw new Error("Something wrong with hufUncompress"); + ! function(e, t, r, o) { + for (; t <= r; t++) { + const r = h(e[t]), + l = f(e[t]); + if (r >> l) throw new Error("Invalid table entry"); + if (l > n) { + const e = o[r >> l - n]; + if (e.len) throw new Error("Invalid table entry"); + if (e.lit++, e.p) { + const t = e.p; + e.p = new Array(e.lit); + for (let n = 0; n < e.lit - 1; ++n) e.p[n] = t[n] + } else e.p = new Array(1); + e.p[e.lit - 1] = t + } else if (l) { + let e = 0; + for (let i = 1 << n - l; i > 0; i--) { + const i = o[(r << n - l) + e]; + if (i.len || i.p) throw new Error("Invalid table entry"); + i.len = l, i.lit = t, e++ + } + } + } + }(E, v, m, S), + function(e, t, r, o, l, i, s, a, c) { + let u = 0, + g = 0; + const v = s, + m = Math.trunc(o.value + (l + 7) / 8); + for (; o.value < m;) + for (w(u, g, r, o), u = p.c, g = p.lc; g >= n;) { + const l = t[u >> g - n & 16383]; + if (l.len) g -= l.len, y(l.lit, i, u, g, r, o, a, c, v), u = d.c, g = d.lc; + else { + if (!l.p) throw new Error("hufDecode issues"); + let t; + for (t = 0; t < l.lit; t++) { + const n = f(e[l.p[t]]); + for (; g < n && o.value < m;) w(u, g, r, o), u = p.c, g = p.lc; + if (g >= n && h(e[l.p[t]]) == (u >> g - n & (1 << n) - 1)) { + g -= n, y(l.p[t], i, u, g, r, o, a, c, v), u = d.c, g = d.lc; + break + } + } + if (t == l.lit) throw new Error("hufDecode issues") + } + } + const b = 8 - l & 7; + for (u >>= b, g -= b; g > 0;) { + const e = t[u << n - g & 16383]; + if (!e.len) throw new Error("hufDecode issues"); + g -= e.len, y(e.lit, i, u, g, r, o, a, c, v), u = d.c, g = d.lc + } + }(E, S, e, r, b, m, s, l, { + value: 0 + }) + } + + function C(e) { + for (let t = 1; t < e.length; t++) { + const n = e[t - 1] + e[t] - 128; + e[t] = n + } + } + + function M(e, t) { + let n = 0, + r = Math.floor((e.length + 1) / 2), + o = 0; + const l = e.length - 1; + for (; !(o > l || (t[o++] = e[n++], o > l));) t[o++] = e[r++] + } + + function U(e) { + let t = e.byteLength; + const n = new Array; + let r = 0; + const o = new DataView(e); + for (; t > 0;) { + const e = o.getInt8(r++); + if (e < 0) { + const l = -e; + t -= l + 1; + for (let e = 0; e < l; e++) n.push(o.getUint8(r++)) + } else { + const l = e; + t -= 2; + const i = o.getUint8(r++); + for (let e = 0; e < l + 1; e++) n.push(i) + } + } + return n + } + + function O(e, t, n) { + let r, o = 1; + for (; o < 64;) r = t[e.value], 65280 == r ? o = 64 : r >> 8 == 255 ? o += 255 & r : (n[o] = r, o++), e.value++ + } + + function R(e) { + const t = .5 * Math.cos(.7853975), + n = .5 * Math.cos(3.14159 / 16), + r = .5 * Math.cos(3.14159 / 8), + o = .5 * Math.cos(3 * 3.14159 / 16), + l = .5 * Math.cos(.981746875), + i = .5 * Math.cos(3 * 3.14159 / 8), + s = .5 * Math.cos(1.374445625), + a = new Array(4), + c = new Array(4), + u = new Array(4), + f = new Array(4); + for (let h = 0; h < 8; ++h) { + const p = 8 * h; + a[0] = r * e[p + 2], a[1] = i * e[p + 2], a[2] = r * e[p + 6], a[3] = i * e[p + 6], c[0] = n * e[p + 1] + o * e[p + 3] + l * e[p + 5] + s * e[p + 7], c[1] = o * e[p + 1] - s * e[p + 3] - n * e[p + 5] - l * e[p + 7], c[2] = l * e[p + 1] - n * e[p + 3] + s * e[p + 5] + o * e[p + 7], c[3] = s * e[p + 1] - l * e[p + 3] + o * e[p + 5] - n * e[p + 7], u[0] = t * (e[p + 0] + e[p + 4]), u[3] = t * (e[p + 0] - e[p + 4]), u[1] = a[0] + a[3], u[2] = a[1] - a[2], f[0] = u[0] + u[1], f[1] = u[3] + u[2], f[2] = u[3] - u[2], f[3] = u[0] - u[1], e[p + 0] = f[0] + c[0], e[p + 1] = f[1] + c[1], e[p + 2] = f[2] + c[2], e[p + 3] = f[3] + c[3], e[p + 4] = f[3] - c[3], e[p + 5] = f[2] - c[2], e[p + 6] = f[1] - c[1], e[p + 7] = f[0] - c[0] + } + for (let h = 0; h < 8; ++h) a[0] = r * e[16 + h], a[1] = i * e[16 + h], a[2] = r * e[48 + h], a[3] = i * e[48 + h], c[0] = n * e[8 + h] + o * e[24 + h] + l * e[40 + h] + s * e[56 + h], c[1] = o * e[8 + h] - s * e[24 + h] - n * e[40 + h] - l * e[56 + h], c[2] = l * e[8 + h] - n * e[24 + h] + s * e[40 + h] + o * e[56 + h], c[3] = s * e[8 + h] - l * e[24 + h] + o * e[40 + h] - n * e[56 + h], u[0] = t * (e[h] + e[32 + h]), u[3] = t * (e[h] - e[32 + h]), u[1] = a[0] + a[3], u[2] = a[1] - a[2], f[0] = u[0] + u[1], f[1] = u[3] + u[2], f[2] = u[3] - u[2], f[3] = u[0] - u[1], e[0 + h] = f[0] + c[0], e[8 + h] = f[1] + c[1], e[16 + h] = f[2] + c[2], e[24 + h] = f[3] + c[3], e[32 + h] = f[3] - c[3], e[40 + h] = f[2] - c[2], e[48 + h] = f[1] - c[1], e[56 + h] = f[0] - c[0] + } + + function k(e) { + for (let t = 0; t < 64; ++t) { + const n = e[0][t], + r = e[1][t], + o = e[2][t]; + e[0][t] = n + 1.5747 * o, e[1][t] = n - .1873 * r - .4682 * o, e[2][t] = n + 1.8556 * r + } + } + + function I(e, t, n) { + for (let l = 0; l < 64; ++l) t[n + l] = r.DataUtils.toHalfFloat((o = e[l]) <= 1 ? Math.sign(o) * Math.pow(Math.abs(o), 2.2) : Math.sign(o) * Math.pow(s, Math.abs(o) - 1)); + var o + } + + function P(e) { + return new DataView(e.array.buffer, e.offset.value, e.size) + } + + function N(e) { + const t = e.viewer.buffer.slice(e.offset.value, e.offset.value + e.size), + n = new Uint8Array(U(t)), + r = new Uint8Array(n.length); + return C(n), M(n, r), new DataView(r.buffer) + } + + function x(e) { + const t = e.array.slice(e.offset.value, e.offset.value + e.size), + n = o.HT(t), + r = new Uint8Array(n.length); + return C(n), M(n, r), new DataView(r.buffer) + } + + function L(e) { + const n = e.viewer, + r = { + value: e.offset.value + }, + o = new Uint16Array(e.columns * e.lines * (e.inputChannels.length * e.type)), + l = new Uint8Array(8192); + let i = 0; + const s = new Array(e.inputChannels.length); + for (let t = 0, n = e.inputChannels.length; t < n; t++) s[t] = {}, s[t].start = i, s[t].end = s[t].start, s[t].nx = e.columns, s[t].ny = e.lines, s[t].size = e.type, i += s[t].nx * s[t].ny * s[t].size; + const a = G(n, r), + c = G(n, r); + if (c >= 8192) throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE"); + if (a <= c) + for (let e = 0; e < c - a + 1; e++) l[e + a] = F(n, r); + const u = new Uint16Array(t), + f = function(e, n) { + let r = 0; + for (let o = 0; o < t; ++o)(0 == o || e[o >> 3] & 1 << (7 & o)) && (n[r++] = o); + const o = r - 1; + for (; r < t;) n[r++] = 0; + return o + }(l, u), + h = D(n, r); + A(e.array, n, r, h, o, i); + for (let t = 0; t < e.inputChannels.length; ++t) { + const e = s[t]; + for (let n = 0; n < s[t].size; ++n) S(o, e.start + n, e.nx, e.size, e.ny, e.nx * e.size, f) + }! function(e, t, n) { + for (let r = 0; r < n; ++r) t[r] = e[t[r]] + }(u, o, i); + let p = 0; + const w = new Uint8Array(o.buffer.byteLength); + for (let t = 0; t < e.lines; t++) + for (let t = 0; t < e.inputChannels.length; t++) { + const e = s[t], + n = e.nx * e.size, + r = new Uint8Array(o.buffer, 2 * e.end, 2 * n); + w.set(r, p), p += 2 * n, e.end += n + } + return new DataView(w.buffer) + } + + function z(e) { + const t = e.array.slice(e.offset.value, e.offset.value + e.size), + n = o.HT(t), + r = e.inputChannels.length * e.lines * e.columns * e.totalBytes, + l = new ArrayBuffer(r), + i = new DataView(l); + let s = 0, + a = 0; + const c = new Array(4); + for (let t = 0; t < e.lines; t++) + for (let t = 0; t < e.inputChannels.length; t++) { + let r = 0; + switch (e.inputChannels[t].pixelType) { + case 1: + c[0] = s, c[1] = c[0] + e.columns, s = c[1] + e.columns; + for (let t = 0; t < e.columns; ++t) r += n[c[0]++] << 8 | n[c[1]++], i.setUint16(a, r, !0), a += 2; + break; + case 2: + c[0] = s, c[1] = c[0] + e.columns, c[2] = c[1] + e.columns, s = c[2] + e.columns; + for (let t = 0; t < e.columns; ++t) r += n[c[0]++] << 24 | n[c[1]++] << 16 | n[c[2]++] << 8, i.setUint32(a, r, !0), a += 4 + } + } + return i + } + + function _(e) { + const t = e.viewer, + n = { + value: e.offset.value + }, + r = new Uint8Array(e.columns * e.lines * (e.inputChannels.length * e.type * 2)), + l = { + version: V(t, n), + unknownUncompressedSize: V(t, n), + unknownCompressedSize: V(t, n), + acCompressedSize: V(t, n), + dcCompressedSize: V(t, n), + rleCompressedSize: V(t, n), + rleUncompressedSize: V(t, n), + rleRawSize: V(t, n), + totalAcUncompressedCount: V(t, n), + totalDcUncompressedCount: V(t, n), + acCompression: V(t, n) + }; + if (l.version < 2) throw new Error("EXRLoader.parse: " + te.compression + " version " + l.version + " is unsupported"); + const i = new Array; + let s = G(t, n) - 2; + for (; s > 0;) { + const e = H(t.buffer, n), + r = F(t, n), + o = r >> 2 & 3, + l = new Int8Array([(r >> 4) - 1])[0], + a = F(t, n); + i.push({ + name: e, + index: l, + type: a, + compression: o + }), s -= e.length + 3 + } + const a = te.channels, + c = new Array(e.inputChannels.length); + for (let t = 0; t < e.inputChannels.length; ++t) { + const n = c[t] = {}, + r = a[t]; + n.name = r.name, n.compression = 0, n.decoded = !1, n.type = r.pixelType, n.pLinear = r.pLinear, n.width = e.columns, n.height = e.lines + } + const u = { + idx: new Array(3) + }; + for (let t = 0; t < e.inputChannels.length; ++t) { + const e = c[t]; + for (let n = 0; n < i.length; ++n) { + const r = i[n]; + e.name == r.name && (e.compression = r.compression, r.index >= 0 && (u.idx[r.index] = t), e.offset = t) + } + } + let f, h, p; + if (l.acCompressedSize > 0) switch (l.acCompression) { + case 0: + f = new Uint16Array(l.totalAcUncompressedCount), A(e.array, t, n, l.acCompressedSize, f, l.totalAcUncompressedCount); + break; + case 1: + const r = e.array.slice(n.value, n.value + l.totalAcUncompressedCount), + i = o.HT(r); + f = new Uint16Array(i.buffer), n.value += l.totalAcUncompressedCount + } + if (l.dcCompressedSize > 0) { + const t = { + array: e.array, + offset: n, + size: l.dcCompressedSize + }; + h = new Uint16Array(x(t).buffer), n.value += l.dcCompressedSize + } + if (l.rleRawSize > 0) { + const t = e.array.slice(n.value, n.value + l.rleCompressedSize); + p = U(o.HT(t).buffer), n.value += l.rleCompressedSize + } + let w = 0; + const d = new Array(c.length); + for (let e = 0; e < d.length; ++e) d[e] = new Array; + for (let t = 0; t < e.lines; ++t) + for (let t = 0; t < c.length; ++t) d[t].push(w), w += c[t].width * e.type * 2; + ! function(e, t, n, r, o, l) { + let i = new DataView(l.buffer); + const s = n[e.idx[0]].width, + a = n[e.idx[0]].height, + c = Math.floor(s / 8), + u = Math.ceil(s / 8), + f = Math.ceil(a / 8), + h = s - 8 * (u - 1), + p = a - 8 * (f - 1), + w = { + value: 0 + }, + d = new Array(3), + y = new Array(3), + g = new Array(3), + v = new Array(3), + m = new Array(3); + for (let n = 0; n < 3; ++n) m[n] = t[e.idx[n]], d[n] = n < 1 ? 0 : d[n - 1] + u * f, y[n] = new Float32Array(64), g[n] = new Uint16Array(64), v[n] = new Uint16Array(64 * u); + for (let t = 0; t < f; ++t) { + let l = 8; + t == f - 1 && (l = p); + let s = 8; + for (let e = 0; e < u; ++e) { + e == u - 1 && (s = h); + for (let e = 0; e < 3; ++e) g[e].fill(0), g[e][0] = o[d[e]++], O(w, r, g[e]), b = g[e], (E = y[e])[0] = Y(b[0]), E[1] = Y(b[1]), E[2] = Y(b[5]), E[3] = Y(b[6]), E[4] = Y(b[14]), E[5] = Y(b[15]), E[6] = Y(b[27]), E[7] = Y(b[28]), E[8] = Y(b[2]), E[9] = Y(b[4]), E[10] = Y(b[7]), E[11] = Y(b[13]), E[12] = Y(b[16]), E[13] = Y(b[26]), E[14] = Y(b[29]), E[15] = Y(b[42]), E[16] = Y(b[3]), E[17] = Y(b[8]), E[18] = Y(b[12]), E[19] = Y(b[17]), E[20] = Y(b[25]), E[21] = Y(b[30]), E[22] = Y(b[41]), E[23] = Y(b[43]), E[24] = Y(b[9]), E[25] = Y(b[11]), E[26] = Y(b[18]), E[27] = Y(b[24]), E[28] = Y(b[31]), E[29] = Y(b[40]), E[30] = Y(b[44]), E[31] = Y(b[53]), E[32] = Y(b[10]), E[33] = Y(b[19]), E[34] = Y(b[23]), E[35] = Y(b[32]), E[36] = Y(b[39]), E[37] = Y(b[45]), E[38] = Y(b[52]), E[39] = Y(b[54]), E[40] = Y(b[20]), E[41] = Y(b[22]), E[42] = Y(b[33]), E[43] = Y(b[38]), E[44] = Y(b[46]), E[45] = Y(b[51]), E[46] = Y(b[55]), E[47] = Y(b[60]), E[48] = Y(b[21]), E[49] = Y(b[34]), E[50] = Y(b[37]), E[51] = Y(b[47]), E[52] = Y(b[50]), E[53] = Y(b[56]), E[54] = Y(b[59]), E[55] = Y(b[61]), E[56] = Y(b[35]), E[57] = Y(b[36]), E[58] = Y(b[48]), E[59] = Y(b[49]), E[60] = Y(b[57]), E[61] = Y(b[58]), E[62] = Y(b[62]), E[63] = Y(b[63]), R(y[e]); + k(y); + for (let t = 0; t < 3; ++t) I(y[t], v[t], 64 * e) + } + let a = 0; + for (let r = 0; r < 3; ++r) { + const o = n[e.idx[r]].type; + for (let e = 8 * t; e < 8 * t + l; ++e) { + a = m[r][e]; + for (let t = 0; t < c; ++t) { + const n = 64 * t + 8 * (7 & e); + i.setUint16(a + 0 * o, v[r][n + 0], !0), i.setUint16(a + 2 * o, v[r][n + 1], !0), i.setUint16(a + 4 * o, v[r][n + 2], !0), i.setUint16(a + 6 * o, v[r][n + 3], !0), i.setUint16(a + 8 * o, v[r][n + 4], !0), i.setUint16(a + 10 * o, v[r][n + 5], !0), i.setUint16(a + 12 * o, v[r][n + 6], !0), i.setUint16(a + 14 * o, v[r][n + 7], !0), a += 16 * o + } + } + if (c != u) + for (let e = 8 * t; e < 8 * t + l; ++e) { + const t = m[r][e] + 8 * c * 2 * o, + n = 64 * c + 8 * (7 & e); + for (let e = 0; e < s; ++e) i.setUint16(t + 2 * e * o, v[r][n + e], !0) + } + } + } + var b, E; + const S = new Uint16Array(s); + i = new DataView(l.buffer); + for (let t = 0; t < 3; ++t) { + n[e.idx[t]].decoded = !0; + const r = n[e.idx[t]].type; + if (2 == n[t].type) + for (let e = 0; e < a; ++e) { + const n = m[t][e]; + for (let e = 0; e < s; ++e) S[e] = i.getUint16(n + 2 * e * r, !0); + for (let e = 0; e < s; ++e) i.setFloat32(n + 2 * e * r, Y(S[e]), !0) + } + } + }(u, d, c, f, h, r); + for (let t = 0; t < c.length; ++t) { + const n = c[t]; + if (!n.decoded) { + if (2 !== n.compression) throw new Error("EXRLoader.parse: unsupported channel compression"); + { + let o = 0, + l = 0; + for (let i = 0; i < e.lines; ++i) { + let e = d[t][o]; + for (let t = 0; t < n.width; ++t) { + for (let t = 0; t < 2 * n.type; ++t) r[e++] = p[l + t * n.width * n.height]; + l++ + } + o++ + } + } + } + } + return new DataView(r.buffer) + } + + function H(e, t) { + const n = new Uint8Array(e); + let r = 0; + for (; 0 != n[t.value + r];) r += 1; + const o = (new TextDecoder).decode(n.slice(t.value, t.value + r)); + return t.value = t.value + r + 1, o + } + + function T(e, t) { + const n = e.getInt32(t.value, !0); + return t.value = t.value + 4, n + } + + function D(e, t) { + const n = e.getUint32(t.value, !0); + return t.value = t.value + 4, n + } + + function B(e, t) { + const n = e[t.value]; + return t.value = t.value + 1, n + } + + function F(e, t) { + const n = e.getUint8(t.value); + return t.value = t.value + 1, n + } + const V = function(e, t) { + let n; + return n = "getBigInt64" in DataView.prototype ? Number(e.getBigInt64(t.value, !0)) : e.getUint32(t.value + 4, !0) + Number(e.getUint32(t.value, !0) << 32), t.value += 8, n + }; + + function W(e, t) { + const n = e.getFloat32(t.value, !0); + return t.value += 4, n + } + + function X(e, t) { + return r.DataUtils.toHalfFloat(W(e, t)) + } + + function Y(e) { + const t = (31744 & e) >> 10, + n = 1023 & e; + return (e >> 15 ? -1 : 1) * (t ? 31 === t ? n ? NaN : 1 / 0 : Math.pow(2, t - 15) * (1 + n / 1024) : n / 1024 * 6103515625e-14) + } + + function G(e, t) { + const n = e.getUint16(t.value, !0); + return t.value += 2, n + } + + function Z(e, t) { + return Y(G(e, t)) + } + + function $(e, t, n, r, o) { + return "string" === r || "stringvector" === r || "iccProfile" === r ? function(e, t, n) { + const r = (new TextDecoder).decode(new Uint8Array(e).slice(t.value, t.value + n)); + return t.value = t.value + n, r + }(t, n, o) : "chlist" === r ? function(e, t, n, r) { + const o = n.value, + l = []; + for (; n.value < o + r - 1;) { + const r = H(t, n), + o = T(e, n), + i = F(e, n); + n.value += 3; + const s = T(e, n), + a = T(e, n); + l.push({ + name: r, + pixelType: o, + pLinear: i, + xSampling: s, + ySampling: a + }) + } + return n.value += 1, l + }(e, t, n, o) : "chromaticities" === r ? function(e, t) { + return { + redX: W(e, t), + redY: W(e, t), + greenX: W(e, t), + greenY: W(e, t), + blueX: W(e, t), + blueY: W(e, t), + whiteX: W(e, t), + whiteY: W(e, t) + } + }(e, n) : "compression" === r ? function(e, t) { + return ["NO_COMPRESSION", "RLE_COMPRESSION", "ZIPS_COMPRESSION", "ZIP_COMPRESSION", "PIZ_COMPRESSION", "PXR24_COMPRESSION", "B44_COMPRESSION", "B44A_COMPRESSION", "DWAA_COMPRESSION", "DWAB_COMPRESSION"][F(e, t)] + }(e, n) : "box2i" === r ? function(e, t) { + return { + xMin: T(e, t), + yMin: T(e, t), + xMax: T(e, t), + yMax: T(e, t) + } + }(e, n) : "envmap" === r ? function(e, t) { + return ["ENVMAP_LATLONG", "ENVMAP_CUBE"][F(e, t)] + }(e, n) : "tiledesc" === r ? function(e, t) { + const n = D(e, t), + r = D(e, t), + o = F(e, t); + return { + xSize: n, + ySize: r, + levelMode: ["ONE_LEVEL", "MIPMAP_LEVELS", "RIPMAP_LEVELS"][15 & o], + roundingMode: ["ROUND_DOWN", "ROUND_UP"][o >> 4] + } + }(e, n) : "lineOrder" === r ? function(e, t) { + return ["INCREASING_Y", "DECREASING_Y", "RANDOM_Y"][F(e, t)] + }(e, n) : "float" === r ? W(e, n) : "v2f" === r ? function(e, t) { + return [W(e, t), W(e, t)] + }(e, n) : "v3f" === r ? function(e, t) { + return [W(e, t), W(e, t), W(e, t)] + }(e, n) : "int" === r ? T(e, n) : "rational" === r ? function(e, t) { + return [T(e, t), D(e, t)] + }(e, n) : "timecode" === r ? function(e, t) { + return [D(e, t), D(e, t)] + }(e, n) : "preview" === r ? (n.value += o, "skipped") : void(n.value += o) + } + + function j(e, t, n, r) { + const o = new Array(e); + for (let l = 0; l < e; l++) { + const e = 1 << l; + let i = t / e | 0; + "ROUND_UP" == r && i * e < t && (i += 1); + const s = Math.max(i, 1); + o[l] = (s + n - 1) / n | 0 + } + return o + } + + function q() { + const e = this, + t = e.offset, + n = { + value: 0 + }; + for (let r = 0; r < e.tileCount; r++) { + const r = T(e.viewer, t), + o = T(e.viewer, t); + t.value += 8, e.size = D(e.viewer, t); + const l = r * e.blockWidth, + i = o * e.blockHeight; + e.columns = l + e.blockWidth > e.width ? e.width - l : e.blockWidth, e.lines = i + e.blockHeight > e.height ? e.height - i : e.blockHeight; + const s = e.columns * e.totalBytes, + a = e.size < e.lines * s ? e.uncompress(e) : P(e); + t.value += e.size; + for (let t = 0; t < e.lines; t++) { + const r = t * e.columns * e.totalBytes; + for (let o = 0; o < e.inputChannels.length; o++) { + const s = te.channels[o].name, + c = e.channelByteOffsets[s] * e.columns, + u = e.decodeChannels[s]; + if (void 0 === u) continue; + n.value = r + c; + const f = (e.height - (1 + i + t)) * e.outLineWidth; + for (let t = 0; t < e.columns; t++) { + const r = f + (t + l) * e.outputChannels + u; + e.byteArray[r] = e.getter(a, n) + } + } + } + } + } + + function J() { + const e = this, + t = e.offset, + n = { + value: 0 + }; + for (let r = 0; r < e.height / e.blockHeight; r++) { + const o = T(e.viewer, t) - te.dataWindow.yMin; + e.size = D(e.viewer, t), e.lines = o + e.blockHeight > e.height ? e.height - o : e.blockHeight; + const l = e.columns * e.totalBytes, + i = e.size < e.lines * l ? e.uncompress(e) : P(e); + t.value += e.size; + for (let t = 0; t < e.blockHeight; t++) { + const o = r * e.blockHeight, + s = t + e.scanOrder(o); + if (s >= e.height) continue; + const a = t * l, + c = (e.height - 1 - s) * e.outLineWidth; + for (let t = 0; t < e.inputChannels.length; t++) { + const r = te.channels[t].name, + o = e.channelByteOffsets[r] * e.columns, + l = e.decodeChannels[r]; + if (void 0 !== l) { + n.value = a + o; + for (let t = 0; t < e.columns; t++) { + const r = c + t * e.outputChannels + l; + e.byteArray[r] = e.getter(i, n) + } + } + } + } + } + } + const K = { + value: 0 + }, + Q = new DataView(e), + ee = new Uint8Array(e), + te = function(e, t, n) { + const r = {}; + if (20000630 != e.getUint32(0, !0)) throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format."); + r.version = e.getUint8(4); + const o = e.getUint8(5); + r.spec = { + singleTile: !!(2 & o), + longName: !!(4 & o), + deepFormat: !!(8 & o), + multiPart: !!(16 & o) + }, n.value = 8; + let i = !0; + for (; i;) { + const o = H(t, n); + if (0 == o) i = !1; + else { + const i = H(t, n), + s = $(e, t, n, i, D(e, n)); + void 0 === s ? l.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${i}'.`) : r[o] = s + } + } + if (0 != (-7 & o)) throw l.error("THREE.EXRHeader:", r), new Error("THREE.EXRLoader: Provided file is currently unsupported."); + return r + }(Q, e, K), + ne = function(e, t, n, o, i) { + const s = { + size: 0, + viewer: t, + array: n, + offset: o, + width: e.dataWindow.xMax - e.dataWindow.xMin + 1, + height: e.dataWindow.yMax - e.dataWindow.yMin + 1, + inputChannels: e.channels, + channelByteOffsets: {}, + scanOrder: null, + totalBytes: null, + columns: null, + lines: null, + type: null, + uncompress: null, + getter: null, + format: null, + colorSpace: r.LinearSRGBColorSpace + }; + switch (e.compression) { + case "NO_COMPRESSION": + s.blockHeight = 1, s.uncompress = P; + break; + case "RLE_COMPRESSION": + s.blockHeight = 1, s.uncompress = N; + break; + case "ZIPS_COMPRESSION": + s.blockHeight = 1, s.uncompress = x; + break; + case "ZIP_COMPRESSION": + s.blockHeight = 16, s.uncompress = x; + break; + case "PIZ_COMPRESSION": + s.blockHeight = 32, s.uncompress = L; + break; + case "PXR24_COMPRESSION": + s.blockHeight = 16, s.uncompress = z; + break; + case "DWAA_COMPRESSION": + s.blockHeight = 32, s.uncompress = _; + break; + case "DWAB_COMPRESSION": + s.blockHeight = 256, s.uncompress = _; + break; + default: + throw new Error("EXRLoader.parse: " + e.compression + " is unsupported") + } + const a = {}; + for (const t of e.channels) switch (t.name) { + case "Y": + case "R": + case "G": + case "B": + case "A": + a[t.name] = !0, s.type = t.pixelType + } + let c = !1; + if (a.R && a.G && a.B) c = !a.A, s.outputChannels = 4, s.decodeChannels = { + R: 0, + G: 1, + B: 2, + A: 3 + }; + else { + if (!a.Y) throw new Error("EXRLoader.parse: file contains unsupported data channels."); + s.outputChannels = 1, s.decodeChannels = { + Y: 0 + } + } + if (1 == s.type) switch (i) { + case r.FloatType: + s.getter = Z; + break; + case r.HalfFloatType: + s.getter = G + } else { + if (2 != s.type) throw new Error("EXRLoader.parse: unsupported pixelType " + s.type + " for " + e.compression + "."); + switch (i) { + case r.FloatType: + s.getter = W; + break; + case r.HalfFloatType: + s.getter = X + } + } + s.columns = s.width; + const u = s.width * s.height * s.outputChannels; + switch (i) { + case r.FloatType: + s.byteArray = new Float32Array(u), c && s.byteArray.fill(1, 0, u); + break; + case r.HalfFloatType: + s.byteArray = new Uint16Array(u), c && s.byteArray.fill(15360, 0, u); + break; + default: + l.error("THREE.EXRLoader: unsupported type: ", i) + } + let f = 0; + for (const t of e.channels) void 0 !== s.decodeChannels[t.name] && (s.channelByteOffsets[t.name] = f), f += 2 * t.pixelType; + if (s.totalBytes = f, s.outLineWidth = s.width * s.outputChannels, "INCREASING_Y" === e.lineOrder ? s.scanOrder = e => e : s.scanOrder = e => s.height - 1 - e, 4 == s.outputChannels ? (s.format = r.RGBAFormat, s.colorSpace = r.LinearSRGBColorSpace) : (s.format = r.RedFormat, s.colorSpace = r.NoColorSpace), e.spec.singleTile) { + s.blockHeight = e.tiles.ySize, s.blockWidth = e.tiles.xSize; + const n = function(e, t, n) { + let r = 0; + switch (e.levelMode) { + case "ONE_LEVEL": + r = 1; + break; + case "MIPMAP_LEVELS": + r = function(e, t) { + const n = Math.log2(e); + return "ROUND_DOWN" == t ? Math.floor(n) : Math.ceil(n) + }(Math.max(t, n), e.roundingMode) + 1; + break; + case "RIPMAP_LEVELS": + throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.") + } + return r + }(e.tiles, s.width, s.height), + r = j(n, s.width, e.tiles.xSize, e.tiles.roundingMode), + l = j(n, s.height, e.tiles.ySize, e.tiles.roundingMode); + s.tileCount = r[0] * l[0]; + for (let e = 0; e < n; e++) + for (let n = 0; n < l[e]; n++) + for (let n = 0; n < r[e]; n++) V(t, o); + s.decode = q.bind(s) + } else { + s.blockWidth = s.width; + const e = Math.ceil(s.height / s.blockHeight); + for (let n = 0; n < e; n++) V(t, o); + s.decode = J.bind(s) + } + return s + }(te, Q, ee, K, this.type); + return ne.decode(), { + header: te, + width: ne.width, + height: ne.height, + data: ne.byteArray, + format: ne.format, + colorSpace: ne.colorSpace, + type: this.type + } + } + setDataType(e) { + return this.type = e, this + } + load(e, t, n, o) { + return super.load(e, (function(e, n) { + e.colorSpace = n.colorSpace, e.minFilter = r.LinearFilter, e.magFilter = r.LinearFilter, e.generateMipmaps = !1, e.flipY = !1, t && t(e, n) + }), n, o) + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js b/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js new file mode 100644 index 0000000..a1bf3a5 --- /dev/null +++ b/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js @@ -0,0 +1,12159 @@ +/*! For license information please see 1310.ccdb6fa732d26e629ac4.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1310], { + 91310: (e, t, r) => { + r.d(t, { + Z: () => xs + }); + var i = r(25108), + n = Object.defineProperty, + o = Object.getOwnPropertyDescriptor, + s = Object.getOwnPropertyNames, + a = Object.prototype.hasOwnProperty, + l = (e, t) => () => (e && (t = e(e = 0)), t), + h = (e, t) => () => (t || e((t = { + exports: {} + }).exports, t), t.exports), + u = (e, t) => { + for (var r in t) n(e, r, { + get: t[r], + enumerable: !0 + }) + }, + c = e => ((e, t, r, i) => { + if (t && "object" == typeof t || "function" == typeof t) + for (let r of s(t)) !a.call(e, r) && undefined !== r && n(e, r, { + get: () => t[r], + enumerable: !(i = o(t, r)) || i.enumerable + }); + return e + })(n({}, "__esModule", { + value: !0 + }), e), + f = l((() => {})), + p = {}; + + function d(e) { + throw new Error("Node.js process " + e + " is not supported by JSPM core outside of Node.js") + } + + function g() { + !P || !B || (P = !1, B.length ? O = B.concat(O) : x = -1, O.length && b()) + } + + function b() { + if (!P) { + var e = setTimeout(g, 0); + P = !0; + for (var t = O.length; t;) { + for (B = O, O = []; ++x < t;) B && B[x].run(); + x = -1, t = O.length + } + B = null, P = !1, clearTimeout(e) + } + } + + function y(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var r = 1; r < arguments.length; r++) t[r - 1] = arguments[r]; + O.push(new m(e, t)), 1 === O.length && !P && setTimeout(b, 0) + } + + function m(e, t) { + this.fun = e, this.array = t + } + + function w() {} + + function _(e) { + d("_linkedBinding") + } + + function v(e) { + d("dlopen") + } + + function E() { + return [] + } + + function S() { + return [] + } + + function A(e, t) { + if (!e) throw new Error(t || "assertion error") + } + + function I() { + return !1 + } + + function k() { + return Te.now() / 1e3 + } + + function T(e) { + var t = Math.floor(.001 * (Date.now() - Te.now())), + r = .001 * Te.now(), + i = Math.floor(r) + t, + n = Math.floor(r % 1 * 1e9); + return e && (i -= e[0], (n -= e[1]) < 0 && (i--, n += Re)), [i, n] + } + + function C() { + return We + } + + function R(e) { + return [] + } + u(p, { + _debugEnd: () => pe, + _debugProcess: () => fe, + _events: () => Pe, + _eventsCount: () => Be, + _exiting: () => J, + _fatalExceptions: () => he, + _getActiveHandles: () => S, + _getActiveRequests: () => E, + _kill: () => ee, + _linkedBinding: () => _, + _maxListeners: () => Oe, + _preload_modules: () => Ie, + _rawDebug: () => G, + _startProfilerIdleNotifier: () => de, + _stopProfilerIdleNotifier: () => ge, + _tickCallback: () => ce, + abort: () => we, + addListener: () => xe, + allowedNodeEnvironmentFlags: () => ae, + arch: () => M, + argv: () => j, + argv0: () => Ae, + assert: () => A, + binding: () => q, + chdir: () => z, + config: () => X, + cpuUsage: () => te, + cwd: () => H, + debugPort: () => Se, + default: () => We, + dlopen: () => v, + domain: () => Y, + emit: () => je, + emitWarning: () => $, + env: () => N, + execArgv: () => D, + execPath: () => Ee, + exit: () => oe, + features: () => le, + hasUncaughtExceptionCaptureCallback: () => I, + hrtime: () => T, + kill: () => ne, + listeners: () => R, + memoryUsage: () => ie, + moduleLoadList: () => Q, + nextTick: () => y, + off: () => Me, + on: () => C, + once: () => Ue, + openStdin: () => se, + pid: () => _e, + platform: () => L, + ppid: () => ve, + prependListener: () => De, + prependOnceListener: () => Fe, + reallyExit: () => Z, + release: () => K, + removeAllListeners: () => Ne, + removeListener: () => Le, + resourceUsage: () => re, + setSourceMapsEnabled: () => ke, + setUncaughtExceptionCaptureCallback: () => ue, + stderr: () => ye, + stdin: () => me, + stdout: () => be, + title: () => U, + umask: () => V, + uptime: () => k, + version: () => F, + versions: () => W + }); + var O, P, B, x, U, M, L, N, j, D, F, W, $, q, V, H, z, K, G, Q, Y, J, X, Z, ee, te, re, ie, ne, oe, se, ae, le, he, ue, ce, fe, pe, de, ge, be, ye, me, we, _e, ve, Ee, Se, Ae, Ie, ke, Te, Ce, Re, Oe, Pe, Be, xe, Ue, Me, Le, Ne, je, De, Fe, We, $e = l((() => { + f(), rt(), qe(), O = [], P = !1, x = -1, m.prototype.run = function() { + this.fun.apply(null, this.array) + }, U = "browser", M = "x64", L = "browser", N = { + PATH: "/usr/bin", + LANG: navigator.language + ".UTF-8", + PWD: "/", + HOME: "/home", + TMP: "/tmp" + }, j = ["/usr/bin/node"], D = [], F = "v16.8.0", W = {}, $ = function(e, t) { + i.warn((t ? t + ": " : "") + e) + }, q = function(e) { + d("binding") + }, V = function(e) { + return 0 + }, H = function() { + return "/" + }, z = function(e) {}, K = { + name: "node", + sourceUrl: "", + headersUrl: "", + libUrl: "" + }, G = w, Q = [], Y = {}, J = !1, X = {}, Z = w, ee = w, re = te = function() { + return {} + }, ie = te, ne = w, oe = w, se = w, ae = {}, le = { + inspector: !1, + debug: !1, + uv: !1, + ipv6: !1, + tls_alpn: !1, + tls_sni: !1, + tls_ocsp: !1, + tls: !1, + cached_builtins: !0 + }, he = w, ue = w, ce = w, fe = w, pe = w, de = w, ge = w, be = void 0, ye = void 0, me = void 0, we = w, _e = 2, ve = 1, Ee = "/bin/usr/node", Se = 9229, Ae = "node", Ie = [], ke = w, void 0 === (Te = { + now: typeof performance < "u" ? performance.now.bind(performance) : void 0, + timing: typeof performance < "u" ? performance.timing : void 0 + }).now && (Ce = Date.now(), Te.timing && Te.timing.navigationStart && (Ce = Te.timing.navigationStart), Te.now = () => Date.now() - Ce), Re = 1e9, T.bigint = function(e) { + var t = T(e); + return typeof BigInt > "u" ? t[0] * Re + t[1] : BigInt(t[0] * Re) + BigInt(t[1]) + }, We = { + version: F, + versions: W, + arch: M, + platform: L, + release: K, + _rawDebug: G, + moduleLoadList: Q, + binding: q, + _linkedBinding: _, + _events: Pe = {}, + _eventsCount: Be = 0, + _maxListeners: Oe = 10, + on: C, + addListener: xe = C, + once: Ue = C, + off: Me = C, + removeListener: Le = C, + removeAllListeners: Ne = C, + emit: je = w, + prependListener: De = C, + prependOnceListener: Fe = C, + listeners: R, + domain: Y, + _exiting: J, + config: X, + dlopen: v, + uptime: k, + _getActiveRequests: E, + _getActiveHandles: S, + reallyExit: Z, + _kill: ee, + cpuUsage: te, + resourceUsage: re, + memoryUsage: ie, + kill: ne, + exit: oe, + openStdin: se, + allowedNodeEnvironmentFlags: ae, + assert: A, + features: le, + _fatalExceptions: he, + setUncaughtExceptionCaptureCallback: ue, + hasUncaughtExceptionCaptureCallback: I, + emitWarning: $, + nextTick: y, + _tickCallback: ce, + _debugProcess: fe, + _debugEnd: pe, + _startProfilerIdleNotifier: de, + _stopProfilerIdleNotifier: ge, + stdout: be, + stdin: me, + stderr: ye, + abort: we, + umask: V, + chdir: z, + cwd: H, + env: N, + title: U, + argv: j, + execArgv: D, + pid: _e, + ppid: ve, + execPath: Ee, + debugPort: Se, + hrtime: T, + argv0: Ae, + _preload_modules: Ie, + setSourceMapsEnabled: ke + } + })), + qe = l((() => { + $e() + })), + Ve = {}; + u(Ve, { + Buffer: () => Xe, + INSPECT_MAX_BYTES: () => Ze, + default: () => Je, + kMaxLength: () => et + }); + var He, ze, Ke, Ge, Qe, Ye, Je, Xe, Ze, et, tt = l((() => { + f(), rt(), qe(), He = {}, ze = !1, Ke = {}, Ge = !1, Qe = {}, Ye = !1, (Je = function() { + if (Ye) return Qe; + Ye = !0; + let e = function() { + if (ze) return He; + ze = !0, He.byteLength = function(e) { + var t = s(e), + r = t[0], + i = t[1]; + return 3 * (r + i) / 4 - i + }, He.toByteArray = function(e) { + var i, n, o = s(e), + a = o[0], + l = o[1], + h = new r(function(e, t, r) { + return 3 * (t + r) / 4 - r + }(0, a, l)), + u = 0, + c = l > 0 ? a - 4 : a; + for (n = 0; n < c; n += 4) i = t[e.charCodeAt(n)] << 18 | t[e.charCodeAt(n + 1)] << 12 | t[e.charCodeAt(n + 2)] << 6 | t[e.charCodeAt(n + 3)], h[u++] = i >> 16 & 255, h[u++] = i >> 8 & 255, h[u++] = 255 & i; + return 2 === l && (i = t[e.charCodeAt(n)] << 2 | t[e.charCodeAt(n + 1)] >> 4, h[u++] = 255 & i), 1 === l && (i = t[e.charCodeAt(n)] << 10 | t[e.charCodeAt(n + 1)] << 4 | t[e.charCodeAt(n + 2)] >> 2, h[u++] = i >> 8 & 255, h[u++] = 255 & i), h + }, He.fromByteArray = function(t) { + for (var r, i = t.length, n = i % 3, o = [], s = 16383, a = 0, h = i - n; a < h; a += s) o.push(l(t, a, a + s > h ? h : a + s)); + return 1 === n ? (r = t[i - 1], o.push(e[r >> 2] + e[r << 4 & 63] + "==")) : 2 === n && (r = (t[i - 2] << 8) + t[i - 1], o.push(e[r >> 10] + e[r >> 4 & 63] + e[r << 2 & 63] + "=")), o.join("") + }; + for (var e = [], t = [], r = typeof Uint8Array < "u" ? Uint8Array : Array, i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", n = 0, o = i.length; n < o; ++n) e[n] = i[n], t[i.charCodeAt(n)] = n; + + function s(e) { + var t = e.length; + if (t % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); + var r = e.indexOf("="); + return -1 === r && (r = t), [r, r === t ? 0 : 4 - r % 4] + } + + function a(t) { + return e[t >> 18 & 63] + e[t >> 12 & 63] + e[t >> 6 & 63] + e[63 & t] + } + + function l(e, t, r) { + for (var i, n = [], o = t; o < r; o += 3) i = (e[o] << 16 & 16711680) + (e[o + 1] << 8 & 65280) + (255 & e[o + 2]), n.push(a(i)); + return n.join("") + } + return t["-".charCodeAt(0)] = 62, t["_".charCodeAt(0)] = 63, He + }(), + t = (Ge || (Ge = !0, Ke.read = function(e, t, r, i, n) { + var o, s, a = 8 * n - i - 1, + l = (1 << a) - 1, + h = l >> 1, + u = -7, + c = r ? n - 1 : 0, + f = r ? -1 : 1, + p = e[t + c]; + for (c += f, o = p & (1 << -u) - 1, p >>= -u, u += a; u > 0; o = 256 * o + e[t + c], c += f, u -= 8); + for (s = o & (1 << -u) - 1, o >>= -u, u += i; u > 0; s = 256 * s + e[t + c], c += f, u -= 8); + if (0 === o) o = 1 - h; + else { + if (o === l) return s ? NaN : 1 / 0 * (p ? -1 : 1); + s += Math.pow(2, i), o -= h + } + return (p ? -1 : 1) * s * Math.pow(2, o - i) + }, Ke.write = function(e, t, r, i, n, o) { + var s, a, l, h = 8 * o - n - 1, + u = (1 << h) - 1, + c = u >> 1, + f = 23 === n ? Math.pow(2, -24) - Math.pow(2, -77) : 0, + p = i ? 0 : o - 1, + d = i ? 1 : -1, + g = t < 0 || 0 === t && 1 / t < 0 ? 1 : 0; + for (t = Math.abs(t), isNaN(t) || t === 1 / 0 ? (a = isNaN(t) ? 1 : 0, s = u) : (s = Math.floor(Math.log(t) / Math.LN2), t * (l = Math.pow(2, -s)) < 1 && (s--, l *= 2), (t += s + c >= 1 ? f / l : f * Math.pow(2, 1 - c)) * l >= 2 && (s++, l /= 2), s + c >= u ? (a = 0, s = u) : s + c >= 1 ? (a = (t * l - 1) * Math.pow(2, n), s += c) : (a = t * Math.pow(2, c - 1) * Math.pow(2, n), s = 0)); n >= 8; e[r + p] = 255 & a, p += d, a /= 256, n -= 8); + for (s = s << n | a, h += n; h > 0; e[r + p] = 255 & s, p += d, s /= 256, h -= 8); + e[r + p - d] |= 128 * g + }), Ke), + r = "function" == typeof Symbol && "function" == typeof Symbol.for ? Symbol.for("nodejs.util.inspect.custom") : null; + Qe.Buffer = s, Qe.SlowBuffer = function(e) { + return +e != e && (e = 0), s.alloc(+e) + }, Qe.INSPECT_MAX_BYTES = 50; + let n = 2147483647; + + function o(e) { + if (e > n) throw new RangeError('The value "' + e + '" is invalid for option "size"'); + let t = new Uint8Array(e); + return Object.setPrototypeOf(t, s.prototype), t + } + + function s(e, t, r) { + if ("number" == typeof e) { + if ("string" == typeof t) throw new TypeError('The "string" argument must be of type string. Received type number'); + return h(e) + } + return a(e, t, r) + } + + function a(e, t, r) { + if ("string" == typeof e) return function(e, t) { + if (("string" != typeof t || "" === t) && (t = "utf8"), !s.isEncoding(t)) throw new TypeError("Unknown encoding: " + t); + let r = 0 | p(e, t), + i = o(r), + n = i.write(e, t); + return n !== r && (i = i.slice(0, n)), i + }(e, t); + if (ArrayBuffer.isView(e)) return function(e) { + if (K(e, Uint8Array)) { + let t = new Uint8Array(e); + return c(t.buffer, t.byteOffset, t.byteLength) + } + return u(e) + }(e); + if (null == e) throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e); + if (K(e, ArrayBuffer) || e && K(e.buffer, ArrayBuffer) || typeof SharedArrayBuffer < "u" && (K(e, SharedArrayBuffer) || e && K(e.buffer, SharedArrayBuffer))) return c(e, t, r); + if ("number" == typeof e) throw new TypeError('The "value" argument must not be of type number. Received type number'); + let i = e.valueOf && e.valueOf(); + if (null != i && i !== e) return s.from(i, t, r); + let n = function(e) { + if (s.isBuffer(e)) { + let t = 0 | f(e.length), + r = o(t); + return 0 === r.length || e.copy(r, 0, 0, t), r + } + return void 0 !== e.length ? "number" != typeof e.length || G(e.length) ? o(0) : u(e) : "Buffer" === e.type && Array.isArray(e.data) ? u(e.data) : void 0 + }(e); + if (n) return n; + if (typeof Symbol < "u" && null != Symbol.toPrimitive && "function" == typeof e[Symbol.toPrimitive]) return s.from(e[Symbol.toPrimitive]("string"), t, r); + throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e) + } + + function l(e) { + if ("number" != typeof e) throw new TypeError('"size" argument must be of type number'); + if (e < 0) throw new RangeError('The value "' + e + '" is invalid for option "size"') + } + + function h(e) { + return l(e), o(e < 0 ? 0 : 0 | f(e)) + } + + function u(e) { + let t = e.length < 0 ? 0 : 0 | f(e.length), + r = o(t); + for (let i = 0; i < t; i += 1) r[i] = 255 & e[i]; + return r + } + + function c(e, t, r) { + if (t < 0 || e.byteLength < t) throw new RangeError('"offset" is outside of buffer bounds'); + if (e.byteLength < t + (r || 0)) throw new RangeError('"length" is outside of buffer bounds'); + let i; + return i = void 0 === t && void 0 === r ? new Uint8Array(e) : void 0 === r ? new Uint8Array(e, t) : new Uint8Array(e, t, r), Object.setPrototypeOf(i, s.prototype), i + } + + function f(e) { + if (e >= n) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + n.toString(16) + " bytes"); + return 0 | e + } + + function p(e, t) { + if (s.isBuffer(e)) return e.length; + if (ArrayBuffer.isView(e) || K(e, ArrayBuffer)) return e.byteLength; + if ("string" != typeof e) throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof e); + let r = e.length, + i = arguments.length > 2 && !0 === arguments[2]; + if (!i && 0 === r) return 0; + let n = !1; + for (;;) switch (t) { + case "ascii": + case "latin1": + case "binary": + return r; + case "utf8": + case "utf-8": + return V(e).length; + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return 2 * r; + case "hex": + return r >>> 1; + case "base64": + return H(e).length; + default: + if (n) return i ? -1 : V(e).length; + t = ("" + t).toLowerCase(), n = !0 + } + } + + function d(e, t, r) { + let i = !1; + if ((void 0 === t || t < 0) && (t = 0), t > this.length || ((void 0 === r || r > this.length) && (r = this.length), r <= 0) || (r >>>= 0) <= (t >>>= 0)) return ""; + for (e || (e = "utf8");;) switch (e) { + case "hex": + return C(this, t, r); + case "utf8": + case "utf-8": + return A(this, t, r); + case "ascii": + return k(this, t, r); + case "latin1": + case "binary": + return T(this, t, r); + case "base64": + return S(this, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return R(this, t, r); + default: + if (i) throw new TypeError("Unknown encoding: " + e); + e = (e + "").toLowerCase(), i = !0 + } + } + + function g(e, t, r) { + let i = e[t]; + e[t] = e[r], e[r] = i + } + + function b(e, t, r, i, n) { + if (0 === e.length) return -1; + if ("string" == typeof r ? (i = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), G(r = +r) && (r = n ? 0 : e.length - 1), r < 0 && (r = e.length + r), r >= e.length) { + if (n) return -1; + r = e.length - 1 + } else if (r < 0) { + if (!n) return -1; + r = 0 + } + if ("string" == typeof t && (t = s.from(t, i)), s.isBuffer(t)) return 0 === t.length ? -1 : y(e, t, r, i, n); + if ("number" == typeof t) return t &= 255, "function" == typeof Uint8Array.prototype.indexOf ? n ? Uint8Array.prototype.indexOf.call(e, t, r) : Uint8Array.prototype.lastIndexOf.call(e, t, r) : y(e, [t], r, i, n); + throw new TypeError("val must be string, number or Buffer") + } + + function y(e, t, r, i, n) { + let o, s = 1, + a = e.length, + l = t.length; + if (void 0 !== i && ("ucs2" === (i = String(i).toLowerCase()) || "ucs-2" === i || "utf16le" === i || "utf-16le" === i)) { + if (e.length < 2 || t.length < 2) return -1; + s = 2, a /= 2, l /= 2, r /= 2 + } + + function h(e, t) { + return 1 === s ? e[t] : e.readUInt16BE(t * s) + } + if (n) { + let i = -1; + for (o = r; o < a; o++) + if (h(e, o) === h(t, -1 === i ? 0 : o - i)) { + if (-1 === i && (i = o), o - i + 1 === l) return i * s + } else - 1 !== i && (o -= o - i), i = -1 + } else + for (r + l > a && (r = a - l), o = r; o >= 0; o--) { + let r = !0; + for (let i = 0; i < l; i++) + if (h(e, o + i) !== h(t, i)) { + r = !1; + break + } if (r) return o + } + return -1 + } + + function m(e, t, r, i) { + r = Number(r) || 0; + let n = e.length - r; + i ? (i = Number(i)) > n && (i = n) : i = n; + let o, s = t.length; + for (i > s / 2 && (i = s / 2), o = 0; o < i; ++o) { + let i = parseInt(t.substr(2 * o, 2), 16); + if (G(i)) return o; + e[r + o] = i + } + return o + } + + function w(e, t, r, i) { + return z(V(t, e.length - r), e, r, i) + } + + function _(e, t, r, i) { + return z(function(e) { + let t = []; + for (let r = 0; r < e.length; ++r) t.push(255 & e.charCodeAt(r)); + return t + }(t), e, r, i) + } + + function v(e, t, r, i) { + return z(H(t), e, r, i) + } + + function E(e, t, r, i) { + return z(function(e, t) { + let r, i, n, o = []; + for (let s = 0; s < e.length && !((t -= 2) < 0); ++s) r = e.charCodeAt(s), i = r >> 8, n = r % 256, o.push(n), o.push(i); + return o + }(t, e.length - r), e, r, i) + } + + function S(t, r, i) { + return 0 === r && i === t.length ? e.fromByteArray(t) : e.fromByteArray(t.slice(r, i)) + } + + function A(e, t, r) { + r = Math.min(e.length, r); + let i = [], + n = t; + for (; n < r;) { + let t = e[n], + o = null, + s = t > 239 ? 4 : t > 223 ? 3 : t > 191 ? 2 : 1; + if (n + s <= r) { + let r, i, a, l; + switch (s) { + case 1: + t < 128 && (o = t); + break; + case 2: + r = e[n + 1], 128 == (192 & r) && (l = (31 & t) << 6 | 63 & r, l > 127 && (o = l)); + break; + case 3: + r = e[n + 1], i = e[n + 2], 128 == (192 & r) && 128 == (192 & i) && (l = (15 & t) << 12 | (63 & r) << 6 | 63 & i, l > 2047 && (l < 55296 || l > 57343) && (o = l)); + break; + case 4: + r = e[n + 1], i = e[n + 2], a = e[n + 3], 128 == (192 & r) && 128 == (192 & i) && 128 == (192 & a) && (l = (15 & t) << 18 | (63 & r) << 12 | (63 & i) << 6 | 63 & a, l > 65535 && l < 1114112 && (o = l)) + } + } + null === o ? (o = 65533, s = 1) : o > 65535 && (o -= 65536, i.push(o >>> 10 & 1023 | 55296), o = 56320 | 1023 & o), i.push(o), n += s + } + return function(e) { + let t = e.length; + if (t <= I) return String.fromCharCode.apply(String, e); + let r = "", + i = 0; + for (; i < t;) r += String.fromCharCode.apply(String, e.slice(i, i += I)); + return r + }(i) + } + Qe.kMaxLength = n, s.TYPED_ARRAY_SUPPORT = function() { + try { + let e = new Uint8Array(1), + t = { + foo: function() { + return 42 + } + }; + return Object.setPrototypeOf(t, Uint8Array.prototype), Object.setPrototypeOf(e, t), 42 === e.foo() + } catch { + return !1 + } + }(), !s.TYPED_ARRAY_SUPPORT && typeof i < "u" && "function" == typeof i.error && i.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), Object.defineProperty(s.prototype, "parent", { + enumerable: !0, + get: function() { + if (s.isBuffer(this)) return this.buffer + } + }), Object.defineProperty(s.prototype, "offset", { + enumerable: !0, + get: function() { + if (s.isBuffer(this)) return this.byteOffset + } + }), s.poolSize = 8192, s.from = function(e, t, r) { + return a(e, t, r) + }, Object.setPrototypeOf(s.prototype, Uint8Array.prototype), Object.setPrototypeOf(s, Uint8Array), s.alloc = function(e, t, r) { + return function(e, t, r) { + return l(e), e <= 0 ? o(e) : void 0 !== t ? "string" == typeof r ? o(e).fill(t, r) : o(e).fill(t) : o(e) + }(e, t, r) + }, s.allocUnsafe = function(e) { + return h(e) + }, s.allocUnsafeSlow = function(e) { + return h(e) + }, s.isBuffer = function(e) { + return null != e && !0 === e._isBuffer && e !== s.prototype + }, s.compare = function(e, t) { + if (K(e, Uint8Array) && (e = s.from(e, e.offset, e.byteLength)), K(t, Uint8Array) && (t = s.from(t, t.offset, t.byteLength)), !s.isBuffer(e) || !s.isBuffer(t)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); + if (e === t) return 0; + let r = e.length, + i = t.length; + for (let n = 0, o = Math.min(r, i); n < o; ++n) + if (e[n] !== t[n]) { + r = e[n], i = t[n]; + break + } return r < i ? -1 : i < r ? 1 : 0 + }, s.isEncoding = function(e) { + switch (String(e).toLowerCase()) { + case "hex": + case "utf8": + case "utf-8": + case "ascii": + case "latin1": + case "binary": + case "base64": + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return !0; + default: + return !1 + } + }, s.concat = function(e, t) { + if (!Array.isArray(e)) throw new TypeError('"list" argument must be an Array of Buffers'); + if (0 === e.length) return s.alloc(0); + let r; + if (void 0 === t) + for (t = 0, r = 0; r < e.length; ++r) t += e[r].length; + let i = s.allocUnsafe(t), + n = 0; + for (r = 0; r < e.length; ++r) { + let t = e[r]; + if (K(t, Uint8Array)) n + t.length > i.length ? (s.isBuffer(t) || (t = s.from(t)), t.copy(i, n)) : Uint8Array.prototype.set.call(i, t, n); + else { + if (!s.isBuffer(t)) throw new TypeError('"list" argument must be an Array of Buffers'); + t.copy(i, n) + } + n += t.length + } + return i + }, s.byteLength = p, s.prototype._isBuffer = !0, s.prototype.swap16 = function() { + let e = this.length; + if (e % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); + for (let t = 0; t < e; t += 2) g(this, t, t + 1); + return this + }, s.prototype.swap32 = function() { + let e = this.length; + if (e % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); + for (let t = 0; t < e; t += 4) g(this, t, t + 3), g(this, t + 1, t + 2); + return this + }, s.prototype.swap64 = function() { + let e = this.length; + if (e % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); + for (let t = 0; t < e; t += 8) g(this, t, t + 7), g(this, t + 1, t + 6), g(this, t + 2, t + 5), g(this, t + 3, t + 4); + return this + }, s.prototype.toString = function() { + let e = this.length; + return 0 === e ? "" : 0 === arguments.length ? A(this, 0, e) : d.apply(this, arguments) + }, s.prototype.toLocaleString = s.prototype.toString, s.prototype.equals = function(e) { + if (!s.isBuffer(e)) throw new TypeError("Argument must be a Buffer"); + return this === e || 0 === s.compare(this, e) + }, s.prototype.inspect = function() { + let e = "", + t = Qe.INSPECT_MAX_BYTES; + return e = this.toString("hex", 0, t).replace(/(.{2})/g, "$1 ").trim(), this.length > t && (e += " ... "), "" + }, r && (s.prototype[r] = s.prototype.inspect), s.prototype.compare = function(e, t, r, i, n) { + if (K(e, Uint8Array) && (e = s.from(e, e.offset, e.byteLength)), !s.isBuffer(e)) throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof e); + if (void 0 === t && (t = 0), void 0 === r && (r = e ? e.length : 0), void 0 === i && (i = 0), void 0 === n && (n = this.length), t < 0 || r > e.length || i < 0 || n > this.length) throw new RangeError("out of range index"); + if (i >= n && t >= r) return 0; + if (i >= n) return -1; + if (t >= r) return 1; + if (this === e) return 0; + let o = (n >>>= 0) - (i >>>= 0), + a = (r >>>= 0) - (t >>>= 0), + l = Math.min(o, a), + h = this.slice(i, n), + u = e.slice(t, r); + for (let e = 0; e < l; ++e) + if (h[e] !== u[e]) { + o = h[e], a = u[e]; + break + } return o < a ? -1 : a < o ? 1 : 0 + }, s.prototype.includes = function(e, t, r) { + return -1 !== this.indexOf(e, t, r) + }, s.prototype.indexOf = function(e, t, r) { + return b(this, e, t, r, !0) + }, s.prototype.lastIndexOf = function(e, t, r) { + return b(this, e, t, r, !1) + }, s.prototype.write = function(e, t, r, i) { + if (void 0 === t) i = "utf8", r = this.length, t = 0; + else if (void 0 === r && "string" == typeof t) i = t, r = this.length, t = 0; + else { + if (!isFinite(t)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); + t >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === i && (i = "utf8")) : (i = r, r = void 0) + } + let n = this.length - t; + if ((void 0 === r || r > n) && (r = n), e.length > 0 && (r < 0 || t < 0) || t > this.length) throw new RangeError("Attempt to write outside buffer bounds"); + i || (i = "utf8"); + let o = !1; + for (;;) switch (i) { + case "hex": + return m(this, e, t, r); + case "utf8": + case "utf-8": + return w(this, e, t, r); + case "ascii": + case "latin1": + case "binary": + return _(this, e, t, r); + case "base64": + return v(this, e, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return E(this, e, t, r); + default: + if (o) throw new TypeError("Unknown encoding: " + i); + i = ("" + i).toLowerCase(), o = !0 + } + }, s.prototype.toJSON = function() { + return { + type: "Buffer", + data: Array.prototype.slice.call(this._arr || this, 0) + } + }; + let I = 4096; + + function k(e, t, r) { + let i = ""; + r = Math.min(e.length, r); + for (let n = t; n < r; ++n) i += String.fromCharCode(127 & e[n]); + return i + } + + function T(e, t, r) { + let i = ""; + r = Math.min(e.length, r); + for (let n = t; n < r; ++n) i += String.fromCharCode(e[n]); + return i + } + + function C(e, t, r) { + let i = e.length; + (!t || t < 0) && (t = 0), (!r || r < 0 || r > i) && (r = i); + let n = ""; + for (let i = t; i < r; ++i) n += Q[e[i]]; + return n + } + + function R(e, t, r) { + let i = e.slice(t, r), + n = ""; + for (let e = 0; e < i.length - 1; e += 2) n += String.fromCharCode(i[e] + 256 * i[e + 1]); + return n + } + + function O(e, t, r) { + if (e % 1 != 0 || e < 0) throw new RangeError("offset is not uint"); + if (e + t > r) throw new RangeError("Trying to access beyond buffer length") + } + + function P(e, t, r, i, n, o) { + if (!s.isBuffer(e)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (t > n || t < o) throw new RangeError('"value" argument is out of bounds'); + if (r + i > e.length) throw new RangeError("Index out of range") + } + + function B(e, t, r, i, n) { + F(t, i, n, e, r, 7); + let o = Number(t & BigInt(4294967295)); + e[r++] = o, o >>= 8, e[r++] = o, o >>= 8, e[r++] = o, o >>= 8, e[r++] = o; + let s = Number(t >> BigInt(32) & BigInt(4294967295)); + return e[r++] = s, s >>= 8, e[r++] = s, s >>= 8, e[r++] = s, s >>= 8, e[r++] = s, r + } + + function x(e, t, r, i, n) { + F(t, i, n, e, r, 7); + let o = Number(t & BigInt(4294967295)); + e[r + 7] = o, o >>= 8, e[r + 6] = o, o >>= 8, e[r + 5] = o, o >>= 8, e[r + 4] = o; + let s = Number(t >> BigInt(32) & BigInt(4294967295)); + return e[r + 3] = s, s >>= 8, e[r + 2] = s, s >>= 8, e[r + 1] = s, s >>= 8, e[r] = s, r + 8 + } + + function U(e, t, r, i, n, o) { + if (r + i > e.length) throw new RangeError("Index out of range"); + if (r < 0) throw new RangeError("Index out of range") + } + + function M(e, r, i, n, o) { + return r = +r, i >>>= 0, o || U(e, 0, i, 4), t.write(e, r, i, n, 23, 4), i + 4 + } + + function L(e, r, i, n, o) { + return r = +r, i >>>= 0, o || U(e, 0, i, 8), t.write(e, r, i, n, 52, 8), i + 8 + } + s.prototype.slice = function(e, t) { + let r = this.length; + (e = ~~e) < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), (t = void 0 === t ? r : ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), t < e && (t = e); + let i = this.subarray(e, t); + return Object.setPrototypeOf(i, s.prototype), i + }, s.prototype.readUintLE = s.prototype.readUIntLE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || O(e, t, this.length); + let i = this[e], + n = 1, + o = 0; + for (; ++o < t && (n *= 256);) i += this[e + o] * n; + return i + }, s.prototype.readUintBE = s.prototype.readUIntBE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || O(e, t, this.length); + let i = this[e + --t], + n = 1; + for (; t > 0 && (n *= 256);) i += this[e + --t] * n; + return i + }, s.prototype.readUint8 = s.prototype.readUInt8 = function(e, t) { + return e >>>= 0, t || O(e, 1, this.length), this[e] + }, s.prototype.readUint16LE = s.prototype.readUInt16LE = function(e, t) { + return e >>>= 0, t || O(e, 2, this.length), this[e] | this[e + 1] << 8 + }, s.prototype.readUint16BE = s.prototype.readUInt16BE = function(e, t) { + return e >>>= 0, t || O(e, 2, this.length), this[e] << 8 | this[e + 1] + }, s.prototype.readUint32LE = s.prototype.readUInt32LE = function(e, t) { + return e >>>= 0, t || O(e, 4, this.length), (this[e] | this[e + 1] << 8 | this[e + 2] << 16) + 16777216 * this[e + 3] + }, s.prototype.readUint32BE = s.prototype.readUInt32BE = function(e, t) { + return e >>>= 0, t || O(e, 4, this.length), 16777216 * this[e] + (this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3]) + }, s.prototype.readBigUInt64LE = Y((function(e) { + W(e >>>= 0, "offset"); + let t = this[e], + r = this[e + 7]; + (void 0 === t || void 0 === r) && $(e, this.length - 8); + let i = t + 256 * this[++e] + 65536 * this[++e] + this[++e] * 2 ** 24, + n = this[++e] + 256 * this[++e] + 65536 * this[++e] + r * 2 ** 24; + return BigInt(i) + (BigInt(n) << BigInt(32)) + })), s.prototype.readBigUInt64BE = Y((function(e) { + W(e >>>= 0, "offset"); + let t = this[e], + r = this[e + 7]; + (void 0 === t || void 0 === r) && $(e, this.length - 8); + let i = t * 2 ** 24 + 65536 * this[++e] + 256 * this[++e] + this[++e], + n = this[++e] * 2 ** 24 + 65536 * this[++e] + 256 * this[++e] + r; + return (BigInt(i) << BigInt(32)) + BigInt(n) + })), s.prototype.readIntLE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || O(e, t, this.length); + let i = this[e], + n = 1, + o = 0; + for (; ++o < t && (n *= 256);) i += this[e + o] * n; + return n *= 128, i >= n && (i -= Math.pow(2, 8 * t)), i + }, s.prototype.readIntBE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || O(e, t, this.length); + let i = t, + n = 1, + o = this[e + --i]; + for (; i > 0 && (n *= 256);) o += this[e + --i] * n; + return n *= 128, o >= n && (o -= Math.pow(2, 8 * t)), o + }, s.prototype.readInt8 = function(e, t) { + return e >>>= 0, t || O(e, 1, this.length), 128 & this[e] ? -1 * (255 - this[e] + 1) : this[e] + }, s.prototype.readInt16LE = function(e, t) { + e >>>= 0, t || O(e, 2, this.length); + let r = this[e] | this[e + 1] << 8; + return 32768 & r ? 4294901760 | r : r + }, s.prototype.readInt16BE = function(e, t) { + e >>>= 0, t || O(e, 2, this.length); + let r = this[e + 1] | this[e] << 8; + return 32768 & r ? 4294901760 | r : r + }, s.prototype.readInt32LE = function(e, t) { + return e >>>= 0, t || O(e, 4, this.length), this[e] | this[e + 1] << 8 | this[e + 2] << 16 | this[e + 3] << 24 + }, s.prototype.readInt32BE = function(e, t) { + return e >>>= 0, t || O(e, 4, this.length), this[e] << 24 | this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3] + }, s.prototype.readBigInt64LE = Y((function(e) { + W(e >>>= 0, "offset"); + let t = this[e], + r = this[e + 7]; + (void 0 === t || void 0 === r) && $(e, this.length - 8); + let i = this[e + 4] + 256 * this[e + 5] + 65536 * this[e + 6] + (r << 24); + return (BigInt(i) << BigInt(32)) + BigInt(t + 256 * this[++e] + 65536 * this[++e] + this[++e] * 2 ** 24) + })), s.prototype.readBigInt64BE = Y((function(e) { + W(e >>>= 0, "offset"); + let t = this[e], + r = this[e + 7]; + (void 0 === t || void 0 === r) && $(e, this.length - 8); + let i = (t << 24) + 65536 * this[++e] + 256 * this[++e] + this[++e]; + return (BigInt(i) << BigInt(32)) + BigInt(this[++e] * 2 ** 24 + 65536 * this[++e] + 256 * this[++e] + r) + })), s.prototype.readFloatLE = function(e, r) { + return e >>>= 0, r || O(e, 4, this.length), t.read(this, e, !0, 23, 4) + }, s.prototype.readFloatBE = function(e, r) { + return e >>>= 0, r || O(e, 4, this.length), t.read(this, e, !1, 23, 4) + }, s.prototype.readDoubleLE = function(e, r) { + return e >>>= 0, r || O(e, 8, this.length), t.read(this, e, !0, 52, 8) + }, s.prototype.readDoubleBE = function(e, r) { + return e >>>= 0, r || O(e, 8, this.length), t.read(this, e, !1, 52, 8) + }, s.prototype.writeUintLE = s.prototype.writeUIntLE = function(e, t, r, i) { + e = +e, t >>>= 0, r >>>= 0, i || P(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + let n = 1, + o = 0; + for (this[t] = 255 & e; ++o < r && (n *= 256);) this[t + o] = e / n & 255; + return t + r + }, s.prototype.writeUintBE = s.prototype.writeUIntBE = function(e, t, r, i) { + e = +e, t >>>= 0, r >>>= 0, i || P(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + let n = r - 1, + o = 1; + for (this[t + n] = 255 & e; --n >= 0 && (o *= 256);) this[t + n] = e / o & 255; + return t + r + }, s.prototype.writeUint8 = s.prototype.writeUInt8 = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 1, 255, 0), this[t] = 255 & e, t + 1 + }, s.prototype.writeUint16LE = s.prototype.writeUInt16LE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 2, 65535, 0), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2 + }, s.prototype.writeUint16BE = s.prototype.writeUInt16BE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 2, 65535, 0), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2 + }, s.prototype.writeUint32LE = s.prototype.writeUInt32LE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 4, 4294967295, 0), this[t + 3] = e >>> 24, this[t + 2] = e >>> 16, this[t + 1] = e >>> 8, this[t] = 255 & e, t + 4 + }, s.prototype.writeUint32BE = s.prototype.writeUInt32BE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 4, 4294967295, 0), this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e, t + 4 + }, s.prototype.writeBigUInt64LE = Y((function(e, t = 0) { + return B(this, e, t, BigInt(0), BigInt("0xffffffffffffffff")) + })), s.prototype.writeBigUInt64BE = Y((function(e, t = 0) { + return x(this, e, t, BigInt(0), BigInt("0xffffffffffffffff")) + })), s.prototype.writeIntLE = function(e, t, r, i) { + if (e = +e, t >>>= 0, !i) { + let i = Math.pow(2, 8 * r - 1); + P(this, e, t, r, i - 1, -i) + } + let n = 0, + o = 1, + s = 0; + for (this[t] = 255 & e; ++n < r && (o *= 256);) e < 0 && 0 === s && 0 !== this[t + n - 1] && (s = 1), this[t + n] = (e / o >> 0) - s & 255; + return t + r + }, s.prototype.writeIntBE = function(e, t, r, i) { + if (e = +e, t >>>= 0, !i) { + let i = Math.pow(2, 8 * r - 1); + P(this, e, t, r, i - 1, -i) + } + let n = r - 1, + o = 1, + s = 0; + for (this[t + n] = 255 & e; --n >= 0 && (o *= 256);) e < 0 && 0 === s && 0 !== this[t + n + 1] && (s = 1), this[t + n] = (e / o >> 0) - s & 255; + return t + r + }, s.prototype.writeInt8 = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 1, 127, -128), e < 0 && (e = 255 + e + 1), this[t] = 255 & e, t + 1 + }, s.prototype.writeInt16LE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 2, 32767, -32768), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2 + }, s.prototype.writeInt16BE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 2, 32767, -32768), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2 + }, s.prototype.writeInt32LE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 4, 2147483647, -2147483648), this[t] = 255 & e, this[t + 1] = e >>> 8, this[t + 2] = e >>> 16, this[t + 3] = e >>> 24, t + 4 + }, s.prototype.writeInt32BE = function(e, t, r) { + return e = +e, t >>>= 0, r || P(this, e, t, 4, 2147483647, -2147483648), e < 0 && (e = 4294967295 + e + 1), this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e, t + 4 + }, s.prototype.writeBigInt64LE = Y((function(e, t = 0) { + return B(this, e, t, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")) + })), s.prototype.writeBigInt64BE = Y((function(e, t = 0) { + return x(this, e, t, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")) + })), s.prototype.writeFloatLE = function(e, t, r) { + return M(this, e, t, !0, r) + }, s.prototype.writeFloatBE = function(e, t, r) { + return M(this, e, t, !1, r) + }, s.prototype.writeDoubleLE = function(e, t, r) { + return L(this, e, t, !0, r) + }, s.prototype.writeDoubleBE = function(e, t, r) { + return L(this, e, t, !1, r) + }, s.prototype.copy = function(e, t, r, i) { + if (!s.isBuffer(e)) throw new TypeError("argument should be a Buffer"); + if (r || (r = 0), !i && 0 !== i && (i = this.length), t >= e.length && (t = e.length), t || (t = 0), i > 0 && i < r && (i = r), i === r || 0 === e.length || 0 === this.length) return 0; + if (t < 0) throw new RangeError("targetStart out of bounds"); + if (r < 0 || r >= this.length) throw new RangeError("Index out of range"); + if (i < 0) throw new RangeError("sourceEnd out of bounds"); + i > this.length && (i = this.length), e.length - t < i - r && (i = e.length - t + r); + let n = i - r; + return this === e && "function" == typeof Uint8Array.prototype.copyWithin ? this.copyWithin(t, r, i) : Uint8Array.prototype.set.call(e, this.subarray(r, i), t), n + }, s.prototype.fill = function(e, t, r, i) { + if ("string" == typeof e) { + if ("string" == typeof t ? (i = t, t = 0, r = this.length) : "string" == typeof r && (i = r, r = this.length), void 0 !== i && "string" != typeof i) throw new TypeError("encoding must be a string"); + if ("string" == typeof i && !s.isEncoding(i)) throw new TypeError("Unknown encoding: " + i); + if (1 === e.length) { + let t = e.charCodeAt(0); + ("utf8" === i && t < 128 || "latin1" === i) && (e = t) + } + } else "number" == typeof e ? e &= 255 : "boolean" == typeof e && (e = Number(e)); + if (t < 0 || this.length < t || this.length < r) throw new RangeError("Out of range index"); + if (r <= t) return this; + let n; + if (t >>>= 0, r = void 0 === r ? this.length : r >>> 0, e || (e = 0), "number" == typeof e) + for (n = t; n < r; ++n) this[n] = e; + else { + let o = s.isBuffer(e) ? e : s.from(e, i), + a = o.length; + if (0 === a) throw new TypeError('The value "' + e + '" is invalid for argument "value"'); + for (n = 0; n < r - t; ++n) this[n + t] = o[n % a] + } + return this + }; + let N = {}; + + function j(e, t, r) { + N[e] = class extends r { + constructor() { + super(), Object.defineProperty(this, "message", { + value: t.apply(this, arguments), + writable: !0, + configurable: !0 + }), this.name = `${this.name} [${e}]`, this.stack, delete this.name + } + get code() { + return e + } + set code(e) { + Object.defineProperty(this, "code", { + configurable: !0, + enumerable: !0, + value: e, + writable: !0 + }) + } + toString() { + return `${this.name} [${e}]: ${this.message}` + } + } + } + + function D(e) { + let t = "", + r = e.length, + i = "-" === e[0] ? 1 : 0; + for (; r >= i + 4; r -= 3) t = `_${e.slice(r-3,r)}${t}`; + return `${e.slice(0,r)}${t}` + } + + function F(e, t, r, i, n, o) { + if (e > r || e < t) { + let i, n = "bigint" == typeof t ? "n" : ""; + throw i = o > 3 ? 0 === t || t === BigInt(0) ? `>= 0${n} and < 2${n} ** ${8*(o+1)}${n}` : `>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}` : `>= ${t}${n} and <= ${r}${n}`, new N.ERR_OUT_OF_RANGE("value", i, e) + }! function(e, t, r) { + W(t, "offset"), (void 0 === e[t] || void 0 === e[t + r]) && $(t, e.length - (r + 1)) + }(i, n, o) + } + + function W(e, t) { + if ("number" != typeof e) throw new N.ERR_INVALID_ARG_TYPE(t, "number", e) + } + + function $(e, t, r) { + throw Math.floor(e) !== e ? (W(e, r), new N.ERR_OUT_OF_RANGE(r || "offset", "an integer", e)) : t < 0 ? new N.ERR_BUFFER_OUT_OF_BOUNDS : new N.ERR_OUT_OF_RANGE(r || "offset", `>= ${r?1:0} and <= ${t}`, e) + } + j("ERR_BUFFER_OUT_OF_BOUNDS", (function(e) { + return e ? `${e} is outside of buffer bounds` : "Attempt to access memory outside buffer bounds" + }), RangeError), j("ERR_INVALID_ARG_TYPE", (function(e, t) { + return `The "${e}" argument must be of type number. Received type ${typeof t}` + }), TypeError), j("ERR_OUT_OF_RANGE", (function(e, t, r) { + let i = `The value of "${e}" is out of range.`, + n = r; + return Number.isInteger(r) && Math.abs(r) > 2 ** 32 ? n = D(String(r)) : "bigint" == typeof r && (n = String(r), (r > BigInt(2) ** BigInt(32) || r < -(BigInt(2) ** BigInt(32))) && (n = D(n)), n += "n"), i += ` It must be ${t}. Received ${n}`, i + }), RangeError); + let q = /[^+/0-9A-Za-z-_]/g; + + function V(e, t) { + t = t || 1 / 0; + let r, i = e.length, + n = null, + o = []; + for (let s = 0; s < i; ++s) { + if (r = e.charCodeAt(s), r > 55295 && r < 57344) { + if (!n) { + if (r > 56319) { + (t -= 3) > -1 && o.push(239, 191, 189); + continue + } + if (s + 1 === i) { + (t -= 3) > -1 && o.push(239, 191, 189); + continue + } + n = r; + continue + } + if (r < 56320) { + (t -= 3) > -1 && o.push(239, 191, 189), n = r; + continue + } + r = 65536 + (n - 55296 << 10 | r - 56320) + } else n && (t -= 3) > -1 && o.push(239, 191, 189); + if (n = null, r < 128) { + if ((t -= 1) < 0) break; + o.push(r) + } else if (r < 2048) { + if ((t -= 2) < 0) break; + o.push(r >> 6 | 192, 63 & r | 128) + } else if (r < 65536) { + if ((t -= 3) < 0) break; + o.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128) + } else { + if (!(r < 1114112)) throw new Error("Invalid code point"); + if ((t -= 4) < 0) break; + o.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128) + } + } + return o + } + + function H(t) { + return e.toByteArray(function(e) { + if ((e = (e = e.split("=")[0]).trim().replace(q, "")).length < 2) return ""; + for (; e.length % 4 != 0;) e += "="; + return e + }(t)) + } + + function z(e, t, r, i) { + let n; + for (n = 0; n < i && !(n + r >= t.length || n >= e.length); ++n) t[n + r] = e[n]; + return n + } + + function K(e, t) { + return e instanceof t || null != e && null != e.constructor && null != e.constructor.name && e.constructor.name === t.name + } + + function G(e) { + return e != e + } + let Q = function() { + let e = "0123456789abcdef", + t = new Array(256); + for (let r = 0; r < 16; ++r) { + let i = 16 * r; + for (let n = 0; n < 16; ++n) t[i + n] = e[r] + e[n] + } + return t + }(); + + function Y(e) { + return typeof BigInt > "u" ? J : e + } + + function J() { + throw new Error("BigInt not supported") + } + return Qe + }()).Buffer, Je.SlowBuffer, Je.INSPECT_MAX_BYTES, Je.kMaxLength, Xe = Je.Buffer, Ze = Je.INSPECT_MAX_BYTES, et = Je.kMaxLength + })), + rt = l((() => { + tt() + })), + it = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.default = class { + constructor(e) { + this.aliasToTopic = {}, this.max = e + } + put(e, t) { + return !(0 === t || t > this.max || (this.aliasToTopic[t] = e, this.length = Object.keys(this.aliasToTopic).length, 0)) + } + getTopicByAlias(e) { + return this.aliasToTopic[e] + } + clear() { + this.aliasToTopic = {} + } + } + })), + nt = h(((e, t) => { + f(), rt(), qe(), t.exports = { + ArrayIsArray: e => Array.isArray(e), + ArrayPrototypeIncludes: (e, t) => e.includes(t), + ArrayPrototypeIndexOf: (e, t) => e.indexOf(t), + ArrayPrototypeJoin: (e, t) => e.join(t), + ArrayPrototypeMap: (e, t) => e.map(t), + ArrayPrototypePop: (e, t) => e.pop(t), + ArrayPrototypePush: (e, t) => e.push(t), + ArrayPrototypeSlice: (e, t, r) => e.slice(t, r), + Error, + FunctionPrototypeCall: (e, t, ...r) => e.call(t, ...r), + FunctionPrototypeSymbolHasInstance: (e, t) => Function.prototype[Symbol.hasInstance].call(e, t), + MathFloor: Math.floor, + Number, + NumberIsInteger: Number.isInteger, + NumberIsNaN: Number.isNaN, + NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER, + NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER, + NumberParseInt: Number.parseInt, + ObjectDefineProperties: (e, t) => Object.defineProperties(e, t), + ObjectDefineProperty: (e, t, r) => Object.defineProperty(e, t, r), + ObjectGetOwnPropertyDescriptor: (e, t) => Object.getOwnPropertyDescriptor(e, t), + ObjectKeys: e => Object.keys(e), + ObjectSetPrototypeOf: (e, t) => Object.setPrototypeOf(e, t), + Promise, + PromisePrototypeCatch: (e, t) => e.catch(t), + PromisePrototypeThen: (e, t, r) => e.then(t, r), + PromiseReject: e => Promise.reject(e), + ReflectApply: Reflect.apply, + RegExpPrototypeTest: (e, t) => e.test(t), + SafeSet: Set, + String, + StringPrototypeSlice: (e, t, r) => e.slice(t, r), + StringPrototypeToLowerCase: e => e.toLowerCase(), + StringPrototypeToUpperCase: e => e.toUpperCase(), + StringPrototypeTrim: e => e.trim(), + Symbol, + SymbolFor: Symbol.for, + SymbolAsyncIterator: Symbol.asyncIterator, + SymbolHasInstance: Symbol.hasInstance, + SymbolIterator: Symbol.iterator, + TypedArrayPrototypeSet: (e, t, r) => e.set(t, r), + Uint8Array + } + })), + ot = h(((e, t) => { + f(), rt(), qe(); + var r = (tt(), c(Ve)), + i = Object.getPrototypeOf((async function() {})).constructor, + n = globalThis.Blob || r.Blob, + o = typeof n < "u" ? function(e) { + return e instanceof n + } : function(e) { + return !1 + }, + s = class extends Error { + constructor(e) { + if (!Array.isArray(e)) throw new TypeError("Expected input to be an Array, got " + typeof e); + let t = ""; + for (let r = 0; r < e.length; r++) t += ` ${e[r].stack}\n`; + super(t), this.name = "AggregateError", this.errors = e + } + }; + t.exports = { + AggregateError: s, + kEmptyObject: Object.freeze({}), + once(e) { + let t = !1; + return function(...r) { + t || (t = !0, e.apply(this, r)) + } + }, + createDeferredPromise: function() { + let e, t; + return { + promise: new Promise(((r, i) => { + e = r, t = i + })), + resolve: e, + reject: t + } + }, + promisify: e => new Promise(((t, r) => { + e(((e, ...i) => e ? r(e) : t(...i))) + })), + debuglog: () => function() {}, + format: (e, ...t) => e.replace(/%([sdifj])/g, (function(...[e, r]) { + let i = t.shift(); + return "f" === r ? i.toFixed(6) : "j" === r ? JSON.stringify(i) : "s" === r && "object" == typeof i ? `${i.constructor!==Object?i.constructor.name:""} {}`.trim() : i.toString() + })), + inspect(e) { + switch (typeof e) { + case "string": + if (e.includes("'")) { + if (!e.includes('"')) return `"${e}"`; + if (!e.includes("`") && !e.includes("${")) return `\`${e}\`` + } + return `'${e}'`; + case "number": + return isNaN(e) ? "NaN" : Object.is(e, -0) ? String(e) : e; + case "bigint": + return `${String(e)}n`; + case "boolean": + case "undefined": + return String(e); + case "object": + return "{}" + } + }, + types: { + isAsyncFunction: e => e instanceof i, + isArrayBufferView: e => ArrayBuffer.isView(e) + }, + isBlob: o + }, t.exports.promisify.custom = Symbol.for("nodejs.util.promisify.custom") + })), + st = h(((e, t) => { + f(), rt(), qe(); + var { + AbortController: r, + AbortSignal: i + } = typeof self < "u" ? self : typeof window < "u" ? window : void 0; + t.exports = r, t.exports.AbortSignal = i, t.exports.default = r + })), + at = h(((e, t) => { + f(), rt(), qe(); + var { + format: r, + inspect: i, + AggregateError: n + } = ot(), o = globalThis.AggregateError || n, s = Symbol("kIsNodeError"), a = ["string", "function", "number", "object", "Function", "Object", "boolean", "bigint", "symbol"], l = /^([A-Z][a-z0-9]*)+$/, h = {}; + + function u(e, t) { + if (!e) throw new h.ERR_INTERNAL_ASSERTION(t) + } + + function c(e) { + let t = "", + r = e.length, + i = "-" === e[0] ? 1 : 0; + for (; r >= i + 4; r -= 3) t = `_${e.slice(r-3,r)}${t}`; + return `${e.slice(0,r)}${t}` + } + + function p(e, t, i) { + i || (i = Error); + class n extends i { + constructor(...i) { + super(function(e, t, i) { + if ("function" == typeof t) return u(t.length <= i.length, `Code: ${e}; The provided arguments length (${i.length}) does not match the required ones (${t.length}).`), t(...i); + let n = (t.match(/%[dfijoOs]/g) || []).length; + return u(n === i.length, `Code: ${e}; The provided arguments length (${i.length}) does not match the required ones (${n}).`), 0 === i.length ? t : r(t, ...i) + }(e, t, i)) + } + toString() { + return `${this.name} [${e}]: ${this.message}` + } + } + Object.defineProperties(n.prototype, { + name: { + value: i.name, + writable: !0, + enumerable: !1, + configurable: !0 + }, + toString: { + value() { + return `${this.name} [${e}]: ${this.message}` + }, + writable: !0, + enumerable: !1, + configurable: !0 + } + }), n.prototype.code = e, n.prototype[s] = !0, h[e] = n + } + + function d(e) { + let t = "__node_internal_" + e.name; + return Object.defineProperty(e, "name", { + value: t + }), e + } + var g = class extends Error { + constructor(e = "The operation was aborted", t) { + if (void 0 !== t && "object" != typeof t) throw new h.ERR_INVALID_ARG_TYPE("options", "Object", t); + super(e, t), this.code = "ABORT_ERR", this.name = "AbortError" + } + }; + p("ERR_ASSERTION", "%s", Error), p("ERR_INVALID_ARG_TYPE", ((e, t, r) => { + u("string" == typeof e, "'name' must be a string"), Array.isArray(t) || (t = [t]); + let n = "The "; + e.endsWith(" argument") ? n += `${e} ` : n += `"${e}" ${e.includes(".")?"property":"argument"} `, n += "must be "; + let o = [], + s = [], + h = []; + for (let e of t) u("string" == typeof e, "All expected entries have to be of type string"), a.includes(e) ? o.push(e.toLowerCase()) : l.test(e) ? s.push(e) : (u("object" !== e, 'The value "object" should be written as "Object"'), h.push(e)); + if (s.length > 0) { + let e = o.indexOf("object"); - 1 !== e && (o.splice(o, e, 1), s.push("Object")) + } + if (o.length > 0) { + switch (o.length) { + case 1: + n += `of type ${o[0]}`; + break; + case 2: + n += `one of type ${o[0]} or ${o[1]}`; + break; + default: { + let e = o.pop(); + n += `one of type ${o.join(", ")}, or ${e}` + } + }(s.length > 0 || h.length > 0) && (n += " or ") + } + if (s.length > 0) { + switch (s.length) { + case 1: + n += `an instance of ${s[0]}`; + break; + case 2: + n += `an instance of ${s[0]} or ${s[1]}`; + break; + default: { + let e = s.pop(); + n += `an instance of ${s.join(", ")}, or ${e}` + } + } + h.length > 0 && (n += " or ") + } + switch (h.length) { + case 0: + break; + case 1: + h[0].toLowerCase() !== h[0] && (n += "an "), n += `${h[0]}`; + break; + case 2: + n += `one of ${h[0]} or ${h[1]}`; + break; + default: { + let e = h.pop(); + n += `one of ${h.join(", ")}, or ${e}` + } + } + if (null == r) n += `. Received ${r}`; + else if ("function" == typeof r && r.name) n += `. Received function ${r.name}`; + else if ("object" == typeof r) { + var c; + null !== (c = r.constructor) && void 0 !== c && c.name ? n += `. Received an instance of ${r.constructor.name}` : n += `. Received ${i(r,{depth:-1})}` + } else { + let e = i(r, { + colors: !1 + }); + e.length > 25 && (e = `${e.slice(0,25)}...`), n += `. Received type ${typeof r} (${e})` + } + return n + }), TypeError), p("ERR_INVALID_ARG_VALUE", ((e, t, r = "is invalid") => { + let n = i(t); + return n.length > 128 && (n = n.slice(0, 128) + "..."), `The ${e.includes(".")?"property":"argument"} '${e}' ${r}. Received ${n}` + }), TypeError), p("ERR_INVALID_RETURN_VALUE", ((e, t, r) => { + var i; + return `Expected ${e} to be returned from the "${t}" function but got ${null!=r&&null!==(i=r.constructor)&&void 0!==i&&i.name?`instance of ${r.constructor.name}`:"type "+typeof r}.` + }), TypeError), p("ERR_MISSING_ARGS", ((...e) => { + u(e.length > 0, "At least one arg needs to be specified"); + let t, r = e.length; + switch (e = (Array.isArray(e) ? e : [e]).map((e => `"${e}"`)).join(" or "), r) { + case 1: + t += `The ${e[0]} argument`; + break; + case 2: + t += `The ${e[0]} and ${e[1]} arguments`; + break; + default: { + let r = e.pop(); + t += `The ${e.join(", ")}, and ${r} arguments` + } + } + return `${t} must be specified` + }), TypeError), p("ERR_OUT_OF_RANGE", ((e, t, r) => { + let n; + return u(t, 'Missing "range" argument'), Number.isInteger(r) && Math.abs(r) > 2 ** 32 ? n = c(String(r)) : "bigint" == typeof r ? (n = String(r), (r > 2n ** 32n || r < -(2n ** 32n)) && (n = c(n)), n += "n") : n = i(r), `The value of "${e}" is out of range. It must be ${t}. Received ${n}` + }), RangeError), p("ERR_MULTIPLE_CALLBACK", "Callback called multiple times", Error), p("ERR_METHOD_NOT_IMPLEMENTED", "The %s method is not implemented", Error), p("ERR_STREAM_ALREADY_FINISHED", "Cannot call %s after a stream was finished", Error), p("ERR_STREAM_CANNOT_PIPE", "Cannot pipe, not readable", Error), p("ERR_STREAM_DESTROYED", "Cannot call %s after a stream was destroyed", Error), p("ERR_STREAM_NULL_VALUES", "May not write null values to stream", TypeError), p("ERR_STREAM_PREMATURE_CLOSE", "Premature close", Error), p("ERR_STREAM_PUSH_AFTER_EOF", "stream.push() after EOF", Error), p("ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "stream.unshift() after end event", Error), p("ERR_STREAM_WRITE_AFTER_END", "write after end", Error), p("ERR_UNKNOWN_ENCODING", "Unknown encoding: %s", TypeError), t.exports = { + AbortError: g, + aggregateTwoErrors: d((function(e, t) { + if (e && t && e !== t) { + if (Array.isArray(t.errors)) return t.errors.push(e), t; + let r = new o([t, e], t.message); + return r.code = t.code, r + } + return e || t + })), + hideStackFrames: d, + codes: h + } + })), + lt = h(((e, t) => { + f(), rt(), qe(); + var { + ArrayIsArray: r, + ArrayPrototypeIncludes: i, + ArrayPrototypeJoin: n, + ArrayPrototypeMap: o, + NumberIsInteger: s, + NumberIsNaN: a, + NumberMAX_SAFE_INTEGER: l, + NumberMIN_SAFE_INTEGER: h, + NumberParseInt: u, + ObjectPrototypeHasOwnProperty: c, + RegExpPrototypeExec: p, + String: d, + StringPrototypeToUpperCase: g, + StringPrototypeTrim: b + } = nt(), { + hideStackFrames: y, + codes: { + ERR_SOCKET_BAD_PORT: m, + ERR_INVALID_ARG_TYPE: w, + ERR_INVALID_ARG_VALUE: _, + ERR_OUT_OF_RANGE: v, + ERR_UNKNOWN_SIGNAL: E + } + } = at(), { + normalizeEncoding: S + } = ot(), { + isAsyncFunction: A, + isArrayBufferView: I + } = ot().types, k = {}, T = /^[0-7]+$/, C = y(((e, t, r = h, i = l) => { + if ("number" != typeof e) throw new w(t, "number", e); + if (!s(e)) throw new v(t, "an integer", e); + if (e < r || e > i) throw new v(t, `>= ${r} && <= ${i}`, e) + })), R = y(((e, t, r = -2147483648, i = 2147483647) => { + if ("number" != typeof e) throw new w(t, "number", e); + if (!s(e)) throw new v(t, "an integer", e); + if (e < r || e > i) throw new v(t, `>= ${r} && <= ${i}`, e) + })), O = y(((e, t, r = !1) => { + if ("number" != typeof e) throw new w(t, "number", e); + if (!s(e)) throw new v(t, "an integer", e); + let i = r ? 1 : 0, + n = 4294967295; + if (e < i || e > n) throw new v(t, `>= ${i} && <= ${n}`, e) + })); + + function P(e, t) { + if ("string" != typeof e) throw new w(t, "string", e) + } + var B = y(((e, t, r) => { + if (!i(r, e)) { + let i = "must be one of: " + n(o(r, (e => "string" == typeof e ? `'${e}'` : d(e))), ", "); + throw new _(t, e, i) + } + })); + + function x(e, t) { + if ("boolean" != typeof e) throw new w(t, "boolean", e) + } + + function U(e, t, r) { + return null != e && c(e, t) ? e[t] : r + } + var M = y(((e, t, i = null) => { + let n = U(i, "allowArray", !1), + o = U(i, "allowFunction", !1); + if (!U(i, "nullable", !1) && null === e || !n && r(e) || "object" != typeof e && (!o || "function" != typeof e)) throw new w(t, "Object", e) + })), + L = y(((e, t) => { + if (null != e && "object" != typeof e && "function" != typeof e) throw new w(t, "a dictionary", e) + })), + N = y(((e, t, i = 0) => { + if (!r(e)) throw new w(t, "Array", e); + if (e.length < i) throw new _(t, e, `must be longer than ${i}`) + })), + j = y(((e, t = "buffer") => { + if (!I(e)) throw new w(t, ["Buffer", "TypedArray", "DataView"], e) + })), + D = y(((e, t) => { + if (void 0 !== e && (null === e || "object" != typeof e || !("aborted" in e))) throw new w(t, "AbortSignal", e) + })), + F = y(((e, t) => { + if ("function" != typeof e) throw new w(t, "Function", e) + })), + W = y(((e, t) => { + if ("function" != typeof e || A(e)) throw new w(t, "Function", e) + })), + $ = y(((e, t) => { + if (void 0 !== e) throw new w(t, "undefined", e) + })), + q = /^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/; + + function V(e, t) { + if (typeof e > "u" || !p(q, e)) throw new _(t, e, 'must be an array or string of format "; rel=preload; as=style"') + } + t.exports = { + isInt32: function(e) { + return e === (0 | e) + }, + isUint32: function(e) { + return e === e >>> 0 + }, + parseFileMode: function(e, t, r) { + if (typeof e > "u" && (e = r), "string" == typeof e) { + if (null === p(T, e)) throw new _(t, e, "must be a 32-bit unsigned integer or an octal string"); + e = u(e, 8) + } + return O(e, t), e + }, + validateArray: N, + validateStringArray: function(e, t) { + N(e, t); + for (let r = 0; r < e.length; r++) P(e[r], `${t}[${r}]`) + }, + validateBooleanArray: function(e, t) { + N(e, t); + for (let r = 0; r < e.length; r++) x(e[r], `${t}[${r}]`) + }, + validateBoolean: x, + validateBuffer: j, + validateDictionary: L, + validateEncoding: function(e, t) { + let r = S(t), + i = e.length; + if ("hex" === r && i % 2 != 0) throw new _("encoding", t, `is invalid for data of length ${i}`) + }, + validateFunction: F, + validateInt32: R, + validateInteger: C, + validateNumber: function(e, t, r, i) { + if ("number" != typeof e) throw new w(t, "number", e); + if (null != r && e < r || null != i && e > i || (null != r || null != i) && a(e)) throw new v(t, `${null!=r?`>= ${r}`:""}${null!=r&&null!=i?" && ":""}${null!=i?`<= ${i}`:""}`, e) + }, + validateObject: M, + validateOneOf: B, + validatePlainFunction: W, + validatePort: function(e, t = "Port", r = !0) { + if ("number" != typeof e && "string" != typeof e || "string" == typeof e && 0 === b(e).length || +e != +e >>> 0 || e > 65535 || 0 === e && !r) throw new m(t, e, r); + return 0 | e + }, + validateSignalName: function(e, t = "signal") { + if (P(e, t), void 0 === k[e]) throw void 0 !== k[g(e)] ? new E(e + " (signals must use all capital letters)") : new E(e) + }, + validateString: P, + validateUint32: O, + validateUndefined: $, + validateUnion: function(e, t, r) { + if (!i(r, e)) throw new w(t, `('${n(r,"|")}')`, e) + }, + validateAbortSignal: D, + validateLinkHeaderValue: function(e) { + if ("string" == typeof e) return V(e, "hints"), e; + if (r(e)) { + let t = e.length, + r = ""; + if (0 === t) return r; + for (let i = 0; i < t; i++) { + let n = e[i]; + V(n, "hints"), r += n, i !== t - 1 && (r += ", ") + } + return r + } + throw new _("hints", e, 'must be an array or string of format "; rel=preload; as=style"') + } + } + })), + ht = h(((e, t) => { + f(), rt(), qe(); + var r, i, n = t.exports = {}; + + function o() { + throw new Error("setTimeout has not been defined") + } + + function s() { + throw new Error("clearTimeout has not been defined") + } + + function a(e) { + if (r === setTimeout) return setTimeout(e, 0); + if ((r === o || !r) && setTimeout) return r = setTimeout, setTimeout(e, 0); + try { + return r(e, 0) + } catch { + try { + return r.call(null, e, 0) + } catch { + return r.call(this, e, 0) + } + } + }! function() { + try { + r = "function" == typeof setTimeout ? setTimeout : o + } catch { + r = o + } + try { + i = "function" == typeof clearTimeout ? clearTimeout : s + } catch { + i = s + } + }(); + var l, h = [], + u = !1, + c = -1; + + function p() { + !u || !l || (u = !1, l.length ? h = l.concat(h) : c = -1, h.length && d()) + } + + function d() { + if (!u) { + var e = a(p); + u = !0; + for (var t = h.length; t;) { + for (l = h, h = []; ++c < t;) l && l[c].run(); + c = -1, t = h.length + } + l = null, u = !1, + function(e) { + if (i === clearTimeout) return clearTimeout(e); + if ((i === s || !i) && clearTimeout) return i = clearTimeout, clearTimeout(e); + try { + i(e) + } catch { + try { + return i.call(null, e) + } catch { + return i.call(this, e) + } + } + }(e) + } + } + + function g(e, t) { + this.fun = e, this.array = t + } + + function b() {} + n.nextTick = function(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var r = 1; r < arguments.length; r++) t[r - 1] = arguments[r]; + h.push(new g(e, t)), 1 === h.length && !u && a(d) + }, g.prototype.run = function() { + this.fun.apply(null, this.array) + }, n.title = "browser", n.browser = !0, n.env = {}, n.argv = [], n.version = "", n.versions = {}, n.on = b, n.addListener = b, n.once = b, n.off = b, n.removeListener = b, n.removeAllListeners = b, n.emit = b, n.prependListener = b, n.prependOnceListener = b, n.listeners = function(e) { + return [] + }, n.binding = function(e) { + throw new Error("process.binding is not supported") + }, n.cwd = function() { + return "/" + }, n.chdir = function(e) { + throw new Error("process.chdir is not supported") + }, n.umask = function() { + return 0 + } + })), + ut = h(((e, t) => { + f(), rt(), qe(); + var { + Symbol: r, + SymbolAsyncIterator: i, + SymbolIterator: n, + SymbolFor: o + } = nt(), s = r("kDestroyed"), a = r("kIsErrored"), l = r("kIsReadable"), h = r("kIsDisturbed"), u = o("nodejs.webstream.isClosedPromise"), c = o("nodejs.webstream.controllerErrorFunction"); + + function p(e, t = !1) { + var r; + return !(!e || "function" != typeof e.pipe || "function" != typeof e.on || t && ("function" != typeof e.pause || "function" != typeof e.resume) || e._writableState && !1 === (null === (r = e._readableState) || void 0 === r ? void 0 : r.readable) || e._writableState && !e._readableState) + } + + function d(e) { + var t; + return !(!e || "function" != typeof e.write || "function" != typeof e.on || e._readableState && !1 === (null === (t = e._writableState) || void 0 === t ? void 0 : t.writable)) + } + + function g(e) { + return e && (e._readableState || e._writableState || "function" == typeof e.write && "function" == typeof e.on || "function" == typeof e.pipe && "function" == typeof e.on) + } + + function b(e) { + return !(!e || g(e) || "function" != typeof e.pipeThrough || "function" != typeof e.getReader || "function" != typeof e.cancel) + } + + function y(e) { + return !(!e || g(e) || "function" != typeof e.getWriter || "function" != typeof e.abort) + } + + function m(e) { + return !(!e || g(e) || "object" != typeof e.readable || "object" != typeof e.writable) + } + + function w(e) { + if (!g(e)) return null; + let t = e._writableState, + r = e._readableState, + i = t || r; + return !!(e.destroyed || e[s] || null != i && i.destroyed) + } + + function _(e) { + if (!d(e)) return null; + if (!0 === e.writableEnded) return !0; + let t = e._writableState; + return (null == t || !t.errored) && ("boolean" != typeof t?.ended ? null : t.ended) + } + + function v(e, t) { + if (!p(e)) return null; + let r = e._readableState; + return (null == r || !r.errored) && ("boolean" != typeof r?.endEmitted ? null : !!(r.endEmitted || !1 === t && !0 === r.ended && 0 === r.length)) + } + + function E(e) { + return e && null != e[l] ? e[l] : "boolean" != typeof e?.readable ? null : !w(e) && p(e) && e.readable && !v(e) + } + + function S(e) { + return "boolean" != typeof e?.writable ? null : !w(e) && d(e) && e.writable && !_(e) + } + + function A(e) { + return "boolean" == typeof e._closed && "boolean" == typeof e._defaultKeepAlive && "boolean" == typeof e._removedConnection && "boolean" == typeof e._removedContLen + } + + function I(e) { + return "boolean" == typeof e._sent100 && A(e) + } + t.exports = { + kDestroyed: s, + isDisturbed: function(e) { + var t; + return !(!e || !(null !== (t = e[h]) && void 0 !== t ? t : e.readableDidRead || e.readableAborted)) + }, + kIsDisturbed: h, + isErrored: function(e) { + var t, r, i, n, o, s, l, h, u, c; + return !(!e || !(null !== (t = null !== (r = null !== (i = null !== (n = null !== (o = null !== (s = e[a]) && void 0 !== s ? s : e.readableErrored) && void 0 !== o ? o : e.writableErrored) && void 0 !== n ? n : null === (l = e._readableState) || void 0 === l ? void 0 : l.errorEmitted) && void 0 !== i ? i : null === (h = e._writableState) || void 0 === h ? void 0 : h.errorEmitted) && void 0 !== r ? r : null === (u = e._readableState) || void 0 === u ? void 0 : u.errored) && void 0 !== t ? t : null !== (c = e._writableState) && void 0 !== c && c.errored)) + }, + kIsErrored: a, + isReadable: E, + kIsReadable: l, + kIsClosedPromise: u, + kControllerErrorFunction: c, + isClosed: function(e) { + if (!g(e)) return null; + if ("boolean" == typeof e.closed) return e.closed; + let t = e._writableState, + r = e._readableState; + return "boolean" == typeof t?.closed || "boolean" == typeof r?.closed ? t?.closed || r?.closed : "boolean" == typeof e._closed && A(e) ? e._closed : null + }, + isDestroyed: w, + isDuplexNodeStream: function(e) { + return !(!e || "function" != typeof e.pipe || !e._readableState || "function" != typeof e.on || "function" != typeof e.write) + }, + isFinished: function(e, t) { + return g(e) ? !!w(e) || !(!1 !== t?.readable && E(e) || !1 !== t?.writable && S(e)) : null + }, + isIterable: function(e, t) { + return null != e && (!0 === t ? "function" == typeof e[i] : !1 === t ? "function" == typeof e[n] : "function" == typeof e[i] || "function" == typeof e[n]) + }, + isReadableNodeStream: p, + isReadableStream: b, + isReadableEnded: function(e) { + if (!p(e)) return null; + if (!0 === e.readableEnded) return !0; + let t = e._readableState; + return !(!t || t.errored) && ("boolean" != typeof t?.ended ? null : t.ended) + }, + isReadableFinished: v, + isReadableErrored: function(e) { + var t, r; + return g(e) ? e.readableErrored ? e.readableErrored : null !== (t = null === (r = e._readableState) || void 0 === r ? void 0 : r.errored) && void 0 !== t ? t : null : null + }, + isNodeStream: g, + isWebStream: function(e) { + return b(e) || y(e) || m(e) + }, + isWritable: S, + isWritableNodeStream: d, + isWritableStream: y, + isWritableEnded: _, + isWritableFinished: function(e, t) { + if (!d(e)) return null; + if (!0 === e.writableFinished) return !0; + let r = e._writableState; + return (null == r || !r.errored) && ("boolean" != typeof r?.finished ? null : !!(r.finished || !1 === t && !0 === r.ended && 0 === r.length)) + }, + isWritableErrored: function(e) { + var t, r; + return g(e) ? e.writableErrored ? e.writableErrored : null !== (t = null === (r = e._writableState) || void 0 === r ? void 0 : r.errored) && void 0 !== t ? t : null : null + }, + isServerRequest: function(e) { + var t; + return "boolean" == typeof e._consuming && "boolean" == typeof e._dumped && void 0 === (null === (t = e.req) || void 0 === t ? void 0 : t.upgradeOrConnect) + }, + isServerResponse: I, + willEmitClose: function(e) { + if (!g(e)) return null; + let t = e._writableState, + r = e._readableState, + i = t || r; + return !i && I(e) || !!(i && i.autoDestroy && i.emitClose && !1 === i.closed) + }, + isTransformStream: m + } + })), + ct = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + { + AbortError: i, + codes: n + } = at(), + { + ERR_INVALID_ARG_TYPE: o, + ERR_STREAM_PREMATURE_CLOSE: s + } = n, + { + kEmptyObject: a, + once: l + } = ot(), + { + validateAbortSignal: h, + validateFunction: u, + validateObject: c, + validateBoolean: p + } = lt(), + { + Promise: d, + PromisePrototypeThen: g + } = nt(), + { + isClosed: b, + isReadable: y, + isReadableNodeStream: m, + isReadableStream: w, + isReadableFinished: _, + isReadableErrored: v, + isWritable: E, + isWritableNodeStream: S, + isWritableStream: A, + isWritableFinished: I, + isWritableErrored: k, + isNodeStream: T, + willEmitClose: C, + kIsClosedPromise: R + } = ut(); + + function O(e) { + return e.setHeader && "function" == typeof e.abort + } + var P = () => {}; + + function B(e, t, n) { + var f, p; + if (2 === arguments.length ? (n = t, t = a) : null == t ? t = a : c(t, "options"), u(n, "callback"), h(t.signal, "options.signal"), n = l(n), w(e) || A(e)) return x(e, t, n); + if (!T(e)) throw new o("stream", ["ReadableStream", "WritableStream", "Stream"], e); + let d = null !== (f = t.readable) && void 0 !== f ? f : m(e), + g = null !== (p = t.writable) && void 0 !== p ? p : S(e), + R = e._writableState, + B = e._readableState, + U = () => { + e.writable || N() + }, + M = C(e) && m(e) === d && S(e) === g, + L = I(e, !1), + N = () => { + L = !0, e.destroyed && (M = !1), (!M || e.readable && !d) && (!d || j) && n.call(e) + }, + j = _(e, !1), + D = () => { + j = !0, e.destroyed && (M = !1), (!M || e.writable && !g) && (!g || L) && n.call(e) + }, + F = t => { + n.call(e, t) + }, + W = b(e), + $ = () => { + W = !0; + let t = k(e) || v(e); + return t && "boolean" != typeof t ? n.call(e, t) : d && !j && m(e, !0) && !_(e, !1) ? n.call(e, new s) : !g || L || I(e, !1) ? void n.call(e) : n.call(e, new s) + }, + q = () => { + W = !0; + let t = k(e) || v(e); + if (t && "boolean" != typeof t) return n.call(e, t); + n.call(e) + }, + V = () => { + e.req.on("finish", N) + }; + O(e) ? (e.on("complete", N), M || e.on("abort", $), e.req ? V() : e.on("request", V)) : g && !R && (e.on("end", U), e.on("close", U)), !M && "boolean" == typeof e.aborted && e.on("aborted", $), e.on("end", D), e.on("finish", N), !1 !== t.error && e.on("error", F), e.on("close", $), W ? r.nextTick($) : null != R && R.errorEmitted || null != B && B.errorEmitted ? M || r.nextTick(q) : (!d && (!M || y(e)) && (L || !1 === E(e)) || !g && (!M || E(e)) && (j || !1 === y(e)) || B && e.req && e.aborted) && r.nextTick(q); + let H = () => { + n = P, e.removeListener("aborted", $), e.removeListener("complete", N), e.removeListener("abort", $), e.removeListener("request", V), e.req && e.req.removeListener("finish", N), e.removeListener("end", U), e.removeListener("close", U), e.removeListener("finish", N), e.removeListener("end", D), e.removeListener("error", F), e.removeListener("close", $) + }; + if (t.signal && !W) { + let o = () => { + let r = n; + H(), r.call(e, new i(void 0, { + cause: t.signal.reason + })) + }; + if (t.signal.aborted) r.nextTick(o); + else { + let r = n; + n = l(((...i) => { + t.signal.removeEventListener("abort", o), r.apply(e, i) + })), t.signal.addEventListener("abort", o) + } + } + return H + } + + function x(e, t, n) { + let o = !1, + s = P; + if (t.signal) + if (s = () => { + o = !0, n.call(e, new i(void 0, { + cause: t.signal.reason + })) + }, t.signal.aborted) r.nextTick(s); + else { + let r = n; + n = l(((...i) => { + t.signal.removeEventListener("abort", s), r.apply(e, i) + })), t.signal.addEventListener("abort", s) + } let a = (...t) => { + o || r.nextTick((() => n.apply(e, t))) + }; + return g(e[R].promise, a, a), P + } + t.exports = B, t.exports.finished = function(e, t) { + var r; + let i = !1; + return null === t && (t = a), null !== (r = t) && void 0 !== r && r.cleanup && (p(t.cleanup, "cleanup"), i = t.cleanup), new d(((r, n) => { + let o = B(e, t, (e => { + i && o(), e ? n(e) : r() + })) + })) + } + })), + ft = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + { + aggregateTwoErrors: i, + codes: { + ERR_MULTIPLE_CALLBACK: n + }, + AbortError: o + } = at(), + { + Symbol: s + } = nt(), + { + kDestroyed: a, + isDestroyed: l, + isFinished: h, + isServerRequest: u + } = ut(), + c = s("kDestroy"), + p = s("kConstruct"); + + function d(e, t, r) { + e && (e.stack, t && !t.errored && (t.errored = e), r && !r.errored && (r.errored = e)) + } + + function g(e, t, i) { + let n = !1; + + function o(t) { + if (n) return; + n = !0; + let o = e._readableState, + s = e._writableState; + d(t, s, o), s && (s.closed = !0), o && (o.closed = !0), "function" == typeof i && i(t), t ? r.nextTick(b, e, t) : r.nextTick(y, e) + } + try { + e._destroy(t || null, o) + } catch (e) { + o(e) + } + } + + function b(e, t) { + m(e, t), y(e) + } + + function y(e) { + let t = e._readableState, + r = e._writableState; + r && (r.closeEmitted = !0), t && (t.closeEmitted = !0), (null != r && r.emitClose || null != t && t.emitClose) && e.emit("close") + } + + function m(e, t) { + let r = e._readableState, + i = e._writableState; + null != i && i.errorEmitted || null != r && r.errorEmitted || (i && (i.errorEmitted = !0), r && (r.errorEmitted = !0), e.emit("error", t)) + } + + function w(e, t, i) { + let n = e._readableState, + o = e._writableState; + if (null != o && o.destroyed || null != n && n.destroyed) return this; + null != n && n.autoDestroy || null != o && o.autoDestroy ? e.destroy(t) : t && (t.stack, o && !o.errored && (o.errored = t), n && !n.errored && (n.errored = t), i ? r.nextTick(m, e, t) : m(e, t)) + } + + function _(e) { + let t = !1; + + function i(i) { + if (t) return void w(e, i ?? new n); + t = !0; + let o = e._readableState, + s = e._writableState, + a = s || o; + o && (o.constructed = !0), s && (s.constructed = !0), a.destroyed ? e.emit(c, i) : i ? w(e, i, !0) : r.nextTick(v, e) + } + try { + e._construct((e => { + r.nextTick(i, e) + })) + } catch (e) { + r.nextTick(i, e) + } + } + + function v(e) { + e.emit(p) + } + + function E(e) { + return e?.setHeader && "function" == typeof e.abort + } + + function S(e) { + e.emit("close") + } + + function A(e, t) { + e.emit("error", t), r.nextTick(S, e) + } + t.exports = { + construct: function(e, t) { + if ("function" != typeof e._construct) return; + let i = e._readableState, + n = e._writableState; + i && (i.constructed = !1), n && (n.constructed = !1), e.once(p, t), !(e.listenerCount(p) > 1) && r.nextTick(_, e) + }, + destroyer: function(e, t) { + !e || l(e) || (!t && !h(e) && (t = new o), u(e) ? (e.socket = null, e.destroy(t)) : E(e) ? e.abort() : E(e.req) ? e.req.abort() : "function" == typeof e.destroy ? e.destroy(t) : "function" == typeof e.close ? e.close() : t ? r.nextTick(A, e, t) : r.nextTick(S, e), e.destroyed || (e[a] = !0)) + }, + destroy: function(e, t) { + let r = this._readableState, + n = this._writableState, + o = n || r; + return null != n && n.destroyed || null != r && r.destroyed ? ("function" == typeof t && t(), this) : (d(e, n, r), n && (n.destroyed = !0), r && (r.destroyed = !0), o.constructed ? g(this, e, t) : this.once(c, (function(r) { + g(this, i(r, e), t) + })), this) + }, + undestroy: function() { + let e = this._readableState, + t = this._writableState; + e && (e.constructed = !0, e.closed = !1, e.closeEmitted = !1, e.destroyed = !1, e.errored = null, e.errorEmitted = !1, e.reading = !1, e.ended = !1 === e.readable, e.endEmitted = !1 === e.readable), t && (t.constructed = !0, t.destroyed = !1, t.closed = !1, t.closeEmitted = !1, t.errored = null, t.errorEmitted = !1, t.finalCalled = !1, t.prefinished = !1, t.ended = !1 === t.writable, t.ending = !1 === t.writable, t.finished = !1 === t.writable) + }, + errorOrDestroy: w + } + })); + + function pt() { + pt.init.call(this) + } + + function dt(e) { + if ("function" != typeof e) throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof e) + } + + function gt(e) { + return void 0 === e._maxListeners ? pt.defaultMaxListeners : e._maxListeners + } + + function bt(e, t, r, n) { + var o, s, a, l; + if (dt(r), void 0 === (s = e._events) ? (s = e._events = Object.create(null), e._eventsCount = 0) : (void 0 !== s.newListener && (e.emit("newListener", t, r.listener ? r.listener : r), s = e._events), a = s[t]), void 0 === a) a = s[t] = r, ++e._eventsCount; + else if ("function" == typeof a ? a = s[t] = n ? [r, a] : [a, r] : n ? a.unshift(r) : a.push(r), (o = gt(e)) > 0 && a.length > o && !a.warned) { + a.warned = !0; + var h = new Error("Possible EventEmitter memory leak detected. " + a.length + " " + String(t) + " listeners added. Use emitter.setMaxListeners() to increase limit"); + h.name = "MaxListenersExceededWarning", h.emitter = e, h.type = t, h.count = a.length, l = h, i && i.warn && i.warn(l) + } + return e + } + + function yt() { + if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, 0 === arguments.length ? this.listener.call(this.target) : this.listener.apply(this.target, arguments) + } + + function mt(e, t, r) { + var i = { + fired: !1, + wrapFn: void 0, + target: e, + type: t, + listener: r + }, + n = yt.bind(i); + return n.listener = r, i.wrapFn = n, n + } + + function wt(e, t, r) { + var i = e._events; + if (void 0 === i) return []; + var n = i[t]; + return void 0 === n ? [] : "function" == typeof n ? r ? [n.listener || n] : [n] : r ? function(e) { + for (var t = new Array(e.length), r = 0; r < t.length; ++r) t[r] = e[r].listener || e[r]; + return t + }(n) : vt(n, n.length) + } + + function _t(e) { + var t = this._events; + if (void 0 !== t) { + var r = t[e]; + if ("function" == typeof r) return 1; + if (void 0 !== r) return r.length + } + return 0 + } + + function vt(e, t) { + for (var r = new Array(t), i = 0; i < t; ++i) r[i] = e[i]; + return r + } + var Et, St, At, It, kt, Tt, Ct, Rt = l((() => { + f(), rt(), qe(), At = "object" == typeof Reflect ? Reflect : null, It = At && "function" == typeof At.apply ? At.apply : function(e, t, r) { + return Function.prototype.apply.call(e, t, r) + }, St = At && "function" == typeof At.ownKeys ? At.ownKeys : Object.getOwnPropertySymbols ? function(e) { + return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)) + } : function(e) { + return Object.getOwnPropertyNames(e) + }, kt = Number.isNaN || function(e) { + return e != e + }, Et = pt, pt.EventEmitter = pt, pt.prototype._events = void 0, pt.prototype._eventsCount = 0, pt.prototype._maxListeners = void 0, Tt = 10, Object.defineProperty(pt, "defaultMaxListeners", { + enumerable: !0, + get: function() { + return Tt + }, + set: function(e) { + if ("number" != typeof e || e < 0 || kt(e)) throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + e + "."); + Tt = e + } + }), pt.init = function() { + void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0 + }, pt.prototype.setMaxListeners = function(e) { + if ("number" != typeof e || e < 0 || kt(e)) throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + e + "."); + return this._maxListeners = e, this + }, pt.prototype.getMaxListeners = function() { + return gt(this) + }, pt.prototype.emit = function(e) { + for (var t = [], r = 1; r < arguments.length; r++) t.push(arguments[r]); + var i = "error" === e, + n = this._events; + if (void 0 !== n) i = i && void 0 === n.error; + else if (!i) return !1; + if (i) { + var o; + if (t.length > 0 && (o = t[0]), o instanceof Error) throw o; + var s = new Error("Unhandled error." + (o ? " (" + o.message + ")" : "")); + throw s.context = o, s + } + var a = n[e]; + if (void 0 === a) return !1; + if ("function" == typeof a) It(a, this, t); + else { + var l = a.length, + h = vt(a, l); + for (r = 0; r < l; ++r) It(h[r], this, t) + } + return !0 + }, pt.prototype.addListener = function(e, t) { + return bt(this, e, t, !1) + }, pt.prototype.on = pt.prototype.addListener, pt.prototype.prependListener = function(e, t) { + return bt(this, e, t, !0) + }, pt.prototype.once = function(e, t) { + return dt(t), this.on(e, mt(this, e, t)), this + }, pt.prototype.prependOnceListener = function(e, t) { + return dt(t), this.prependListener(e, mt(this, e, t)), this + }, pt.prototype.removeListener = function(e, t) { + var r, i, n, o, s; + if (dt(t), void 0 === (i = this._events)) return this; + if (void 0 === (r = i[e])) return this; + if (r === t || r.listener === t) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete i[e], i.removeListener && this.emit("removeListener", e, r.listener || t)); + else if ("function" != typeof r) { + for (n = -1, o = r.length - 1; o >= 0; o--) + if (r[o] === t || r[o].listener === t) { + s = r[o].listener, n = o; + break + } if (n < 0) return this; + 0 === n ? r.shift() : function(e, t) { + for (; t + 1 < e.length; t++) e[t] = e[t + 1]; + e.pop() + }(r, n), 1 === r.length && (i[e] = r[0]), void 0 !== i.removeListener && this.emit("removeListener", e, s || t) + } + return this + }, pt.prototype.off = pt.prototype.removeListener, pt.prototype.removeAllListeners = function(e) { + var t, r, i; + if (void 0 === (r = this._events)) return this; + if (void 0 === r.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), this._eventsCount = 0) : void 0 !== r[e] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete r[e]), this; + if (0 === arguments.length) { + var n, o = Object.keys(r); + for (i = 0; i < o.length; ++i) "removeListener" !== (n = o[i]) && this.removeAllListeners(n); + return this.removeAllListeners("removeListener"), this._events = Object.create(null), this._eventsCount = 0, this + } + if ("function" == typeof(t = r[e])) this.removeListener(e, t); + else if (void 0 !== t) + for (i = t.length - 1; i >= 0; i--) this.removeListener(e, t[i]); + return this + }, pt.prototype.listeners = function(e) { + return wt(this, e, !0) + }, pt.prototype.rawListeners = function(e) { + return wt(this, e, !1) + }, pt.listenerCount = function(e, t) { + return "function" == typeof e.listenerCount ? e.listenerCount(t) : _t.call(e, t) + }, pt.prototype.listenerCount = _t, pt.prototype.eventNames = function() { + return this._eventsCount > 0 ? St(this._events) : [] + }, (Ct = Et).EventEmitter, Ct.defaultMaxListeners, Ct.init, Ct.listenerCount, Ct.EventEmitter, Ct.defaultMaxListeners, Ct.init, Ct.listenerCount + })), + Ot = {}; + u(Ot, { + EventEmitter: () => Pt, + default: () => Ct, + defaultMaxListeners: () => Bt, + init: () => xt, + listenerCount: () => Ut, + on: () => Mt, + once: () => Lt + }); + var Pt, Bt, xt, Ut, Mt, Lt, Nt = l((() => { + f(), rt(), qe(), Rt(), Rt(), Ct.once = function(e, t) { + return new Promise(((r, i) => { + function n(...t) { + void 0 !== o && e.removeListener("error", o), r(t) + } + let o; + "error" !== t && (o = t => { + e.removeListener(name, n), i(t) + }, e.once("error", o)), e.once(t, n) + })) + }, Ct.on = function(e, t) { + let r = [], + i = [], + n = null, + o = !1, + s = { + async next() { + let e = r.shift(); + if (e) return createIterResult(e, !1); + if (n) { + let e = Promise.reject(n); + return n = null, e + } + return o ? createIterResult(void 0, !0) : new Promise(((e, t) => i.push({ + resolve: e, + reject: t + }))) + }, + async return () { + e.removeListener(t, a), e.removeListener("error", l), o = !0; + for (let e of i) e.resolve(createIterResult(void 0, !0)); + return createIterResult(void 0, !0) + }, + throw (r) { + n = r, e.removeListener(t, a), e.removeListener("error", l) + }, + [Symbol.asyncIterator]() { + return this + } + }; + return e.on(t, a), e.on("error", l), s; + + function a(...e) { + let t = i.shift(); + t ? t.resolve(createIterResult(e, !1)) : r.push(e) + } + + function l(e) { + o = !0; + let t = i.shift(); + t ? t.reject(e) : n = e, s.return() + } + }, ({ + EventEmitter: Pt, + defaultMaxListeners: Bt, + init: xt, + listenerCount: Ut, + on: Mt, + once: Lt + } = Ct) + })), + jt = h(((e, t) => { + f(), rt(), qe(); + var { + ArrayIsArray: r, + ObjectSetPrototypeOf: i + } = nt(), { + EventEmitter: n + } = (Nt(), c(Ot)); + + function o(e) { + n.call(this, e) + } + + function s(e, t, i) { + if ("function" == typeof e.prependListener) return e.prependListener(t, i); + e._events && e._events[t] ? r(e._events[t]) ? e._events[t].unshift(i) : e._events[t] = [i, e._events[t]] : e.on(t, i) + } + i(o.prototype, n.prototype), i(o, n), o.prototype.pipe = function(e, t) { + let r = this; + + function i(t) { + e.writable && !1 === e.write(t) && r.pause && r.pause() + } + + function o() { + r.readable && r.resume && r.resume() + } + r.on("data", i), e.on("drain", o), !e._isStdio && (!t || !1 !== t.end) && (r.on("end", l), r.on("close", h)); + let a = !1; + + function l() { + a || (a = !0, e.end()) + } + + function h() { + a || (a = !0, "function" == typeof e.destroy && e.destroy()) + } + + function u(e) { + c(), 0 === n.listenerCount(this, "error") && this.emit("error", e) + } + + function c() { + r.removeListener("data", i), e.removeListener("drain", o), r.removeListener("end", l), r.removeListener("close", h), r.removeListener("error", u), e.removeListener("error", u), r.removeListener("end", c), r.removeListener("close", c), e.removeListener("close", c) + } + return s(r, "error", u), s(e, "error", u), r.on("end", c), r.on("close", c), e.on("close", c), e.emit("pipe", r), e + }, t.exports = { + Stream: o, + prependListener: s + } + })), + Dt = h(((e, t) => { + f(), rt(), qe(); + var { + AbortError: r, + codes: i + } = at(), { + isNodeStream: n, + isWebStream: o, + kControllerErrorFunction: s + } = ut(), a = ct(), { + ERR_INVALID_ARG_TYPE: l + } = i; + t.exports.addAbortSignal = function(e, r) { + if (((e, t) => { + if ("object" != typeof e || !("aborted" in e)) throw new l("signal", "AbortSignal", e) + })(e), !n(r) && !o(r)) throw new l("stream", ["ReadableStream", "WritableStream", "Stream"], r); + return t.exports.addAbortSignalNoValidate(e, r) + }, t.exports.addAbortSignalNoValidate = function(e, t) { + if ("object" != typeof e || !("aborted" in e)) return t; + let i = n(t) ? () => { + t.destroy(new r(void 0, { + cause: e.reason + })) + } : () => { + t[s](new r(void 0, { + cause: e.reason + })) + }; + return e.aborted ? i() : (e.addEventListener("abort", i), a(t, (() => e.removeEventListener("abort", i)))), t + } + })), + Ft = h(((e, t) => { + f(), rt(), qe(); + var { + StringPrototypeSlice: r, + SymbolIterator: i, + TypedArrayPrototypeSet: n, + Uint8Array: o + } = nt(), { + Buffer: s + } = (tt(), c(Ve)), { + inspect: a + } = ot(); + t.exports = class { + constructor() { + this.head = null, this.tail = null, this.length = 0 + } + push(e) { + let t = { + data: e, + next: null + }; + this.length > 0 ? this.tail.next = t : this.head = t, this.tail = t, ++this.length + } + unshift(e) { + let t = { + data: e, + next: this.head + }; + 0 === this.length && (this.tail = t), this.head = t, ++this.length + } + shift() { + if (0 === this.length) return; + let e = this.head.data; + return 1 === this.length ? this.head = this.tail = null : this.head = this.head.next, --this.length, e + } + clear() { + this.head = this.tail = null, this.length = 0 + } + join(e) { + if (0 === this.length) return ""; + let t = this.head, + r = "" + t.data; + for (; null !== (t = t.next);) r += e + t.data; + return r + } + concat(e) { + if (0 === this.length) return s.alloc(0); + let t = s.allocUnsafe(e >>> 0), + r = this.head, + i = 0; + for (; r;) n(t, r.data, i), i += r.data.length, r = r.next; + return t + } + consume(e, t) { + let r = this.head.data; + if (e < r.length) { + let t = r.slice(0, e); + return this.head.data = r.slice(e), t + } + return e === r.length ? this.shift() : t ? this._getString(e) : this._getBuffer(e) + } + first() { + return this.head.data + }*[i]() { + for (let e = this.head; e; e = e.next) yield e.data + } + _getString(e) { + let t = "", + i = this.head, + n = 0; + do { + let o = i.data; + if (!(e > o.length)) { + e === o.length ? (t += o, ++n, i.next ? this.head = i.next : this.head = this.tail = null) : (t += r(o, 0, e), this.head = i, i.data = r(o, e)); + break + } + t += o, e -= o.length, ++n + } while (null !== (i = i.next)); + return this.length -= n, t + } + _getBuffer(e) { + let t = s.allocUnsafe(e), + r = e, + i = this.head, + a = 0; + do { + let s = i.data; + if (!(e > s.length)) { + e === s.length ? (n(t, s, r - e), ++a, i.next ? this.head = i.next : this.head = this.tail = null) : (n(t, new o(s.buffer, s.byteOffset, e), r - e), this.head = i, i.data = s.slice(e)); + break + } + n(t, s, r - e), e -= s.length, ++a + } while (null !== (i = i.next)); + return this.length -= a, t + } [Symbol.for("nodejs.util.inspect.custom")](e, t) { + return a(this, { + ...t, + depth: 0, + customInspect: !1 + }) + } + } + })), + Wt = h(((e, t) => { + f(), rt(), qe(); + var { + MathFloor: r, + NumberIsInteger: i + } = nt(), { + ERR_INVALID_ARG_VALUE: n + } = at().codes; + + function o(e) { + return e ? 16 : 16384 + } + t.exports = { + getHighWaterMark: function(e, t, s, a) { + let l = function(e, t, r) { + return null != e.highWaterMark ? e.highWaterMark : t ? e[r] : null + }(t, a, s); + if (null != l) { + if (!i(l) || l < 0) throw new n(a ? `options.${s}` : "options.highWaterMark", l); + return r(l) + } + return o(e.objectMode) + }, + getDefaultHighWaterMark: o + } + })); + + function $t(e) { + var t = e.length; + if (t % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); + var r = e.indexOf("="); + return -1 === r && (r = t), [r, r === t ? 0 : 4 - r % 4] + } + + function qt(e, t, r) { + for (var i, n, o = [], s = t; s < r; s += 3) i = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), o.push(Lr[(n = i) >> 18 & 63] + Lr[n >> 12 & 63] + Lr[n >> 6 & 63] + Lr[63 & n]); + return o.join("") + } + + function Vt(e) { + if (e > 2147483647) throw new RangeError('The value "' + e + '" is invalid for option "size"'); + var t = new Uint8Array(e); + return Object.setPrototypeOf(t, Ht.prototype), t + } + + function Ht(e, t, r) { + if ("number" == typeof e) { + if ("string" == typeof t) throw new TypeError('The "string" argument must be of type string. Received type number'); + return Gt(e) + } + return zt(e, t, r) + } + + function zt(e, t, r) { + if ("string" == typeof e) return function(e, t) { + if ("string" == typeof t && "" !== t || (t = "utf8"), !Ht.isEncoding(t)) throw new TypeError("Unknown encoding: " + t); + var r = 0 | Jt(e, t), + i = Vt(r), + n = i.write(e, t); + return n !== r && (i = i.slice(0, n)), i + }(e, t); + if (ArrayBuffer.isView(e)) return Qt(e); + if (null == e) throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e); + if (Er(e, ArrayBuffer) || e && Er(e.buffer, ArrayBuffer) || typeof SharedArrayBuffer < "u" && (Er(e, SharedArrayBuffer) || e && Er(e.buffer, SharedArrayBuffer))) return function(e, t, r) { + if (t < 0 || e.byteLength < t) throw new RangeError('"offset" is outside of buffer bounds'); + if (e.byteLength < t + (r || 0)) throw new RangeError('"length" is outside of buffer bounds'); + var i; + return i = void 0 === t && void 0 === r ? new Uint8Array(e) : void 0 === r ? new Uint8Array(e, t) : new Uint8Array(e, t, r), Object.setPrototypeOf(i, Ht.prototype), i + }(e, t, r); + if ("number" == typeof e) throw new TypeError('The "value" argument must not be of type number. Received type number'); + var i = e.valueOf && e.valueOf(); + if (null != i && i !== e) return Ht.from(i, t, r); + var n = function(e) { + if (Ht.isBuffer(e)) { + var t = 0 | Yt(e.length), + r = Vt(t); + return 0 === r.length || e.copy(r, 0, 0, t), r + } + return void 0 !== e.length ? "number" != typeof e.length || Sr(e.length) ? Vt(0) : Qt(e) : "Buffer" === e.type && Array.isArray(e.data) ? Qt(e.data) : void 0 + }(e); + if (n) return n; + if (typeof Symbol < "u" && null != Symbol.toPrimitive && "function" == typeof e[Symbol.toPrimitive]) return Ht.from(e[Symbol.toPrimitive]("string"), t, r); + throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e) + } + + function Kt(e) { + if ("number" != typeof e) throw new TypeError('"size" argument must be of type number'); + if (e < 0) throw new RangeError('The value "' + e + '" is invalid for option "size"') + } + + function Gt(e) { + return Kt(e), Vt(e < 0 ? 0 : 0 | Yt(e)) + } + + function Qt(e) { + for (var t = e.length < 0 ? 0 : 0 | Yt(e.length), r = Vt(t), i = 0; i < t; i += 1) r[i] = 255 & e[i]; + return r + } + + function Yt(e) { + if (e >= 2147483647) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + 2147483647..toString(16) + " bytes"); + return 0 | e + } + + function Jt(e, t) { + if (Ht.isBuffer(e)) return e.length; + if (ArrayBuffer.isView(e) || Er(e, ArrayBuffer)) return e.byteLength; + if ("string" != typeof e) throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof e); + var r = e.length, + i = arguments.length > 2 && !0 === arguments[2]; + if (!i && 0 === r) return 0; + for (var n = !1;;) switch (t) { + case "ascii": + case "latin1": + case "binary": + return r; + case "utf8": + case "utf-8": + return wr(e).length; + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return 2 * r; + case "hex": + return r >>> 1; + case "base64": + return _r(e).length; + default: + if (n) return i ? -1 : wr(e).length; + t = ("" + t).toLowerCase(), n = !0 + } + } + + function Xt(e, t, r) { + var i = !1; + if ((void 0 === t || t < 0) && (t = 0), t > this.length || ((void 0 === r || r > this.length) && (r = this.length), r <= 0) || (r >>>= 0) <= (t >>>= 0)) return ""; + for (e || (e = "utf8");;) switch (e) { + case "hex": + return fr(this, t, r); + case "utf8": + case "utf-8": + return hr(this, t, r); + case "ascii": + return ur(this, t, r); + case "latin1": + case "binary": + return cr(this, t, r); + case "base64": + return lr(this, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return pr(this, t, r); + default: + if (i) throw new TypeError("Unknown encoding: " + e); + e = (e + "").toLowerCase(), i = !0 + } + } + + function Zt(e, t, r) { + var i = e[t]; + e[t] = e[r], e[r] = i + } + + function er(e, t, r, i, n) { + if (0 === e.length) return -1; + if ("string" == typeof r ? (i = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), Sr(r = +r) && (r = n ? 0 : e.length - 1), r < 0 && (r = e.length + r), r >= e.length) { + if (n) return -1; + r = e.length - 1 + } else if (r < 0) { + if (!n) return -1; + r = 0 + } + if ("string" == typeof t && (t = Ht.from(t, i)), Ht.isBuffer(t)) return 0 === t.length ? -1 : tr(e, t, r, i, n); + if ("number" == typeof t) return t &= 255, "function" == typeof Uint8Array.prototype.indexOf ? n ? Uint8Array.prototype.indexOf.call(e, t, r) : Uint8Array.prototype.lastIndexOf.call(e, t, r) : tr(e, [t], r, i, n); + throw new TypeError("val must be string, number or Buffer") + } + + function tr(e, t, r, i, n) { + var o, s = 1, + a = e.length, + l = t.length; + if (void 0 !== i && ("ucs2" === (i = String(i).toLowerCase()) || "ucs-2" === i || "utf16le" === i || "utf-16le" === i)) { + if (e.length < 2 || t.length < 2) return -1; + s = 2, a /= 2, l /= 2, r /= 2 + } + + function h(e, t) { + return 1 === s ? e[t] : e.readUInt16BE(t * s) + } + if (n) { + var u = -1; + for (o = r; o < a; o++) + if (h(e, o) === h(t, -1 === u ? 0 : o - u)) { + if (-1 === u && (u = o), o - u + 1 === l) return u * s + } else - 1 !== u && (o -= o - u), u = -1 + } else + for (r + l > a && (r = a - l), o = r; o >= 0; o--) { + for (var c = !0, f = 0; f < l; f++) + if (h(e, o + f) !== h(t, f)) { + c = !1; + break + } if (c) return o + } + return -1 + } + + function rr(e, t, r, i) { + r = Number(r) || 0; + var n = e.length - r; + i ? (i = Number(i)) > n && (i = n) : i = n; + var o = t.length; + i > o / 2 && (i = o / 2); + for (var s = 0; s < i; ++s) { + var a = parseInt(t.substr(2 * s, 2), 16); + if (Sr(a)) return s; + e[r + s] = a + } + return s + } + + function ir(e, t, r, i) { + return vr(wr(t, e.length - r), e, r, i) + } + + function nr(e, t, r, i) { + return vr(function(e) { + for (var t = [], r = 0; r < e.length; ++r) t.push(255 & e.charCodeAt(r)); + return t + }(t), e, r, i) + } + + function or(e, t, r, i) { + return nr(e, t, r, i) + } + + function sr(e, t, r, i) { + return vr(_r(t), e, r, i) + } + + function ar(e, t, r, i) { + return vr(function(e, t) { + for (var r, i, n, o = [], s = 0; s < e.length && !((t -= 2) < 0); ++s) i = (r = e.charCodeAt(s)) >> 8, n = r % 256, o.push(n), o.push(i); + return o + }(t, e.length - r), e, r, i) + } + + function lr(e, t, r) { + return 0 === t && r === e.length ? qr.fromByteArray(e) : qr.fromByteArray(e.slice(t, r)) + } + + function hr(e, t, r) { + r = Math.min(e.length, r); + for (var i = [], n = t; n < r;) { + var o, s, a, l, h = e[n], + u = null, + c = h > 239 ? 4 : h > 223 ? 3 : h > 191 ? 2 : 1; + if (n + c <= r) switch (c) { + case 1: + h < 128 && (u = h); + break; + case 2: + 128 == (192 & (o = e[n + 1])) && (l = (31 & h) << 6 | 63 & o) > 127 && (u = l); + break; + case 3: + o = e[n + 1], s = e[n + 2], 128 == (192 & o) && 128 == (192 & s) && (l = (15 & h) << 12 | (63 & o) << 6 | 63 & s) > 2047 && (l < 55296 || l > 57343) && (u = l); + break; + case 4: + o = e[n + 1], s = e[n + 2], a = e[n + 3], 128 == (192 & o) && 128 == (192 & s) && 128 == (192 & a) && (l = (15 & h) << 18 | (63 & o) << 12 | (63 & s) << 6 | 63 & a) > 65535 && l < 1114112 && (u = l) + } + null === u ? (u = 65533, c = 1) : u > 65535 && (u -= 65536, i.push(u >>> 10 & 1023 | 55296), u = 56320 | 1023 & u), i.push(u), n += c + } + return function(e) { + var t = e.length; + if (t <= 4096) return String.fromCharCode.apply(String, e); + for (var r = "", i = 0; i < t;) r += String.fromCharCode.apply(String, e.slice(i, i += 4096)); + return r + }(i) + } + + function ur(e, t, r) { + var i = ""; + r = Math.min(e.length, r); + for (var n = t; n < r; ++n) i += String.fromCharCode(127 & e[n]); + return i + } + + function cr(e, t, r) { + var i = ""; + r = Math.min(e.length, r); + for (var n = t; n < r; ++n) i += String.fromCharCode(e[n]); + return i + } + + function fr(e, t, r) { + var i = e.length; + (!t || t < 0) && (t = 0), (!r || r < 0 || r > i) && (r = i); + for (var n = "", o = t; o < r; ++o) n += Kr[e[o]]; + return n + } + + function pr(e, t, r) { + for (var i = e.slice(t, r), n = "", o = 0; o < i.length; o += 2) n += String.fromCharCode(i[o] + 256 * i[o + 1]); + return n + } + + function dr(e, t, r) { + if (e % 1 != 0 || e < 0) throw new RangeError("offset is not uint"); + if (e + t > r) throw new RangeError("Trying to access beyond buffer length") + } + + function gr(e, t, r, i, n, o) { + if (!Ht.isBuffer(e)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (t > n || t < o) throw new RangeError('"value" argument is out of bounds'); + if (r + i > e.length) throw new RangeError("Index out of range") + } + + function br(e, t, r, i, n, o) { + if (r + i > e.length) throw new RangeError("Index out of range"); + if (r < 0) throw new RangeError("Index out of range") + } + + function yr(e, t, r, i, n) { + return t = +t, r >>>= 0, n || br(e, 0, r, 4), Vr.write(e, t, r, i, 23, 4), r + 4 + } + + function mr(e, t, r, i, n) { + return t = +t, r >>>= 0, n || br(e, 0, r, 8), Vr.write(e, t, r, i, 52, 8), r + 8 + } + + function wr(e, t) { + var r; + t = t || 1 / 0; + for (var i = e.length, n = null, o = [], s = 0; s < i; ++s) { + if ((r = e.charCodeAt(s)) > 55295 && r < 57344) { + if (!n) { + if (r > 56319) { + (t -= 3) > -1 && o.push(239, 191, 189); + continue + } + if (s + 1 === i) { + (t -= 3) > -1 && o.push(239, 191, 189); + continue + } + n = r; + continue + } + if (r < 56320) { + (t -= 3) > -1 && o.push(239, 191, 189), n = r; + continue + } + r = 65536 + (n - 55296 << 10 | r - 56320) + } else n && (t -= 3) > -1 && o.push(239, 191, 189); + if (n = null, r < 128) { + if ((t -= 1) < 0) break; + o.push(r) + } else if (r < 2048) { + if ((t -= 2) < 0) break; + o.push(r >> 6 | 192, 63 & r | 128) + } else if (r < 65536) { + if ((t -= 3) < 0) break; + o.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128) + } else { + if (!(r < 1114112)) throw new Error("Invalid code point"); + if ((t -= 4) < 0) break; + o.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128) + } + } + return o + } + + function _r(e) { + return qr.toByteArray(function(e) { + if ((e = (e = e.split("=")[0]).trim().replace(zr, "")).length < 2) return ""; + for (; e.length % 4 != 0;) e += "="; + return e + }(e)) + } + + function vr(e, t, r, i) { + for (var n = 0; n < i && !(n + r >= t.length || n >= e.length); ++n) t[n + r] = e[n]; + return n + } + + function Er(e, t) { + return e instanceof t || null != e && null != e.constructor && null != e.constructor.name && e.constructor.name === t.name + } + + function Sr(e) { + return e != e + } + + function Ar(e, t) { + for (var r in e) t[r] = e[r] + } + + function Ir(e, t, r) { + return Yr(e, t, r) + } + + function kr(e) { + var t; + switch (this.encoding = function(e) { + var t = function(e) { + if (!e) return "utf8"; + for (var t;;) switch (e) { + case "utf8": + case "utf-8": + return "utf8"; + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return "utf16le"; + case "latin1": + case "binary": + return "latin1"; + case "base64": + case "ascii": + case "hex": + return e; + default: + if (t) return; + e = ("" + e).toLowerCase(), t = !0 + } + }(e); + if ("string" != typeof t && (Xr.isEncoding === Zr || !Zr(e))) throw new Error("Unknown encoding: " + e); + return t || e + }(e), this.encoding) { + case "utf16le": + this.text = Rr, this.end = Or, t = 4; + break; + case "utf8": + this.fillLast = Cr, t = 4; + break; + case "base64": + this.text = Pr, this.end = Br, t = 3; + break; + default: + return this.write = xr, void(this.end = Ur) + } + this.lastNeed = 0, this.lastTotal = 0, this.lastChar = Xr.allocUnsafe(t) + } + + function Tr(e) { + return e <= 127 ? 0 : e >> 5 == 6 ? 2 : e >> 4 == 14 ? 3 : e >> 3 == 30 ? 4 : e >> 6 == 2 ? -1 : -2 + } + + function Cr(e) { + var t = this.lastTotal - this.lastNeed, + r = function(e, t, r) { + if (128 != (192 & t[0])) return e.lastNeed = 0, "�"; + if (e.lastNeed > 1 && t.length > 1) { + if (128 != (192 & t[1])) return e.lastNeed = 1, "�"; + if (e.lastNeed > 2 && t.length > 2 && 128 != (192 & t[2])) return e.lastNeed = 2, "�" + } + }(this, e); + return void 0 !== r ? r : this.lastNeed <= e.length ? (e.copy(this.lastChar, t, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal)) : (e.copy(this.lastChar, t, 0, e.length), void(this.lastNeed -= e.length)) + } + + function Rr(e, t) { + if ((e.length - t) % 2 == 0) { + var r = e.toString("utf16le", t); + if (r) { + var i = r.charCodeAt(r.length - 1); + if (i >= 55296 && i <= 56319) return this.lastNeed = 2, this.lastTotal = 4, this.lastChar[0] = e[e.length - 2], this.lastChar[1] = e[e.length - 1], r.slice(0, -1) + } + return r + } + return this.lastNeed = 1, this.lastTotal = 2, this.lastChar[0] = e[e.length - 1], e.toString("utf16le", t, e.length - 1) + } + + function Or(e) { + var t = e && e.length ? this.write(e) : ""; + if (this.lastNeed) { + var r = this.lastTotal - this.lastNeed; + return t + this.lastChar.toString("utf16le", 0, r) + } + return t + } + + function Pr(e, t) { + var r = (e.length - t) % 3; + return 0 === r ? e.toString("base64", t) : (this.lastNeed = 3 - r, this.lastTotal = 3, 1 === r ? this.lastChar[0] = e[e.length - 1] : (this.lastChar[0] = e[e.length - 2], this.lastChar[1] = e[e.length - 1]), e.toString("base64", t, e.length - r)) + } + + function Br(e) { + var t = e && e.length ? this.write(e) : ""; + return this.lastNeed ? t + this.lastChar.toString("base64", 0, 3 - this.lastNeed) : t + } + + function xr(e) { + return e.toString(this.encoding) + } + + function Ur(e) { + return e && e.length ? this.write(e) : "" + } + var Mr, Lr, Nr, jr, Dr, Fr, Wr, $r, qr, Vr, Hr, zr, Kr, Gr, Qr, Yr, Jr, Xr, Zr, ei = l((() => { + for (f(), rt(), qe(), Mr = { + byteLength: function(e) { + var t = $t(e), + r = t[0], + i = t[1]; + return 3 * (r + i) / 4 - i + }, + toByteArray: function(e) { + var t, r, i, n = $t(e), + o = n[0], + s = n[1], + a = new jr(3 * (o + (i = s)) / 4 - i), + l = 0, + h = s > 0 ? o - 4 : o; + for (r = 0; r < h; r += 4) t = Nr[e.charCodeAt(r)] << 18 | Nr[e.charCodeAt(r + 1)] << 12 | Nr[e.charCodeAt(r + 2)] << 6 | Nr[e.charCodeAt(r + 3)], a[l++] = t >> 16 & 255, a[l++] = t >> 8 & 255, a[l++] = 255 & t; + return 2 === s && (t = Nr[e.charCodeAt(r)] << 2 | Nr[e.charCodeAt(r + 1)] >> 4, a[l++] = 255 & t), 1 === s && (t = Nr[e.charCodeAt(r)] << 10 | Nr[e.charCodeAt(r + 1)] << 4 | Nr[e.charCodeAt(r + 2)] >> 2, a[l++] = t >> 8 & 255, a[l++] = 255 & t), a + }, + fromByteArray: function(e) { + for (var t, r = e.length, i = r % 3, n = [], o = 0, s = r - i; o < s; o += 16383) n.push(qt(e, o, o + 16383 > s ? s : o + 16383)); + return 1 === i ? (t = e[r - 1], n.push(Lr[t >> 2] + Lr[t << 4 & 63] + "==")) : 2 === i && (t = (e[r - 2] << 8) + e[r - 1], n.push(Lr[t >> 10] + Lr[t >> 4 & 63] + Lr[t << 2 & 63] + "=")), n.join("") + } + }, Lr = [], Nr = [], jr = typeof Uint8Array < "u" ? Uint8Array : Array, Fr = 0, Wr = (Dr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/").length; Fr < Wr; ++Fr) Lr[Fr] = Dr[Fr], Nr[Dr.charCodeAt(Fr)] = Fr; + Nr["-".charCodeAt(0)] = 62, Nr["_".charCodeAt(0)] = 63, $r = {}, qr = Mr, Vr = { + read: function(e, t, r, i, n) { + var o, s, a = 8 * n - i - 1, + l = (1 << a) - 1, + h = l >> 1, + u = -7, + c = r ? n - 1 : 0, + f = r ? -1 : 1, + p = e[t + c]; + for (c += f, o = p & (1 << -u) - 1, p >>= -u, u += a; u > 0; o = 256 * o + e[t + c], c += f, u -= 8); + for (s = o & (1 << -u) - 1, o >>= -u, u += i; u > 0; s = 256 * s + e[t + c], c += f, u -= 8); + if (0 === o) o = 1 - h; + else { + if (o === l) return s ? NaN : 1 / 0 * (p ? -1 : 1); + s += Math.pow(2, i), o -= h + } + return (p ? -1 : 1) * s * Math.pow(2, o - i) + }, + write: function(e, t, r, i, n, o) { + var s, a, l, h = 8 * o - n - 1, + u = (1 << h) - 1, + c = u >> 1, + f = 23 === n ? Math.pow(2, -24) - Math.pow(2, -77) : 0, + p = i ? 0 : o - 1, + d = i ? 1 : -1, + g = t < 0 || 0 === t && 1 / t < 0 ? 1 : 0; + for (t = Math.abs(t), isNaN(t) || t === 1 / 0 ? (a = isNaN(t) ? 1 : 0, s = u) : (s = Math.floor(Math.log(t) / Math.LN2), t * (l = Math.pow(2, -s)) < 1 && (s--, l *= 2), (t += s + c >= 1 ? f / l : f * Math.pow(2, 1 - c)) * l >= 2 && (s++, l /= 2), s + c >= u ? (a = 0, s = u) : s + c >= 1 ? (a = (t * l - 1) * Math.pow(2, n), s += c) : (a = t * Math.pow(2, c - 1) * Math.pow(2, n), s = 0)); n >= 8; e[r + p] = 255 & a, p += d, a /= 256, n -= 8); + for (s = s << n | a, h += n; h > 0; e[r + p] = 255 & s, p += d, s /= 256, h -= 8); + e[r + p - d] |= 128 * g + } + }, Hr = "function" == typeof Symbol && "function" == typeof Symbol.for ? Symbol.for("nodejs.util.inspect.custom") : null, $r.Buffer = Ht, $r.SlowBuffer = function(e) { + return +e != e && (e = 0), Ht.alloc(+e) + }, $r.INSPECT_MAX_BYTES = 50, $r.kMaxLength = 2147483647, Ht.TYPED_ARRAY_SUPPORT = function() { + try { + var e = new Uint8Array(1), + t = { + foo: function() { + return 42 + } + }; + return Object.setPrototypeOf(t, Uint8Array.prototype), Object.setPrototypeOf(e, t), 42 === e.foo() + } catch { + return !1 + } + }(), Ht.TYPED_ARRAY_SUPPORT || typeof i > "u" || "function" != typeof i.error || i.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), Object.defineProperty(Ht.prototype, "parent", { + enumerable: !0, + get: function() { + if (Ht.isBuffer(this)) return this.buffer + } + }), Object.defineProperty(Ht.prototype, "offset", { + enumerable: !0, + get: function() { + if (Ht.isBuffer(this)) return this.byteOffset + } + }), Ht.poolSize = 8192, Ht.from = function(e, t, r) { + return zt(e, t, r) + }, Object.setPrototypeOf(Ht.prototype, Uint8Array.prototype), Object.setPrototypeOf(Ht, Uint8Array), Ht.alloc = function(e, t, r) { + return n = t, o = r, Kt(i = e), i <= 0 ? Vt(i) : void 0 !== n ? "string" == typeof o ? Vt(i).fill(n, o) : Vt(i).fill(n) : Vt(i); + var i, n, o + }, Ht.allocUnsafe = function(e) { + return Gt(e) + }, Ht.allocUnsafeSlow = function(e) { + return Gt(e) + }, Ht.isBuffer = function(e) { + return null != e && !0 === e._isBuffer && e !== Ht.prototype + }, Ht.compare = function(e, t) { + if (Er(e, Uint8Array) && (e = Ht.from(e, e.offset, e.byteLength)), Er(t, Uint8Array) && (t = Ht.from(t, t.offset, t.byteLength)), !Ht.isBuffer(e) || !Ht.isBuffer(t)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); + if (e === t) return 0; + for (var r = e.length, i = t.length, n = 0, o = Math.min(r, i); n < o; ++n) + if (e[n] !== t[n]) { + r = e[n], i = t[n]; + break + } return r < i ? -1 : i < r ? 1 : 0 + }, Ht.isEncoding = function(e) { + switch (String(e).toLowerCase()) { + case "hex": + case "utf8": + case "utf-8": + case "ascii": + case "latin1": + case "binary": + case "base64": + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return !0; + default: + return !1 + } + }, Ht.concat = function(e, t) { + if (!Array.isArray(e)) throw new TypeError('"list" argument must be an Array of Buffers'); + if (0 === e.length) return Ht.alloc(0); + var r; + if (void 0 === t) + for (t = 0, r = 0; r < e.length; ++r) t += e[r].length; + var i = Ht.allocUnsafe(t), + n = 0; + for (r = 0; r < e.length; ++r) { + var o = e[r]; + if (Er(o, Uint8Array) && (o = Ht.from(o)), !Ht.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); + o.copy(i, n), n += o.length + } + return i + }, Ht.byteLength = Jt, Ht.prototype._isBuffer = !0, Ht.prototype.swap16 = function() { + var e = this.length; + if (e % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); + for (var t = 0; t < e; t += 2) Zt(this, t, t + 1); + return this + }, Ht.prototype.swap32 = function() { + var e = this.length; + if (e % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); + for (var t = 0; t < e; t += 4) Zt(this, t, t + 3), Zt(this, t + 1, t + 2); + return this + }, Ht.prototype.swap64 = function() { + var e = this.length; + if (e % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); + for (var t = 0; t < e; t += 8) Zt(this, t, t + 7), Zt(this, t + 1, t + 6), Zt(this, t + 2, t + 5), Zt(this, t + 3, t + 4); + return this + }, Ht.prototype.toString = function() { + var e = this.length; + return 0 === e ? "" : 0 === arguments.length ? hr(this, 0, e) : Xt.apply(this, arguments) + }, Ht.prototype.toLocaleString = Ht.prototype.toString, Ht.prototype.equals = function(e) { + if (!Ht.isBuffer(e)) throw new TypeError("Argument must be a Buffer"); + return this === e || 0 === Ht.compare(this, e) + }, Ht.prototype.inspect = function() { + var e = "", + t = $r.INSPECT_MAX_BYTES; + return e = this.toString("hex", 0, t).replace(/(.{2})/g, "$1 ").trim(), this.length > t && (e += " ... "), "" + }, Hr && (Ht.prototype[Hr] = Ht.prototype.inspect), Ht.prototype.compare = function(e, t, r, i, n) { + if (Er(e, Uint8Array) && (e = Ht.from(e, e.offset, e.byteLength)), !Ht.isBuffer(e)) throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof e); + if (void 0 === t && (t = 0), void 0 === r && (r = e ? e.length : 0), void 0 === i && (i = 0), void 0 === n && (n = this.length), t < 0 || r > e.length || i < 0 || n > this.length) throw new RangeError("out of range index"); + if (i >= n && t >= r) return 0; + if (i >= n) return -1; + if (t >= r) return 1; + if (this === e) return 0; + for (var o = (n >>>= 0) - (i >>>= 0), s = (r >>>= 0) - (t >>>= 0), a = Math.min(o, s), l = this.slice(i, n), h = e.slice(t, r), u = 0; u < a; ++u) + if (l[u] !== h[u]) { + o = l[u], s = h[u]; + break + } return o < s ? -1 : s < o ? 1 : 0 + }, Ht.prototype.includes = function(e, t, r) { + return -1 !== this.indexOf(e, t, r) + }, Ht.prototype.indexOf = function(e, t, r) { + return er(this, e, t, r, !0) + }, Ht.prototype.lastIndexOf = function(e, t, r) { + return er(this, e, t, r, !1) + }, Ht.prototype.write = function(e, t, r, i) { + if (void 0 === t) i = "utf8", r = this.length, t = 0; + else if (void 0 === r && "string" == typeof t) i = t, r = this.length, t = 0; + else { + if (!isFinite(t)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); + t >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === i && (i = "utf8")) : (i = r, r = void 0) + } + var n = this.length - t; + if ((void 0 === r || r > n) && (r = n), e.length > 0 && (r < 0 || t < 0) || t > this.length) throw new RangeError("Attempt to write outside buffer bounds"); + i || (i = "utf8"); + for (var o = !1;;) switch (i) { + case "hex": + return rr(this, e, t, r); + case "utf8": + case "utf-8": + return ir(this, e, t, r); + case "ascii": + return nr(this, e, t, r); + case "latin1": + case "binary": + return or(this, e, t, r); + case "base64": + return sr(this, e, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return ar(this, e, t, r); + default: + if (o) throw new TypeError("Unknown encoding: " + i); + i = ("" + i).toLowerCase(), o = !0 + } + }, Ht.prototype.toJSON = function() { + return { + type: "Buffer", + data: Array.prototype.slice.call(this._arr || this, 0) + } + }, Ht.prototype.slice = function(e, t) { + var r = this.length; + (e = ~~e) < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), (t = void 0 === t ? r : ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), t < e && (t = e); + var i = this.subarray(e, t); + return Object.setPrototypeOf(i, Ht.prototype), i + }, Ht.prototype.readUIntLE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || dr(e, t, this.length); + for (var i = this[e], n = 1, o = 0; ++o < t && (n *= 256);) i += this[e + o] * n; + return i + }, Ht.prototype.readUIntBE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || dr(e, t, this.length); + for (var i = this[e + --t], n = 1; t > 0 && (n *= 256);) i += this[e + --t] * n; + return i + }, Ht.prototype.readUInt8 = function(e, t) { + return e >>>= 0, t || dr(e, 1, this.length), this[e] + }, Ht.prototype.readUInt16LE = function(e, t) { + return e >>>= 0, t || dr(e, 2, this.length), this[e] | this[e + 1] << 8 + }, Ht.prototype.readUInt16BE = function(e, t) { + return e >>>= 0, t || dr(e, 2, this.length), this[e] << 8 | this[e + 1] + }, Ht.prototype.readUInt32LE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), (this[e] | this[e + 1] << 8 | this[e + 2] << 16) + 16777216 * this[e + 3] + }, Ht.prototype.readUInt32BE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), 16777216 * this[e] + (this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3]) + }, Ht.prototype.readIntLE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || dr(e, t, this.length); + for (var i = this[e], n = 1, o = 0; ++o < t && (n *= 256);) i += this[e + o] * n; + return i >= (n *= 128) && (i -= Math.pow(2, 8 * t)), i + }, Ht.prototype.readIntBE = function(e, t, r) { + e >>>= 0, t >>>= 0, r || dr(e, t, this.length); + for (var i = t, n = 1, o = this[e + --i]; i > 0 && (n *= 256);) o += this[e + --i] * n; + return o >= (n *= 128) && (o -= Math.pow(2, 8 * t)), o + }, Ht.prototype.readInt8 = function(e, t) { + return e >>>= 0, t || dr(e, 1, this.length), 128 & this[e] ? -1 * (255 - this[e] + 1) : this[e] + }, Ht.prototype.readInt16LE = function(e, t) { + e >>>= 0, t || dr(e, 2, this.length); + var r = this[e] | this[e + 1] << 8; + return 32768 & r ? 4294901760 | r : r + }, Ht.prototype.readInt16BE = function(e, t) { + e >>>= 0, t || dr(e, 2, this.length); + var r = this[e + 1] | this[e] << 8; + return 32768 & r ? 4294901760 | r : r + }, Ht.prototype.readInt32LE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), this[e] | this[e + 1] << 8 | this[e + 2] << 16 | this[e + 3] << 24 + }, Ht.prototype.readInt32BE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), this[e] << 24 | this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3] + }, Ht.prototype.readFloatLE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), Vr.read(this, e, !0, 23, 4) + }, Ht.prototype.readFloatBE = function(e, t) { + return e >>>= 0, t || dr(e, 4, this.length), Vr.read(this, e, !1, 23, 4) + }, Ht.prototype.readDoubleLE = function(e, t) { + return e >>>= 0, t || dr(e, 8, this.length), Vr.read(this, e, !0, 52, 8) + }, Ht.prototype.readDoubleBE = function(e, t) { + return e >>>= 0, t || dr(e, 8, this.length), Vr.read(this, e, !1, 52, 8) + }, Ht.prototype.writeUIntLE = function(e, t, r, i) { + e = +e, t >>>= 0, r >>>= 0, i || gr(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + var n = 1, + o = 0; + for (this[t] = 255 & e; ++o < r && (n *= 256);) this[t + o] = e / n & 255; + return t + r + }, Ht.prototype.writeUIntBE = function(e, t, r, i) { + e = +e, t >>>= 0, r >>>= 0, i || gr(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + var n = r - 1, + o = 1; + for (this[t + n] = 255 & e; --n >= 0 && (o *= 256);) this[t + n] = e / o & 255; + return t + r + }, Ht.prototype.writeUInt8 = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 1, 255, 0), this[t] = 255 & e, t + 1 + }, Ht.prototype.writeUInt16LE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 2, 65535, 0), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2 + }, Ht.prototype.writeUInt16BE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 2, 65535, 0), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2 + }, Ht.prototype.writeUInt32LE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 4, 4294967295, 0), this[t + 3] = e >>> 24, this[t + 2] = e >>> 16, this[t + 1] = e >>> 8, this[t] = 255 & e, t + 4 + }, Ht.prototype.writeUInt32BE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 4, 4294967295, 0), this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e, t + 4 + }, Ht.prototype.writeIntLE = function(e, t, r, i) { + if (e = +e, t >>>= 0, !i) { + var n = Math.pow(2, 8 * r - 1); + gr(this, e, t, r, n - 1, -n) + } + var o = 0, + s = 1, + a = 0; + for (this[t] = 255 & e; ++o < r && (s *= 256);) e < 0 && 0 === a && 0 !== this[t + o - 1] && (a = 1), this[t + o] = (e / s >> 0) - a & 255; + return t + r + }, Ht.prototype.writeIntBE = function(e, t, r, i) { + if (e = +e, t >>>= 0, !i) { + var n = Math.pow(2, 8 * r - 1); + gr(this, e, t, r, n - 1, -n) + } + var o = r - 1, + s = 1, + a = 0; + for (this[t + o] = 255 & e; --o >= 0 && (s *= 256);) e < 0 && 0 === a && 0 !== this[t + o + 1] && (a = 1), this[t + o] = (e / s >> 0) - a & 255; + return t + r + }, Ht.prototype.writeInt8 = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 1, 127, -128), e < 0 && (e = 255 + e + 1), this[t] = 255 & e, t + 1 + }, Ht.prototype.writeInt16LE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 2, 32767, -32768), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2 + }, Ht.prototype.writeInt16BE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 2, 32767, -32768), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2 + }, Ht.prototype.writeInt32LE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 4, 2147483647, -2147483648), this[t] = 255 & e, this[t + 1] = e >>> 8, this[t + 2] = e >>> 16, this[t + 3] = e >>> 24, t + 4 + }, Ht.prototype.writeInt32BE = function(e, t, r) { + return e = +e, t >>>= 0, r || gr(this, e, t, 4, 2147483647, -2147483648), e < 0 && (e = 4294967295 + e + 1), this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e, t + 4 + }, Ht.prototype.writeFloatLE = function(e, t, r) { + return yr(this, e, t, !0, r) + }, Ht.prototype.writeFloatBE = function(e, t, r) { + return yr(this, e, t, !1, r) + }, Ht.prototype.writeDoubleLE = function(e, t, r) { + return mr(this, e, t, !0, r) + }, Ht.prototype.writeDoubleBE = function(e, t, r) { + return mr(this, e, t, !1, r) + }, Ht.prototype.copy = function(e, t, r, i) { + if (!Ht.isBuffer(e)) throw new TypeError("argument should be a Buffer"); + if (r || (r = 0), i || 0 === i || (i = this.length), t >= e.length && (t = e.length), t || (t = 0), i > 0 && i < r && (i = r), i === r || 0 === e.length || 0 === this.length) return 0; + if (t < 0) throw new RangeError("targetStart out of bounds"); + if (r < 0 || r >= this.length) throw new RangeError("Index out of range"); + if (i < 0) throw new RangeError("sourceEnd out of bounds"); + i > this.length && (i = this.length), e.length - t < i - r && (i = e.length - t + r); + var n = i - r; + if (this === e && "function" == typeof Uint8Array.prototype.copyWithin) this.copyWithin(t, r, i); + else if (this === e && r < t && t < i) + for (var o = n - 1; o >= 0; --o) e[o + t] = this[o + r]; + else Uint8Array.prototype.set.call(e, this.subarray(r, i), t); + return n + }, Ht.prototype.fill = function(e, t, r, i) { + if ("string" == typeof e) { + if ("string" == typeof t ? (i = t, t = 0, r = this.length) : "string" == typeof r && (i = r, r = this.length), void 0 !== i && "string" != typeof i) throw new TypeError("encoding must be a string"); + if ("string" == typeof i && !Ht.isEncoding(i)) throw new TypeError("Unknown encoding: " + i); + if (1 === e.length) { + var n = e.charCodeAt(0); + ("utf8" === i && n < 128 || "latin1" === i) && (e = n) + } + } else "number" == typeof e ? e &= 255 : "boolean" == typeof e && (e = Number(e)); + if (t < 0 || this.length < t || this.length < r) throw new RangeError("Out of range index"); + if (r <= t) return this; + var o; + if (t >>>= 0, r = void 0 === r ? this.length : r >>> 0, e || (e = 0), "number" == typeof e) + for (o = t; o < r; ++o) this[o] = e; + else { + var s = Ht.isBuffer(e) ? e : Ht.from(e, i), + a = s.length; + if (0 === a) throw new TypeError('The value "' + e + '" is invalid for argument "value"'); + for (o = 0; o < r - t; ++o) this[o + t] = s[o % a] + } + return this + }, zr = /[^+/0-9A-Za-z-_]/g, Kr = function() { + for (var e = new Array(256), t = 0; t < 16; ++t) + for (var r = 16 * t, i = 0; i < 16; ++i) e[r + i] = "0123456789abcdef" [t] + "0123456789abcdef" [i]; + return e + }(), $r.Buffer, $r.INSPECT_MAX_BYTES, $r.kMaxLength, Gr = {}, (Yr = (Qr = $r).Buffer).from && Yr.alloc && Yr.allocUnsafe && Yr.allocUnsafeSlow ? Gr = Qr : (Ar(Qr, Gr), Gr.Buffer = Ir), Ir.prototype = Object.create(Yr.prototype), Ar(Yr, Ir), Ir.from = function(e, t, r) { + if ("number" == typeof e) throw new TypeError("Argument must not be a number"); + return Yr(e, t, r) + }, Ir.alloc = function(e, t, r) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + var i = Yr(e); + return void 0 !== t ? "string" == typeof r ? i.fill(t, r) : i.fill(t) : i.fill(0), i + }, Ir.allocUnsafe = function(e) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + return Yr(e) + }, Ir.allocUnsafeSlow = function(e) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + return Qr.SlowBuffer(e) + }, Jr = {}, Xr = Gr.Buffer, Zr = Xr.isEncoding || function(e) { + switch ((e = "" + e) && e.toLowerCase()) { + case "hex": + case "utf8": + case "utf-8": + case "ascii": + case "binary": + case "base64": + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + case "raw": + return !0; + default: + return !1 + } + }, Jr.StringDecoder = kr, kr.prototype.write = function(e) { + if (0 === e.length) return ""; + var t, r; + if (this.lastNeed) { + if (void 0 === (t = this.fillLast(e))) return ""; + r = this.lastNeed, this.lastNeed = 0 + } else r = 0; + return r < e.length ? t ? t + this.text(e, r) : this.text(e, r) : t || "" + }, kr.prototype.end = function(e) { + var t = e && e.length ? this.write(e) : ""; + return this.lastNeed ? t + "�" : t + }, kr.prototype.text = function(e, t) { + var r = function(e, t, r) { + var i = t.length - 1; + if (i < r) return 0; + var n = Tr(t[i]); + return n >= 0 ? (n > 0 && (e.lastNeed = n - 1), n) : --i < r || -2 === n ? 0 : (n = Tr(t[i])) >= 0 ? (n > 0 && (e.lastNeed = n - 2), n) : --i < r || -2 === n ? 0 : (n = Tr(t[i])) >= 0 ? (n > 0 && (2 === n ? n = 0 : e.lastNeed = n - 3), n) : 0 + }(this, e, t); + if (!this.lastNeed) return e.toString("utf8", t); + this.lastTotal = r; + var i = e.length - (r - this.lastNeed); + return e.copy(this.lastChar, 0, i), e.toString("utf8", t, i) + }, kr.prototype.fillLast = function(e) { + if (this.lastNeed <= e.length) return e.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal); + e.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, e.length), this.lastNeed -= e.length + }, Jr.StringDecoder, Jr.StringDecoder + })), + ti = {}; + u(ti, { + StringDecoder: () => ri, + default: () => Jr + }); + var ri, ii = l((() => { + f(), rt(), qe(), ei(), ei(), ri = Jr.StringDecoder + })), + ni = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + { + PromisePrototypeThen: i, + SymbolAsyncIterator: n, + SymbolIterator: o + } = nt(), + { + Buffer: s + } = (tt(), c(Ve)), + { + ERR_INVALID_ARG_TYPE: a, + ERR_STREAM_NULL_VALUES: l + } = at().codes; + t.exports = function(e, t, h) { + let u, c; + if ("string" == typeof t || t instanceof s) return new e({ + objectMode: !0, + ...h, + read() { + this.push(t), this.push(null) + } + }); + if (t && t[n]) c = !0, u = t[n](); + else { + if (!t || !t[o]) throw new a("iterable", ["Iterable"], t); + c = !1, u = t[o]() + } + let f = new e({ + objectMode: !0, + highWaterMark: 1, + ...h + }), + p = !1; + return f._read = function() { + p || (p = !0, async function() { + for (;;) { + try { + let { + value: e, + done: t + } = c ? await u.next() : u.next(); + if (t) f.push(null); + else { + let t = e && "function" == typeof e.then ? await e : e; + if (null === t) throw p = !1, new l; + if (f.push(t)) continue; + p = !1 + } + } catch (e) { + f.destroy(e) + } + break + } + }()) + }, f._destroy = function(e, t) { + i(async function(e) { + let t = null != e, + r = "function" == typeof u.throw; + if (t && r) { + let { + value: t, + done: r + } = await u.throw(e); + if (await t, r) return + } + if ("function" == typeof u.return) { + let { + value: e + } = await u.return(); + await e + } + }(e), (() => r.nextTick(t, e)), (i => r.nextTick(t, i || e))) + }, f + } + })), + oi = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + { + ArrayPrototypeIndexOf: i, + NumberIsInteger: n, + NumberIsNaN: o, + NumberParseInt: s, + ObjectDefineProperties: a, + ObjectKeys: l, + ObjectSetPrototypeOf: h, + Promise: u, + SafeSet: p, + SymbolAsyncIterator: d, + Symbol: g + } = nt(); + t.exports = W, W.ReadableState = F; + var { + EventEmitter: b + } = (Nt(), c(Ot)), { + Stream: y, + prependListener: m + } = jt(), { + Buffer: w + } = (tt(), c(Ve)), { + addAbortSignal: _ + } = Dt(), v = ct(), E = ot().debuglog("stream", (e => { + E = e + })), S = Ft(), A = ft(), { + getHighWaterMark: I, + getDefaultHighWaterMark: k + } = Wt(), { + aggregateTwoErrors: T, + codes: { + ERR_INVALID_ARG_TYPE: C, + ERR_METHOD_NOT_IMPLEMENTED: R, + ERR_OUT_OF_RANGE: O, + ERR_STREAM_PUSH_AFTER_EOF: P, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT: B + } + } = at(), { + validateObject: x + } = lt(), U = g("kPaused"), { + StringDecoder: M + } = (ii(), c(ti)), L = ni(); + h(W.prototype, y.prototype), h(W, y); + var N, j = () => {}, + { + errorOrDestroy: D + } = A; + + function F(e, t, r) { + "boolean" != typeof r && (r = t instanceof li()), this.objectMode = !(!e || !e.objectMode), r && (this.objectMode = this.objectMode || !(!e || !e.readableObjectMode)), this.highWaterMark = e ? I(this, e, "readableHighWaterMark", r) : k(!1), this.buffer = new S, this.length = 0, this.pipes = [], this.flowing = null, this.ended = !1, this.endEmitted = !1, this.reading = !1, this.constructed = !0, this.sync = !0, this.needReadable = !1, this.emittedReadable = !1, this.readableListening = !1, this.resumeScheduled = !1, this[U] = null, this.errorEmitted = !1, this.emitClose = !e || !1 !== e.emitClose, this.autoDestroy = !e || !1 !== e.autoDestroy, this.destroyed = !1, this.errored = null, this.closed = !1, this.closeEmitted = !1, this.defaultEncoding = e && e.defaultEncoding || "utf8", this.awaitDrainWriters = null, this.multiAwaitDrain = !1, this.readingMore = !1, this.dataEmitted = !1, this.decoder = null, this.encoding = null, e && e.encoding && (this.decoder = new M(e.encoding), this.encoding = e.encoding) + } + + function W(e) { + if (!(this instanceof W)) return new W(e); + let t = this instanceof li(); + this._readableState = new F(e, this, t), e && ("function" == typeof e.read && (this._read = e.read), "function" == typeof e.destroy && (this._destroy = e.destroy), "function" == typeof e.construct && (this._construct = e.construct), e.signal && !t && _(e.signal, this)), y.call(this, e), A.construct(this, (() => { + this._readableState.needReadable && K(this, this._readableState) + })) + } + + function $(e, t, r, i) { + E("readableAddChunk", t); + let n, o = e._readableState; + if (o.objectMode || ("string" == typeof t ? (r = r || o.defaultEncoding, o.encoding !== r && (i && o.encoding ? t = w.from(t, r).toString(o.encoding) : (t = w.from(t, r), r = ""))) : t instanceof w ? r = "" : y._isUint8Array(t) ? (t = y._uint8ArrayToBuffer(t), r = "") : null != t && (n = new C("chunk", ["string", "Buffer", "Uint8Array"], t))), n) D(e, n); + else if (null === t) o.reading = !1, + function(e, t) { + if (E("onEofChunk"), !t.ended) { + if (t.decoder) { + let e = t.decoder.end(); + e && e.length && (t.buffer.push(e), t.length += t.objectMode ? 1 : e.length) + } + t.ended = !0, t.sync ? H(e) : (t.needReadable = !1, t.emittedReadable = !0, z(e)) + } + }(e, o); + else if (o.objectMode || t && t.length > 0) + if (i) + if (o.endEmitted) D(e, new B); + else { + if (o.destroyed || o.errored) return !1; + q(e, o, t, !0) + } + else if (o.ended) D(e, new P); + else { + if (o.destroyed || o.errored) return !1; + o.reading = !1, o.decoder && !r ? (t = o.decoder.write(t), o.objectMode || 0 !== t.length ? q(e, o, t, !1) : K(e, o)) : q(e, o, t, !1) + } else i || (o.reading = !1, K(e, o)); + return !o.ended && (o.length < o.highWaterMark || 0 === o.length) + } + + function q(e, t, r, i) { + t.flowing && 0 === t.length && !t.sync && e.listenerCount("data") > 0 ? (t.multiAwaitDrain ? t.awaitDrainWriters.clear() : t.awaitDrainWriters = null, t.dataEmitted = !0, e.emit("data", r)) : (t.length += t.objectMode ? 1 : r.length, i ? t.buffer.unshift(r) : t.buffer.push(r), t.needReadable && H(e)), K(e, t) + } + + function V(e, t) { + return e <= 0 || 0 === t.length && t.ended ? 0 : t.objectMode ? 1 : o(e) ? t.flowing && t.length ? t.buffer.first().length : t.length : e <= t.length ? e : t.ended ? t.length : 0 + } + + function H(e) { + let t = e._readableState; + E("emitReadable", t.needReadable, t.emittedReadable), t.needReadable = !1, t.emittedReadable || (E("emitReadable", t.flowing), t.emittedReadable = !0, r.nextTick(z, e)) + } + + function z(e) { + let t = e._readableState; + E("emitReadable_", t.destroyed, t.length, t.ended), !t.destroyed && !t.errored && (t.length || t.ended) && (e.emit("readable"), t.emittedReadable = !1), t.needReadable = !t.flowing && !t.ended && t.length <= t.highWaterMark, X(e) + } + + function K(e, t) { + !t.readingMore && t.constructed && (t.readingMore = !0, r.nextTick(G, e, t)) + } + + function G(e, t) { + for (; !t.reading && !t.ended && (t.length < t.highWaterMark || t.flowing && 0 === t.length);) { + let r = t.length; + if (E("maybeReadMore read 0"), e.read(0), r === t.length) break + } + t.readingMore = !1 + } + + function Q(e) { + let t = e._readableState; + t.readableListening = e.listenerCount("readable") > 0, t.resumeScheduled && !1 === t[U] ? t.flowing = !0 : e.listenerCount("data") > 0 ? e.resume() : t.readableListening || (t.flowing = null) + } + + function Y(e) { + E("readable nexttick read 0"), e.read(0) + } + + function J(e, t) { + E("resume", t.reading), t.reading || e.read(0), t.resumeScheduled = !1, e.emit("resume"), X(e), t.flowing && !t.reading && e.read(0) + } + + function X(e) { + let t = e._readableState; + for (E("flow", t.flowing); t.flowing && null !== e.read();); + } + + function Z(e, t) { + "function" != typeof e.read && (e = W.wrap(e, { + objectMode: !0 + })); + let r = async function*(e, t) { + let r = j; + + function i(t) { + this === e ? (r(), r = j) : r = t + } + e.on("readable", i); + let n, o = v(e, { + writable: !1 + }, (e => { + n = e ? T(n, e) : null, r(), r = j + })); + try { + for (;;) { + let t = e.destroyed ? null : e.read(); + if (null !== t) yield t; + else { + if (n) throw n; + if (null === n) return; + await new u(i) + } + } + } catch (e) { + throw n = T(n, e), n + } finally { + !n && !1 === t?.destroyOnReturn || void 0 !== n && !e._readableState.autoDestroy ? (e.off("readable", i), o()) : A.destroyer(e, null) + } + }(e, t); + return r.stream = e, r + } + + function ee(e, t) { + if (0 === t.length) return null; + let r; + return t.objectMode ? r = t.buffer.shift() : !e || e >= t.length ? (r = t.decoder ? t.buffer.join("") : 1 === t.buffer.length ? t.buffer.first() : t.buffer.concat(t.length), t.buffer.clear()) : r = t.buffer.consume(e, t.decoder), r + } + + function te(e) { + let t = e._readableState; + E("endReadable", t.endEmitted), t.endEmitted || (t.ended = !0, r.nextTick(re, t, e)) + } + + function re(e, t) { + if (E("endReadableNT", e.endEmitted, e.length), !e.errored && !e.closeEmitted && !e.endEmitted && 0 === e.length) + if (e.endEmitted = !0, t.emit("end"), t.writable && !1 === t.allowHalfOpen) r.nextTick(ie, t); + else if (e.autoDestroy) { + let e = t._writableState; + (!e || e.autoDestroy && (e.finished || !1 === e.writable)) && t.destroy() + } + } + + function ie(e) { + e.writable && !e.writableEnded && !e.destroyed && e.end() + } + + function ne() { + return void 0 === N && (N = {}), N + } + W.prototype.destroy = A.destroy, W.prototype._undestroy = A.undestroy, W.prototype._destroy = function(e, t) { + t(e) + }, W.prototype[b.captureRejectionSymbol] = function(e) { + this.destroy(e) + }, W.prototype.push = function(e, t) { + return $(this, e, t, !1) + }, W.prototype.unshift = function(e, t) { + return $(this, e, t, !0) + }, W.prototype.isPaused = function() { + let e = this._readableState; + return !0 === e[U] || !1 === e.flowing + }, W.prototype.setEncoding = function(e) { + let t = new M(e); + this._readableState.decoder = t, this._readableState.encoding = this._readableState.decoder.encoding; + let r = this._readableState.buffer, + i = ""; + for (let e of r) i += t.write(e); + return r.clear(), "" !== i && r.push(i), this._readableState.length = i.length, this + }, W.prototype.read = function(e) { + E("read", e), void 0 === e ? e = NaN : n(e) || (e = s(e, 10)); + let t = this._readableState, + r = e; + if (e > t.highWaterMark && (t.highWaterMark = function(e) { + if (e > 1073741824) throw new O("size", "<= 1GiB", e); + return e--, e |= e >>> 1, e |= e >>> 2, e |= e >>> 4, e |= e >>> 8, e |= e >>> 16, ++e + }(e)), 0 !== e && (t.emittedReadable = !1), 0 === e && t.needReadable && ((0 !== t.highWaterMark ? t.length >= t.highWaterMark : t.length > 0) || t.ended)) return E("read: emitReadable", t.length, t.ended), 0 === t.length && t.ended ? te(this) : H(this), null; + if (0 === (e = V(e, t)) && t.ended) return 0 === t.length && te(this), null; + let i, o = t.needReadable; + if (E("need readable", o), (0 === t.length || t.length - e < t.highWaterMark) && (o = !0, E("length less than watermark", o)), t.ended || t.reading || t.destroyed || t.errored || !t.constructed) o = !1, E("reading, ended or constructing", o); + else if (o) { + E("do read"), t.reading = !0, t.sync = !0, 0 === t.length && (t.needReadable = !0); + try { + this._read(t.highWaterMark) + } catch (e) { + D(this, e) + } + t.sync = !1, t.reading || (e = V(r, t)) + } + return i = e > 0 ? ee(e, t) : null, null === i ? (t.needReadable = t.length <= t.highWaterMark, e = 0) : (t.length -= e, t.multiAwaitDrain ? t.awaitDrainWriters.clear() : t.awaitDrainWriters = null), 0 === t.length && (t.ended || (t.needReadable = !0), r !== e && t.ended && te(this)), null !== i && !t.errorEmitted && !t.closeEmitted && (t.dataEmitted = !0, this.emit("data", i)), i + }, W.prototype._read = function(e) { + throw new R("_read()") + }, W.prototype.pipe = function(e, t) { + let i = this, + n = this._readableState; + 1 === n.pipes.length && (n.multiAwaitDrain || (n.multiAwaitDrain = !0, n.awaitDrainWriters = new p(n.awaitDrainWriters ? [n.awaitDrainWriters] : []))), n.pipes.push(e), E("pipe count=%d opts=%j", n.pipes.length, t); + let o = t && !1 === t.end || e === r.stdout || e === r.stderr ? g : s; + + function s() { + E("onend"), e.end() + } + n.endEmitted ? r.nextTick(o) : i.once("end", o), e.on("unpipe", (function t(r, o) { + E("onunpipe"), r === i && o && !1 === o.hasUnpiped && (o.hasUnpiped = !0, E("cleanup"), e.removeListener("close", f), e.removeListener("finish", d), a && e.removeListener("drain", a), e.removeListener("error", c), e.removeListener("unpipe", t), i.removeListener("end", s), i.removeListener("end", g), i.removeListener("data", u), l = !0, a && n.awaitDrainWriters && (!e._writableState || e._writableState.needDrain) && a()) + })); + let a, l = !1; + + function h() { + l || (1 === n.pipes.length && n.pipes[0] === e ? (E("false write response, pause", 0), n.awaitDrainWriters = e, n.multiAwaitDrain = !1) : n.pipes.length > 1 && n.pipes.includes(e) && (E("false write response, pause", n.awaitDrainWriters.size), n.awaitDrainWriters.add(e)), i.pause()), a || (a = function(e, t) { + return function() { + let r = e._readableState; + r.awaitDrainWriters === t ? (E("pipeOnDrain", 1), r.awaitDrainWriters = null) : r.multiAwaitDrain && (E("pipeOnDrain", r.awaitDrainWriters.size), r.awaitDrainWriters.delete(t)), (!r.awaitDrainWriters || 0 === r.awaitDrainWriters.size) && e.listenerCount("data") && e.resume() + } + }(i, e), e.on("drain", a)) + } + + function u(t) { + E("ondata"); + let r = e.write(t); + E("dest.write", r), !1 === r && h() + } + + function c(t) { + if (E("onerror", t), g(), e.removeListener("error", c), 0 === e.listenerCount("error")) { + let r = e._writableState || e._readableState; + r && !r.errorEmitted ? D(e, t) : e.emit("error", t) + } + } + + function f() { + e.removeListener("finish", d), g() + } + + function d() { + E("onfinish"), e.removeListener("close", f), g() + } + + function g() { + E("unpipe"), i.unpipe(e) + } + return i.on("data", u), m(e, "error", c), e.once("close", f), e.once("finish", d), e.emit("pipe", i), !0 === e.writableNeedDrain ? n.flowing && h() : n.flowing || (E("pipe resume"), i.resume()), e + }, W.prototype.unpipe = function(e) { + let t = this._readableState; + if (0 === t.pipes.length) return this; + if (!e) { + let e = t.pipes; + t.pipes = [], this.pause(); + for (let t = 0; t < e.length; t++) e[t].emit("unpipe", this, { + hasUnpiped: !1 + }); + return this + } + let r = i(t.pipes, e); + return -1 === r || (t.pipes.splice(r, 1), 0 === t.pipes.length && this.pause(), e.emit("unpipe", this, { + hasUnpiped: !1 + })), this + }, W.prototype.on = function(e, t) { + let i = y.prototype.on.call(this, e, t), + n = this._readableState; + return "data" === e ? (n.readableListening = this.listenerCount("readable") > 0, !1 !== n.flowing && this.resume()) : "readable" === e && !n.endEmitted && !n.readableListening && (n.readableListening = n.needReadable = !0, n.flowing = !1, n.emittedReadable = !1, E("on readable", n.length, n.reading), n.length ? H(this) : n.reading || r.nextTick(Y, this)), i + }, W.prototype.addListener = W.prototype.on, W.prototype.removeListener = function(e, t) { + let i = y.prototype.removeListener.call(this, e, t); + return "readable" === e && r.nextTick(Q, this), i + }, W.prototype.off = W.prototype.removeListener, W.prototype.removeAllListeners = function(e) { + let t = y.prototype.removeAllListeners.apply(this, arguments); + return ("readable" === e || void 0 === e) && r.nextTick(Q, this), t + }, W.prototype.resume = function() { + let e = this._readableState; + return e.flowing || (E("resume"), e.flowing = !e.readableListening, function(e, t) { + t.resumeScheduled || (t.resumeScheduled = !0, r.nextTick(J, e, t)) + }(this, e)), e[U] = !1, this + }, W.prototype.pause = function() { + return E("call pause flowing=%j", this._readableState.flowing), !1 !== this._readableState.flowing && (E("pause"), this._readableState.flowing = !1, this.emit("pause")), this._readableState[U] = !0, this + }, W.prototype.wrap = function(e) { + let t = !1; + e.on("data", (r => { + !this.push(r) && e.pause && (t = !0, e.pause()) + })), e.on("end", (() => { + this.push(null) + })), e.on("error", (e => { + D(this, e) + })), e.on("close", (() => { + this.destroy() + })), e.on("destroy", (() => { + this.destroy() + })), this._read = () => { + t && e.resume && (t = !1, e.resume()) + }; + let r = l(e); + for (let t = 1; t < r.length; t++) { + let i = r[t]; + void 0 === this[i] && "function" == typeof e[i] && (this[i] = e[i].bind(e)) + } + return this + }, W.prototype[d] = function() { + return Z(this) + }, W.prototype.iterator = function(e) { + return void 0 !== e && x(e, "options"), Z(this, e) + }, a(W.prototype, { + readable: { + __proto__: null, + get() { + let e = this._readableState; + return !(!e || !1 === e.readable || e.destroyed || e.errorEmitted || e.endEmitted) + }, + set(e) { + this._readableState && (this._readableState.readable = !!e) + } + }, + readableDidRead: { + __proto__: null, + enumerable: !1, + get: function() { + return this._readableState.dataEmitted + } + }, + readableAborted: { + __proto__: null, + enumerable: !1, + get: function() { + return !(!1 === this._readableState.readable || !this._readableState.destroyed && !this._readableState.errored || this._readableState.endEmitted) + } + }, + readableHighWaterMark: { + __proto__: null, + enumerable: !1, + get: function() { + return this._readableState.highWaterMark + } + }, + readableBuffer: { + __proto__: null, + enumerable: !1, + get: function() { + return this._readableState && this._readableState.buffer + } + }, + readableFlowing: { + __proto__: null, + enumerable: !1, + get: function() { + return this._readableState.flowing + }, + set: function(e) { + this._readableState && (this._readableState.flowing = e) + } + }, + readableLength: { + __proto__: null, + enumerable: !1, + get() { + return this._readableState.length + } + }, + readableObjectMode: { + __proto__: null, + enumerable: !1, + get() { + return !!this._readableState && this._readableState.objectMode + } + }, + readableEncoding: { + __proto__: null, + enumerable: !1, + get() { + return this._readableState ? this._readableState.encoding : null + } + }, + errored: { + __proto__: null, + enumerable: !1, + get() { + return this._readableState ? this._readableState.errored : null + } + }, + closed: { + __proto__: null, + get() { + return !!this._readableState && this._readableState.closed + } + }, + destroyed: { + __proto__: null, + enumerable: !1, + get() { + return !!this._readableState && this._readableState.destroyed + }, + set(e) { + this._readableState && (this._readableState.destroyed = e) + } + }, + readableEnded: { + __proto__: null, + enumerable: !1, + get() { + return !!this._readableState && this._readableState.endEmitted + } + } + }), a(F.prototype, { + pipesCount: { + __proto__: null, + get() { + return this.pipes.length + } + }, + paused: { + __proto__: null, + get() { + return !1 !== this[U] + }, + set(e) { + this[U] = !!e + } + } + }), W._fromList = ee, W.from = function(e, t) { + return L(W, e, t) + }, W.fromWeb = function(e, t) { + return ne().newStreamReadableFromReadableStream(e, t) + }, W.toWeb = function(e, t) { + return ne().newReadableStreamFromStreamReadable(e, t) + }, W.wrap = function(e, t) { + var r, i; + return new W({ + objectMode: null === (r = null !== (i = e.readableObjectMode) && void 0 !== i ? i : e.objectMode) || void 0 === r || r, + ...t, + destroy(t, r) { + A.destroyer(e, t), r(t) + } + }).wrap(e) + } + })), + si = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + { + ArrayPrototypeSlice: i, + Error: n, + FunctionPrototypeSymbolHasInstance: o, + ObjectDefineProperty: s, + ObjectDefineProperties: a, + ObjectSetPrototypeOf: l, + StringPrototypeToLowerCase: h, + Symbol: u, + SymbolHasInstance: p + } = nt(); + t.exports = M, M.WritableState = x; + var { + EventEmitter: d + } = (Nt(), c(Ot)), g = jt().Stream, { + Buffer: b + } = (tt(), c(Ve)), y = ft(), { + addAbortSignal: m + } = Dt(), { + getHighWaterMark: w, + getDefaultHighWaterMark: _ + } = Wt(), { + ERR_INVALID_ARG_TYPE: v, + ERR_METHOD_NOT_IMPLEMENTED: E, + ERR_MULTIPLE_CALLBACK: S, + ERR_STREAM_CANNOT_PIPE: A, + ERR_STREAM_DESTROYED: I, + ERR_STREAM_ALREADY_FINISHED: k, + ERR_STREAM_NULL_VALUES: T, + ERR_STREAM_WRITE_AFTER_END: C, + ERR_UNKNOWN_ENCODING: R + } = at().codes, { + errorOrDestroy: O + } = y; + + function P() {} + l(M.prototype, g.prototype), l(M, g); + var B = u("kOnFinished"); + + function x(e, t, r) { + "boolean" != typeof r && (r = t instanceof li()), this.objectMode = !(!e || !e.objectMode), r && (this.objectMode = this.objectMode || !(!e || !e.writableObjectMode)), this.highWaterMark = e ? w(this, e, "writableHighWaterMark", r) : _(!1), this.finalCalled = !1, this.needDrain = !1, this.ending = !1, this.ended = !1, this.finished = !1, this.destroyed = !1; + let i = !(!e || !1 !== e.decodeStrings); + this.decodeStrings = !i, this.defaultEncoding = e && e.defaultEncoding || "utf8", this.length = 0, this.writing = !1, this.corked = 0, this.sync = !0, this.bufferProcessing = !1, this.onwrite = D.bind(void 0, t), this.writecb = null, this.writelen = 0, this.afterWriteTickInfo = null, U(this), this.pendingcb = 0, this.constructed = !0, this.prefinished = !1, this.errorEmitted = !1, this.emitClose = !e || !1 !== e.emitClose, this.autoDestroy = !e || !1 !== e.autoDestroy, this.errored = null, this.closed = !1, this.closeEmitted = !1, this[B] = [] + } + + function U(e) { + e.buffered = [], e.bufferedIndex = 0, e.allBuffers = !0, e.allNoop = !0 + } + + function M(e) { + let t = this instanceof li(); + if (!t && !o(M, this)) return new M(e); + this._writableState = new x(e, this, t), e && ("function" == typeof e.write && (this._write = e.write), "function" == typeof e.writev && (this._writev = e.writev), "function" == typeof e.destroy && (this._destroy = e.destroy), "function" == typeof e.final && (this._final = e.final), "function" == typeof e.construct && (this._construct = e.construct), e.signal && m(e.signal, this)), g.call(this, e), y.construct(this, (() => { + let e = this._writableState; + e.writing || q(this, e), H(this, e) + })) + } + + function L(e, t, i, n) { + let o, s = e._writableState; + if ("function" == typeof i) n = i, i = s.defaultEncoding; + else { + if (i) { + if ("buffer" !== i && !b.isEncoding(i)) throw new R(i) + } else i = s.defaultEncoding; + "function" != typeof n && (n = P) + } + if (null === t) throw new T; + if (!s.objectMode) + if ("string" == typeof t) !1 !== s.decodeStrings && (t = b.from(t, i), i = "buffer"); + else if (t instanceof b) i = "buffer"; + else { + if (!g._isUint8Array(t)) throw new v("chunk", ["string", "Buffer", "Uint8Array"], t); + t = g._uint8ArrayToBuffer(t), i = "buffer" + } + return s.ending ? o = new C : s.destroyed && (o = new I("write")), o ? (r.nextTick(n, o), O(e, o, !0), o) : (s.pendingcb++, function(e, t, r, i, n) { + let o = t.objectMode ? 1 : r.length; + t.length += o; + let s = t.length < t.highWaterMark; + return s || (t.needDrain = !0), t.writing || t.corked || t.errored || !t.constructed ? (t.buffered.push({ + chunk: r, + encoding: i, + callback: n + }), t.allBuffers && "buffer" !== i && (t.allBuffers = !1), t.allNoop && n !== P && (t.allNoop = !1)) : (t.writelen = o, t.writecb = n, t.writing = !0, t.sync = !0, e._write(r, i, t.onwrite), t.sync = !1), s && !t.errored && !t.destroyed + }(e, s, t, i, n)) + } + + function N(e, t, r, i, n, o, s) { + t.writelen = i, t.writecb = s, t.writing = !0, t.sync = !0, t.destroyed ? t.onwrite(new I("write")) : r ? e._writev(n, t.onwrite) : e._write(n, o, t.onwrite), t.sync = !1 + } + + function j(e, t, r, i) { + --t.pendingcb, i(r), $(t), O(e, r) + } + + function D(e, t) { + let i = e._writableState, + n = i.sync, + o = i.writecb; + "function" == typeof o ? (i.writing = !1, i.writecb = null, i.length -= i.writelen, i.writelen = 0, t ? (t.stack, i.errored || (i.errored = t), e._readableState && !e._readableState.errored && (e._readableState.errored = t), n ? r.nextTick(j, e, i, t, o) : j(e, i, t, o)) : (i.buffered.length > i.bufferedIndex && q(e, i), n ? null !== i.afterWriteTickInfo && i.afterWriteTickInfo.cb === o ? i.afterWriteTickInfo.count++ : (i.afterWriteTickInfo = { + count: 1, + cb: o, + stream: e, + state: i + }, r.nextTick(F, i.afterWriteTickInfo)) : W(e, i, 1, o))) : O(e, new S) + } + + function F({ + stream: e, + state: t, + count: r, + cb: i + }) { + return t.afterWriteTickInfo = null, W(e, t, r, i) + } + + function W(e, t, r, i) { + for (!t.ending && !e.destroyed && 0 === t.length && t.needDrain && (t.needDrain = !1, e.emit("drain")); r-- > 0;) t.pendingcb--, i(); + t.destroyed && $(t), H(e, t) + } + + function $(e) { + if (e.writing) return; + for (let r = e.bufferedIndex; r < e.buffered.length; ++r) { + var t; + let { + chunk: i, + callback: n + } = e.buffered[r], o = e.objectMode ? 1 : i.length; + e.length -= o, n(null !== (t = e.errored) && void 0 !== t ? t : new I("write")) + } + let r = e[B].splice(0); + for (let t = 0; t < r.length; t++) { + var i; + r[t](null !== (i = e.errored) && void 0 !== i ? i : new I("end")) + } + U(e) + } + + function q(e, t) { + if (t.corked || t.bufferProcessing || t.destroyed || !t.constructed) return; + let { + buffered: r, + bufferedIndex: n, + objectMode: o + } = t, s = r.length - n; + if (!s) return; + let a = n; + if (t.bufferProcessing = !0, s > 1 && e._writev) { + t.pendingcb -= s - 1; + let n = t.allNoop ? P : e => { + for (let t = a; t < r.length; ++t) r[t].callback(e) + }, + o = t.allNoop && 0 === a ? r : i(r, a); + o.allBuffers = t.allBuffers, N(e, t, !0, t.length, o, "", n), U(t) + } else { + do { + let { + chunk: i, + encoding: n, + callback: s + } = r[a]; + r[a++] = null, N(e, t, !1, o ? 1 : i.length, i, n, s) + } while (a < r.length && !t.writing); + a === r.length ? U(t) : a > 256 ? (r.splice(0, a), t.bufferedIndex = 0) : t.bufferedIndex = a + } + t.bufferProcessing = !1 + } + + function V(e) { + return e.ending && !e.destroyed && e.constructed && 0 === e.length && !e.errored && 0 === e.buffered.length && !e.finished && !e.writing && !e.errorEmitted && !e.closeEmitted + } + + function H(e, t, i) { + V(t) && (function(e, t) { + !t.prefinished && !t.finalCalled && ("function" != typeof e._final || t.destroyed ? (t.prefinished = !0, e.emit("prefinish")) : (t.finalCalled = !0, function(e, t) { + let i = !1; + + function n(n) { + if (i) O(e, n ?? S()); + else if (i = !0, t.pendingcb--, n) { + let r = t[B].splice(0); + for (let e = 0; e < r.length; e++) r[e](n); + O(e, n, t.sync) + } else V(t) && (t.prefinished = !0, e.emit("prefinish"), t.pendingcb++, r.nextTick(z, e, t)) + } + t.sync = !0, t.pendingcb++; + try { + e._final(n) + } catch (e) { + n(e) + } + t.sync = !1 + }(e, t))) + }(e, t), 0 === t.pendingcb && (i ? (t.pendingcb++, r.nextTick(((e, t) => { + V(t) ? z(e, t) : t.pendingcb-- + }), e, t)) : V(t) && (t.pendingcb++, z(e, t)))) + } + + function z(e, t) { + t.pendingcb--, t.finished = !0; + let r = t[B].splice(0); + for (let e = 0; e < r.length; e++) r[e](); + if (e.emit("finish"), t.autoDestroy) { + let t = e._readableState; + (!t || t.autoDestroy && (t.endEmitted || !1 === t.readable)) && e.destroy() + } + } + x.prototype.getBuffer = function() { + return i(this.buffered, this.bufferedIndex) + }, s(x.prototype, "bufferedRequestCount", { + __proto__: null, + get() { + return this.buffered.length - this.bufferedIndex + } + }), s(M, p, { + __proto__: null, + value: function(e) { + return !!o(this, e) || this === M && e && e._writableState instanceof x + } + }), M.prototype.pipe = function() { + O(this, new A) + }, M.prototype.write = function(e, t, r) { + return !0 === L(this, e, t, r) + }, M.prototype.cork = function() { + this._writableState.corked++ + }, M.prototype.uncork = function() { + let e = this._writableState; + e.corked && (e.corked--, e.writing || q(this, e)) + }, M.prototype.setDefaultEncoding = function(e) { + if ("string" == typeof e && (e = h(e)), !b.isEncoding(e)) throw new R(e); + return this._writableState.defaultEncoding = e, this + }, M.prototype._write = function(e, t, r) { + if (!this._writev) throw new E("_write()"); + this._writev([{ + chunk: e, + encoding: t + }], r) + }, M.prototype._writev = null, M.prototype.end = function(e, t, i) { + let o, s = this._writableState; + if ("function" == typeof e ? (i = e, e = null, t = null) : "function" == typeof t && (i = t, t = null), null != e) { + let r = L(this, e, t); + r instanceof n && (o = r) + } + return s.corked && (s.corked = 1, this.uncork()), o || (s.errored || s.ending ? s.finished ? o = new k("end") : s.destroyed && (o = new I("end")) : (s.ending = !0, H(this, s, !0), s.ended = !0)), "function" == typeof i && (o || s.finished ? r.nextTick(i, o) : s[B].push(i)), this + }, a(M.prototype, { + closed: { + __proto__: null, + get() { + return !!this._writableState && this._writableState.closed + } + }, + destroyed: { + __proto__: null, + get() { + return !!this._writableState && this._writableState.destroyed + }, + set(e) { + this._writableState && (this._writableState.destroyed = e) + } + }, + writable: { + __proto__: null, + get() { + let e = this._writableState; + return !(!e || !1 === e.writable || e.destroyed || e.errored || e.ending || e.ended) + }, + set(e) { + this._writableState && (this._writableState.writable = !!e) + } + }, + writableFinished: { + __proto__: null, + get() { + return !!this._writableState && this._writableState.finished + } + }, + writableObjectMode: { + __proto__: null, + get() { + return !!this._writableState && this._writableState.objectMode + } + }, + writableBuffer: { + __proto__: null, + get() { + return this._writableState && this._writableState.getBuffer() + } + }, + writableEnded: { + __proto__: null, + get() { + return !!this._writableState && this._writableState.ending + } + }, + writableNeedDrain: { + __proto__: null, + get() { + let e = this._writableState; + return !!e && !e.destroyed && !e.ending && e.needDrain + } + }, + writableHighWaterMark: { + __proto__: null, + get() { + return this._writableState && this._writableState.highWaterMark + } + }, + writableCorked: { + __proto__: null, + get() { + return this._writableState ? this._writableState.corked : 0 + } + }, + writableLength: { + __proto__: null, + get() { + return this._writableState && this._writableState.length + } + }, + errored: { + __proto__: null, + enumerable: !1, + get() { + return this._writableState ? this._writableState.errored : null + } + }, + writableAborted: { + __proto__: null, + enumerable: !1, + get: function() { + return !(!1 === this._writableState.writable || !this._writableState.destroyed && !this._writableState.errored || this._writableState.finished) + } + } + }); + var K, G = y.destroy; + + function Q() { + return void 0 === K && (K = {}), K + } + M.prototype.destroy = function(e, t) { + let i = this._writableState; + return !i.destroyed && (i.bufferedIndex < i.buffered.length || i[B].length) && r.nextTick($, i), G.call(this, e, t), this + }, M.prototype._undestroy = y.undestroy, M.prototype._destroy = function(e, t) { + t(e) + }, M.prototype[d.captureRejectionSymbol] = function(e) { + this.destroy(e) + }, M.fromWeb = function(e, t) { + return Q().newStreamWritableFromWritableStream(e, t) + }, M.toWeb = function(e) { + return Q().newWritableStreamFromStreamWritable(e) + } + })), + ai = h(((e, t) => { + f(), rt(), qe(); + var r = ht(), + i = (tt(), c(Ve)), + { + isReadable: n, + isWritable: o, + isIterable: s, + isNodeStream: a, + isReadableNodeStream: l, + isWritableNodeStream: h, + isDuplexNodeStream: u + } = ut(), + p = ct(), + { + AbortError: d, + codes: { + ERR_INVALID_ARG_TYPE: g, + ERR_INVALID_RETURN_VALUE: b + } + } = at(), + { + destroyer: y + } = ft(), + m = li(), + w = oi(), + { + createDeferredPromise: _ + } = ot(), + v = ni(), + E = globalThis.Blob || i.Blob, + S = typeof E < "u" ? function(e) { + return e instanceof E + } : function(e) { + return !1 + }, + A = globalThis.AbortController || st().AbortController, + { + FunctionPrototypeCall: I + } = nt(), + k = class extends m { + constructor(e) { + super(e), !1 === e?.readable && (this._readableState.readable = !1, this._readableState.ended = !0, this._readableState.endEmitted = !0), !1 === e?.writable && (this._writableState.writable = !1, this._writableState.ending = !0, this._writableState.ended = !0, this._writableState.finished = !0) + } + }; + + function T(e) { + let t, r, i, s, a, l = e.readable && "function" != typeof e.readable.read ? w.wrap(e.readable) : e.readable, + h = e.writable, + u = !!n(l), + c = !!o(h); + + function f(e) { + let t = s; + s = null, t ? t(e) : e && a.destroy(e) + } + return a = new k({ + readableObjectMode: !(null == l || !l.readableObjectMode), + writableObjectMode: !(null == h || !h.writableObjectMode), + readable: u, + writable: c + }), c && (p(h, (e => { + c = !1, e && y(l, e), f(e) + })), a._write = function(e, r, i) { + h.write(e, r) ? i() : t = i + }, a._final = function(e) { + h.end(), r = e + }, h.on("drain", (function() { + if (t) { + let e = t; + t = null, e() + } + })), h.on("finish", (function() { + if (r) { + let e = r; + r = null, e() + } + }))), u && (p(l, (e => { + u = !1, e && y(l, e), f(e) + })), l.on("readable", (function() { + if (i) { + let e = i; + i = null, e() + } + })), l.on("end", (function() { + a.push(null) + })), a._read = function() { + for (;;) { + let e = l.read(); + if (null === e) return void(i = a._read); + if (!a.push(e)) return + } + }), a._destroy = function(e, n) { + !e && null !== s && (e = new d), i = null, t = null, r = null, null === s ? n(e) : (s = n, y(h, e), y(l, e)) + }, a + } + t.exports = function e(t, i) { + if (u(t)) return t; + if (l(t)) return T({ + readable: t + }); + if (h(t)) return T({ + writable: t + }); + if (a(t)) return T({ + writable: !1, + readable: !1 + }); + if ("function" == typeof t) { + let { + value: e, + write: n, + final: o, + destroy: a + } = function(e) { + let { + promise: t, + resolve: i + } = _(), n = new A, o = n.signal; + return { + value: e(async function*() { + for (;;) { + let e = t; + t = null; + let { + chunk: n, + done: s, + cb: a + } = await e; + if (r.nextTick(a), s) return; + if (o.aborted) throw new d(void 0, { + cause: o.reason + }); + ({ + promise: t, + resolve: i + } = _()), yield n + } + }(), { + signal: o + }), + write(e, t, r) { + let n = i; + i = null, n({ + chunk: e, + done: !1, + cb: r + }) + }, + final(e) { + let t = i; + i = null, t({ + done: !0, + cb: e + }) + }, + destroy(e, t) { + n.abort(), t(e) + } + } + }(t); + if (s(e)) return v(k, e, { + objectMode: !0, + write: n, + final: o, + destroy: a + }); + let l = e?.then; + if ("function" == typeof l) { + let t, i = I(l, e, (e => { + if (null != e) throw new b("nully", "body", e) + }), (e => { + y(t, e) + })); + return t = new k({ + objectMode: !0, + readable: !1, + write: n, + final(e) { + o((async () => { + try { + await i, r.nextTick(e, null) + } catch (t) { + r.nextTick(e, t) + } + })) + }, + destroy: a + }) + } + throw new b("Iterable, AsyncIterable or AsyncFunction", i, e) + } + if (S(t)) return e(t.arrayBuffer()); + if (s(t)) return v(k, t, { + objectMode: !0, + writable: !1 + }); + if ("object" == typeof t?.writable || "object" == typeof t?.readable) return T({ + readable: null != t && t.readable ? l(t?.readable) ? t?.readable : e(t.readable) : void 0, + writable: null != t && t.writable ? h(t?.writable) ? t?.writable : e(t.writable) : void 0 + }); + let n = t?.then; + if ("function" == typeof n) { + let e; + return I(n, t, (t => { + null != t && e.push(t), e.push(null) + }), (t => { + y(e, t) + })), e = new k({ + objectMode: !0, + writable: !1, + read() {} + }) + } + throw new g(i, ["Blob", "ReadableStream", "WritableStream", "Stream", "Iterable", "AsyncIterable", "Function", "{ readable, writable } pair", "Promise"], t) + } + })), + li = h(((e, t) => { + f(), rt(), qe(); + var { + ObjectDefineProperties: r, + ObjectGetOwnPropertyDescriptor: i, + ObjectKeys: n, + ObjectSetPrototypeOf: o + } = nt(); + t.exports = u; + var s, a, l = oi(), + h = si(); + o(u.prototype, l.prototype), o(u, l); + { + let e = n(h.prototype); + for (let t = 0; t < e.length; t++) { + let r = e[t]; + u.prototype[r] || (u.prototype[r] = h.prototype[r]) + } + } + + function u(e) { + if (!(this instanceof u)) return new u(e); + l.call(this, e), h.call(this, e), e ? (this.allowHalfOpen = !1 !== e.allowHalfOpen, !1 === e.readable && (this._readableState.readable = !1, this._readableState.ended = !0, this._readableState.endEmitted = !0), !1 === e.writable && (this._writableState.writable = !1, this._writableState.ending = !0, this._writableState.ended = !0, this._writableState.finished = !0)) : this.allowHalfOpen = !0 + } + + function c() { + return void 0 === s && (s = {}), s + } + r(u.prototype, { + writable: { + __proto__: null, + ...i(h.prototype, "writable") + }, + writableHighWaterMark: { + __proto__: null, + ...i(h.prototype, "writableHighWaterMark") + }, + writableObjectMode: { + __proto__: null, + ...i(h.prototype, "writableObjectMode") + }, + writableBuffer: { + __proto__: null, + ...i(h.prototype, "writableBuffer") + }, + writableLength: { + __proto__: null, + ...i(h.prototype, "writableLength") + }, + writableFinished: { + __proto__: null, + ...i(h.prototype, "writableFinished") + }, + writableCorked: { + __proto__: null, + ...i(h.prototype, "writableCorked") + }, + writableEnded: { + __proto__: null, + ...i(h.prototype, "writableEnded") + }, + writableNeedDrain: { + __proto__: null, + ...i(h.prototype, "writableNeedDrain") + }, + destroyed: { + __proto__: null, + get() { + return void 0 !== this._readableState && void 0 !== this._writableState && this._readableState.destroyed && this._writableState.destroyed + }, + set(e) { + this._readableState && this._writableState && (this._readableState.destroyed = e, this._writableState.destroyed = e) + } + } + }), u.fromWeb = function(e, t) { + return c().newStreamDuplexFromReadableWritablePair(e, t) + }, u.toWeb = function(e) { + return c().newReadableWritablePairFromDuplex(e) + }, u.from = function(e) { + return a || (a = ai()), a(e, "body") + } + })), + hi = h(((e, t) => { + f(), rt(), qe(); + var { + ObjectSetPrototypeOf: r, + Symbol: i + } = nt(); + t.exports = l; + var { + ERR_METHOD_NOT_IMPLEMENTED: n + } = at().codes, o = li(), { + getHighWaterMark: s + } = Wt(); + r(l.prototype, o.prototype), r(l, o); + var a = i("kCallback"); + + function l(e) { + if (!(this instanceof l)) return new l(e); + let t = e ? s(this, e, "readableHighWaterMark", !0) : null; + 0 === t && (e = { + ...e, + highWaterMark: null, + readableHighWaterMark: t, + writableHighWaterMark: e.writableHighWaterMark || 0 + }), o.call(this, e), this._readableState.sync = !1, this[a] = null, e && ("function" == typeof e.transform && (this._transform = e.transform), "function" == typeof e.flush && (this._flush = e.flush)), this.on("prefinish", u) + } + + function h(e) { + "function" != typeof this._flush || this.destroyed ? (this.push(null), e && e()) : this._flush(((t, r) => { + t ? e ? e(t) : this.destroy(t) : (null != r && this.push(r), this.push(null), e && e()) + })) + } + + function u() { + this._final !== h && h.call(this) + } + l.prototype._final = h, l.prototype._transform = function(e, t, r) { + throw new n("_transform()") + }, l.prototype._write = function(e, t, r) { + let i = this._readableState, + n = this._writableState, + o = i.length; + this._transform(e, t, ((e, t) => { + e ? r(e) : (null != t && this.push(t), n.ended || o === i.length || i.length < i.highWaterMark ? r() : this[a] = r) + })) + }, l.prototype._read = function() { + if (this[a]) { + let e = this[a]; + this[a] = null, e() + } + } + })), + ui = h(((e, t) => { + f(), rt(), qe(); + var { + ObjectSetPrototypeOf: r + } = nt(); + t.exports = n; + var i = hi(); + + function n(e) { + if (!(this instanceof n)) return new n(e); + i.call(this, e) + } + r(n.prototype, i.prototype), r(n, i), n.prototype._transform = function(e, t, r) { + r(null, e) + } + })), + ci = h(((e, t) => { + f(), rt(), qe(); + var r, i, n = ht(), + { + ArrayIsArray: o, + Promise: s, + SymbolAsyncIterator: a + } = nt(), + l = ct(), + { + once: h + } = ot(), + u = ft(), + c = li(), + { + aggregateTwoErrors: p, + codes: { + ERR_INVALID_ARG_TYPE: d, + ERR_INVALID_RETURN_VALUE: g, + ERR_MISSING_ARGS: b, + ERR_STREAM_DESTROYED: y, + ERR_STREAM_PREMATURE_CLOSE: m + }, + AbortError: w + } = at(), + { + validateFunction: _, + validateAbortSignal: v + } = lt(), + { + isIterable: E, + isReadable: S, + isReadableNodeStream: A, + isNodeStream: I, + isTransformStream: k, + isWebStream: T, + isReadableStream: C, + isReadableEnded: R + } = ut(), + O = globalThis.AbortController || st().AbortController; + + function P(e, t, r) { + let i = !1; + return e.on("close", (() => { + i = !0 + })), { + destroy: t => { + i || (i = !0, u.destroyer(e, t || new y("pipe"))) + }, + cleanup: l(e, { + readable: t, + writable: r + }, (e => { + i = !e + })) + } + } + + function B(e) { + if (E(e)) return e; + if (A(e)) return async function*(e) { + i || (i = oi()), yield* i.prototype[a].call(e) + }(e); + throw new d("val", ["Readable", "Iterable", "AsyncIterable"], e) + } + async function x(e, t, r, { + end: i + }) { + let n, o = null, + a = e => { + if (e && (n = e), o) { + let e = o; + o = null, e() + } + }, + h = () => new s(((e, t) => { + n ? t(n) : o = () => { + n ? t(n) : e() + } + })); + t.on("drain", a); + let u = l(t, { + readable: !1 + }, a); + try { + t.writableNeedDrain && await h(); + for await (let r of e) t.write(r) || await h(); + i && t.end(), await h(), r() + } catch (e) { + r(n !== e ? p(n, e) : e) + } finally { + u(), t.off("drain", a) + } + } + async function U(e, t, r, { + end: i + }) { + k(t) && (t = t.writable); + let n = t.getWriter(); + try { + for await (let t of e) await n.ready, n.write(t).catch((() => {})); + await n.ready, i && await n.close(), r() + } catch (e) { + try { + await n.abort(e), r(e) + } catch (e) { + r(e) + } + } + } + + function M(e, t, i) { + if (1 === e.length && o(e[0]) && (e = e[0]), e.length < 2) throw new b("streams"); + let s = new O, + a = s.signal, + l = i?.signal, + h = []; + + function u() { + M(new w) + } + v(l, "options.signal"), l?.addEventListener("abort", u); + let f, p, y, m = [], + _ = 0; + + function R(e) { + M(e, 0 == --_) + } + + function M(e, r) { + if (e && (!f || "ERR_STREAM_PREMATURE_CLOSE" === f.code) && (f = e), f || r) { + for (; m.length;) m.shift()(f); + l?.removeEventListener("abort", u), s.abort(), r && (f || h.forEach((e => e())), n.nextTick(t, f, p)) + } + } + for (let t = 0; t < e.length; t++) { + let o = e[t], + s = t < e.length - 1, + l = t > 0, + u = s || !1 !== i?.end, + f = t === e.length - 1; + if (I(o)) { + let e = function(e) { + e && "AbortError" !== e.name && "ERR_STREAM_PREMATURE_CLOSE" !== e.code && R(e) + }; + if (u) { + let { + destroy: e, + cleanup: t + } = P(o, s, l); + m.push(e), S(o) && f && h.push(t) + } + o.on("error", e), S(o) && f && h.push((() => { + o.removeListener("error", e) + })) + } + if (0 === t) + if ("function" == typeof o) { + if (y = o({ + signal: a + }), !E(y)) throw new g("Iterable, AsyncIterable or Stream", "source", y) + } else y = E(o) || A(o) || k(o) ? o : c.from(o); + else if ("function" == typeof o) { + var N; + if (y = k(y) ? B(null === (N = y) || void 0 === N ? void 0 : N.readable) : B(y), y = o(y, { + signal: a + }), s) { + if (!E(y, !0)) throw new g("AsyncIterable", `transform[${t-1}]`, y) + } else { + var j; + r || (r = ui()); + let e = new r({ + objectMode: !0 + }), + t = null === (j = y) || void 0 === j ? void 0 : j.then; + if ("function" == typeof t) _++, t.call(y, (t => { + p = t, null != t && e.write(t), u && e.end(), n.nextTick(R) + }), (t => { + e.destroy(t), n.nextTick(R, t) + })); + else if (E(y, !0)) _++, x(y, e, R, { + end: u + }); + else { + if (!C(y) && !k(y)) throw new g("AsyncIterable or Promise", "destination", y); + { + let t = y.readable || y; + _++, x(t, e, R, { + end: u + }) + } + } + y = e; + let { + destroy: i, + cleanup: o + } = P(y, !1, !0); + m.push(i), f && h.push(o) + } + } else if (I(o)) { + if (A(y)) { + _ += 2; + let e = L(y, o, R, { + end: u + }); + S(o) && f && h.push(e) + } else if (k(y) || C(y)) { + let e = y.readable || y; + _++, x(e, o, R, { + end: u + }) + } else { + if (!E(y)) throw new d("val", ["Readable", "Iterable", "AsyncIterable", "ReadableStream", "TransformStream"], y); + _++, x(y, o, R, { + end: u + }) + } + y = o + } else if (T(o)) { + if (A(y)) _++, U(B(y), o, R, { + end: u + }); + else if (C(y) || E(y)) _++, U(y, o, R, { + end: u + }); + else { + if (!k(y)) throw new d("val", ["Readable", "Iterable", "AsyncIterable", "ReadableStream", "TransformStream"], y); + _++, U(y.readable, o, R, { + end: u + }) + } + y = o + } else y = c.from(o) + } + return (null != a && a.aborted || null != l && l.aborted) && n.nextTick(u), y + } + + function L(e, t, r, { + end: i + }) { + let o = !1; + if (t.on("close", (() => { + o || r(new m) + })), e.pipe(t, { + end: !1 + }), i) { + let r = function() { + o = !0, t.end() + }; + R(e) ? n.nextTick(r) : e.once("end", r) + } else r(); + return l(e, { + readable: !0, + writable: !1 + }, (t => { + let i = e._readableState; + t && "ERR_STREAM_PREMATURE_CLOSE" === t.code && i && i.ended && !i.errored && !i.errorEmitted ? e.once("end", r).once("error", r) : r(t) + })), l(t, { + readable: !1, + writable: !0 + }, r) + } + t.exports = { + pipelineImpl: M, + pipeline: function(...e) { + return M(e, h(function(e) { + return _(e[e.length - 1], "streams[stream.length - 1]"), e.pop() + }(e))) + } + } + })), + fi = h(((e, t) => { + f(), rt(), qe(); + var { + pipeline: r + } = ci(), i = li(), { + destroyer: n + } = ft(), { + isNodeStream: o, + isReadable: s, + isWritable: a, + isWebStream: l, + isTransformStream: h, + isWritableStream: u, + isReadableStream: c + } = ut(), { + AbortError: p, + codes: { + ERR_INVALID_ARG_VALUE: d, + ERR_MISSING_ARGS: g + } + } = at(), b = ct(); + t.exports = function(...e) { + if (0 === e.length) throw new g("streams"); + if (1 === e.length) return i.from(e[0]); + let t, f, y, m, w, _ = [...e]; + if ("function" == typeof e[0] && (e[0] = i.from(e[0])), "function" == typeof e[e.length - 1]) { + let t = e.length - 1; + e[t] = i.from(e[t]) + } + for (let t = 0; t < e.length; ++t) + if (o(e[t]) || l(e[t])) { + if (t < e.length - 1 && !(s(e[t]) || c(e[t]) || h(e[t]))) throw new d(`streams[${t}]`, _[t], "must be readable"); + if (t > 0 && !(a(e[t]) || u(e[t]) || h(e[t]))) throw new d(`streams[${t}]`, _[t], "must be writable") + } let v = e[0], + E = r(e, (function(e) { + let t = m; + m = null, t ? t(e) : e ? w.destroy(e) : !A && !S && w.destroy() + })), + S = !!(a(v) || u(v) || h(v)), + A = !!(s(E) || c(E) || h(E)); + if (w = new i({ + writableObjectMode: !(null == v || !v.writableObjectMode), + readableObjectMode: !(null == E || !E.writableObjectMode), + writable: S, + readable: A + }), S) { + if (o(v)) w._write = function(e, r, i) { + v.write(e, r) ? i() : t = i + }, w._final = function(e) { + v.end(), f = e + }, v.on("drain", (function() { + if (t) { + let e = t; + t = null, e() + } + })); + else if (l(v)) { + let e = (h(v) ? v.writable : v).getWriter(); + w._write = async function(t, r, i) { + try { + await e.ready, e.write(t).catch((() => {})), i() + } catch (e) { + i(e) + } + }, w._final = async function(t) { + try { + await e.ready, e.close().catch((() => {})), f = t + } catch (e) { + t(e) + } + } + } + let e = h(E) ? E.readable : E; + b(e, (() => { + if (f) { + let e = f; + f = null, e() + } + })) + } + if (A) + if (o(E)) E.on("readable", (function() { + if (y) { + let e = y; + y = null, e() + } + })), E.on("end", (function() { + w.push(null) + })), w._read = function() { + for (;;) { + let e = E.read(); + if (null === e) return void(y = w._read); + if (!w.push(e)) return + } + }; + else if (l(E)) { + let e = (h(E) ? E.readable : E).getReader(); + w._read = async function() { + for (;;) try { + let { + value: t, + done: r + } = await e.read(); + if (!w.push(t)) return; + if (r) return void w.push(null) + } catch { + return + } + } + } + return w._destroy = function(e, r) { + !e && null !== m && (e = new p), y = null, t = null, f = null, null === m ? r(e) : (m = r, o(E) && n(E, e)) + }, w + } + })), + pi = h(((e, t) => { + f(), rt(), qe(); + var r = globalThis.AbortController || st().AbortController, + { + codes: { + ERR_INVALID_ARG_VALUE: i, + ERR_INVALID_ARG_TYPE: n, + ERR_MISSING_ARGS: o, + ERR_OUT_OF_RANGE: s + }, + AbortError: a + } = at(), + { + validateAbortSignal: l, + validateInteger: h, + validateObject: u + } = lt(), + c = nt().Symbol("kWeak"), + { + finished: p + } = ct(), + d = fi(), + { + addAbortSignalNoValidate: g + } = Dt(), + { + isWritable: b, + isNodeStream: y + } = ut(), + { + ArrayPrototypePush: m, + MathFloor: w, + Number: _, + NumberIsNaN: v, + Promise: E, + PromiseReject: S, + PromisePrototypeThen: A, + Symbol: I + } = nt(), + k = I("kEmpty"), + T = I("kEof"); + + function C(e, t) { + if ("function" != typeof e) throw new n("fn", ["Function", "AsyncFunction"], e); + null != t && u(t, "options"), null != t?.signal && l(t.signal, "options.signal"); + let i = 1; + return null != t?.concurrency && (i = w(t.concurrency)), h(i, "concurrency", 1), async function*() { + var n, o; + let s = new r, + l = this, + h = [], + u = s.signal, + c = { + signal: u + }, + f = () => s.abort(); + null != t && null !== (n = t.signal) && void 0 !== n && n.aborted && f(), null == t || null === (o = t.signal) || void 0 === o || o.addEventListener("abort", f); + let p, d, g = !1; + + function b() { + g = !0 + }!async function() { + try { + for await (let t of l) { + var r; + if (g) return; + if (u.aborted) throw new a; + try { + t = e(t, c) + } catch (e) { + t = S(e) + } + t !== k && ("function" == typeof(null === (r = t) || void 0 === r ? void 0 : r.catch) && t.catch(b), h.push(t), p && (p(), p = null), !g && h.length && h.length >= i && await new E((e => { + d = e + }))) + } + h.push(T) + } catch (e) { + let t = S(e); + A(t, void 0, b), h.push(t) + } finally { + var n; + g = !0, p && (p(), p = null), null == t || null === (n = t.signal) || void 0 === n || n.removeEventListener("abort", f) + } + }(); + try { + for (;;) { + for (; h.length > 0;) { + let e = await h[0]; + if (e === T) return; + if (u.aborted) throw new a; + e !== k && (yield e), h.shift(), d && (d(), d = null) + } + await new E((e => { + p = e + })) + } + } finally { + s.abort(), g = !0, d && (d(), d = null) + } + }.call(this) + } + async function R(e, t) { + for await (let r of O.call(this, e, t)) return !0; + return !1 + } + + function O(e, t) { + if ("function" != typeof e) throw new n("fn", ["Function", "AsyncFunction"], e); + return C.call(this, (async function(t, r) { + return await e(t, r) ? t : k + }), t) + } + var P = class extends o { + constructor() { + super("reduce"), this.message = "Reduce of an empty stream requires an initial value" + } + }; + + function B(e) { + if (e = _(e), v(e)) return 0; + if (e < 0) throw new s("number", ">= 0", e); + return e + } + t.exports.streamReturningOperators = { + asIndexedPairs: function(e) { + return null != e && u(e, "options"), null != e?.signal && l(e.signal, "options.signal"), async function*() { + let t = 0; + for await (let i of this) { + var r; + if (null != e && null !== (r = e.signal) && void 0 !== r && r.aborted) throw new a({ + cause: e.signal.reason + }); + yield [t++, i] + } + }.call(this) + }, + drop: function(e, t) { + return null != t && u(t, "options"), null != t?.signal && l(t.signal, "options.signal"), e = B(e), async function*() { + var r; + if (null != t && null !== (r = t.signal) && void 0 !== r && r.aborted) throw new a; + for await (let r of this) { + var i; + if (null != t && null !== (i = t.signal) && void 0 !== i && i.aborted) throw new a; + e-- <= 0 && (yield r) + } + }.call(this) + }, + filter: O, + flatMap: function(e, t) { + let r = C.call(this, e, t); + return async function*() { + for await (let e of r) yield* e + }.call(this) + }, + map: C, + take: function(e, t) { + return null != t && u(t, "options"), null != t?.signal && l(t.signal, "options.signal"), e = B(e), async function*() { + var r; + if (null != t && null !== (r = t.signal) && void 0 !== r && r.aborted) throw new a; + for await (let r of this) { + var i; + if (null != t && null !== (i = t.signal) && void 0 !== i && i.aborted) throw new a; + if (!(e-- > 0)) return; + yield r + } + }.call(this) + }, + compose: function(e, t) { + if (null != t && u(t, "options"), null != t?.signal && l(t.signal, "options.signal"), y(e) && !b(e)) throw new i("stream", e, "must be writable"); + let r = d(this, e); + return null != t && t.signal && g(t.signal, r), r + } + }, t.exports.promiseReturningOperators = { + every: async function(e, t) { + if ("function" != typeof e) throw new n("fn", ["Function", "AsyncFunction"], e); + return !await R.call(this, (async (...t) => !await e(...t)), t) + }, + forEach: async function(e, t) { + if ("function" != typeof e) throw new n("fn", ["Function", "AsyncFunction"], e); + for await (let r of C.call(this, (async function(t, r) { + return await e(t, r), k + }), t)); + }, + reduce: async function(e, t, i) { + var o; + if ("function" != typeof e) throw new n("reducer", ["Function", "AsyncFunction"], e); + null != i && u(i, "options"), null != i?.signal && l(i.signal, "options.signal"); + let s = arguments.length > 1; + if (null != i && null !== (o = i.signal) && void 0 !== o && o.aborted) { + let e = new a(void 0, { + cause: i.signal.reason + }); + throw this.once("error", (() => {})), await p(this.destroy(e)), e + } + let h = new r, + f = h.signal; + if (null != i && i.signal) { + let e = { + once: !0, + [c]: this + }; + i.signal.addEventListener("abort", (() => h.abort()), e) + } + let d = !1; + try { + for await (let r of this) { + var g; + if (d = !0, null != i && null !== (g = i.signal) && void 0 !== g && g.aborted) throw new a; + s ? t = await e(t, r, { + signal: f + }) : (t = r, s = !0) + } + if (!d && !s) throw new P + } finally { + h.abort() + } + return t + }, + toArray: async function(e) { + null != e && u(e, "options"), null != e?.signal && l(e.signal, "options.signal"); + let t = []; + for await (let i of this) { + var r; + if (null != e && null !== (r = e.signal) && void 0 !== r && r.aborted) throw new a(void 0, { + cause: e.signal.reason + }); + m(t, i) + } + return t + }, + some: R, + find: async function(e, t) { + for await (let r of O.call(this, e, t)) return r + } + } + })), + di = h(((e, t) => { + f(), rt(), qe(); + var { + ArrayPrototypePop: r, + Promise: i + } = nt(), { + isIterable: n, + isNodeStream: o, + isWebStream: s + } = ut(), { + pipelineImpl: a + } = ci(), { + finished: l + } = ct(); + gi(), t.exports = { + finished: l, + pipeline: function(...e) { + return new i(((t, i) => { + let l, h, u = e[e.length - 1]; + if (u && "object" == typeof u && !o(u) && !n(u) && !s(u)) { + let t = r(e); + l = t.signal, h = t.end + } + a(e, ((e, r) => { + e ? i(e) : t(r) + }), { + signal: l, + end: h + }) + })) + } + } + })), + gi = h(((e, t) => { + f(), rt(), qe(); + var { + Buffer: r + } = (tt(), c(Ve)), { + ObjectDefineProperty: i, + ObjectKeys: n, + ReflectApply: o + } = nt(), { + promisify: { + custom: s + } + } = ot(), { + streamReturningOperators: a, + promiseReturningOperators: l + } = pi(), { + codes: { + ERR_ILLEGAL_CONSTRUCTOR: h + } + } = at(), u = fi(), { + pipeline: p + } = ci(), { + destroyer: d + } = ft(), g = ct(), b = di(), y = ut(), m = t.exports = jt().Stream; + m.isDisturbed = y.isDisturbed, m.isErrored = y.isErrored, m.isReadable = y.isReadable, m.Readable = oi(); + for (let e of n(a)) { + let t = function(...e) { + if (new.target) throw h(); + return m.Readable.from(o(r, this, e)) + }, + r = a[e]; + i(t, "name", { + __proto__: null, + value: r.name + }), i(t, "length", { + __proto__: null, + value: r.length + }), i(m.Readable.prototype, e, { + __proto__: null, + value: t, + enumerable: !1, + configurable: !0, + writable: !0 + }) + } + for (let e of n(l)) { + let t = function(...e) { + if (new.target) throw h(); + return o(r, this, e) + }, + r = l[e]; + i(t, "name", { + __proto__: null, + value: r.name + }), i(t, "length", { + __proto__: null, + value: r.length + }), i(m.Readable.prototype, e, { + __proto__: null, + value: t, + enumerable: !1, + configurable: !0, + writable: !0 + }) + } + m.Writable = si(), m.Duplex = li(), m.Transform = hi(), m.PassThrough = ui(), m.pipeline = p; + var { + addAbortSignal: w + } = Dt(); + m.addAbortSignal = w, m.finished = g, m.destroy = d, m.compose = u, i(m, "promises", { + __proto__: null, + configurable: !0, + enumerable: !0, + get: () => b + }), i(p, s, { + __proto__: null, + enumerable: !0, + get: () => b.pipeline + }), i(g, s, { + __proto__: null, + enumerable: !0, + get: () => b.finished + }), m.Stream = m, m._isUint8Array = function(e) { + return e instanceof Uint8Array + }, m._uint8ArrayToBuffer = function(e) { + return r.from(e.buffer, e.byteOffset, e.byteLength) + } + })), + bi = h(((e, t) => { + f(), rt(), qe(); + var r = gi(), + i = di(), + n = r.Readable.destroy; + t.exports = r.Readable, t.exports._uint8ArrayToBuffer = r._uint8ArrayToBuffer, t.exports._isUint8Array = r._isUint8Array, t.exports.isDisturbed = r.isDisturbed, t.exports.isErrored = r.isErrored, t.exports.isReadable = r.isReadable, t.exports.Readable = r.Readable, t.exports.Writable = r.Writable, t.exports.Duplex = r.Duplex, t.exports.Transform = r.Transform, t.exports.PassThrough = r.PassThrough, t.exports.addAbortSignal = r.addAbortSignal, t.exports.finished = r.finished, t.exports.destroy = r.destroy, t.exports.destroy = n, t.exports.pipeline = r.pipeline, t.exports.compose = r.compose, Object.defineProperty(r, "promises", { + configurable: !0, + enumerable: !0, + get: () => i + }), t.exports.Stream = r.Stream, t.exports.default = t.exports + })), + yi = h(((e, t) => { + f(), rt(), qe(), "function" == typeof Object.create ? t.exports = function(e, t) { + t && (e.super_ = t, e.prototype = Object.create(t.prototype, { + constructor: { + value: e, + enumerable: !1, + writable: !0, + configurable: !0 + } + })) + } : t.exports = function(e, t) { + if (t) { + e.super_ = t; + var r = function() {}; + r.prototype = t.prototype, e.prototype = new r, e.prototype.constructor = e + } + } + })), + mi = h(((e, t) => { + f(), rt(), qe(); + var { + Buffer: r + } = (tt(), c(Ve)), i = Symbol.for("BufferList"); + + function n(e) { + if (!(this instanceof n)) return new n(e); + n._init.call(this, e) + } + n._init = function(e) { + Object.defineProperty(this, i, { + value: !0 + }), this._bufs = [], this.length = 0, e && this.append(e) + }, n.prototype._new = function(e) { + return new n(e) + }, n.prototype._offset = function(e) { + if (0 === e) return [0, 0]; + let t = 0; + for (let r = 0; r < this._bufs.length; r++) { + let i = t + this._bufs[r].length; + if (e < i || r === this._bufs.length - 1) return [r, e - t]; + t = i + } + }, n.prototype._reverseOffset = function(e) { + let t = e[0], + r = e[1]; + for (let e = 0; e < t; e++) r += this._bufs[e].length; + return r + }, n.prototype.get = function(e) { + if (e > this.length || e < 0) return; + let t = this._offset(e); + return this._bufs[t[0]][t[1]] + }, n.prototype.slice = function(e, t) { + return "number" == typeof e && e < 0 && (e += this.length), "number" == typeof t && t < 0 && (t += this.length), this.copy(null, 0, e, t) + }, n.prototype.copy = function(e, t, i, n) { + if (("number" != typeof i || i < 0) && (i = 0), ("number" != typeof n || n > this.length) && (n = this.length), i >= this.length || n <= 0) return e || r.alloc(0); + let o = !!e, + s = this._offset(i), + a = n - i, + l = a, + h = o && t || 0, + u = s[1]; + if (0 === i && n === this.length) { + if (!o) return 1 === this._bufs.length ? this._bufs[0] : r.concat(this._bufs, this.length); + for (let t = 0; t < this._bufs.length; t++) this._bufs[t].copy(e, h), h += this._bufs[t].length; + return e + } + if (l <= this._bufs[s[0]].length - u) return o ? this._bufs[s[0]].copy(e, t, u, u + l) : this._bufs[s[0]].slice(u, u + l); + o || (e = r.allocUnsafe(a)); + for (let t = s[0]; t < this._bufs.length; t++) { + let r = this._bufs[t].length - u; + if (!(l > r)) { + this._bufs[t].copy(e, h, u, u + l), h += r; + break + } + this._bufs[t].copy(e, h, u), h += r, l -= r, u && (u = 0) + } + return e.length > h ? e.slice(0, h) : e + }, n.prototype.shallowSlice = function(e, t) { + if (e = e || 0, t = "number" != typeof t ? this.length : t, e < 0 && (e += this.length), t < 0 && (t += this.length), e === t) return this._new(); + let r = this._offset(e), + i = this._offset(t), + n = this._bufs.slice(r[0], i[0] + 1); + return 0 === i[1] ? n.pop() : n[n.length - 1] = n[n.length - 1].slice(0, i[1]), 0 !== r[1] && (n[0] = n[0].slice(r[1])), this._new(n) + }, n.prototype.toString = function(e, t, r) { + return this.slice(t, r).toString(e) + }, n.prototype.consume = function(e) { + if (e = Math.trunc(e), Number.isNaN(e) || e <= 0) return this; + for (; this._bufs.length;) { + if (!(e >= this._bufs[0].length)) { + this._bufs[0] = this._bufs[0].slice(e), this.length -= e; + break + } + e -= this._bufs[0].length, this.length -= this._bufs[0].length, this._bufs.shift() + } + return this + }, n.prototype.duplicate = function() { + let e = this._new(); + for (let t = 0; t < this._bufs.length; t++) e.append(this._bufs[t]); + return e + }, n.prototype.append = function(e) { + if (null == e) return this; + if (e.buffer) this._appendBuffer(r.from(e.buffer, e.byteOffset, e.byteLength)); + else if (Array.isArray(e)) + for (let t = 0; t < e.length; t++) this.append(e[t]); + else if (this._isBufferList(e)) + for (let t = 0; t < e._bufs.length; t++) this.append(e._bufs[t]); + else "number" == typeof e && (e = e.toString()), this._appendBuffer(r.from(e)); + return this + }, n.prototype._appendBuffer = function(e) { + this._bufs.push(e), this.length += e.length + }, n.prototype.indexOf = function(e, t, i) { + if (void 0 === i && "string" == typeof t && (i = t, t = void 0), "function" == typeof e || Array.isArray(e)) throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.'); + if ("number" == typeof e ? e = r.from([e]) : "string" == typeof e ? e = r.from(e, i) : this._isBufferList(e) ? e = e.slice() : Array.isArray(e.buffer) ? e = r.from(e.buffer, e.byteOffset, e.byteLength) : r.isBuffer(e) || (e = r.from(e)), t = Number(t || 0), isNaN(t) && (t = 0), t < 0 && (t = this.length + t), t < 0 && (t = 0), 0 === e.length) return t > this.length ? this.length : t; + let n = this._offset(t), + o = n[0], + s = n[1]; + for (; o < this._bufs.length; o++) { + let t = this._bufs[o]; + for (; s < t.length;) + if (t.length - s >= e.length) { + let r = t.indexOf(e, s); + if (-1 !== r) return this._reverseOffset([o, r]); + s = t.length - e.length + 1 + } else { + let t = this._reverseOffset([o, s]); + if (this._match(t, e)) return t; + s++ + } s = 0 + } + return -1 + }, n.prototype._match = function(e, t) { + if (this.length - e < t.length) return !1; + for (let r = 0; r < t.length; r++) + if (this.get(e + r) !== t[r]) return !1; + return !0 + }, + function() { + let e = { + readDoubleBE: 8, + readDoubleLE: 8, + readFloatBE: 4, + readFloatLE: 4, + readBigInt64BE: 8, + readBigInt64LE: 8, + readBigUInt64BE: 8, + readBigUInt64LE: 8, + readInt32BE: 4, + readInt32LE: 4, + readUInt32BE: 4, + readUInt32LE: 4, + readInt16BE: 2, + readInt16LE: 2, + readUInt16BE: 2, + readUInt16LE: 2, + readInt8: 1, + readUInt8: 1, + readIntBE: null, + readIntLE: null, + readUIntBE: null, + readUIntLE: null + }; + for (let t in e) ! function(t) { + n.prototype[t] = null === e[t] ? function(e, r) { + return this.slice(e, e + r)[t](0, r) + } : function(r = 0) { + return this.slice(r, r + e[t])[t](0) + } + }(t) + }(), n.prototype._isBufferList = function(e) { + return e instanceof n || n.isBufferList(e) + }, n.isBufferList = function(e) { + return null != e && e[i] + }, t.exports = n + })), + wi = h(((e, t) => { + f(), rt(), qe(); + var r = bi().Duplex, + i = yi(), + n = mi(); + + function o(e) { + if (!(this instanceof o)) return new o(e); + if ("function" == typeof e) { + this._callback = e; + let t = function(e) { + this._callback && (this._callback(e), this._callback = null) + }.bind(this); + this.on("pipe", (function(e) { + e.on("error", t) + })), this.on("unpipe", (function(e) { + e.removeListener("error", t) + })), e = null + } + n._init.call(this, e), r.call(this) + } + i(o, r), Object.assign(o.prototype, n.prototype), o.prototype._new = function(e) { + return new o(e) + }, o.prototype._write = function(e, t, r) { + this._appendBuffer(e), "function" == typeof r && r() + }, o.prototype._read = function(e) { + if (!this.length) return this.push(null); + e = Math.min(e, this.length), this.push(this.slice(0, e)), this.consume(e) + }, o.prototype.end = function(e) { + r.prototype.end.call(this, e), this._callback && (this._callback(null, this.slice()), this._callback = null) + }, o.prototype._destroy = function(e, t) { + this._bufs.length = 0, this.length = 0, t(e) + }, o.prototype._isBufferList = function(e) { + return e instanceof o || e instanceof n || o.isBufferList(e) + }, o.isBufferList = n.isBufferList, t.exports = o, t.exports.BufferListStream = o, t.exports.BufferList = n + })), + _i = h(((e, t) => { + f(), rt(), qe(), t.exports = class { + constructor() { + this.cmd = null, this.retain = !1, this.qos = 0, this.dup = !1, this.length = -1, this.topic = null, this.payload = null + } + } + })), + vi = h(((e, t) => { + f(), rt(), qe(); + var r = t.exports, + { + Buffer: i + } = (tt(), c(Ve)); + r.types = { + 0: "reserved", + 1: "connect", + 2: "connack", + 3: "publish", + 4: "puback", + 5: "pubrec", + 6: "pubrel", + 7: "pubcomp", + 8: "subscribe", + 9: "suback", + 10: "unsubscribe", + 11: "unsuback", + 12: "pingreq", + 13: "pingresp", + 14: "disconnect", + 15: "auth" + }, r.requiredHeaderFlags = { + 1: 0, + 2: 0, + 4: 0, + 5: 0, + 6: 2, + 7: 0, + 8: 2, + 9: 0, + 10: 2, + 11: 0, + 12: 0, + 13: 0, + 14: 0, + 15: 0 + }, r.requiredHeaderFlagsErrors = {}; + for (let e in r.requiredHeaderFlags) { + let t = r.requiredHeaderFlags[e]; + r.requiredHeaderFlagsErrors[e] = "Invalid header flag bits, must be 0x" + t.toString(16) + " for " + r.types[e] + " packet" + } + r.codes = {}; + for (let e in r.types) { + let t = r.types[e]; + r.codes[t] = e + } + r.CMD_SHIFT = 4, r.CMD_MASK = 240, r.DUP_MASK = 8, r.QOS_MASK = 3, r.QOS_SHIFT = 1, r.RETAIN_MASK = 1, r.VARBYTEINT_MASK = 127, r.VARBYTEINT_FIN_MASK = 128, r.VARBYTEINT_MAX = 268435455, r.SESSIONPRESENT_MASK = 1, r.SESSIONPRESENT_HEADER = i.from([r.SESSIONPRESENT_MASK]), r.CONNACK_HEADER = i.from([r.codes.connack << r.CMD_SHIFT]), r.USERNAME_MASK = 128, r.PASSWORD_MASK = 64, r.WILL_RETAIN_MASK = 32, r.WILL_QOS_MASK = 24, r.WILL_QOS_SHIFT = 3, r.WILL_FLAG_MASK = 4, r.CLEAN_SESSION_MASK = 2, r.CONNECT_HEADER = i.from([r.codes.connect << r.CMD_SHIFT]), r.properties = { + sessionExpiryInterval: 17, + willDelayInterval: 24, + receiveMaximum: 33, + maximumPacketSize: 39, + topicAliasMaximum: 34, + requestResponseInformation: 25, + requestProblemInformation: 23, + userProperties: 38, + authenticationMethod: 21, + authenticationData: 22, + payloadFormatIndicator: 1, + messageExpiryInterval: 2, + contentType: 3, + responseTopic: 8, + correlationData: 9, + maximumQoS: 36, + retainAvailable: 37, + assignedClientIdentifier: 18, + reasonString: 31, + wildcardSubscriptionAvailable: 40, + subscriptionIdentifiersAvailable: 41, + sharedSubscriptionAvailable: 42, + serverKeepAlive: 19, + responseInformation: 26, + serverReference: 28, + topicAlias: 35, + subscriptionIdentifier: 11 + }, r.propertiesCodes = {}; + for (let e in r.properties) { + let t = r.properties[e]; + r.propertiesCodes[t] = e + } + + function n(e) { + return [0, 1, 2].map((t => [0, 1].map((n => [0, 1].map((o => { + let s = i.alloc(1); + return s.writeUInt8(r.codes[e] << r.CMD_SHIFT | (n ? r.DUP_MASK : 0) | t << r.QOS_SHIFT | o, 0, !0), s + })))))) + } + r.propertiesTypes = { + sessionExpiryInterval: "int32", + willDelayInterval: "int32", + receiveMaximum: "int16", + maximumPacketSize: "int32", + topicAliasMaximum: "int16", + requestResponseInformation: "byte", + requestProblemInformation: "byte", + userProperties: "pair", + authenticationMethod: "string", + authenticationData: "binary", + payloadFormatIndicator: "byte", + messageExpiryInterval: "int32", + contentType: "string", + responseTopic: "string", + correlationData: "binary", + maximumQoS: "int8", + retainAvailable: "byte", + assignedClientIdentifier: "string", + reasonString: "string", + wildcardSubscriptionAvailable: "byte", + subscriptionIdentifiersAvailable: "byte", + sharedSubscriptionAvailable: "byte", + serverKeepAlive: "int16", + responseInformation: "string", + serverReference: "string", + topicAlias: "int16", + subscriptionIdentifier: "var" + }, r.PUBLISH_HEADER = n("publish"), r.SUBSCRIBE_HEADER = n("subscribe"), r.SUBSCRIBE_OPTIONS_QOS_MASK = 3, r.SUBSCRIBE_OPTIONS_NL_MASK = 1, r.SUBSCRIBE_OPTIONS_NL_SHIFT = 2, r.SUBSCRIBE_OPTIONS_RAP_MASK = 1, r.SUBSCRIBE_OPTIONS_RAP_SHIFT = 3, r.SUBSCRIBE_OPTIONS_RH_MASK = 3, r.SUBSCRIBE_OPTIONS_RH_SHIFT = 4, r.SUBSCRIBE_OPTIONS_RH = [0, 16, 32], r.SUBSCRIBE_OPTIONS_NL = 4, r.SUBSCRIBE_OPTIONS_RAP = 8, r.SUBSCRIBE_OPTIONS_QOS = [0, 1, 2], r.UNSUBSCRIBE_HEADER = n("unsubscribe"), r.ACKS = { + unsuback: n("unsuback"), + puback: n("puback"), + pubcomp: n("pubcomp"), + pubrel: n("pubrel"), + pubrec: n("pubrec") + }, r.SUBACK_HEADER = i.from([r.codes.suback << r.CMD_SHIFT]), r.VERSION3 = i.from([3]), r.VERSION4 = i.from([4]), r.VERSION5 = i.from([5]), r.VERSION131 = i.from([131]), r.VERSION132 = i.from([132]), r.QOS = [0, 1, 2].map((e => i.from([e]))), r.EMPTY = { + pingreq: i.from([r.codes.pingreq << 4, 0]), + pingresp: i.from([r.codes.pingresp << 4, 0]), + disconnect: i.from([r.codes.disconnect << 4, 0]) + }, r.MQTT5_PUBACK_PUBREC_CODES = { + 0: "Success", + 16: "No matching subscribers", + 128: "Unspecified error", + 131: "Implementation specific error", + 135: "Not authorized", + 144: "Topic Name invalid", + 145: "Packet identifier in use", + 151: "Quota exceeded", + 153: "Payload format invalid" + }, r.MQTT5_PUBREL_PUBCOMP_CODES = { + 0: "Success", + 146: "Packet Identifier not found" + }, r.MQTT5_SUBACK_CODES = { + 0: "Granted QoS 0", + 1: "Granted QoS 1", + 2: "Granted QoS 2", + 128: "Unspecified error", + 131: "Implementation specific error", + 135: "Not authorized", + 143: "Topic Filter invalid", + 145: "Packet Identifier in use", + 151: "Quota exceeded", + 158: "Shared Subscriptions not supported", + 161: "Subscription Identifiers not supported", + 162: "Wildcard Subscriptions not supported" + }, r.MQTT5_UNSUBACK_CODES = { + 0: "Success", + 17: "No subscription existed", + 128: "Unspecified error", + 131: "Implementation specific error", + 135: "Not authorized", + 143: "Topic Filter invalid", + 145: "Packet Identifier in use" + }, r.MQTT5_DISCONNECT_CODES = { + 0: "Normal disconnection", + 4: "Disconnect with Will Message", + 128: "Unspecified error", + 129: "Malformed Packet", + 130: "Protocol Error", + 131: "Implementation specific error", + 135: "Not authorized", + 137: "Server busy", + 139: "Server shutting down", + 141: "Keep Alive timeout", + 142: "Session taken over", + 143: "Topic Filter invalid", + 144: "Topic Name invalid", + 147: "Receive Maximum exceeded", + 148: "Topic Alias invalid", + 149: "Packet too large", + 150: "Message rate too high", + 151: "Quota exceeded", + 152: "Administrative action", + 153: "Payload format invalid", + 154: "Retain not supported", + 155: "QoS not supported", + 156: "Use another server", + 157: "Server moved", + 158: "Shared Subscriptions not supported", + 159: "Connection rate exceeded", + 160: "Maximum connect time", + 161: "Subscription Identifiers not supported", + 162: "Wildcard Subscriptions not supported" + }, r.MQTT5_AUTH_CODES = { + 0: "Success", + 24: "Continue authentication", + 25: "Re-authenticate" + } + })), + Ei = h(((e, t) => { + f(), rt(), qe(); + var r = 1e3, + i = 6e4, + n = 60 * i, + o = 24 * n; + + function s(e, t, r, i) { + var n = t >= 1.5 * r; + return Math.round(e / r) + " " + i + (n ? "s" : "") + } + t.exports = function(e, t) { + t = t || {}; + var a = typeof e; + if ("string" === a && e.length > 0) return function(e) { + if (!((e = String(e)).length > 100)) { + var t = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e); + if (t) { + var s = parseFloat(t[1]); + switch ((t[2] || "ms").toLowerCase()) { + case "years": + case "year": + case "yrs": + case "yr": + case "y": + return 315576e5 * s; + case "weeks": + case "week": + case "w": + return 6048e5 * s; + case "days": + case "day": + case "d": + return s * o; + case "hours": + case "hour": + case "hrs": + case "hr": + case "h": + return s * n; + case "minutes": + case "minute": + case "mins": + case "min": + case "m": + return s * i; + case "seconds": + case "second": + case "secs": + case "sec": + case "s": + return s * r; + case "milliseconds": + case "millisecond": + case "msecs": + case "msec": + case "ms": + return s; + default: + return + } + } + } + }(e); + if ("number" === a && isFinite(e)) return t.long ? function(e) { + var t = Math.abs(e); + return t >= o ? s(e, t, o, "day") : t >= n ? s(e, t, n, "hour") : t >= i ? s(e, t, i, "minute") : t >= r ? s(e, t, r, "second") : e + " ms" + }(e) : function(e) { + var t = Math.abs(e); + return t >= o ? Math.round(e / o) + "d" : t >= n ? Math.round(e / n) + "h" : t >= i ? Math.round(e / i) + "m" : t >= r ? Math.round(e / r) + "s" : e + "ms" + }(e); + throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(e)) + } + })), + Si = h(((e, t) => { + f(), rt(), qe(), t.exports = function(e) { + function t(e) { + let i, n, o, s = null; + + function a(...e) { + if (!a.enabled) return; + let r = a, + n = Number(new Date), + o = n - (i || n); + r.diff = o, r.prev = i, r.curr = n, i = n, e[0] = t.coerce(e[0]), "string" != typeof e[0] && e.unshift("%O"); + let s = 0; + e[0] = e[0].replace(/%([a-zA-Z%])/g, ((i, n) => { + if ("%%" === i) return "%"; + s++; + let o = t.formatters[n]; + if ("function" == typeof o) { + let t = e[s]; + i = o.call(r, t), e.splice(s, 1), s-- + } + return i + })), t.formatArgs.call(r, e), (r.log || t.log).apply(r, e) + } + return a.namespace = e, a.useColors = t.useColors(), a.color = t.selectColor(e), a.extend = r, a.destroy = t.destroy, Object.defineProperty(a, "enabled", { + enumerable: !0, + configurable: !1, + get: () => null !== s ? s : (n !== t.namespaces && (n = t.namespaces, o = t.enabled(e)), o), + set: e => { + s = e + } + }), "function" == typeof t.init && t.init(a), a + } + + function r(e, r) { + let i = t(this.namespace + (typeof r > "u" ? ":" : r) + e); + return i.log = this.log, i + } + + function n(e) { + return e.toString().substring(2, e.toString().length - 2).replace(/\.\*\?$/, "*") + } + return t.debug = t, t.default = t, t.coerce = function(e) { + return e instanceof Error ? e.stack || e.message : e + }, t.disable = function() { + let e = [...t.names.map(n), ...t.skips.map(n).map((e => "-" + e))].join(","); + return t.enable(""), e + }, t.enable = function(e) { + t.save(e), t.namespaces = e, t.names = [], t.skips = []; + let r, i = ("string" == typeof e ? e : "").split(/[\s,]+/), + n = i.length; + for (r = 0; r < n; r++) i[r] && ("-" === (e = i[r].replace(/\*/g, ".*?"))[0] ? t.skips.push(new RegExp("^" + e.slice(1) + "$")) : t.names.push(new RegExp("^" + e + "$"))) + }, t.enabled = function(e) { + if ("*" === e[e.length - 1]) return !0; + let r, i; + for (r = 0, i = t.skips.length; r < i; r++) + if (t.skips[r].test(e)) return !1; + for (r = 0, i = t.names.length; r < i; r++) + if (t.names[r].test(e)) return !0; + return !1 + }, t.humanize = Ei(), t.destroy = function() { + i.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.") + }, Object.keys(e).forEach((r => { + t[r] = e[r] + })), t.names = [], t.skips = [], t.formatters = {}, t.selectColor = function(e) { + let r = 0; + for (let t = 0; t < e.length; t++) r = (r << 5) - r + e.charCodeAt(t), r |= 0; + return t.colors[Math.abs(r) % t.colors.length] + }, t.enable(t.load()), t + } + })), + Ai = h(((e, t) => { + f(), rt(), qe(), e.formatArgs = function(e) { + if (e[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + e[0] + (this.useColors ? "%c " : " ") + "+" + t.exports.humanize(this.diff), !this.useColors) return; + let r = "color: " + this.color; + e.splice(1, 0, r, "color: inherit"); + let i = 0, + n = 0; + e[0].replace(/%[a-zA-Z%]/g, (e => { + "%%" !== e && (i++, "%c" === e && (n = i)) + })), e.splice(n, 0, r) + }, e.save = function(t) { + try { + t ? e.storage.setItem("debug", t) : e.storage.removeItem("debug") + } catch {} + }, e.load = function() { + let t; + try { + t = e.storage.getItem("debug") + } catch {} + return !t && typeof p < "u" && "env" in p && (t = p.env.DEBUG), t + }, e.useColors = function() { + return !(!(typeof window < "u" && window.process) || "renderer" !== window.process.type && !window.process.__nwjs) || !(typeof navigator < "u" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) && (typeof document < "u" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window < "u" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator < "u" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator < "u" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)) + }, e.storage = function() { + try { + return localStorage + } catch {} + }(), e.destroy = (() => { + let e = !1; + return () => { + e || (e = !0, i.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")) + } + })(), e.colors = ["#0000CC", "#0000FF", "#0033CC", "#0033FF", "#0066CC", "#0066FF", "#0099CC", "#0099FF", "#00CC00", "#00CC33", "#00CC66", "#00CC99", "#00CCCC", "#00CCFF", "#3300CC", "#3300FF", "#3333CC", "#3333FF", "#3366CC", "#3366FF", "#3399CC", "#3399FF", "#33CC00", "#33CC33", "#33CC66", "#33CC99", "#33CCCC", "#33CCFF", "#6600CC", "#6600FF", "#6633CC", "#6633FF", "#66CC00", "#66CC33", "#9900CC", "#9900FF", "#9933CC", "#9933FF", "#99CC00", "#99CC33", "#CC0000", "#CC0033", "#CC0066", "#CC0099", "#CC00CC", "#CC00FF", "#CC3300", "#CC3333", "#CC3366", "#CC3399", "#CC33CC", "#CC33FF", "#CC6600", "#CC6633", "#CC9900", "#CC9933", "#CCCC00", "#CCCC33", "#FF0000", "#FF0033", "#FF0066", "#FF0099", "#FF00CC", "#FF00FF", "#FF3300", "#FF3333", "#FF3366", "#FF3399", "#FF33CC", "#FF33FF", "#FF6600", "#FF6633", "#FF9900", "#FF9933", "#FFCC00", "#FFCC33"], e.log = i.debug || i.log || (() => {}), t.exports = Si()(e); + var { + formatters: r + } = t.exports; + r.j = function(e) { + try { + return JSON.stringify(e) + } catch (e) { + return "[UnexpectedJSONParseError]: " + e.message + } + } + })), + Ii = h(((e, t) => { + f(), rt(), qe(); + var r = wi(), + { + EventEmitter: i + } = (Nt(), c(Ot)), + n = _i(), + o = vi(), + s = Ai()("mqtt-packet:parser"); + t.exports = class e extends i { + constructor() { + super(), this.parser = this.constructor.parser + } + static parser(t) { + return this instanceof e ? (this.settings = t || {}, this._states = ["_parseHeader", "_parseLength", "_parsePayload", "_newPacket"], this._resetState(), this) : (new e).parser(t) + } + _resetState() { + s("_resetState: resetting packet, error, _list, and _stateCounter"), this.packet = new n, this.error = null, this._list = r(), this._stateCounter = 0 + } + parse(e) { + for (this.error && this._resetState(), this._list.append(e), s("parse: current state: %s", this._states[this._stateCounter]); + (-1 !== this.packet.length || this._list.length > 0) && this[this._states[this._stateCounter]]() && !this.error;) this._stateCounter++, s("parse: state complete. _stateCounter is now: %d", this._stateCounter), s("parse: packet.length: %d, buffer list length: %d", this.packet.length, this._list.length), this._stateCounter >= this._states.length && (this._stateCounter = 0); + return s("parse: exited while loop. packet: %d, buffer list length: %d", this.packet.length, this._list.length), this._list.length + } + _parseHeader() { + let e = this._list.readUInt8(0), + t = e >> o.CMD_SHIFT; + this.packet.cmd = o.types[t]; + let r = 15 & e, + i = o.requiredHeaderFlags[t]; + return null != i && r !== i ? this._emitError(new Error(o.requiredHeaderFlagsErrors[t])) : (this.packet.retain = 0 != (e & o.RETAIN_MASK), this.packet.qos = e >> o.QOS_SHIFT & o.QOS_MASK, this.packet.qos > 2 ? this._emitError(new Error("Packet must not have both QoS bits set to 1")) : (this.packet.dup = 0 != (e & o.DUP_MASK), s("_parseHeader: packet: %o", this.packet), this._list.consume(1), !0)) + } + _parseLength() { + let e = this._parseVarByteNum(!0); + return e && (this.packet.length = e.value, this._list.consume(e.bytes)), s("_parseLength %d", e.value), !!e + } + _parsePayload() { + s("_parsePayload: payload %O", this._list); + let e = !1; + if (0 === this.packet.length || this._list.length >= this.packet.length) { + switch (this._pos = 0, this.packet.cmd) { + case "connect": + this._parseConnect(); + break; + case "connack": + this._parseConnack(); + break; + case "publish": + this._parsePublish(); + break; + case "puback": + case "pubrec": + case "pubrel": + case "pubcomp": + this._parseConfirmation(); + break; + case "subscribe": + this._parseSubscribe(); + break; + case "suback": + this._parseSuback(); + break; + case "unsubscribe": + this._parseUnsubscribe(); + break; + case "unsuback": + this._parseUnsuback(); + break; + case "pingreq": + case "pingresp": + break; + case "disconnect": + this._parseDisconnect(); + break; + case "auth": + this._parseAuth(); + break; + default: + this._emitError(new Error("Not supported")) + } + e = !0 + } + return s("_parsePayload complete result: %s", e), e + } + _parseConnect() { + s("_parseConnect"); + let e, t, r, i, n = {}, + a = this.packet, + l = this._parseString(); + if (null === l) return this._emitError(new Error("Cannot parse protocolId")); + if ("MQTT" !== l && "MQIsdp" !== l) return this._emitError(new Error("Invalid protocolId")); + if (a.protocolId = l, this._pos >= this._list.length) return this._emitError(new Error("Packet too short")); + if (a.protocolVersion = this._list.readUInt8(this._pos), a.protocolVersion >= 128 && (a.bridgeMode = !0, a.protocolVersion = a.protocolVersion - 128), 3 !== a.protocolVersion && 4 !== a.protocolVersion && 5 !== a.protocolVersion) return this._emitError(new Error("Invalid protocol version")); + if (this._pos++, this._pos >= this._list.length) return this._emitError(new Error("Packet too short")); + if (1 & this._list.readUInt8(this._pos)) return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1")); + n.username = this._list.readUInt8(this._pos) & o.USERNAME_MASK, n.password = this._list.readUInt8(this._pos) & o.PASSWORD_MASK, n.will = this._list.readUInt8(this._pos) & o.WILL_FLAG_MASK; + let h = !!(this._list.readUInt8(this._pos) & o.WILL_RETAIN_MASK), + u = (this._list.readUInt8(this._pos) & o.WILL_QOS_MASK) >> o.WILL_QOS_SHIFT; + if (n.will) a.will = {}, a.will.retain = h, a.will.qos = u; + else { + if (h) return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0")); + if (u) return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0")) + } + if (a.clean = 0 != (this._list.readUInt8(this._pos) & o.CLEAN_SESSION_MASK), this._pos++, a.keepalive = this._parseNum(), -1 === a.keepalive) return this._emitError(new Error("Packet too short")); + if (5 === a.protocolVersion) { + let e = this._parseProperties(); + Object.getOwnPropertyNames(e).length && (a.properties = e) + } + let c = this._parseString(); + if (null === c) return this._emitError(new Error("Packet too short")); + if (a.clientId = c, s("_parseConnect: packet.clientId: %s", a.clientId), n.will) { + if (5 === a.protocolVersion) { + let e = this._parseProperties(); + Object.getOwnPropertyNames(e).length && (a.will.properties = e) + } + if (e = this._parseString(), null === e) return this._emitError(new Error("Cannot parse will topic")); + if (a.will.topic = e, s("_parseConnect: packet.will.topic: %s", a.will.topic), t = this._parseBuffer(), null === t) return this._emitError(new Error("Cannot parse will payload")); + a.will.payload = t, s("_parseConnect: packet.will.paylaod: %s", a.will.payload) + } + if (n.username) { + if (i = this._parseString(), null === i) return this._emitError(new Error("Cannot parse username")); + a.username = i, s("_parseConnect: packet.username: %s", a.username) + } + if (n.password) { + if (r = this._parseBuffer(), null === r) return this._emitError(new Error("Cannot parse password")); + a.password = r + } + return this.settings = a, s("_parseConnect: complete"), a + } + _parseConnack() { + s("_parseConnack"); + let e = this.packet; + if (this._list.length < 1) return null; + let t = this._list.readUInt8(this._pos++); + if (t > 1) return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0")); + if (e.sessionPresent = !!(t & o.SESSIONPRESENT_MASK), 5 === this.settings.protocolVersion) this._list.length >= 2 ? e.reasonCode = this._list.readUInt8(this._pos++) : e.reasonCode = 0; + else { + if (this._list.length < 2) return null; + e.returnCode = this._list.readUInt8(this._pos++) + } + if (-1 === e.returnCode || -1 === e.reasonCode) return this._emitError(new Error("Cannot parse return code")); + if (5 === this.settings.protocolVersion) { + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + s("_parseConnack: complete") + } + _parsePublish() { + s("_parsePublish"); + let e = this.packet; + if (e.topic = this._parseString(), null === e.topic) return this._emitError(new Error("Cannot parse topic")); + if (!(e.qos > 0) || this._parseMessageId()) { + if (5 === this.settings.protocolVersion) { + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + e.payload = this._list.slice(this._pos, e.length), s("_parsePublish: payload from buffer list: %o", e.payload) + } + } + _parseSubscribe() { + s("_parseSubscribe"); + let e, t, r, i, n, a, l, h = this.packet; + if (h.subscriptions = [], this._parseMessageId()) { + if (5 === this.settings.protocolVersion) { + let e = this._parseProperties(); + Object.getOwnPropertyNames(e).length && (h.properties = e) + } + if (h.length <= 0) return this._emitError(new Error("Malformed subscribe, no payload specified")); + for (; this._pos < h.length;) { + if (e = this._parseString(), null === e) return this._emitError(new Error("Cannot parse topic")); + if (this._pos >= h.length) return this._emitError(new Error("Malformed Subscribe Payload")); + if (t = this._parseByte(), 5 === this.settings.protocolVersion) { + if (192 & t) return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0")) + } else if (252 & t) return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0")); + if (r = t & o.SUBSCRIBE_OPTIONS_QOS_MASK, r > 2) return this._emitError(new Error("Invalid subscribe QoS, must be <= 2")); + if (a = 0 != (t >> o.SUBSCRIBE_OPTIONS_NL_SHIFT & o.SUBSCRIBE_OPTIONS_NL_MASK), n = 0 != (t >> o.SUBSCRIBE_OPTIONS_RAP_SHIFT & o.SUBSCRIBE_OPTIONS_RAP_MASK), i = t >> o.SUBSCRIBE_OPTIONS_RH_SHIFT & o.SUBSCRIBE_OPTIONS_RH_MASK, i > 2) return this._emitError(new Error("Invalid retain handling, must be <= 2")); + l = { + topic: e, + qos: r + }, 5 === this.settings.protocolVersion ? (l.nl = a, l.rap = n, l.rh = i) : this.settings.bridgeMode && (l.rh = 0, l.rap = !0, l.nl = !0), s("_parseSubscribe: push subscription `%s` to subscription", l), h.subscriptions.push(l) + } + } + } + _parseSuback() { + s("_parseSuback"); + let e = this.packet; + if (this.packet.granted = [], this._parseMessageId()) { + if (5 === this.settings.protocolVersion) { + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + if (e.length <= 0) return this._emitError(new Error("Malformed suback, no payload specified")); + for (; this._pos < this.packet.length;) { + let e = this._list.readUInt8(this._pos++); + if (5 === this.settings.protocolVersion) { + if (!o.MQTT5_SUBACK_CODES[e]) return this._emitError(new Error("Invalid suback code")) + } else if (e > 2 && 128 !== e) return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128")); + this.packet.granted.push(e) + } + } + } + _parseUnsubscribe() { + s("_parseUnsubscribe"); + let e = this.packet; + if (e.unsubscriptions = [], this._parseMessageId()) { + if (5 === this.settings.protocolVersion) { + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + if (e.length <= 0) return this._emitError(new Error("Malformed unsubscribe, no payload specified")); + for (; this._pos < e.length;) { + let t = this._parseString(); + if (null === t) return this._emitError(new Error("Cannot parse topic")); + s("_parseUnsubscribe: push topic `%s` to unsubscriptions", t), e.unsubscriptions.push(t) + } + } + } + _parseUnsuback() { + s("_parseUnsuback"); + let e = this.packet; + if (!this._parseMessageId()) return this._emitError(new Error("Cannot parse messageId")); + if ((3 === this.settings.protocolVersion || 4 === this.settings.protocolVersion) && 2 !== e.length) return this._emitError(new Error("Malformed unsuback, payload length must be 2")); + if (e.length <= 0) return this._emitError(new Error("Malformed unsuback, no payload specified")); + if (5 === this.settings.protocolVersion) { + let t = this._parseProperties(); + for (Object.getOwnPropertyNames(t).length && (e.properties = t), e.granted = []; this._pos < this.packet.length;) { + let e = this._list.readUInt8(this._pos++); + if (!o.MQTT5_UNSUBACK_CODES[e]) return this._emitError(new Error("Invalid unsuback code")); + this.packet.granted.push(e) + } + } + } + _parseConfirmation() { + s("_parseConfirmation: packet.cmd: `%s`", this.packet.cmd); + let e = this.packet; + if (this._parseMessageId(), 5 === this.settings.protocolVersion) { + if (e.length > 2) { + switch (e.reasonCode = this._parseByte(), this.packet.cmd) { + case "puback": + case "pubrec": + if (!o.MQTT5_PUBACK_PUBREC_CODES[e.reasonCode]) return this._emitError(new Error("Invalid " + this.packet.cmd + " reason code")); + break; + case "pubrel": + case "pubcomp": + if (!o.MQTT5_PUBREL_PUBCOMP_CODES[e.reasonCode]) return this._emitError(new Error("Invalid " + this.packet.cmd + " reason code")) + } + s("_parseConfirmation: packet.reasonCode `%d`", e.reasonCode) + } else e.reasonCode = 0; + if (e.length > 3) { + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + } + return !0 + } + _parseDisconnect() { + let e = this.packet; + if (s("_parseDisconnect"), 5 === this.settings.protocolVersion) { + this._list.length > 0 ? (e.reasonCode = this._parseByte(), o.MQTT5_DISCONNECT_CODES[e.reasonCode] || this._emitError(new Error("Invalid disconnect reason code"))) : e.reasonCode = 0; + let t = this._parseProperties(); + Object.getOwnPropertyNames(t).length && (e.properties = t) + } + return s("_parseDisconnect result: true"), !0 + } + _parseAuth() { + s("_parseAuth"); + let e = this.packet; + if (5 !== this.settings.protocolVersion) return this._emitError(new Error("Not supported auth packet for this version MQTT")); + if (e.reasonCode = this._parseByte(), !o.MQTT5_AUTH_CODES[e.reasonCode]) return this._emitError(new Error("Invalid auth reason code")); + let t = this._parseProperties(); + return Object.getOwnPropertyNames(t).length && (e.properties = t), s("_parseAuth: result: true"), !0 + } + _parseMessageId() { + let e = this.packet; + return e.messageId = this._parseNum(), null === e.messageId ? (this._emitError(new Error("Cannot parse messageId")), !1) : (s("_parseMessageId: packet.messageId %d", e.messageId), !0) + } + _parseString(e) { + let t = this._parseNum(), + r = t + this._pos; + if (-1 === t || r > this._list.length || r > this.packet.length) return null; + let i = this._list.toString("utf8", this._pos, r); + return this._pos += t, s("_parseString: result: %s", i), i + } + _parseStringPair() { + return s("_parseStringPair"), { + name: this._parseString(), + value: this._parseString() + } + } + _parseBuffer() { + let e = this._parseNum(), + t = e + this._pos; + if (-1 === e || t > this._list.length || t > this.packet.length) return null; + let r = this._list.slice(this._pos, t); + return this._pos += e, s("_parseBuffer: result: %o", r), r + } + _parseNum() { + if (this._list.length - this._pos < 2) return -1; + let e = this._list.readUInt16BE(this._pos); + return this._pos += 2, s("_parseNum: result: %s", e), e + } + _parse4ByteNum() { + if (this._list.length - this._pos < 4) return -1; + let e = this._list.readUInt32BE(this._pos); + return this._pos += 4, s("_parse4ByteNum: result: %s", e), e + } + _parseVarByteNum(e) { + s("_parseVarByteNum"); + let t, r = 0, + i = 1, + n = 0, + a = !1, + l = this._pos ? this._pos : 0; + for (; r < 4 && l + r < this._list.length;) { + if (t = this._list.readUInt8(l + r++), n += i * (t & o.VARBYTEINT_MASK), i *= 128, !(t & o.VARBYTEINT_FIN_MASK)) { + a = !0; + break + } + if (this._list.length <= r) break + } + return !a && 4 === r && this._list.length >= r && this._emitError(new Error("Invalid variable byte integer")), l && (this._pos += r), a = !!a && (e ? { + bytes: r, + value: n + } : n), s("_parseVarByteNum: result: %o", a), a + } + _parseByte() { + let e; + return this._pos < this._list.length && (e = this._list.readUInt8(this._pos), this._pos++), s("_parseByte: result: %o", e), e + } + _parseByType(e) { + switch (s("_parseByType: type: %s", e), e) { + case "byte": + return 0 !== this._parseByte(); + case "int8": + return this._parseByte(); + case "int16": + return this._parseNum(); + case "int32": + return this._parse4ByteNum(); + case "var": + return this._parseVarByteNum(); + case "string": + return this._parseString(); + case "pair": + return this._parseStringPair(); + case "binary": + return this._parseBuffer() + } + } + _parseProperties() { + s("_parseProperties"); + let e = this._parseVarByteNum(), + t = this._pos + e, + r = {}; + for (; this._pos < t;) { + let e = this._parseByte(); + if (!e) return this._emitError(new Error("Cannot parse property code type")), !1; + let t = o.propertiesCodes[e]; + if (!t) return this._emitError(new Error("Unknown property")), !1; + if ("userProperties" !== t) r[t] ? (Array.isArray(r[t]) || (r[t] = [r[t]]), r[t].push(this._parseByType(o.propertiesTypes[t]))) : r[t] = this._parseByType(o.propertiesTypes[t]); + else { + r[t] || (r[t] = Object.create(null)); + let e = this._parseByType(o.propertiesTypes[t]); + if (r[t][e.name]) + if (Array.isArray(r[t][e.name])) r[t][e.name].push(e.value); + else { + let i = r[t][e.name]; + r[t][e.name] = [i], r[t][e.name].push(e.value) + } + else r[t][e.name] = e.value + } + } + return r + } + _newPacket() { + return s("_newPacket"), this.packet && (this._list.consume(this.packet.length), s("_newPacket: parser emit packet: packet.cmd: %s, packet.payload: %s, packet.length: %d", this.packet.cmd, this.packet.payload, this.packet.length), this.emit("packet", this.packet)), s("_newPacket: new packet"), this.packet = new n, this._pos = 0, !0 + } + _emitError(e) { + s("_emitError", e), this.error = e, this.emit("error", e) + } + } + })), + ki = h(((e, t) => { + f(), rt(), qe(); + var { + Buffer: r + } = (tt(), c(Ve)), i = {}, n = r.isBuffer(r.from([1, 2]).subarray(0, 1)); + + function o(e) { + let t = r.allocUnsafe(2); + return t.writeUInt8(e >> 8, 0), t.writeUInt8(255 & e, 1), t + } + t.exports = { + cache: i, + generateCache: function() { + for (let e = 0; e < 65536; e++) i[e] = o(e) + }, + generateNumber: o, + genBufVariableByteInt: function(e) { + let t = 0, + i = 0, + o = r.allocUnsafe(4); + do { + t = e % 128 | 0, (e = e / 128 | 0) > 0 && (t |= 128), o.writeUInt8(t, i++) + } while (e > 0 && i < 4); + return e > 0 && (i = 0), n ? o.subarray(0, i) : o.slice(0, i) + }, + generate4ByteBuffer: function(e) { + let t = r.allocUnsafe(4); + return t.writeUInt32BE(e, 0), t + } + } + })), + Ti = h(((e, t) => { + f(), rt(), qe(), typeof p > "u" || !p.version || 0 === p.version.indexOf("v0.") || 0 === p.version.indexOf("v1.") && 0 !== p.version.indexOf("v1.8.") ? t.exports = { + nextTick: function(e, t, r, i) { + if ("function" != typeof e) throw new TypeError('"callback" argument must be a function'); + var n, o, s = arguments.length; + switch (s) { + case 0: + case 1: + return p.nextTick(e); + case 2: + return p.nextTick((function() { + e.call(null, t) + })); + case 3: + return p.nextTick((function() { + e.call(null, t, r) + })); + case 4: + return p.nextTick((function() { + e.call(null, t, r, i) + })); + default: + for (n = new Array(s - 1), o = 0; o < n.length;) n[o++] = arguments[o]; + return p.nextTick((function() { + e.apply(null, n) + })) + } + } + } : t.exports = p + })), + Ci = h(((e, t) => { + f(), rt(), qe(); + var r = vi(), + { + Buffer: i + } = (tt(), c(Ve)), + n = i.allocUnsafe(0), + o = i.from([0]), + s = ki(), + a = Ti().nextTick, + l = Ai()("mqtt-packet:writeToStream"), + h = s.cache, + u = s.generateNumber, + p = s.generateCache, + d = s.genBufVariableByteInt, + g = s.generate4ByteBuffer, + b = A, + y = !0; + + function m(e, t, s) { + switch (l("generate called"), t.cork && (t.cork(), a(w, t)), y && (y = !1, p()), l("generate: packet.cmd: %s", e.cmd), e.cmd) { + case "connect": + return function(e, t, n) { + let o = e || {}, + s = o.protocolId || "MQTT", + a = o.protocolVersion || 4, + l = o.will, + h = o.clean, + u = o.keepalive || 0, + c = o.clientId || "", + f = o.username, + p = o.password, + d = o.properties; + void 0 === h && (h = !0); + let g, y, m = 0; + if (!s || "string" != typeof s && !i.isBuffer(s)) return t.destroy(new Error("Invalid protocolId")), !1; + if (m += s.length + 2, 3 !== a && 4 !== a && 5 !== a) return t.destroy(new Error("Invalid protocol version")), !1; + if (m += 1, ("string" == typeof c || i.isBuffer(c)) && (c || a >= 4) && (c || h)) m += i.byteLength(c) + 2; + else { + if (a < 4) return t.destroy(new Error("clientId must be supplied before 3.1.1")), !1; + if (1 * h == 0) return t.destroy(new Error("clientId must be given if cleanSession set to 0")), !1 + } + if ("number" != typeof u || u < 0 || u > 65535 || u % 1 != 0) return t.destroy(new Error("Invalid keepalive")), !1; + if (m += 2, m += 1, 5 === a) { + if (g = T(t, d), !g) return !1; + m += g.length + } + if (l) { + if ("object" != typeof l) return t.destroy(new Error("Invalid will")), !1; + if (!l.topic || "string" != typeof l.topic) return t.destroy(new Error("Invalid will topic")), !1; + if (m += i.byteLength(l.topic) + 2, m += 2, l.payload) { + if (!(l.payload.length >= 0)) return t.destroy(new Error("Invalid will payload")), !1; + "string" == typeof l.payload ? m += i.byteLength(l.payload) : m += l.payload.length + } + if (y = {}, 5 === a) { + if (y = T(t, l.properties), !y) return !1; + m += y.length + } + } + let w = !1; + if (null != f) { + if (!B(f)) return t.destroy(new Error("Invalid username")), !1; + w = !0, m += i.byteLength(f) + 2 + } + if (null != p) { + if (!w) return t.destroy(new Error("Username is required to use password")), !1; + if (!B(p)) return t.destroy(new Error("Invalid password")), !1; + m += P(p) + 2 + } + t.write(r.CONNECT_HEADER), v(t, m), k(t, s), o.bridgeMode && (a += 128), t.write(131 === a ? r.VERSION131 : 132 === a ? r.VERSION132 : 4 === a ? r.VERSION4 : 5 === a ? r.VERSION5 : r.VERSION3); + let _ = 0; + return _ |= null != f ? r.USERNAME_MASK : 0, _ |= null != p ? r.PASSWORD_MASK : 0, _ |= l && l.retain ? r.WILL_RETAIN_MASK : 0, _ |= l && l.qos ? l.qos << r.WILL_QOS_SHIFT : 0, _ |= l ? r.WILL_FLAG_MASK : 0, _ |= h ? r.CLEAN_SESSION_MASK : 0, t.write(i.from([_])), b(t, u), 5 === a && g.write(), k(t, c), l && (5 === a && y.write(), E(t, l.topic), k(t, l.payload)), null != f && k(t, f), null != p && k(t, p), !0 + }(e, t); + case "connack": + return function(e, t, n) { + let s = n ? n.protocolVersion : 4, + a = e || {}, + l = 5 === s ? a.reasonCode : a.returnCode, + h = a.properties, + u = 2; + if ("number" != typeof l) return t.destroy(new Error("Invalid return code")), !1; + let c = null; + if (5 === s) { + if (c = T(t, h), !c) return !1; + u += c.length + } + return t.write(r.CONNACK_HEADER), v(t, u), t.write(a.sessionPresent ? r.SESSIONPRESENT_HEADER : o), t.write(i.from([l])), c?.write(), !0 + }(e, t, s); + case "publish": + return function(e, t, o) { + l("publish: packet: %o", e); + let s = o ? o.protocolVersion : 4, + a = e || {}, + h = a.qos || 0, + u = a.retain ? r.RETAIN_MASK : 0, + c = a.topic, + f = a.payload || n, + p = a.messageId, + d = a.properties, + g = 0; + if ("string" == typeof c) g += i.byteLength(c) + 2; + else { + if (!i.isBuffer(c)) return t.destroy(new Error("Invalid topic")), !1; + g += c.length + 2 + } + if (i.isBuffer(f) ? g += f.length : g += i.byteLength(f), h && "number" != typeof p) return t.destroy(new Error("Invalid messageId")), !1; + h && (g += 2); + let y = null; + if (5 === s) { + if (y = T(t, d), !y) return !1; + g += y.length + } + return t.write(r.PUBLISH_HEADER[h][a.dup ? 1 : 0][u ? 1 : 0]), v(t, g), b(t, P(c)), t.write(c), h > 0 && b(t, p), y?.write(), l("publish: payload: %o", f), t.write(f) + }(e, t, s); + case "puback": + case "pubrec": + case "pubrel": + case "pubcomp": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.cmd || "puback", + l = s.messageId, + h = s.dup && "pubrel" === a ? r.DUP_MASK : 0, + u = 0, + c = s.reasonCode, + f = s.properties, + p = 5 === o ? 3 : 2; + if ("pubrel" === a && (u = 1), "number" != typeof l) return t.destroy(new Error("Invalid messageId")), !1; + let d = null; + if (5 === o && "object" == typeof f) { + if (d = C(t, f, n, p), !d) return !1; + p += d.length + } + return t.write(r.ACKS[a][u][h][0]), 3 === p && (p += 0 !== c ? 1 : -1), v(t, p), b(t, l), 5 === o && 2 !== p && t.write(i.from([c])), null !== d ? d.write() : 4 === p && t.write(i.from([0])), !0 + }(e, t, s); + case "subscribe": + return function(e, t, n) { + l("subscribe: packet: "); + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.dup ? r.DUP_MASK : 0, + h = s.messageId, + u = s.subscriptions, + c = s.properties, + f = 0; + if ("number" != typeof h) return t.destroy(new Error("Invalid messageId")), !1; + f += 2; + let p = null; + if (5 === o) { + if (p = T(t, c), !p) return !1; + f += p.length + } + if ("object" != typeof u || !u.length) return t.destroy(new Error("Invalid subscriptions")), !1; + for (let e = 0; e < u.length; e += 1) { + let r = u[e].topic, + n = u[e].qos; + if ("string" != typeof r) return t.destroy(new Error("Invalid subscriptions - invalid topic")), !1; + if ("number" != typeof n) return t.destroy(new Error("Invalid subscriptions - invalid qos")), !1; + if (5 === o) { + if ("boolean" != typeof(u[e].nl || !1)) return t.destroy(new Error("Invalid subscriptions - invalid No Local")), !1; + if ("boolean" != typeof(u[e].rap || !1)) return t.destroy(new Error("Invalid subscriptions - invalid Retain as Published")), !1; + let r = u[e].rh || 0; + if ("number" != typeof r || r > 2) return t.destroy(new Error("Invalid subscriptions - invalid Retain Handling")), !1 + } + f += i.byteLength(r) + 2 + 1 + } + l("subscribe: writing to stream: %o", r.SUBSCRIBE_HEADER), t.write(r.SUBSCRIBE_HEADER[1][a ? 1 : 0][0]), v(t, f), b(t, h), null !== p && p.write(); + let d = !0; + for (let e of u) { + let n, s = e.topic, + a = e.qos, + l = +e.nl, + h = +e.rap, + u = e.rh; + E(t, s), n = r.SUBSCRIBE_OPTIONS_QOS[a], 5 === o && (n |= l ? r.SUBSCRIBE_OPTIONS_NL : 0, n |= h ? r.SUBSCRIBE_OPTIONS_RAP : 0, n |= u ? r.SUBSCRIBE_OPTIONS_RH[u] : 0), d = t.write(i.from([n])) + } + return d + }(e, t, s); + case "suback": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.messageId, + l = s.granted, + h = s.properties, + u = 0; + if ("number" != typeof a) return t.destroy(new Error("Invalid messageId")), !1; + if (u += 2, "object" != typeof l || !l.length) return t.destroy(new Error("Invalid qos vector")), !1; + for (let e = 0; e < l.length; e += 1) { + if ("number" != typeof l[e]) return t.destroy(new Error("Invalid qos vector")), !1; + u += 1 + } + let c = null; + if (5 === o) { + if (c = C(t, h, n, u), !c) return !1; + u += c.length + } + return t.write(r.SUBACK_HEADER), v(t, u), b(t, a), null !== c && c.write(), t.write(i.from(l)) + }(e, t, s); + case "unsubscribe": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.messageId, + l = s.dup ? r.DUP_MASK : 0, + h = s.unsubscriptions, + u = s.properties, + c = 0; + if ("number" != typeof a) return t.destroy(new Error("Invalid messageId")), !1; + if (c += 2, "object" != typeof h || !h.length) return t.destroy(new Error("Invalid unsubscriptions")), !1; + for (let e = 0; e < h.length; e += 1) { + if ("string" != typeof h[e]) return t.destroy(new Error("Invalid unsubscriptions")), !1; + c += i.byteLength(h[e]) + 2 + } + let f = null; + if (5 === o) { + if (f = T(t, u), !f) return !1; + c += f.length + } + t.write(r.UNSUBSCRIBE_HEADER[1][l ? 1 : 0][0]), v(t, c), b(t, a), null !== f && f.write(); + let p = !0; + for (let e = 0; e < h.length; e++) p = E(t, h[e]); + return p + }(e, t, s); + case "unsuback": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.messageId, + l = s.dup ? r.DUP_MASK : 0, + h = s.granted, + u = s.properties, + c = s.cmd, + f = 2; + if ("number" != typeof a) return t.destroy(new Error("Invalid messageId")), !1; + if (5 === o) { + if ("object" != typeof h || !h.length) return t.destroy(new Error("Invalid qos vector")), !1; + for (let e = 0; e < h.length; e += 1) { + if ("number" != typeof h[e]) return t.destroy(new Error("Invalid qos vector")), !1; + f += 1 + } + } + let p = null; + if (5 === o) { + if (p = C(t, u, n, f), !p) return !1; + f += p.length + } + return t.write(r.ACKS[c][0][l][0]), v(t, f), b(t, a), null !== p && p.write(), 5 === o && t.write(i.from(h)), !0 + }(e, t, s); + case "pingreq": + case "pingresp": + return function(e, t, i) { + return t.write(r.EMPTY[e.cmd]) + }(e, t); + case "disconnect": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.reasonCode, + l = s.properties, + h = 5 === o ? 1 : 0, + u = null; + if (5 === o) { + if (u = C(t, l, n, h), !u) return !1; + h += u.length + } + return t.write(i.from([r.codes.disconnect << 4])), v(t, h), 5 === o && t.write(i.from([a])), null !== u && u.write(), !0 + }(e, t, s); + case "auth": + return function(e, t, n) { + let o = n ? n.protocolVersion : 4, + s = e || {}, + a = s.reasonCode, + l = s.properties, + h = 5 === o ? 1 : 0; + 5 !== o && t.destroy(new Error("Invalid mqtt version for auth packet")); + let u = C(t, l, n, h); + return !!u && (h += u.length, t.write(i.from([r.codes.auth << 4])), v(t, h), t.write(i.from([a])), null !== u && u.write(), !0) + }(e, t, s); + default: + return t.destroy(new Error("Unknown command")), !1 + } + } + + function w(e) { + e.uncork() + } + Object.defineProperty(m, "cacheNumbers", { + get: () => b === A, + set(e) { + e ? ((!h || 0 === Object.keys(h).length) && (y = !0), b = A) : (y = !1, b = I) + } + }); + var _ = {}; + + function v(e, t) { + if (t > r.VARBYTEINT_MAX) return e.destroy(new Error(`Invalid variable byte integer: ${t}`)), !1; + let i = _[t]; + return i || (i = d(t), t < 16384 && (_[t] = i)), l("writeVarByteInt: writing to stream: %o", i), e.write(i) + } + + function E(e, t) { + let r = i.byteLength(t); + return b(e, r), l("writeString: %s", t), e.write(t, "utf8") + } + + function S(e, t, r) { + E(e, t), E(e, r) + } + + function A(e, t) { + return l("writeNumberCached: number: %d", t), l("writeNumberCached: %o", h[t]), e.write(h[t]) + } + + function I(e, t) { + let r = u(t); + return l("writeNumberGenerated: %o", r), e.write(r) + } + + function k(e, t) { + "string" == typeof t ? E(e, t) : t ? (b(e, t.length), e.write(t)) : b(e, 0) + } + + function T(e, t) { + if ("object" != typeof t || null != t.length) return { + length: 1, + write() { + O(e, {}, 0) + } + }; + let n = 0; + + function o(t, n) { + let o = 0; + switch (r.propertiesTypes[t]) { + case "byte": + if ("boolean" != typeof n) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 2; + break; + case "int8": + if ("number" != typeof n || n < 0 || n > 255) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 2; + break; + case "binary": + if (n && null === n) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 1 + i.byteLength(n) + 2; + break; + case "int16": + if ("number" != typeof n || n < 0 || n > 65535) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 3; + break; + case "int32": + if ("number" != typeof n || n < 0 || n > 4294967295) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 5; + break; + case "var": + if ("number" != typeof n || n < 0 || n > 268435455) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 1 + i.byteLength(d(n)); + break; + case "string": + if ("string" != typeof n) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += 3 + i.byteLength(n.toString()); + break; + case "pair": + if ("object" != typeof n) return e.destroy(new Error(`Invalid ${t}: ${n}`)), !1; + o += Object.getOwnPropertyNames(n).reduce(((e, t) => { + let r = n[t]; + return Array.isArray(r) ? e += r.reduce(((e, r) => e + (3 + i.byteLength(t.toString()) + 2 + i.byteLength(r.toString()))), 0) : e += 3 + i.byteLength(t.toString()) + 2 + i.byteLength(n[t].toString()), e + }), 0); + break; + default: + return e.destroy(new Error(`Invalid property ${t}: ${n}`)), !1 + } + return o + } + if (t) + for (let e in t) { + let r = 0, + i = 0, + s = t[e]; + if (Array.isArray(s)) + for (let t = 0; t < s.length; t++) { + if (i = o(e, s[t]), !i) return !1; + r += i + } else { + if (i = o(e, s), !i) return !1; + r = i + } + if (!r) return !1; + n += r + } + return { + length: i.byteLength(d(n)) + n, + write() { + O(e, t, n) + } + } + } + + function C(e, t, r, i) { + let n = ["reasonString", "userProperties"], + o = r && r.properties && r.properties.maximumPacketSize ? r.properties.maximumPacketSize : 0, + s = T(e, t); + if (o) + for (; i + s.length > o;) { + let r = n.shift(); + if (!r || !t[r]) return !1; + delete t[r], s = T(e, t) + } + return s + } + + function R(e, t, n) { + switch (r.propertiesTypes[t]) { + case "byte": + e.write(i.from([r.properties[t]])), e.write(i.from([+n])); + break; + case "int8": + e.write(i.from([r.properties[t]])), e.write(i.from([n])); + break; + case "binary": + e.write(i.from([r.properties[t]])), k(e, n); + break; + case "int16": + e.write(i.from([r.properties[t]])), b(e, n); + break; + case "int32": + e.write(i.from([r.properties[t]])), + function(e, t) { + let r = g(t); + l("write4ByteNumber: %o", r), e.write(r) + }(e, n); + break; + case "var": + e.write(i.from([r.properties[t]])), v(e, n); + break; + case "string": + e.write(i.from([r.properties[t]])), E(e, n); + break; + case "pair": + Object.getOwnPropertyNames(n).forEach((o => { + let s = n[o]; + Array.isArray(s) ? s.forEach((n => { + e.write(i.from([r.properties[t]])), S(e, o.toString(), n.toString()) + })) : (e.write(i.from([r.properties[t]])), S(e, o.toString(), s.toString())) + })); + break; + default: + return e.destroy(new Error(`Invalid property ${t} value: ${n}`)), !1 + } + } + + function O(e, t, r) { + v(e, r); + for (let r in t) + if (Object.prototype.hasOwnProperty.call(t, r) && null !== t[r]) { + let i = t[r]; + if (Array.isArray(i)) + for (let t = 0; t < i.length; t++) R(e, r, i[t]); + else R(e, r, i) + } + } + + function P(e) { + return e ? e instanceof i ? e.length : i.byteLength(e) : 0 + } + + function B(e) { + return "string" == typeof e || e instanceof i + } + t.exports = m + })), + Ri = h(((e, t) => { + f(), rt(), qe(); + var r = Ci(), + { + EventEmitter: i + } = (Nt(), c(Ot)), + { + Buffer: n + } = (tt(), c(Ve)), + o = class extends i { + constructor() { + super(), this._array = new Array(20), this._i = 0 + } + write(e) { + return this._array[this._i++] = e, !0 + } + concat() { + let e, t = 0, + r = new Array(this._array.length), + i = this._array, + o = 0; + for (e = 0; e < i.length && void 0 !== i[e]; e++) "string" != typeof i[e] ? r[e] = i[e].length : r[e] = n.byteLength(i[e]), t += r[e]; + let s = n.allocUnsafe(t); + for (e = 0; e < i.length && void 0 !== i[e]; e++) "string" != typeof i[e] ? (i[e].copy(s, o), o += r[e]) : (s.write(i[e], o), o += r[e]); + return s + } + destroy(e) { + e && this.emit("error", e) + } + }; + t.exports = function(e, t) { + let i = new o; + return r(e, i, t), i.concat() + } + })), + Oi = h((e => { + f(), rt(), qe(), e.parser = Ii().parser, e.generate = Ri(), e.writeToStream = Ci() + })), + Pi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.default = class { + constructor() { + this.nextId = Math.max(1, Math.floor(65535 * Math.random())) + } + allocate() { + let e = this.nextId++; + return 65536 === this.nextId && (this.nextId = 1), e + } + getLastAllocated() { + return 1 === this.nextId ? 65535 : this.nextId - 1 + } + register(e) { + return !0 + } + deallocate(e) {} + clear() {} + } + })), + Bi = h(((e, t) => { + function r(e, t, r) { + var i = this; + this._callback = e, this._args = r, this._interval = setInterval(e, t, this._args), this.reschedule = function(e) { + e || (e = i._interval), i._interval && clearInterval(i._interval), i._interval = setInterval(i._callback, e, i._args) + }, this.clear = function() { + i._interval && (clearInterval(i._interval), i._interval = void 0) + }, this.destroy = function() { + i._interval && clearInterval(i._interval), i._callback = void 0, i._interval = void 0, i._args = void 0 + } + } + f(), rt(), qe(), t.exports = function() { + if ("function" != typeof arguments[0]) throw new Error("callback needed"); + if ("number" != typeof arguments[1]) throw new Error("interval needed"); + var e; + if (arguments.length > 0) { + e = new Array(arguments.length - 2); + for (var t = 0; t < e.length; t++) e[t] = arguments[t + 2] + } + return new r(arguments[0], arguments[1], e) + } + })), + xi = h(((e, t) => { + function r(e) { + return e instanceof Xe ? Xe.from(e) : new e.constructor(e.buffer.slice(), e.byteOffset, e.length) + } + f(), rt(), qe(), t.exports = function(e) { + return (e = e || {}).circles ? function(e) { + var t = [], + i = []; + return e.proto ? function e(o) { + if ("object" != typeof o || null === o) return o; + if (o instanceof Date) return new Date(o); + if (Array.isArray(o)) return n(o, e); + if (o instanceof Map) return new Map(n(Array.from(o), e)); + if (o instanceof Set) return new Set(n(Array.from(o), e)); + var s = {}; + for (var a in t.push(o), i.push(s), o) { + var l = o[a]; + if ("object" != typeof l || null === l) s[a] = l; + else if (l instanceof Date) s[a] = new Date(l); + else if (l instanceof Map) s[a] = new Map(n(Array.from(l), e)); + else if (l instanceof Set) s[a] = new Set(n(Array.from(l), e)); + else if (ArrayBuffer.isView(l)) s[a] = r(l); + else { + var h = t.indexOf(l); + s[a] = -1 !== h ? i[h] : e(l) + } + } + return t.pop(), i.pop(), s + } : function e(o) { + if ("object" != typeof o || null === o) return o; + if (o instanceof Date) return new Date(o); + if (Array.isArray(o)) return n(o, e); + if (o instanceof Map) return new Map(n(Array.from(o), e)); + if (o instanceof Set) return new Set(n(Array.from(o), e)); + var s = {}; + for (var a in t.push(o), i.push(s), o) + if (!1 !== Object.hasOwnProperty.call(o, a)) { + var l = o[a]; + if ("object" != typeof l || null === l) s[a] = l; + else if (l instanceof Date) s[a] = new Date(l); + else if (l instanceof Map) s[a] = new Map(n(Array.from(l), e)); + else if (l instanceof Set) s[a] = new Set(n(Array.from(l), e)); + else if (ArrayBuffer.isView(l)) s[a] = r(l); + else { + var h = t.indexOf(l); + s[a] = -1 !== h ? i[h] : e(l) + } + } return t.pop(), i.pop(), s + }; + + function n(e, n) { + for (var o = Object.keys(e), s = new Array(o.length), a = 0; a < o.length; a++) { + var l = o[a], + h = e[l]; + if ("object" != typeof h || null === h) s[l] = h; + else if (h instanceof Date) s[l] = new Date(h); + else if (ArrayBuffer.isView(h)) s[l] = r(h); + else { + var u = t.indexOf(h); + s[l] = -1 !== u ? i[u] : n(h) + } + } + return s + } + }(e) : e.proto ? function e(i) { + if ("object" != typeof i || null === i) return i; + if (i instanceof Date) return new Date(i); + if (Array.isArray(i)) return t(i, e); + if (i instanceof Map) return new Map(t(Array.from(i), e)); + if (i instanceof Set) return new Set(t(Array.from(i), e)); + var n = {}; + for (var o in i) { + var s = i[o]; + "object" != typeof s || null === s ? n[o] = s : s instanceof Date ? n[o] = new Date(s) : s instanceof Map ? n[o] = new Map(t(Array.from(s), e)) : s instanceof Set ? n[o] = new Set(t(Array.from(s), e)) : ArrayBuffer.isView(s) ? n[o] = r(s) : n[o] = e(s) + } + return n + } : function e(i) { + if ("object" != typeof i || null === i) return i; + if (i instanceof Date) return new Date(i); + if (Array.isArray(i)) return t(i, e); + if (i instanceof Map) return new Map(t(Array.from(i), e)); + if (i instanceof Set) return new Set(t(Array.from(i), e)); + var n = {}; + for (var o in i) + if (!1 !== Object.hasOwnProperty.call(i, o)) { + var s = i[o]; + "object" != typeof s || null === s ? n[o] = s : s instanceof Date ? n[o] = new Date(s) : s instanceof Map ? n[o] = new Map(t(Array.from(s), e)) : s instanceof Set ? n[o] = new Set(t(Array.from(s), e)) : ArrayBuffer.isView(s) ? n[o] = r(s) : n[o] = e(s) + } return n + }; + + function t(e, t) { + for (var i = Object.keys(e), n = new Array(i.length), o = 0; o < i.length; o++) { + var s = i[o], + a = e[s]; + "object" != typeof a || null === a ? n[s] = a : a instanceof Date ? n[s] = new Date(a) : ArrayBuffer.isView(a) ? n[s] = r(a) : n[s] = t(a) + } + return n + } + } + })), + Ui = h(((e, t) => { + f(), rt(), qe(), t.exports = xi()() + })), + Mi = h((e => { + function t(e) { + let t = e.split("/"); + for (let e = 0; e < t.length; e++) + if ("+" !== t[e]) { + if ("#" === t[e]) return e === t.length - 1; + if (-1 !== t[e].indexOf("+") || -1 !== t[e].indexOf("#")) return !1 + } return !0 + } + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.validateTopics = e.validateTopic = void 0, e.validateTopic = t, e.validateTopics = function(e) { + if (0 === e.length) return "empty_topic_list"; + for (let r = 0; r < e.length; r++) + if (!t(e[r])) return e[r]; + return null + } + })), + Li = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = bi(), + r = { + objectMode: !0 + }, + i = { + clean: !0 + }; + e.default = class { + constructor(e) { + this.options = e || {}, this.options = Object.assign(Object.assign({}, i), e), this._inflights = new Map + } + put(e, t) { + return this._inflights.set(e.messageId, e), t && t(), this + } + createStream() { + let e = new t.Readable(r), + i = [], + n = !1, + o = 0; + return this._inflights.forEach(((e, t) => { + i.push(e) + })), e._read = () => { + !n && o < i.length ? e.push(i[o++]) : e.push(null) + }, e.destroy = t => { + if (!n) return n = !0, setTimeout((() => { + e.emit("close") + }), 0), e + }, e + } + del(e, t) { + let r = this._inflights.get(e.messageId); + return r ? (this._inflights.delete(e.messageId), t(null, r)) : t && t(new Error("missing packet")), this + } + get(e, t) { + let r = this._inflights.get(e.messageId); + return r ? t(null, r) : t && t(new Error("missing packet")), this + } + close(e) { + this.options.clean && (this._inflights = null), e && e() + } + } + })), + Ni = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = [0, 16, 128, 131, 135, 144, 145, 151, 153]; + e.default = (e, r, i) => { + e.log("handlePublish: packet %o", r), i = typeof i < "u" ? i : e.noop; + let n = r.topic.toString(), + o = r.payload, + { + qos: s + } = r, + { + messageId: a + } = r, + { + options: l + } = e; + if (5 === e.options.protocolVersion) { + let t; + if (r.properties && (t = r.properties.topicAlias), typeof t < "u") + if (0 === n.length) { + if (!(t > 0 && t <= 65535)) return e.log("handlePublish :: topic alias out of range. alias: %d", t), void e.emit("error", new Error("Received Topic Alias is out of range")); + { + let r = e.topicAliasRecv.getTopicByAlias(t); + if (!r) return e.log("handlePublish :: unregistered topic alias. alias: %d", t), void e.emit("error", new Error("Received unregistered Topic Alias")); + n = r, e.log("handlePublish :: topic complemented by alias. topic: %s - alias: %d", n, t) + } + } else { + if (!e.topicAliasRecv.put(n, t)) return e.log("handlePublish :: topic alias out of range. alias: %d", t), void e.emit("error", new Error("Received Topic Alias is out of range")); + e.log("handlePublish :: registered topic: %s - alias: %d", n, t) + } + } + switch (e.log("handlePublish: qos %d", s), s) { + case 2: + l.customHandleAcks(n, o, r, ((n, o) => ("number" == typeof n && (o = n, n = null), n ? e.emit("error", n) : -1 === t.indexOf(o) ? e.emit("error", new Error("Wrong reason code for pubrec")) : void(o ? e._sendPacket({ + cmd: "pubrec", + messageId: a, + reasonCode: o + }, i) : e.incomingStore.put(r, (() => { + e._sendPacket({ + cmd: "pubrec", + messageId: a + }, i) + })))))); + break; + case 1: + l.customHandleAcks(n, o, r, ((s, l) => ("number" == typeof s && (l = s, s = null), s ? e.emit("error", s) : -1 === t.indexOf(l) ? e.emit("error", new Error("Wrong reason code for puback")) : (l || e.emit("message", n, o, r), void e.handleMessage(r, (t => { + if (t) return i && i(t); + e._sendPacket({ + cmd: "puback", + messageId: a, + reasonCode: l + }, i) + })))))); + break; + case 0: + e.emit("message", n, o, r), e.handleMessage(r, i); + break; + default: + e.log("handlePublish: unknown QoS. Doing nothing.") + } + } + })), + ji = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.applyMixin = e.ErrorWithReasonCode = void 0; + var t = class e extends Error { + constructor(t, r) { + super(t), this.code = r, Object.setPrototypeOf(this, e.prototype), Object.getPrototypeOf(this).name = "ErrorWithReasonCode" + } + }; + e.ErrorWithReasonCode = t, e.applyMixin = function(e, t, r = !1) { + var i; + let n = [t]; + for (;;) { + let e = n[0], + t = Object.getPrototypeOf(e); + if (!t?.prototype) break; + n.unshift(t) + } + for (let t of n) + for (let n of Object.getOwnPropertyNames(t.prototype))(r || "constructor" !== n) && Object.defineProperty(e.prototype, n, null !== (i = Object.getOwnPropertyDescriptor(t.prototype, n)) && void 0 !== i ? i : Object.create(null)) + } + })), + Di = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.ReasonCodes = void 0, e.ReasonCodes = { + 0: "", + 1: "Unacceptable protocol version", + 2: "Identifier rejected", + 3: "Server unavailable", + 4: "Bad username or password", + 5: "Not authorized", + 16: "No matching subscribers", + 17: "No subscription existed", + 128: "Unspecified error", + 129: "Malformed Packet", + 130: "Protocol Error", + 131: "Implementation specific error", + 132: "Unsupported Protocol Version", + 133: "Client Identifier not valid", + 134: "Bad User Name or Password", + 135: "Not authorized", + 136: "Server unavailable", + 137: "Server busy", + 138: "Banned", + 139: "Server shutting down", + 140: "Bad authentication method", + 141: "Keep Alive timeout", + 142: "Session taken over", + 143: "Topic Filter invalid", + 144: "Topic Name invalid", + 145: "Packet identifier in use", + 146: "Packet Identifier not found", + 147: "Receive Maximum exceeded", + 148: "Topic Alias invalid", + 149: "Packet too large", + 150: "Message rate too high", + 151: "Quota exceeded", + 152: "Administrative action", + 153: "Payload format invalid", + 154: "Retain not supported", + 155: "QoS not supported", + 156: "Use another server", + 157: "Server moved", + 158: "Shared Subscriptions not supported", + 159: "Connection rate exceeded", + 160: "Maximum connect time", + 161: "Subscription Identifiers not supported", + 162: "Wildcard Subscriptions not supported" + }, e.default = (t, r) => { + let i, { + messageId: n + } = r, + o = r.cmd, + s = null, + a = t.outgoing[n] ? t.outgoing[n].cb : null; + if (a) { + switch (t.log("_handleAck :: packet type", o), o) { + case "pubcomp": + case "puback": { + let o = r.reasonCode; + o && o > 0 && 16 !== o ? (i = new Error(`Publish error: ${e.ReasonCodes[o]}`), i.code = o, t._removeOutgoingAndStoreMessage(n, (() => { + a(i, r) + }))) : t._removeOutgoingAndStoreMessage(n, a); + break + } + case "pubrec": { + s = { + cmd: "pubrel", + qos: 2, + messageId: n + }; + let o = r.reasonCode; + o && o > 0 && 16 !== o ? (i = new Error(`Publish error: ${e.ReasonCodes[o]}`), i.code = o, t._removeOutgoingAndStoreMessage(n, (() => { + a(i, r) + }))) : t._sendPacket(s); + break + } + case "suback": { + delete t.outgoing[n], t.messageIdProvider.deallocate(n); + let e = r.granted; + for (let r = 0; r < e.length; r++) + if (128 & e[r]) { + let e = t.messageIdToTopic[n]; + e && e.forEach((e => { + delete t._resubscribeTopics[e] + })) + } delete t.messageIdToTopic[n], t._invokeStoreProcessingQueue(), a(null, r); + break + } + case "unsuback": + delete t.outgoing[n], t.messageIdProvider.deallocate(n), t._invokeStoreProcessingQueue(), a(null); + break; + default: + t.emit("error", new Error("unrecognized packet type")) + } + t.disconnecting && 0 === Object.keys(t.outgoing).length && t.emit("outgoingEmpty") + } else t.log("_handleAck :: Server sent an ack in error. Ignoring.") + } + })), + Fi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = ji(), + r = Di(); + e.default = (e, i) => { + let { + options: n + } = e, o = n.protocolVersion, s = 5 === o ? i.reasonCode : i.returnCode; + if (5 === o) e.handleAuth(i, ((i, n) => { + if (i) e.emit("error", i); + else if (24 === s) e.reconnecting = !1, e._sendPacket(n); + else { + let i = new t.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`, s); + e.emit("error", i) + } + })); + else { + let r = new t.ErrorWithReasonCode(`Protocol error: Auth packets are only supported in MQTT 5. Your version:${o}`, s); + e.emit("error", r) + } + } + })), + Wi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.LRUCache = void 0; + var t = "object" == typeof performance && performance && "function" == typeof performance.now ? performance : Date, + r = new Set, + n = "object" == typeof p && p ? p : {}, + o = (e, t, r, o) => { + "function" == typeof n.emitWarning ? n.emitWarning(e, t, r, o) : i.error(`[${r}] ${t}: ${e}`) + }, + s = globalThis.AbortController, + a = globalThis.AbortSignal; + if (typeof s > "u") { + a = class { + onabort; + _onabort = []; + reason; + aborted = !1; + addEventListener(e, t) { + this._onabort.push(t) + } + }, s = class { + constructor() { + t() + } + signal = new a; + abort(e) { + if (!this.signal.aborted) { + this.signal.reason = e, this.signal.aborted = !0; + for (let t of this.signal._onabort) t(e); + this.signal.onabort?.(e) + } + } + }; + let e = "1" !== n.env?.LRU_CACHE_IGNORE_AC_WARNING, + t = () => { + e && (e = !1, o("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", t)) + } + } + Symbol("type"); + var l = e => e && e === Math.floor(e) && e > 0 && isFinite(e), + h = e => l(e) ? e <= Math.pow(2, 8) ? Uint8Array : e <= Math.pow(2, 16) ? Uint16Array : e <= Math.pow(2, 32) ? Uint32Array : e <= Number.MAX_SAFE_INTEGER ? u : null : null, + u = class extends Array { + constructor(e) { + super(e), this.fill(0) + } + }, + c = class e { + heap; + length; + static #e = !1; + static create(t) { + let r = h(t); + if (!r) return []; + e.#e = !0; + let i = new e(t, r); + return e.#e = !1, i + } + constructor(t, r) { + if (!e.#e) throw new TypeError("instantiate Stack using Stack.create(n)"); + this.heap = new r(t), this.length = 0 + } + push(e) { + this.heap[this.length++] = e + } + pop() { + return this.heap[--this.length] + } + }, + d = class e { + #e; + #t; + #r; + #i; + #n; + ttl; + ttlResolution; + ttlAutopurge; + updateAgeOnGet; + updateAgeOnHas; + allowStale; + noDisposeOnSet; + noUpdateTTL; + maxEntrySize; + sizeCalculation; + noDeleteOnFetchRejection; + noDeleteOnStaleGet; + allowStaleOnFetchAbort; + allowStaleOnFetchRejection; + ignoreFetchAbort; + #o; + #s; + #a; + #l; + #h; + #u; + #c; + #f; + #p; + #d; + #g; + #b; + #y; + #m; + #w; + #_; + #v; + static unsafeExposeInternals(e) { + return { + starts: e.#y, + ttls: e.#m, + sizes: e.#b, + keyMap: e.#a, + keyList: e.#l, + valList: e.#h, + next: e.#u, + prev: e.#c, + get head() { + return e.#f + }, + get tail() { + return e.#p + }, + free: e.#d, + isBackgroundFetch: t => e.#E(t), + backgroundFetch: (t, r, i, n) => e.#S(t, r, i, n), + moveToTail: t => e.#A(t), + indexes: t => e.#I(t), + rindexes: t => e.#k(t), + isStale: t => e.#T(t) + } + } + get max() { + return this.#e + } + get maxSize() { + return this.#t + } + get calculatedSize() { + return this.#s + } + get size() { + return this.#o + } + get fetchMethod() { + return this.#n + } + get dispose() { + return this.#r + } + get disposeAfter() { + return this.#i + } + constructor(t) { + let { + max: i = 0, + ttl: n, + ttlResolution: s = 1, + ttlAutopurge: a, + updateAgeOnGet: u, + updateAgeOnHas: f, + allowStale: p, + dispose: d, + disposeAfter: g, + noDisposeOnSet: b, + noUpdateTTL: y, + maxSize: m = 0, + maxEntrySize: w = 0, + sizeCalculation: _, + fetchMethod: v, + noDeleteOnFetchRejection: E, + noDeleteOnStaleGet: S, + allowStaleOnFetchRejection: A, + allowStaleOnFetchAbort: I, + ignoreFetchAbort: k + } = t; + if (0 !== i && !l(i)) throw new TypeError("max option must be a nonnegative integer"); + let T = i ? h(i) : Array; + if (!T) throw new Error("invalid max value: " + i); + if (this.#e = i, this.#t = m, this.maxEntrySize = w || this.#t, this.sizeCalculation = _, this.sizeCalculation) { + if (!this.#t && !this.maxEntrySize) throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); + if ("function" != typeof this.sizeCalculation) throw new TypeError("sizeCalculation set to non-function") + } + if (void 0 !== v && "function" != typeof v) throw new TypeError("fetchMethod must be a function if specified"); + if (this.#n = v, this.#_ = !!v, this.#a = new Map, this.#l = new Array(i).fill(void 0), this.#h = new Array(i).fill(void 0), this.#u = new T(i), this.#c = new T(i), this.#f = 0, this.#p = 0, this.#d = c.create(i), this.#o = 0, this.#s = 0, "function" == typeof d && (this.#r = d), "function" == typeof g ? (this.#i = g, this.#g = []) : (this.#i = void 0, this.#g = void 0), this.#w = !!this.#r, this.#v = !!this.#i, this.noDisposeOnSet = !!b, this.noUpdateTTL = !!y, this.noDeleteOnFetchRejection = !!E, this.allowStaleOnFetchRejection = !!A, this.allowStaleOnFetchAbort = !!I, this.ignoreFetchAbort = !!k, 0 !== this.maxEntrySize) { + if (0 !== this.#t && !l(this.#t)) throw new TypeError("maxSize must be a positive integer if specified"); + if (!l(this.maxEntrySize)) throw new TypeError("maxEntrySize must be a positive integer if specified"); + this.#C() + } + if (this.allowStale = !!p, this.noDeleteOnStaleGet = !!S, this.updateAgeOnGet = !!u, this.updateAgeOnHas = !!f, this.ttlResolution = l(s) || 0 === s ? s : 1, this.ttlAutopurge = !!a, this.ttl = n || 0, this.ttl) { + if (!l(this.ttl)) throw new TypeError("ttl must be a positive integer if specified"); + this.#R() + } + if (0 === this.#e && 0 === this.ttl && 0 === this.#t) throw new TypeError("At least one of max, maxSize, or ttl is required"); + if (!this.ttlAutopurge && !this.#e && !this.#t) { + let t = "LRU_CACHE_UNBOUNDED"; + (e => !r.has(e))(t) && (r.add(t), o("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.", "UnboundedCacheWarning", t, e)) + } + } + getRemainingTTL(e) { + return this.#a.has(e) ? 1 / 0 : 0 + } + #R() { + let e = new u(this.#e), + r = new u(this.#e); + this.#m = e, this.#y = r, this.#O = (i, n, o = t.now()) => { + if (r[i] = 0 !== n ? o : 0, e[i] = n, 0 !== n && this.ttlAutopurge) { + let e = setTimeout((() => { + this.#T(i) && this.delete(this.#l[i]) + }), n + 1); + e.unref && e.unref() + } + }, this.#P = i => { + r[i] = 0 !== e[i] ? t.now() : 0 + }, this.#B = (t, o) => { + if (e[o]) { + let s = e[o], + a = r[o]; + t.ttl = s, t.start = a, t.now = i || n(); + let l = t.now - a; + t.remainingTTL = s - l + } + }; + let i = 0, + n = () => { + let e = t.now(); + if (this.ttlResolution > 0) { + i = e; + let t = setTimeout((() => i = 0), this.ttlResolution); + t.unref && t.unref() + } + return e + }; + this.getRemainingTTL = t => { + let o = this.#a.get(t); + if (void 0 === o) return 0; + let s = e[o], + a = r[o]; + return 0 === s || 0 === a ? 1 / 0 : s - ((i || n()) - a) + }, this.#T = t => 0 !== e[t] && 0 !== r[t] && (i || n()) - r[t] > e[t] + } + #P = () => {}; + #B = () => {}; + #O = () => {}; + #T = () => !1; + #C() { + let e = new u(this.#e); + this.#s = 0, this.#b = e, this.#x = t => { + this.#s -= e[t], e[t] = 0 + }, this.#U = (e, t, r, i) => { + if (this.#E(t)) return 0; + if (!l(r)) { + if (!i) throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."); + if ("function" != typeof i) throw new TypeError("sizeCalculation must be a function"); + if (r = i(t, e), !l(r)) throw new TypeError("sizeCalculation return invalid (expect positive integer)") + } + return r + }, this.#M = (t, r, i) => { + if (e[t] = r, this.#t) { + let r = this.#t - e[t]; + for (; this.#s > r;) this.#L(!0) + } + this.#s += e[t], i && (i.entrySize = r, i.totalCalculatedSize = this.#s) + } + } + #x = e => {}; + #M = (e, t, r) => {}; + #U = (e, t, r, i) => { + if (r || i) throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache"); + return 0 + };* #I({ + allowStale: e = this.allowStale + } = {}) { + if (this.#o) + for (let t = this.#p; this.#N(t) && ((e || !this.#T(t)) && (yield t), t !== this.#f);) t = this.#c[t] + }* #k({ + allowStale: e = this.allowStale + } = {}) { + if (this.#o) + for (let t = this.#f; this.#N(t) && ((e || !this.#T(t)) && (yield t), t !== this.#p);) t = this.#u[t] + } + #N(e) { + return void 0 !== e && this.#a.get(this.#l[e]) === e + }* entries() { + for (let e of this.#I()) void 0 !== this.#h[e] && void 0 !== this.#l[e] && !this.#E(this.#h[e]) && (yield [this.#l[e], this.#h[e]]) + }* rentries() { + for (let e of this.#k()) void 0 !== this.#h[e] && void 0 !== this.#l[e] && !this.#E(this.#h[e]) && (yield [this.#l[e], this.#h[e]]) + }* keys() { + for (let e of this.#I()) { + let t = this.#l[e]; + void 0 !== t && !this.#E(this.#h[e]) && (yield t) + } + }* rkeys() { + for (let e of this.#k()) { + let t = this.#l[e]; + void 0 !== t && !this.#E(this.#h[e]) && (yield t) + } + }* values() { + for (let e of this.#I()) void 0 !== this.#h[e] && !this.#E(this.#h[e]) && (yield this.#h[e]) + }* rvalues() { + for (let e of this.#k()) void 0 !== this.#h[e] && !this.#E(this.#h[e]) && (yield this.#h[e]) + } [Symbol.iterator]() { + return this.entries() + } + find(e, t = {}) { + for (let r of this.#I()) { + let i = this.#h[r], + n = this.#E(i) ? i.__staleWhileFetching : i; + if (void 0 !== n && e(n, this.#l[r], this)) return this.get(this.#l[r], t) + } + } + forEach(e, t = this) { + for (let r of this.#I()) { + let i = this.#h[r], + n = this.#E(i) ? i.__staleWhileFetching : i; + void 0 !== n && e.call(t, n, this.#l[r], this) + } + } + rforEach(e, t = this) { + for (let r of this.#k()) { + let i = this.#h[r], + n = this.#E(i) ? i.__staleWhileFetching : i; + void 0 !== n && e.call(t, n, this.#l[r], this) + } + } + purgeStale() { + let e = !1; + for (let t of this.#k({ + allowStale: !0 + })) this.#T(t) && (this.delete(this.#l[t]), e = !0); + return e + } + dump() { + let e = []; + for (let r of this.#I({ + allowStale: !0 + })) { + let i = this.#l[r], + n = this.#h[r], + o = this.#E(n) ? n.__staleWhileFetching : n; + if (void 0 === o || void 0 === i) continue; + let s = { + value: o + }; + if (this.#m && this.#y) { + s.ttl = this.#m[r]; + let e = t.now() - this.#y[r]; + s.start = Math.floor(Date.now() - e) + } + this.#b && (s.size = this.#b[r]), e.unshift([i, s]) + } + return e + } + load(e) { + this.clear(); + for (let [r, i] of e) { + if (i.start) { + let e = Date.now() - i.start; + i.start = t.now() - e + } + this.set(r, i.value, i) + } + } + set(e, t, r = {}) { + if (void 0 === t) return this.delete(e), this; + let { + ttl: i = this.ttl, + start: n, + noDisposeOnSet: o = this.noDisposeOnSet, + sizeCalculation: s = this.sizeCalculation, + status: a + } = r, { + noUpdateTTL: l = this.noUpdateTTL + } = r, h = this.#U(e, t, r.size || 0, s); + if (this.maxEntrySize && h > this.maxEntrySize) return a && (a.set = "miss", a.maxEntrySizeExceeded = !0), this.delete(e), this; + let u = 0 === this.#o ? void 0 : this.#a.get(e); + if (void 0 === u) u = 0 === this.#o ? this.#p : 0 !== this.#d.length ? this.#d.pop() : this.#o === this.#e ? this.#L(!1) : this.#o, this.#l[u] = e, this.#h[u] = t, this.#a.set(e, u), this.#u[this.#p] = u, this.#c[u] = this.#p, this.#p = u, this.#o++, this.#M(u, h, a), a && (a.set = "add"), l = !1; + else { + this.#A(u); + let r = this.#h[u]; + if (t !== r) { + if (this.#_ && this.#E(r)) { + r.__abortController.abort(new Error("replaced")); + let { + __staleWhileFetching: t + } = r; + void 0 !== t && !o && (this.#w && this.#r?.(t, e, "set"), this.#v && this.#g?.push([t, e, "set"])) + } else o || (this.#w && this.#r?.(r, e, "set"), this.#v && this.#g?.push([r, e, "set"])); + if (this.#x(u), this.#M(u, h, a), this.#h[u] = t, a) { + a.set = "replace"; + let e = r && this.#E(r) ? r.__staleWhileFetching : r; + void 0 !== e && (a.oldValue = e) + } + } else a && (a.set = "update") + } + if (0 !== i && !this.#m && this.#R(), this.#m && (l || this.#O(u, i, n), a && this.#B(a, u)), !o && this.#v && this.#g) { + let e, t = this.#g; + for (; e = t?.shift();) this.#i?.(...e) + } + return this + } + pop() { + try { + for (; this.#o;) { + let e = this.#h[this.#f]; + if (this.#L(!0), this.#E(e)) { + if (e.__staleWhileFetching) return e.__staleWhileFetching + } else if (void 0 !== e) return e + } + } finally { + if (this.#v && this.#g) { + let e, t = this.#g; + for (; e = t?.shift();) this.#i?.(...e) + } + } + } + #L(e) { + let t = this.#f, + r = this.#l[t], + i = this.#h[t]; + return this.#_ && this.#E(i) ? i.__abortController.abort(new Error("evicted")) : (this.#w || this.#v) && (this.#w && this.#r?.(i, r, "evict"), this.#v && this.#g?.push([i, r, "evict"])), this.#x(t), e && (this.#l[t] = void 0, this.#h[t] = void 0, this.#d.push(t)), 1 === this.#o ? (this.#f = this.#p = 0, this.#d.length = 0) : this.#f = this.#u[t], this.#a.delete(r), this.#o--, t + } + has(e, t = {}) { + let { + updateAgeOnHas: r = this.updateAgeOnHas, + status: i + } = t, n = this.#a.get(e); + if (void 0 !== n) { + let e = this.#h[n]; + if (this.#E(e) && void 0 === e.__staleWhileFetching) return !1; + if (!this.#T(n)) return r && this.#P(n), i && (i.has = "hit", this.#B(i, n)), !0; + i && (i.has = "stale", this.#B(i, n)) + } else i && (i.has = "miss"); + return !1 + } + peek(e, t = {}) { + let { + allowStale: r = this.allowStale + } = t, i = this.#a.get(e); + if (void 0 !== i && (r || !this.#T(i))) { + let e = this.#h[i]; + return this.#E(e) ? e.__staleWhileFetching : e + } + } + #S(e, t, r, i) { + let n = void 0 === t ? void 0 : this.#h[t]; + if (this.#E(n)) return n; + let o = new s, + { + signal: a + } = r; + a?.addEventListener("abort", (() => o.abort(a.reason)), { + signal: o.signal + }); + let l = { + signal: o.signal, + options: r, + context: i + }, + h = (i, n = !1) => { + let { + aborted: s + } = o.signal, a = r.ignoreFetchAbort && void 0 !== i; + if (r.status && (s && !n ? (r.status.fetchAborted = !0, r.status.fetchError = o.signal.reason, a && (r.status.fetchAbortIgnored = !0)) : r.status.fetchResolved = !0), s && !a && !n) return u(o.signal.reason); + let h = c; + return this.#h[t] === c && (void 0 === i ? h.__staleWhileFetching ? this.#h[t] = h.__staleWhileFetching : this.delete(e) : (r.status && (r.status.fetchUpdated = !0), this.set(e, i, l.options))), i + }, + u = i => { + let { + aborted: n + } = o.signal, s = n && r.allowStaleOnFetchAbort, a = s || r.allowStaleOnFetchRejection, l = a || r.noDeleteOnFetchRejection, h = c; + if (this.#h[t] === c && (l && void 0 !== h.__staleWhileFetching ? s || (this.#h[t] = h.__staleWhileFetching) : this.delete(e)), a) return r.status && void 0 !== h.__staleWhileFetching && (r.status.returnedStale = !0), h.__staleWhileFetching; + if (h.__returned === h) throw i + }; + r.status && (r.status.fetchDispatched = !0); + let c = new Promise(((t, i) => { + let s = this.#n?.(e, n, l); + s && s instanceof Promise && s.then((e => t(void 0 === e ? void 0 : e)), i), o.signal.addEventListener("abort", (() => { + (!r.ignoreFetchAbort || r.allowStaleOnFetchAbort) && (t(void 0), r.allowStaleOnFetchAbort && (t = e => h(e, !0))) + })) + })).then(h, (e => (r.status && (r.status.fetchRejected = !0, r.status.fetchError = e), u(e)))), + f = Object.assign(c, { + __abortController: o, + __staleWhileFetching: n, + __returned: void 0 + }); + return void 0 === t ? (this.set(e, f, { + ...l.options, + status: void 0 + }), t = this.#a.get(e)) : this.#h[t] = f, f + } + #E(e) { + if (!this.#_) return !1; + let t = e; + return !!t && t instanceof Promise && t.hasOwnProperty("__staleWhileFetching") && t.__abortController instanceof s + } + async fetch(e, t = {}) { + let { + allowStale: r = this.allowStale, + updateAgeOnGet: i = this.updateAgeOnGet, + noDeleteOnStaleGet: n = this.noDeleteOnStaleGet, + ttl: o = this.ttl, + noDisposeOnSet: s = this.noDisposeOnSet, + size: a = 0, + sizeCalculation: l = this.sizeCalculation, + noUpdateTTL: h = this.noUpdateTTL, + noDeleteOnFetchRejection: u = this.noDeleteOnFetchRejection, + allowStaleOnFetchRejection: c = this.allowStaleOnFetchRejection, + ignoreFetchAbort: f = this.ignoreFetchAbort, + allowStaleOnFetchAbort: p = this.allowStaleOnFetchAbort, + context: d, + forceRefresh: g = !1, + status: b, + signal: y + } = t; + if (!this.#_) return b && (b.fetch = "get"), this.get(e, { + allowStale: r, + updateAgeOnGet: i, + noDeleteOnStaleGet: n, + status: b + }); + let m = { + allowStale: r, + updateAgeOnGet: i, + noDeleteOnStaleGet: n, + ttl: o, + noDisposeOnSet: s, + size: a, + sizeCalculation: l, + noUpdateTTL: h, + noDeleteOnFetchRejection: u, + allowStaleOnFetchRejection: c, + allowStaleOnFetchAbort: p, + ignoreFetchAbort: f, + status: b, + signal: y + }, + w = this.#a.get(e); + if (void 0 === w) { + b && (b.fetch = "miss"); + let t = this.#S(e, w, m, d); + return t.__returned = t + } { + let t = this.#h[w]; + if (this.#E(t)) { + let e = r && void 0 !== t.__staleWhileFetching; + return b && (b.fetch = "inflight", e && (b.returnedStale = !0)), e ? t.__staleWhileFetching : t.__returned = t + } + let n = this.#T(w); + if (!g && !n) return b && (b.fetch = "hit"), this.#A(w), i && this.#P(w), b && this.#B(b, w), t; + let o = this.#S(e, w, m, d), + s = void 0 !== o.__staleWhileFetching && r; + return b && (b.fetch = n ? "stale" : "refresh", s && n && (b.returnedStale = !0)), s ? o.__staleWhileFetching : o.__returned = o + } + } + get(e, t = {}) { + let { + allowStale: r = this.allowStale, + updateAgeOnGet: i = this.updateAgeOnGet, + noDeleteOnStaleGet: n = this.noDeleteOnStaleGet, + status: o + } = t, s = this.#a.get(e); + if (void 0 !== s) { + let t = this.#h[s], + a = this.#E(t); + return o && this.#B(o, s), this.#T(s) ? (o && (o.get = "stale"), a ? (o && r && void 0 !== t.__staleWhileFetching && (o.returnedStale = !0), r ? t.__staleWhileFetching : void 0) : (n || this.delete(e), o && r && (o.returnedStale = !0), r ? t : void 0)) : (o && (o.get = "hit"), a ? t.__staleWhileFetching : (this.#A(s), i && this.#P(s), t)) + } + o && (o.get = "miss") + } + #j(e, t) { + this.#c[t] = e, this.#u[e] = t + } + #A(e) { + e !== this.#p && (e === this.#f ? this.#f = this.#u[e] : this.#j(this.#c[e], this.#u[e]), this.#j(this.#p, e), this.#p = e) + } + delete(e) { + let t = !1; + if (0 !== this.#o) { + let r = this.#a.get(e); + if (void 0 !== r) + if (t = !0, 1 === this.#o) this.clear(); + else { + this.#x(r); + let t = this.#h[r]; + this.#E(t) ? t.__abortController.abort(new Error("deleted")) : (this.#w || this.#v) && (this.#w && this.#r?.(t, e, "delete"), this.#v && this.#g?.push([t, e, "delete"])), this.#a.delete(e), this.#l[r] = void 0, this.#h[r] = void 0, r === this.#p ? this.#p = this.#c[r] : r === this.#f ? this.#f = this.#u[r] : (this.#u[this.#c[r]] = this.#u[r], this.#c[this.#u[r]] = this.#c[r]), this.#o--, this.#d.push(r) + } + } + if (this.#v && this.#g?.length) { + let e, t = this.#g; + for (; e = t?.shift();) this.#i?.(...e) + } + return t + } + clear() { + for (let e of this.#k({ + allowStale: !0 + })) { + let t = this.#h[e]; + if (this.#E(t)) t.__abortController.abort(new Error("deleted")); + else { + let r = this.#l[e]; + this.#w && this.#r?.(t, r, "delete"), this.#v && this.#g?.push([t, r, "delete"]) + } + } + if (this.#a.clear(), this.#h.fill(void 0), this.#l.fill(void 0), this.#m && this.#y && (this.#m.fill(0), this.#y.fill(0)), this.#b && this.#b.fill(0), this.#f = 0, this.#p = 0, this.#d.length = 0, this.#s = 0, this.#o = 0, this.#v && this.#g) { + let e, t = this.#g; + for (; e = t?.shift();) this.#i?.(...e) + } + } + }; + e.LRUCache = d + })), + $i = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.ContainerIterator = e.Container = e.Base = void 0, e.ContainerIterator = class { + constructor(e = 0) { + this.iteratorType = e + } + equals(e) { + return this.o === e.o + } + }; + var t = class { + constructor() { + this.i = 0 + } + get length() { + return this.i + } + size() { + return this.i + } + empty() { + return 0 === this.i + } + }; + e.Base = t, e.Container = class extends t {} + })), + qi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = $i(), + r = class extends t.Base { + constructor(e = []) { + super(), this.S = []; + let t = this; + e.forEach((function(e) { + t.push(e) + })) + } + clear() { + this.i = 0, this.S = [] + } + push(e) { + return this.S.push(e), this.i += 1, this.i + } + pop() { + if (0 !== this.i) return this.i -= 1, this.S.pop() + } + top() { + return this.S[this.i - 1] + } + }; + e.default = r + })), + Vi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = $i(), + r = class extends t.Base { + constructor(e = []) { + super(), this.j = 0, this.q = []; + let t = this; + e.forEach((function(e) { + t.push(e) + })) + } + clear() { + this.q = [], this.i = this.j = 0 + } + push(e) { + let t = this.q.length; + if (this.j / t > .5 && this.j + this.i >= t && t > 4096) { + let t = this.i; + for (let e = 0; e < t; ++e) this.q[e] = this.q[this.j + e]; + this.j = 0, this.q[this.i] = e + } else this.q[this.j + this.i] = e; + return ++this.i + } + pop() { + if (0 === this.i) return; + let e = this.q[this.j++]; + return this.i -= 1, e + } + front() { + if (0 !== this.i) return this.q[this.j] + } + }; + e.default = r + })), + Hi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = $i(), + r = class extends t.Base { + constructor(e = [], t = function(e, t) { + return e > t ? -1 : e < t ? 1 : 0 + }, r = !0) { + if (super(), this.v = t, Array.isArray(e)) this.C = r ? [...e] : e; + else { + this.C = []; + let t = this; + e.forEach((function(e) { + t.C.push(e) + })) + } + this.i = this.C.length; + let i = this.i >> 1; + for (let e = this.i - 1 >> 1; e >= 0; --e) this.k(e, i) + } + m(e) { + let t = this.C[e]; + for (; e > 0;) { + let r = e - 1 >> 1, + i = this.C[r]; + if (this.v(i, t) <= 0) break; + this.C[e] = i, e = r + } + this.C[e] = t + } + k(e, t) { + let r = this.C[e]; + for (; e < t;) { + let t = e << 1 | 1, + i = t + 1, + n = this.C[t]; + if (i < this.i && this.v(n, this.C[i]) > 0 && (t = i, n = this.C[i]), this.v(n, r) >= 0) break; + this.C[e] = n, e = t + } + this.C[e] = r + } + clear() { + this.i = 0, this.C.length = 0 + } + push(e) { + this.C.push(e), this.m(this.i), this.i += 1 + } + pop() { + if (0 === this.i) return; + let e = this.C[0], + t = this.C.pop(); + return this.i -= 1, this.i && (this.C[0] = t, this.k(0, this.i >> 1)), e + } + top() { + return this.C[0] + } + find(e) { + return this.C.indexOf(e) >= 0 + } + remove(e) { + let t = this.C.indexOf(e); + return !(t < 0 || (0 === t ? this.pop() : t === this.i - 1 ? (this.C.pop(), this.i -= 1) : (this.C.splice(t, 1, this.C.pop()), this.i -= 1, this.m(t), this.k(t, this.i >> 1)), 0)) + } + updateItem(e) { + let t = this.C.indexOf(e); + return !(t < 0 || (this.m(t), this.k(t, this.i >> 1), 0)) + } + toArray() { + return [...this.C] + } + }; + e.default = r + })), + zi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = $i(), + r = class extends t.Container {}; + e.default = r + })), + Ki = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.throwIteratorAccessError = function() { + throw new RangeError("Iterator access denied!") + } + })), + Gi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.RandomIterator = void 0; + var t = $i(), + r = Ki(), + i = class extends t.ContainerIterator { + constructor(e, t) { + super(t), this.o = e, 0 === this.iteratorType ? (this.pre = function() { + return 0 === this.o && (0, r.throwIteratorAccessError)(), this.o -= 1, this + }, this.next = function() { + return this.o === this.container.size() && (0, r.throwIteratorAccessError)(), this.o += 1, this + }) : (this.pre = function() { + return this.o === this.container.size() - 1 && (0, r.throwIteratorAccessError)(), this.o += 1, this + }, this.next = function() { + return -1 === this.o && (0, r.throwIteratorAccessError)(), this.o -= 1, this + }) + } + get pointer() { + return this.container.getElementByPos(this.o) + } + set pointer(e) { + this.container.setElementByPos(this.o, e) + } + }; + e.RandomIterator = i + })), + Qi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t, r = (t = zi()) && t.t ? t : { + default: t + }, + i = Gi(), + n = class e extends i.RandomIterator { + constructor(e, t, r) { + super(e, r), this.container = t + } + copy() { + return new e(this.o, this.container, this.iteratorType) + } + }, + o = class extends r.default { + constructor(e = [], t = !0) { + if (super(), Array.isArray(e)) this.J = t ? [...e] : e, this.i = e.length; + else { + this.J = []; + let t = this; + e.forEach((function(e) { + t.pushBack(e) + })) + } + } + clear() { + this.i = 0, this.J.length = 0 + } + begin() { + return new n(0, this) + } + end() { + return new n(this.i, this) + } + rBegin() { + return new n(this.i - 1, this, 1) + } + rEnd() { + return new n(-1, this, 1) + } + front() { + return this.J[0] + } + back() { + return this.J[this.i - 1] + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + return this.J[e] + } + eraseElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + return this.J.splice(e, 1), this.i -= 1, this.i + } + eraseElementByValue(e) { + let t = 0; + for (let r = 0; r < this.i; ++r) this.J[r] !== e && (this.J[t++] = this.J[r]); + return this.i = this.J.length = t, this.i + } + eraseElementByIterator(e) { + let t = e.o; + return e = e.next(), this.eraseElementByPos(t), e + } + pushBack(e) { + return this.J.push(e), this.i += 1, this.i + } + popBack() { + if (0 !== this.i) return this.i -= 1, this.J.pop() + } + setElementByPos(e, t) { + if (e < 0 || e > this.i - 1) throw new RangeError; + this.J[e] = t + } + insert(e, t, r = 1) { + if (e < 0 || e > this.i) throw new RangeError; + return this.J.splice(e, 0, ...new Array(r).fill(t)), this.i += r, this.i + } + find(e) { + for (let t = 0; t < this.i; ++t) + if (this.J[t] === e) return new n(t, this); + return this.end() + } + reverse() { + this.J.reverse() + } + unique() { + let e = 1; + for (let t = 1; t < this.i; ++t) this.J[t] !== this.J[t - 1] && (this.J[e++] = this.J[t]); + return this.i = this.J.length = e, this.i + } + sort(e) { + this.J.sort(e) + } + forEach(e) { + for (let t = 0; t < this.i; ++t) e(this.J[t], t, this) + } [Symbol.iterator]() { + return function*() { + yield* this.J + }.bind(this)() + } + }; + e.default = o + })), + Yi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t, r = (t = zi()) && t.t ? t : { + default: t + }, + i = $i(), + n = Ki(), + o = class e extends i.ContainerIterator { + constructor(e, t, r, i) { + super(i), this.o = e, this.h = t, this.container = r, 0 === this.iteratorType ? (this.pre = function() { + return this.o.L === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.L, this + }, this.next = function() { + return this.o === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.B, this + }) : (this.pre = function() { + return this.o.B === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.B, this + }, this.next = function() { + return this.o === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.L, this + }) + } + get pointer() { + return this.o === this.h && (0, n.throwIteratorAccessError)(), this.o.l + } + set pointer(e) { + this.o === this.h && (0, n.throwIteratorAccessError)(), this.o.l = e + } + copy() { + return new e(this.o, this.h, this.container, this.iteratorType) + } + }, + s = class extends r.default { + constructor(e = []) { + super(), this.h = {}, this.p = this._ = this.h.L = this.h.B = this.h; + let t = this; + e.forEach((function(e) { + t.pushBack(e) + })) + } + V(e) { + let { + L: t, + B: r + } = e; + t.B = r, r.L = t, e === this.p && (this.p = r), e === this._ && (this._ = t), this.i -= 1 + } + G(e, t) { + let r = t.B, + i = { + l: e, + L: t, + B: r + }; + t.B = i, r.L = i, t === this.h && (this.p = i), r === this.h && (this._ = i), this.i += 1 + } + clear() { + this.i = 0, this.p = this._ = this.h.L = this.h.B = this.h + } + begin() { + return new o(this.p, this.h, this) + } + end() { + return new o(this.h, this.h, this) + } + rBegin() { + return new o(this._, this.h, this, 1) + } + rEnd() { + return new o(this.h, this.h, this, 1) + } + front() { + return this.p.l + } + back() { + return this._.l + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = this.p; + for (; e--;) t = t.B; + return t.l + } + eraseElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = this.p; + for (; e--;) t = t.B; + return this.V(t), this.i + } + eraseElementByValue(e) { + let t = this.p; + for (; t !== this.h;) t.l === e && this.V(t), t = t.B; + return this.i + } + eraseElementByIterator(e) { + let t = e.o; + return t === this.h && (0, n.throwIteratorAccessError)(), e = e.next(), this.V(t), e + } + pushBack(e) { + return this.G(e, this._), this.i + } + popBack() { + if (0 === this.i) return; + let e = this._.l; + return this.V(this._), e + } + pushFront(e) { + return this.G(e, this.h), this.i + } + popFront() { + if (0 === this.i) return; + let e = this.p.l; + return this.V(this.p), e + } + setElementByPos(e, t) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let r = this.p; + for (; e--;) r = r.B; + r.l = t + } + insert(e, t, r = 1) { + if (e < 0 || e > this.i) throw new RangeError; + if (r <= 0) return this.i; + if (0 === e) + for (; r--;) this.pushFront(t); + else if (e === this.i) + for (; r--;) this.pushBack(t); + else { + let i = this.p; + for (let t = 1; t < e; ++t) i = i.B; + let n = i.B; + for (this.i += r; r--;) i.B = { + l: t, + L: i + }, i.B.L = i, i = i.B; + i.B = n, n.L = i + } + return this.i + } + find(e) { + let t = this.p; + for (; t !== this.h;) { + if (t.l === e) return new o(t, this.h, this); + t = t.B + } + return this.end() + } + reverse() { + if (this.i <= 1) return; + let e = this.p, + t = this._, + r = 0; + for (; r << 1 < this.i;) { + let i = e.l; + e.l = t.l, t.l = i, e = e.B, t = t.L, r += 1 + } + } + unique() { + if (this.i <= 1) return this.i; + let e = this.p; + for (; e !== this.h;) { + let t = e; + for (; t.B !== this.h && t.l === t.B.l;) t = t.B, this.i -= 1; + e.B = t.B, e.B.L = e, e = e.B + } + return this.i + } + sort(e) { + if (this.i <= 1) return; + let t = []; + this.forEach((function(e) { + t.push(e) + })), t.sort(e); + let r = this.p; + t.forEach((function(e) { + r.l = e, r = r.B + })) + } + merge(e) { + let t = this; + if (0 === this.i) e.forEach((function(e) { + t.pushBack(e) + })); + else { + let r = this.p; + e.forEach((function(e) { + for (; r !== t.h && r.l <= e;) r = r.B; + t.G(e, r.L) + })) + } + return this.i + } + forEach(e) { + let t = this.p, + r = 0; + for (; t !== this.h;) e(t.l, r++, this), t = t.B + } [Symbol.iterator]() { + return function*() { + if (0 === this.i) return; + let e = this.p; + for (; e !== this.h;) yield e.l, e = e.B + }.bind(this)() + } + }; + e.default = s + })), + Ji = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t, r = (t = zi()) && t.t ? t : { + default: t + }, + i = Gi(), + n = class e extends i.RandomIterator { + constructor(e, t, r) { + super(e, r), this.container = t + } + copy() { + return new e(this.o, this.container, this.iteratorType) + } + }, + o = class extends r.default { + constructor(e = [], t = 4096) { + super(), this.j = 0, this.D = 0, this.R = 0, this.N = 0, this.P = 0, this.A = []; + let r = (() => { + if ("number" == typeof e.length) return e.length; + if ("number" == typeof e.size) return e.size; + if ("function" == typeof e.size) return e.size(); + throw new TypeError("Cannot get the length or size of the container") + })(); + this.F = t, this.P = Math.max(Math.ceil(r / this.F), 1); + for (let e = 0; e < this.P; ++e) this.A.push(new Array(this.F)); + let i = Math.ceil(r / this.F); + this.j = this.R = (this.P >> 1) - (i >> 1), this.D = this.N = this.F - r % this.F >> 1; + let n = this; + e.forEach((function(e) { + n.pushBack(e) + })) + } + T() { + let e = [], + t = Math.max(this.P >> 1, 1); + for (let r = 0; r < t; ++r) e[r] = new Array(this.F); + for (let t = this.j; t < this.P; ++t) e[e.length] = this.A[t]; + for (let t = 0; t < this.R; ++t) e[e.length] = this.A[t]; + e[e.length] = [...this.A[this.R]], this.j = t, this.R = e.length - 1; + for (let r = 0; r < t; ++r) e[e.length] = new Array(this.F); + this.A = e, this.P = e.length + } + O(e) { + let t = this.D + e + 1, + r = t % this.F, + i = r - 1, + n = this.j + (t - r) / this.F; + return 0 === r && (n -= 1), n %= this.P, i < 0 && (i += this.F), { + curNodeBucketIndex: n, + curNodePointerIndex: i + } + } + clear() { + this.A = [new Array(this.F)], this.P = 1, this.j = this.R = this.i = 0, this.D = this.N = this.F >> 1 + } + begin() { + return new n(0, this) + } + end() { + return new n(this.i, this) + } + rBegin() { + return new n(this.i - 1, this, 1) + } + rEnd() { + return new n(-1, this, 1) + } + front() { + if (0 !== this.i) return this.A[this.j][this.D] + } + back() { + if (0 !== this.i) return this.A[this.R][this.N] + } + pushBack(e) { + return this.i && (this.N < this.F - 1 ? this.N += 1 : this.R < this.P - 1 ? (this.R += 1, this.N = 0) : (this.R = 0, this.N = 0), this.R === this.j && this.N === this.D && this.T()), this.i += 1, this.A[this.R][this.N] = e, this.i + } + popBack() { + if (0 === this.i) return; + let e = this.A[this.R][this.N]; + return 1 !== this.i && (this.N > 0 ? this.N -= 1 : this.R > 0 ? (this.R -= 1, this.N = this.F - 1) : (this.R = this.P - 1, this.N = this.F - 1)), this.i -= 1, e + } + pushFront(e) { + return this.i && (this.D > 0 ? this.D -= 1 : this.j > 0 ? (this.j -= 1, this.D = this.F - 1) : (this.j = this.P - 1, this.D = this.F - 1), this.j === this.R && this.D === this.N && this.T()), this.i += 1, this.A[this.j][this.D] = e, this.i + } + popFront() { + if (0 === this.i) return; + let e = this.A[this.j][this.D]; + return 1 !== this.i && (this.D < this.F - 1 ? this.D += 1 : this.j < this.P - 1 ? (this.j += 1, this.D = 0) : (this.j = 0, this.D = 0)), this.i -= 1, e + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let { + curNodeBucketIndex: t, + curNodePointerIndex: r + } = this.O(e); + return this.A[t][r] + } + setElementByPos(e, t) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let { + curNodeBucketIndex: r, + curNodePointerIndex: i + } = this.O(e); + this.A[r][i] = t + } + insert(e, t, r = 1) { + if (e < 0 || e > this.i) throw new RangeError; + if (0 === e) + for (; r--;) this.pushFront(t); + else if (e === this.i) + for (; r--;) this.pushBack(t); + else { + let i = []; + for (let t = e; t < this.i; ++t) i.push(this.getElementByPos(t)); + this.cut(e - 1); + for (let e = 0; e < r; ++e) this.pushBack(t); + for (let e = 0; e < i.length; ++e) this.pushBack(i[e]) + } + return this.i + } + cut(e) { + if (e < 0) return this.clear(), 0; + let { + curNodeBucketIndex: t, + curNodePointerIndex: r + } = this.O(e); + return this.R = t, this.N = r, this.i = e + 1, this.i + } + eraseElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + if (0 === e) this.popFront(); + else if (e === this.i - 1) this.popBack(); + else { + let t = []; + for (let r = e + 1; r < this.i; ++r) t.push(this.getElementByPos(r)); + this.cut(e), this.popBack(); + let r = this; + t.forEach((function(e) { + r.pushBack(e) + })) + } + return this.i + } + eraseElementByValue(e) { + if (0 === this.i) return 0; + let t = []; + for (let r = 0; r < this.i; ++r) { + let i = this.getElementByPos(r); + i !== e && t.push(i) + } + let r = t.length; + for (let e = 0; e < r; ++e) this.setElementByPos(e, t[e]); + return this.cut(r - 1) + } + eraseElementByIterator(e) { + let t = e.o; + return this.eraseElementByPos(t), e.next() + } + find(e) { + for (let t = 0; t < this.i; ++t) + if (this.getElementByPos(t) === e) return new n(t, this); + return this.end() + } + reverse() { + let e = 0, + t = this.i - 1; + for (; e < t;) { + let r = this.getElementByPos(e); + this.setElementByPos(e, this.getElementByPos(t)), this.setElementByPos(t, r), e += 1, t -= 1 + } + } + unique() { + if (this.i <= 1) return this.i; + let e = 1, + t = this.getElementByPos(0); + for (let r = 1; r < this.i; ++r) { + let i = this.getElementByPos(r); + i !== t && (t = i, this.setElementByPos(e++, i)) + } + for (; this.i > e;) this.popBack(); + return this.i + } + sort(e) { + let t = []; + for (let e = 0; e < this.i; ++e) t.push(this.getElementByPos(e)); + t.sort(e); + for (let e = 0; e < this.i; ++e) this.setElementByPos(e, t[e]) + } + shrinkToFit() { + if (0 === this.i) return; + let e = []; + this.forEach((function(t) { + e.push(t) + })), this.P = Math.max(Math.ceil(this.i / this.F), 1), this.i = this.j = this.R = this.D = this.N = 0, this.A = []; + for (let e = 0; e < this.P; ++e) this.A.push(new Array(this.F)); + for (let t = 0; t < e.length; ++t) this.pushBack(e[t]) + } + forEach(e) { + for (let t = 0; t < this.i; ++t) e(this.getElementByPos(t), t, this) + } [Symbol.iterator]() { + return function*() { + for (let e = 0; e < this.i; ++e) yield this.getElementByPos(e) + }.bind(this)() + } + }; + e.default = o + })), + Xi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.TreeNodeEnableIndex = e.TreeNode = void 0; + var t = class { + constructor(e, t) { + this.ee = 1, this.u = void 0, this.l = void 0, this.U = void 0, this.W = void 0, this.tt = void 0, this.u = e, this.l = t + } + L() { + let e = this; + if (1 === e.ee && e.tt.tt === e) e = e.W; + else if (e.U) + for (e = e.U; e.W;) e = e.W; + else { + let t = e.tt; + for (; t.U === e;) e = t, t = e.tt; + e = t + } + return e + } + B() { + let e = this; + if (e.W) { + for (e = e.W; e.U;) e = e.U; + return e + } { + let t = e.tt; + for (; t.W === e;) e = t, t = e.tt; + return e.W !== t ? t : e + } + } + te() { + let e = this.tt, + t = this.W, + r = t.U; + return e.tt === this ? e.tt = t : e.U === this ? e.U = t : e.W = t, t.tt = e, t.U = this, this.tt = t, this.W = r, r && (r.tt = this), t + } + se() { + let e = this.tt, + t = this.U, + r = t.W; + return e.tt === this ? e.tt = t : e.U === this ? e.U = t : e.W = t, t.tt = e, t.W = this, this.tt = t, this.U = r, r && (r.tt = this), t + } + }; + e.TreeNode = t, e.TreeNodeEnableIndex = class extends t { + constructor() { + super(...arguments), this.rt = 1 + } + te() { + let e = super.te(); + return this.ie(), e.ie(), e + } + se() { + let e = super.se(); + return this.ie(), e.ie(), e + } + ie() { + this.rt = 1, this.U && (this.rt += this.U.rt), this.W && (this.rt += this.W.rt) + } + } + })), + Zi = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = Xi(), + r = $i(), + i = Ki(), + n = class extends r.Container { + constructor(e = function(e, t) { + return e < t ? -1 : e > t ? 1 : 0 + }, r = !1) { + super(), this.Y = void 0, this.v = e, r ? (this.re = t.TreeNodeEnableIndex, this.M = function(e, t, r) { + let i = this.ne(e, t, r); + if (i) { + let e = i.tt; + for (; e !== this.h;) e.rt += 1, e = e.tt; + let t = this.he(i); + if (t) { + let { + parentNode: e, + grandParent: r, + curNode: i + } = t; + e.ie(), r.ie(), i.ie() + } + } + return this.i + }, this.V = function(e) { + let t = this.fe(e); + for (; t !== this.h;) t.rt -= 1, t = t.tt + }) : (this.re = t.TreeNode, this.M = function(e, t, r) { + let i = this.ne(e, t, r); + return i && this.he(i), this.i + }, this.V = this.fe), this.h = new this.re + } + X(e, t) { + let r = this.h; + for (; e;) { + let i = this.v(e.u, t); + if (i < 0) e = e.W; + else { + if (!(i > 0)) return e; + r = e, e = e.U + } + } + return r + } + Z(e, t) { + let r = this.h; + for (; e;) this.v(e.u, t) <= 0 ? e = e.W : (r = e, e = e.U); + return r + } + $(e, t) { + let r = this.h; + for (; e;) { + let i = this.v(e.u, t); + if (i < 0) r = e, e = e.W; + else { + if (!(i > 0)) return e; + e = e.U + } + } + return r + } + rr(e, t) { + let r = this.h; + for (; e;) this.v(e.u, t) < 0 ? (r = e, e = e.W) : e = e.U; + return r + } + ue(e) { + for (;;) { + let t = e.tt; + if (t === this.h) return; + if (1 === e.ee) return void(e.ee = 0); + if (e === t.U) { + let r = t.W; + if (1 === r.ee) r.ee = 0, t.ee = 1, t === this.Y ? this.Y = t.te() : t.te(); + else { + if (r.W && 1 === r.W.ee) return r.ee = t.ee, t.ee = 0, r.W.ee = 0, void(t === this.Y ? this.Y = t.te() : t.te()); + r.U && 1 === r.U.ee ? (r.ee = 1, r.U.ee = 0, r.se()) : (r.ee = 1, e = t) + } + } else { + let r = t.U; + if (1 === r.ee) r.ee = 0, t.ee = 1, t === this.Y ? this.Y = t.se() : t.se(); + else { + if (r.U && 1 === r.U.ee) return r.ee = t.ee, t.ee = 0, r.U.ee = 0, void(t === this.Y ? this.Y = t.se() : t.se()); + r.W && 1 === r.W.ee ? (r.ee = 1, r.W.ee = 0, r.te()) : (r.ee = 1, e = t) + } + } + } + } + fe(e) { + if (1 === this.i) return this.clear(), this.h; + let t = e; + for (; t.U || t.W;) { + if (t.W) + for (t = t.W; t.U;) t = t.U; + else t = t.U; + [e.u, t.u] = [t.u, e.u], [e.l, t.l] = [t.l, e.l], e = t + } + this.h.U === t ? this.h.U = t.tt : this.h.W === t && (this.h.W = t.tt), this.ue(t); + let r = t.tt; + return t === r.U ? r.U = void 0 : r.W = void 0, this.i -= 1, this.Y.ee = 0, r + } + oe(e, t) { + return void 0 !== e && (!(!this.oe(e.U, t) && !t(e)) || this.oe(e.W, t)) + } + he(e) { + for (;;) { + let t = e.tt; + if (0 === t.ee) return; + let r = t.tt; + if (t === r.U) { + let i = r.W; + if (i && 1 === i.ee) { + if (i.ee = t.ee = 0, r === this.Y) return; + r.ee = 1, e = r; + continue + } + if (e === t.W) { + if (e.ee = 0, e.U && (e.U.tt = t), e.W && (e.W.tt = r), t.W = e.U, r.U = e.W, e.U = t, e.W = r, r === this.Y) this.Y = e, this.h.tt = e; + else { + let t = r.tt; + t.U === r ? t.U = e : t.W = e + } + return e.tt = r.tt, t.tt = e, r.tt = e, r.ee = 1, { + parentNode: t, + grandParent: r, + curNode: e + } + } + t.ee = 0, r === this.Y ? this.Y = r.se() : r.se(), r.ee = 1 + } else { + let i = r.U; + if (i && 1 === i.ee) { + if (i.ee = t.ee = 0, r === this.Y) return; + r.ee = 1, e = r; + continue + } + if (e === t.U) { + if (e.ee = 0, e.U && (e.U.tt = r), e.W && (e.W.tt = t), r.W = e.U, t.U = e.W, e.U = r, e.W = t, r === this.Y) this.Y = e, this.h.tt = e; + else { + let t = r.tt; + t.U === r ? t.U = e : t.W = e + } + return e.tt = r.tt, t.tt = e, r.tt = e, r.ee = 1, { + parentNode: t, + grandParent: r, + curNode: e + } + } + t.ee = 0, r === this.Y ? this.Y = r.te() : r.te(), r.ee = 1 + } + return + } + } + ne(e, t, r) { + if (void 0 === this.Y) return this.i += 1, this.Y = new this.re(e, t), this.Y.ee = 0, this.Y.tt = this.h, this.h.tt = this.Y, this.h.U = this.Y, void(this.h.W = this.Y); + let i, n = this.h.U, + o = this.v(n.u, e); + if (0 !== o) { + if (o > 0) n.U = new this.re(e, t), n.U.tt = n, i = n.U, this.h.U = i; + else { + let n = this.h.W, + o = this.v(n.u, e); + if (0 === o) return void(n.l = t); + if (o < 0) n.W = new this.re(e, t), n.W.tt = n, i = n.W, this.h.W = i; + else { + if (void 0 !== r) { + let n = r.o; + if (n !== this.h) { + let r = this.v(n.u, e); + if (0 === r) return void(n.l = t); + if (r > 0) { + let r = n.L(), + o = this.v(r.u, e); + if (0 === o) return void(r.l = t); + o < 0 && (i = new this.re(e, t), void 0 === r.W ? (r.W = i, i.tt = r) : (n.U = i, i.tt = n)) + } + } + } + if (void 0 === i) + for (i = this.Y;;) { + let r = this.v(i.u, e); + if (r > 0) { + if (void 0 === i.U) { + i.U = new this.re(e, t), i.U.tt = i, i = i.U; + break + } + i = i.U + } else { + if (!(r < 0)) return void(i.l = t); + if (void 0 === i.W) { + i.W = new this.re(e, t), i.W.tt = i, i = i.W; + break + } + i = i.W + } + } + } + } + return this.i += 1, i + } + n.l = t + } + I(e, t) { + for (; e;) { + let r = this.v(e.u, t); + if (r < 0) e = e.W; + else { + if (!(r > 0)) return e; + e = e.U + } + } + return e || this.h + } + clear() { + this.i = 0, this.Y = void 0, this.h.tt = void 0, this.h.U = this.h.W = void 0 + } + updateKeyByIterator(e, t) { + let r = e.o; + if (r === this.h && (0, i.throwIteratorAccessError)(), 1 === this.i) return r.u = t, !0; + if (r === this.h.U) return this.v(r.B().u, t) > 0 && (r.u = t, !0); + if (r === this.h.W) return this.v(r.L().u, t) < 0 && (r.u = t, !0); + let n = r.L().u; + if (this.v(n, t) >= 0) return !1; + let o = r.B().u; + return !(this.v(o, t) <= 0 || (r.u = t, 0)) + } + eraseElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = 0, + r = this; + return this.oe(this.Y, (function(i) { + return e === t ? (r.V(i), !0) : (t += 1, !1) + })), this.i + } + eraseElementByKey(e) { + if (0 === this.i) return !1; + let t = this.I(this.Y, e); + return t !== this.h && (this.V(t), !0) + } + eraseElementByIterator(e) { + let t = e.o; + t === this.h && (0, i.throwIteratorAccessError)(); + let r = void 0 === t.W; + return 0 === e.iteratorType ? r && e.next() : (!r || void 0 === t.U) && e.next(), this.V(t), e + } + forEach(e) { + let t = 0; + for (let r of this) e(r, t++, this) + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t, r = 0; + for (let i of this) { + if (r === e) { + t = i; + break + } + r += 1 + } + return t + } + getHeight() { + if (0 === this.i) return 0; + let e = function(t) { + return t ? Math.max(e(t.U), e(t.W)) + 1 : 0 + }; + return e(this.Y) + } + }; + e.default = n + })), + en = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = $i(), + r = Ki(), + i = class extends t.ContainerIterator { + constructor(e, t, i) { + super(i), this.o = e, this.h = t, 0 === this.iteratorType ? (this.pre = function() { + return this.o === this.h.U && (0, r.throwIteratorAccessError)(), this.o = this.o.L(), this + }, this.next = function() { + return this.o === this.h && (0, r.throwIteratorAccessError)(), this.o = this.o.B(), this + }) : (this.pre = function() { + return this.o === this.h.W && (0, r.throwIteratorAccessError)(), this.o = this.o.B(), this + }, this.next = function() { + return this.o === this.h && (0, r.throwIteratorAccessError)(), this.o = this.o.L(), this + }) + } + get index() { + let e = this.o, + t = this.h.tt; + if (e === this.h) return t ? t.rt - 1 : 0; + let r = 0; + for (e.U && (r += e.U.rt); e !== t;) { + let t = e.tt; + e === t.W && (r += 1, t.U && (r += t.U.rt)), e = t + } + return r + } + }; + e.default = i + })), + tn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = n(Zi()), + r = n(en()), + i = Ki(); + + function n(e) { + return e && e.t ? e : { + default: e + } + } + var o = class e extends r.default { + constructor(e, t, r, i) { + super(e, t, i), this.container = r + } + get pointer() { + return this.o === this.h && (0, i.throwIteratorAccessError)(), this.o.u + } + copy() { + return new e(this.o, this.h, this.container, this.iteratorType) + } + }, + s = class extends t.default { + constructor(e = [], t, r) { + super(t, r); + let i = this; + e.forEach((function(e) { + i.insert(e) + })) + }* K(e) { + void 0 !== e && (yield* this.K(e.U), yield e.u, yield* this.K(e.W)) + } + begin() { + return new o(this.h.U || this.h, this.h, this) + } + end() { + return new o(this.h, this.h, this) + } + rBegin() { + return new o(this.h.W || this.h, this.h, this, 1) + } + rEnd() { + return new o(this.h, this.h, this, 1) + } + front() { + return this.h.U ? this.h.U.u : void 0 + } + back() { + return this.h.W ? this.h.W.u : void 0 + } + insert(e, t) { + return this.M(e, void 0, t) + } + find(e) { + let t = this.I(this.Y, e); + return new o(t, this.h, this) + } + lowerBound(e) { + let t = this.X(this.Y, e); + return new o(t, this.h, this) + } + upperBound(e) { + let t = this.Z(this.Y, e); + return new o(t, this.h, this) + } + reverseLowerBound(e) { + let t = this.$(this.Y, e); + return new o(t, this.h, this) + } + reverseUpperBound(e) { + let t = this.rr(this.Y, e); + return new o(t, this.h, this) + } + union(e) { + let t = this; + return e.forEach((function(e) { + t.insert(e) + })), this.i + } [Symbol.iterator]() { + return this.K(this.Y) + } + }; + e.default = s + })), + rn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = n(Zi()), + r = n(en()), + i = Ki(); + + function n(e) { + return e && e.t ? e : { + default: e + } + } + var o = class e extends r.default { + constructor(e, t, r, i) { + super(e, t, i), this.container = r + } + get pointer() { + this.o === this.h && (0, i.throwIteratorAccessError)(); + let e = this; + return new Proxy([], { + get: (t, r) => "0" === r ? e.o.u : "1" === r ? e.o.l : void 0, + set(t, r, i) { + if ("1" !== r) throw new TypeError("props must be 1"); + return e.o.l = i, !0 + } + }) + } + copy() { + return new e(this.o, this.h, this.container, this.iteratorType) + } + }, + s = class extends t.default { + constructor(e = [], t, r) { + super(t, r); + let i = this; + e.forEach((function(e) { + i.setElement(e[0], e[1]) + })) + }* K(e) { + void 0 !== e && (yield* this.K(e.U), yield [e.u, e.l], yield* this.K(e.W)) + } + begin() { + return new o(this.h.U || this.h, this.h, this) + } + end() { + return new o(this.h, this.h, this) + } + rBegin() { + return new o(this.h.W || this.h, this.h, this, 1) + } + rEnd() { + return new o(this.h, this.h, this, 1) + } + front() { + if (0 === this.i) return; + let e = this.h.U; + return [e.u, e.l] + } + back() { + if (0 === this.i) return; + let e = this.h.W; + return [e.u, e.l] + } + lowerBound(e) { + let t = this.X(this.Y, e); + return new o(t, this.h, this) + } + upperBound(e) { + let t = this.Z(this.Y, e); + return new o(t, this.h, this) + } + reverseLowerBound(e) { + let t = this.$(this.Y, e); + return new o(t, this.h, this) + } + reverseUpperBound(e) { + let t = this.rr(this.Y, e); + return new o(t, this.h, this) + } + setElement(e, t, r) { + return this.M(e, t, r) + } + find(e) { + let t = this.I(this.Y, e); + return new o(t, this.h, this) + } + getElementByKey(e) { + return this.I(this.Y, e).l + } + union(e) { + let t = this; + return e.forEach((function(e) { + t.setElement(e[0], e[1]) + })), this.i + } [Symbol.iterator]() { + return this.K(this.Y) + } + }; + e.default = s + })), + nn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = function(e) { + let t = typeof e; + return "object" === t && null !== e || "function" === t + } + })), + on = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.HashContainerIterator = e.HashContainer = void 0; + var t, r = $i(), + i = (t = nn()) && t.t ? t : { + default: t + }, + n = Ki(), + o = class extends r.ContainerIterator { + constructor(e, t, r) { + super(r), this.o = e, this.h = t, 0 === this.iteratorType ? (this.pre = function() { + return this.o.L === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.L, this + }, this.next = function() { + return this.o === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.B, this + }) : (this.pre = function() { + return this.o.B === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.B, this + }, this.next = function() { + return this.o === this.h && (0, n.throwIteratorAccessError)(), this.o = this.o.L, this + }) + } + }; + e.HashContainerIterator = o; + var s = class extends r.Container { + constructor() { + super(), this.H = [], this.g = {}, this.HASH_TAG = Symbol("@@HASH_TAG"), Object.setPrototypeOf(this.g, null), this.h = {}, this.h.L = this.h.B = this.p = this._ = this.h + } + V(e) { + let { + L: t, + B: r + } = e; + t.B = r, r.L = t, e === this.p && (this.p = r), e === this._ && (this._ = t), this.i -= 1 + } + M(e, t, r) { + let n; + if (void 0 === r && (r = (0, i.default)(e)), r) { + let r = e[this.HASH_TAG]; + if (void 0 !== r) return this.H[r].l = t, this.i; + Object.defineProperty(e, this.HASH_TAG, { + value: this.H.length, + configurable: !0 + }), n = { + u: e, + l: t, + L: this._, + B: this.h + }, this.H.push(n) + } else { + let r = this.g[e]; + if (r) return r.l = t, this.i; + n = { + u: e, + l: t, + L: this._, + B: this.h + }, this.g[e] = n + } + return 0 === this.i ? (this.p = n, this.h.B = n) : this._.B = n, this._ = n, this.h.L = n, ++this.i + } + I(e, t) { + if (void 0 === t && (t = (0, i.default)(e)), t) { + let t = e[this.HASH_TAG]; + return void 0 === t ? this.h : this.H[t] + } + return this.g[e] || this.h + } + clear() { + let e = this.HASH_TAG; + this.H.forEach((function(t) { + delete t.u[e] + })), this.H = [], this.g = {}, Object.setPrototypeOf(this.g, null), this.i = 0, this.p = this._ = this.h.L = this.h.B = this.h + } + eraseElementByKey(e, t) { + let r; + if (void 0 === t && (t = (0, i.default)(e)), t) { + let t = e[this.HASH_TAG]; + if (void 0 === t) return !1; + delete e[this.HASH_TAG], r = this.H[t], delete this.H[t] + } else { + if (r = this.g[e], void 0 === r) return !1; + delete this.g[e] + } + return this.V(r), !0 + } + eraseElementByIterator(e) { + let t = e.o; + return t === this.h && (0, n.throwIteratorAccessError)(), this.V(t), e.next() + } + eraseElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = this.p; + for (; e--;) t = t.B; + return this.V(t), this.i + } + }; + e.HashContainer = s + })), + sn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t = on(), + r = Ki(), + i = class e extends t.HashContainerIterator { + constructor(e, t, r, i) { + super(e, t, i), this.container = r + } + get pointer() { + return this.o === this.h && (0, r.throwIteratorAccessError)(), this.o.u + } + copy() { + return new e(this.o, this.h, this.container, this.iteratorType) + } + }, + n = class extends t.HashContainer { + constructor(e = []) { + super(); + let t = this; + e.forEach((function(e) { + t.insert(e) + })) + } + begin() { + return new i(this.p, this.h, this) + } + end() { + return new i(this.h, this.h, this) + } + rBegin() { + return new i(this._, this.h, this, 1) + } + rEnd() { + return new i(this.h, this.h, this, 1) + } + front() { + return this.p.u + } + back() { + return this._.u + } + insert(e, t) { + return this.M(e, void 0, t) + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = this.p; + for (; e--;) t = t.B; + return t.u + } + find(e, t) { + let r = this.I(e, t); + return new i(r, this.h, this) + } + forEach(e) { + let t = 0, + r = this.p; + for (; r !== this.h;) e(r.u, t++, this), r = r.B + } [Symbol.iterator]() { + return function*() { + let e = this.p; + for (; e !== this.h;) yield e.u, e = e.B + }.bind(this)() + } + }; + e.default = n + })), + an = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), e.default = void 0; + var t, r = on(), + i = (t = nn()) && t.t ? t : { + default: t + }, + n = Ki(), + o = class e extends r.HashContainerIterator { + constructor(e, t, r, i) { + super(e, t, i), this.container = r + } + get pointer() { + this.o === this.h && (0, n.throwIteratorAccessError)(); + let e = this; + return new Proxy([], { + get: (t, r) => "0" === r ? e.o.u : "1" === r ? e.o.l : void 0, + set(t, r, i) { + if ("1" !== r) throw new TypeError("props must be 1"); + return e.o.l = i, !0 + } + }) + } + copy() { + return new e(this.o, this.h, this.container, this.iteratorType) + } + }, + s = class extends r.HashContainer { + constructor(e = []) { + super(); + let t = this; + e.forEach((function(e) { + t.setElement(e[0], e[1]) + })) + } + begin() { + return new o(this.p, this.h, this) + } + end() { + return new o(this.h, this.h, this) + } + rBegin() { + return new o(this._, this.h, this, 1) + } + rEnd() { + return new o(this.h, this.h, this, 1) + } + front() { + if (0 !== this.i) return [this.p.u, this.p.l] + } + back() { + if (0 !== this.i) return [this._.u, this._.l] + } + setElement(e, t, r) { + return this.M(e, t, r) + } + getElementByKey(e, t) { + if (void 0 === t && (t = (0, i.default)(e)), t) { + let t = e[this.HASH_TAG]; + return void 0 !== t ? this.H[t].l : void 0 + } + let r = this.g[e]; + return r ? r.l : void 0 + } + getElementByPos(e) { + if (e < 0 || e > this.i - 1) throw new RangeError; + let t = this.p; + for (; e--;) t = t.B; + return [t.u, t.l] + } + find(e, t) { + let r = this.I(e, t); + return new o(r, this.h, this) + } + forEach(e) { + let t = 0, + r = this.p; + for (; r !== this.h;) e([r.u, r.l], t++, this), r = r.B + } [Symbol.iterator]() { + return function*() { + let e = this.p; + for (; e !== this.h;) yield [e.u, e.l], e = e.B + }.bind(this)() + } + }; + e.default = s + })), + ln = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "t", { + value: !0 + }), Object.defineProperty(e, "Deque", { + enumerable: !0, + get: function() { + return s.default + } + }), Object.defineProperty(e, "HashMap", { + enumerable: !0, + get: function() { + return u.default + } + }), Object.defineProperty(e, "HashSet", { + enumerable: !0, + get: function() { + return h.default + } + }), Object.defineProperty(e, "LinkList", { + enumerable: !0, + get: function() { + return o.default + } + }), Object.defineProperty(e, "OrderedMap", { + enumerable: !0, + get: function() { + return l.default + } + }), Object.defineProperty(e, "OrderedSet", { + enumerable: !0, + get: function() { + return a.default + } + }), Object.defineProperty(e, "PriorityQueue", { + enumerable: !0, + get: function() { + return i.default + } + }), Object.defineProperty(e, "Queue", { + enumerable: !0, + get: function() { + return r.default + } + }), Object.defineProperty(e, "Stack", { + enumerable: !0, + get: function() { + return t.default + } + }), Object.defineProperty(e, "Vector", { + enumerable: !0, + get: function() { + return n.default + } + }); + var t = c(qi()), + r = c(Vi()), + i = c(Hi()), + n = c(Qi()), + o = c(Yi()), + s = c(Ji()), + a = c(tn()), + l = c(rn()), + h = c(sn()), + u = c(an()); + + function c(e) { + return e && e.t ? e : { + default: e + } + } + })), + hn = h(((e, t) => { + f(), rt(), qe(); + var r = ln().OrderedSet, + n = Ai()("number-allocator:trace"), + o = Ai()("number-allocator:error"); + + function s(e, t) { + this.low = e, this.high = t + } + + function a(e, t) { + if (!(this instanceof a)) return new a(e, t); + this.min = e, this.max = t, this.ss = new r([], ((e, t) => e.compare(t))), n("Create"), this.clear() + } + s.prototype.equals = function(e) { + return this.low === e.low && this.high === e.high + }, s.prototype.compare = function(e) { + return this.low < e.low && this.high < e.low ? -1 : e.low < this.low && e.high < this.low ? 1 : 0 + }, a.prototype.firstVacant = function() { + return 0 === this.ss.size() ? null : this.ss.front().low + }, a.prototype.alloc = function() { + if (0 === this.ss.size()) return n("alloc():empty"), null; + let e = this.ss.begin(), + t = e.pointer.low, + r = e.pointer.high, + i = t; + return i + 1 <= r ? this.ss.updateKeyByIterator(e, new s(t + 1, r)) : this.ss.eraseElementByPos(0), n("alloc():" + i), i + }, a.prototype.use = function(e) { + let t = new s(e, e), + r = this.ss.lowerBound(t); + if (!r.equals(this.ss.end())) { + let i = r.pointer.low, + o = r.pointer.high; + return r.pointer.equals(t) ? (this.ss.eraseElementByIterator(r), n("use():" + e), !0) : !(i > e || (i === e ? (this.ss.updateKeyByIterator(r, new s(i + 1, o)), n("use():" + e), 0) : o === e ? (this.ss.updateKeyByIterator(r, new s(i, o - 1)), n("use():" + e), 0) : (this.ss.updateKeyByIterator(r, new s(e + 1, o)), this.ss.insert(new s(i, e - 1)), n("use():" + e), 0))) + } + return n("use():failed"), !1 + }, a.prototype.free = function(e) { + if (e < this.min || e > this.max) return void o("free():" + e + " is out of range"); + let t = new s(e, e), + r = this.ss.upperBound(t); + if (r.equals(this.ss.end())) { + if (r.equals(this.ss.begin())) return void this.ss.insert(t); + r.pre(); + let i = r.pointer.high; + r.pointer.high + 1 === e ? this.ss.updateKeyByIterator(r, new s(i, e)) : this.ss.insert(t) + } else if (r.equals(this.ss.begin())) + if (e + 1 === r.pointer.low) { + let t = r.pointer.high; + this.ss.updateKeyByIterator(r, new s(e, t)) + } else this.ss.insert(t); + else { + let i = r.pointer.low, + n = r.pointer.high; + r.pre(); + let o = r.pointer.low; + r.pointer.high + 1 === e ? e + 1 === i ? (this.ss.eraseElementByIterator(r), this.ss.updateKeyByIterator(r, new s(o, n))) : this.ss.updateKeyByIterator(r, new s(o, e)) : e + 1 === i ? (this.ss.eraseElementByIterator(r.next()), this.ss.insert(new s(e, n))) : this.ss.insert(t) + } + n("free():" + e) + }, a.prototype.clear = function() { + n("clear()"), this.ss.clear(), this.ss.insert(new s(this.min, this.max)) + }, a.prototype.intervalCount = function() { + return this.ss.size() + }, a.prototype.dump = function() { + i.log("length:" + this.ss.size()); + for (let e of this.ss) i.log(e) + }, t.exports = a + })), + un = h(((e, t) => { + f(), rt(), qe(); + var r = hn(); + t.exports.NumberAllocator = r + })), + cn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = Wi(), + r = un(); + e.default = class { + constructor(e) { + e > 0 && (this.aliasToTopic = new t.LRUCache({ + max: e + }), this.topicToAlias = {}, this.numberAllocator = new r.NumberAllocator(1, e), this.max = e, this.length = 0) + } + put(e, t) { + if (0 === t || t > this.max) return !1; + let r = this.aliasToTopic.get(t); + return r && delete this.topicToAlias[r], this.aliasToTopic.set(t, e), this.topicToAlias[e] = t, this.numberAllocator.use(t), this.length = this.aliasToTopic.size, !0 + } + getTopicByAlias(e) { + return this.aliasToTopic.get(e) + } + getAliasByTopic(e) { + let t = this.topicToAlias[e]; + return typeof t < "u" && this.aliasToTopic.get(t), t + } + clear() { + this.aliasToTopic.clear(), this.topicToAlias = {}, this.numberAllocator.clear(), this.length = 0 + } + getLruAlias() { + return this.numberAllocator.firstVacant() || [...this.aliasToTopic.keys()][this.aliasToTopic.size - 1] + } + } + })), + fn = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var r = Di(), + i = t(cn()), + n = ji(); + e.default = (e, t) => { + e.log("_handleConnack"); + let { + options: o + } = e, s = 5 === o.protocolVersion ? t.reasonCode : t.returnCode; + if (clearTimeout(e.connackTimer), delete e.topicAliasSend, t.properties) { + if (t.properties.topicAliasMaximum) { + if (t.properties.topicAliasMaximum > 65535) return void e.emit("error", new Error("topicAliasMaximum from broker is out of range")); + t.properties.topicAliasMaximum > 0 && (e.topicAliasSend = new i.default(t.properties.topicAliasMaximum)) + } + t.properties.serverKeepAlive && o.keepalive && (o.keepalive = t.properties.serverKeepAlive, e._shiftPingInterval()), t.properties.maximumPacketSize && (o.properties || (o.properties = {}), o.properties.maximumPacketSize = t.properties.maximumPacketSize) + } + if (0 === s) e.reconnecting = !1, e._onConnect(t); + else if (s > 0) { + let t = new n.ErrorWithReasonCode(`Connection refused: ${r.ReasonCodes[s]}`, s); + e.emit("error", t) + } + } + })), + pn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.default = (e, t, r) => { + e.log("handling pubrel packet"); + let i = typeof r < "u" ? r : e.noop, + { + messageId: n + } = t, + o = { + cmd: "pubcomp", + messageId: n + }; + e.incomingStore.get(t, ((t, r) => { + t ? e._sendPacket(o, i) : (e.emit("message", r.topic, r.payload, r), e.handleMessage(r, (t => { + if (t) return i(t); + e.incomingStore.del(r, e.noop), e._sendPacket(o, i) + }))) + })) + } + })), + dn = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var r = t(Ni()), + i = t(Fi()), + n = t(fn()), + o = t(Di()), + s = t(pn()); + e.default = (e, t, a) => { + let { + options: l + } = e; + if (5 === l.protocolVersion && l.properties && l.properties.maximumPacketSize && l.properties.maximumPacketSize < t.length) return e.emit("error", new Error(`exceeding packets size ${t.cmd}`)), e.end({ + reasonCode: 149, + properties: { + reasonString: "Maximum packet size was exceeded" + } + }), e; + switch (e.log("_handlePacket :: emitting packetreceive"), e.emit("packetreceive", t), t.cmd) { + case "publish": + (0, r.default)(e, t, a); + break; + case "puback": + case "pubrec": + case "pubcomp": + case "suback": + case "unsuback": + (0, o.default)(e, t), a(); + break; + case "pubrel": + (0, s.default)(e, t, a); + break; + case "connack": + (0, n.default)(e, t), a(); + break; + case "auth": + (0, i.default)(e, t), a(); + break; + case "pingresp": + e.pingResp = !0, a(); + break; + case "disconnect": + e.emit("disconnect", t), a(); + break; + default: + e.log("_handlePacket :: unknown command"), a() + } + } + })), + gn = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.TypedEventEmitter = void 0; + var r = t((Nt(), c(Ot))), + i = ji(), + n = class {}; + e.TypedEventEmitter = n, (0, i.applyMixin)(n, r.default) + })), + bn = h((e => { + f(), rt(), qe(); + var t = e && e.__createBinding || (Object.create ? function(e, t, r, i) { + void 0 === i && (i = r); + var n = Object.getOwnPropertyDescriptor(t, r); + (!n || ("get" in n ? !t.__esModule : n.writable || n.configurable)) && (n = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, i, n) + } : function(e, t, r, i) { + void 0 === i && (i = r), e[i] = t[r] + }), + r = e && e.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + i = e && e.__importStar || function(e) { + if (e && e.__esModule) return e; + var i = {}; + if (null != e) + for (var n in e) "default" !== n && Object.prototype.hasOwnProperty.call(e, n) && t(i, e, n); + return r(i, e), i + }, + n = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var o = n(it()), + s = n(Oi()), + a = n(Pi()), + l = bi(), + h = n(Bi()), + u = n(Ui()), + c = i(Mi()), + d = n(Ai()), + g = n(Li()), + b = n(dn()), + y = gn(), + m = p ? p.nextTick : e => { + setTimeout(e, 0) + }, + w = window.setImmediate || ((...e) => { + let t = e.shift(); + m((() => { + t(...e) + })) + }), + _ = { + keepalive: 60, + reschedulePings: !0, + protocolId: "MQTT", + protocolVersion: 4, + reconnectPeriod: 1e3, + connectTimeout: 3e4, + clean: !0, + resubscribe: !0, + writeCache: !0 + }, + v = ["ECONNREFUSED", "EADDRINUSE", "ECONNRESET", "ENOTFOUND", "ETIMEDOUT"], + E = class e extends y.TypedEventEmitter { + static defaultId() { + return `mqttjs_${Math.random().toString(16).substr(2,8)}` + } + constructor(t, r) { + super(), this.options = r || {}; + for (let e in _) typeof this.options[e] > "u" ? this.options[e] = _[e] : this.options[e] = r[e]; + this.log = this.options.log || (0, d.default)("mqttjs:client"), this.noop = this._noop.bind(this), this.log("MqttClient :: options.protocol", r.protocol), this.log("MqttClient :: options.protocolVersion", r.protocolVersion), this.log("MqttClient :: options.username", r.username), this.log("MqttClient :: options.keepalive", r.keepalive), this.log("MqttClient :: options.reconnectPeriod", r.reconnectPeriod), this.log("MqttClient :: options.rejectUnauthorized", r.rejectUnauthorized), this.log("MqttClient :: options.properties.topicAliasMaximum", r.properties ? r.properties.topicAliasMaximum : void 0), this.options.clientId = "string" == typeof r.clientId ? r.clientId : e.defaultId(), this.log("MqttClient :: clientId", this.options.clientId), this.options.customHandleAcks = 5 === r.protocolVersion && r.customHandleAcks ? r.customHandleAcks : (...e) => { + e[3](null, 0) + }, this.options.writeCache || (s.default.writeToStream.cacheNumbers = !1), this.streamBuilder = t, this.messageIdProvider = typeof this.options.messageIdProvider > "u" ? new a.default : this.options.messageIdProvider, this.outgoingStore = r.outgoingStore || new g.default, this.incomingStore = r.incomingStore || new g.default, this.queueQoSZero = void 0 === r.queueQoSZero || r.queueQoSZero, this._resubscribeTopics = {}, this.messageIdToTopic = {}, this.pingTimer = null, this.connected = !1, this.disconnecting = !1, this.reconnecting = !1, this.queue = [], this.connackTimer = null, this.reconnectTimer = null, this._storeProcessing = !1, this._packetIdsDuringStoreProcessing = {}, this._storeProcessingQueue = [], this.outgoing = {}, this._firstConnection = !0, r.properties && r.properties.topicAliasMaximum > 0 && (r.properties.topicAliasMaximum > 65535 ? this.log("MqttClient :: options.properties.topicAliasMaximum is out of range") : this.topicAliasRecv = new o.default(r.properties.topicAliasMaximum)), this.on("connect", (() => { + let { + queue: e + } = this, t = () => { + let r = e.shift(); + this.log("deliver :: entry %o", r); + let i = null; + if (!r) return void this._resubscribe(); + i = r.packet, this.log("deliver :: call _sendPacket for %o", i); + let n = !0; + i.messageId && 0 !== i.messageId && (this.messageIdProvider.register(i.messageId) || (n = !1)), n ? this._sendPacket(i, (e => { + r.cb && r.cb(e), t() + })) : (this.log("messageId: %d has already used. The message is skipped and removed.", i.messageId), t()) + }; + this.log("connect :: sending queued packets"), t() + })), this.on("close", (() => { + this.log("close :: connected set to `false`"), this.connected = !1, this.log("close :: clearing connackTimer"), clearTimeout(this.connackTimer), this.log("close :: clearing ping timer"), null !== this.pingTimer && (this.pingTimer.clear(), this.pingTimer = null), this.topicAliasRecv && this.topicAliasRecv.clear(), this.log("close :: calling _setupReconnect"), this._setupReconnect() + })), this.options.manualConnect || (this.log("MqttClient :: setting up stream"), this.connect()) + } + handleAuth(e, t) { + t() + } + handleMessage(e, t) { + t() + } + _nextId() { + return this.messageIdProvider.allocate() + } + getLastMessageId() { + return this.messageIdProvider.getLastAllocated() + } + connect() { + var e; + let t = new l.Writable, + r = s.default.parser(this.options), + i = null, + n = []; + this.log("connect :: calling method to clear reconnect"), this._clearReconnect(), this.log("connect :: using streamBuilder provided to client to create stream"), this.stream = this.streamBuilder(this), r.on("packet", (e => { + this.log("parser :: on packet push to packets array."), n.push(e) + })); + let o = () => { + this.log("work :: getting next packet in queue"); + let e = n.shift(); + if (e) this.log("work :: packet pulled from queue"), (0, b.default)(this, e, a); + else { + this.log("work :: no packets in queue"); + let e = i; + i = null, this.log("work :: done flag is %s", !!e), e && e() + } + }, + a = () => { + if (n.length) m(o); + else { + let e = i; + i = null, e() + } + }; + t._write = (e, t, n) => { + i = n, this.log("writable stream :: parsing buffer"), r.parse(e), o() + }, this.log("connect :: pipe stream to writable stream"), this.stream.pipe(t), this.stream.on("error", (e => { + this.log("streamErrorHandler :: error", e.message), v.includes(e.code) ? (this.log("streamErrorHandler :: emitting error"), this.emit("error", e)) : this.noop(e) + })), this.stream.on("close", (() => { + this.log("(%s)stream :: on close", this.options.clientId), this._flushVolatile(), this.log("stream: emit close to MqttClient"), this.emit("close") + })), this.log("connect: sending packet `connect`"); + let h = { + cmd: "connect", + protocolId: this.options.protocolId, + protocolVersion: this.options.protocolVersion, + clean: this.options.clean, + clientId: this.options.clientId, + keepalive: this.options.keepalive, + username: this.options.username, + password: this.options.password, + properties: this.options.properties + }; + if (this.options.will && (h.will = Object.assign(Object.assign({}, this.options.will), { + payload: null === (e = this.options.will) || void 0 === e ? void 0 : e.payload + })), this.topicAliasRecv && (h.properties || (h.properties = {}), this.topicAliasRecv && (h.properties.topicAliasMaximum = this.topicAliasRecv.max)), this._writePacket(h), r.on("error", this.emit.bind(this, "error")), this.options.properties) { + if (!this.options.properties.authenticationMethod && this.options.properties.authenticationData) return this.end((() => this.emit("error", new Error("Packet has no Authentication Method")))), this; + if (this.options.properties.authenticationMethod && this.options.authPacket && "object" == typeof this.options.authPacket) { + let e = Object.assign({ + cmd: "auth", + reasonCode: 0 + }, this.options.authPacket); + this._writePacket(e) + } + } + return this.stream.setMaxListeners(1e3), clearTimeout(this.connackTimer), this.connackTimer = setTimeout((() => { + this.log("!!connectTimeout hit!! Calling _cleanUp with force `true`"), this._cleanUp(!0) + }), this.options.connectTimeout), this + } + publish(e, t, r, i) { + this.log("publish :: message `%s` to topic `%s`", t, e); + let { + options: n + } = this; + "function" == typeof r && (i = r, r = null), r = r || {}, r = Object.assign(Object.assign({}, { + qos: 0, + retain: !1, + dup: !1 + }), r); + let { + qos: o, + retain: s, + dup: a, + properties: l, + cbStorePut: h + } = r; + if (this._checkDisconnecting(i)) return this; + let u = () => { + let r = 0; + if ((1 === o || 2 === o) && (r = this._nextId(), null === r)) return this.log("No messageId left"), !1; + let u = { + cmd: "publish", + topic: e, + payload: t, + qos: o, + retain: s, + messageId: r, + dup: a + }; + switch (5 === n.protocolVersion && (u.properties = l), this.log("publish :: qos", o), o) { + case 1: + case 2: + this.outgoing[u.messageId] = { + volatile: !1, + cb: i || this.noop + }, this.log("MqttClient:publish: packet cmd: %s", u.cmd), this._sendPacket(u, void 0, h); + break; + default: + this.log("MqttClient:publish: packet cmd: %s", u.cmd), this._sendPacket(u, i, h) + } + return !0 + }; + return (this._storeProcessing || this._storeProcessingQueue.length > 0 || !u()) && this._storeProcessingQueue.push({ + invoke: u, + cbStorePut: r.cbStorePut, + callback: i + }), this + } + publishAsync(e, t, r) { + return new Promise(((i, n) => { + this.publish(e, t, r, ((e, t) => { + e ? n(e) : i(t) + })) + })) + } + subscribe(e, t, r) { + let i = this.options.protocolVersion; + "function" == typeof t && (r = t), r = r || this.noop; + let n = !1, + o = []; + "string" == typeof e ? o = e = [e] : Array.isArray(e) ? o = e : "object" == typeof e && (n = e.resubscribe, delete e.resubscribe, o = Object.keys(e)); + let s = c.validateTopics(o); + if (null !== s) return w(r, new Error(`Invalid topic ${s}`)), this; + if (this._checkDisconnecting(r)) return this.log("subscribe: discconecting true"), this; + let a = { + qos: 0 + }; + 5 === i && (a.nl = !1, a.rap = !1, a.rh = 0); + let l = (t = Object.assign(Object.assign({}, a), t)).properties, + h = [], + u = (e, r) => { + if (r = r || t, !Object.prototype.hasOwnProperty.call(this._resubscribeTopics, e) || this._resubscribeTopics[e].qos < r.qos || n) { + let t = { + topic: e, + qos: r.qos + }; + 5 === i && (t.nl = r.nl, t.rap = r.rap, t.rh = r.rh, t.properties = l), this.log("subscribe: pushing topic `%s` and qos `%s` to subs list", t.topic, t.qos), h.push(t) + } + }; + if (Array.isArray(e) ? e.forEach((e => { + this.log("subscribe: array topic %s", e), u(e) + })) : Object.keys(e).forEach((t => { + this.log("subscribe: object topic %s, %o", t, e[t]), u(t, e[t]) + })), !h.length) return r(null, []), this; + let f = () => { + let e = this._nextId(); + if (null === e) return this.log("No messageId left"), !1; + let t = { + cmd: "subscribe", + subscriptions: h, + messageId: e + }; + if (l && (t.properties = l), this.options.resubscribe) { + this.log("subscribe :: resubscribe true"); + let e = []; + h.forEach((t => { + if (this.options.reconnectPeriod > 0) { + let r = { + qos: t.qos + }; + 5 === i && (r.nl = t.nl || !1, r.rap = t.rap || !1, r.rh = t.rh || 0, r.properties = t.properties), this._resubscribeTopics[t.topic] = r, e.push(t.topic) + } + })), this.messageIdToTopic[t.messageId] = e + } + return this.outgoing[t.messageId] = { + volatile: !0, + cb(e, t) { + if (!e) { + let { + granted: e + } = t; + for (let t = 0; t < e.length; t += 1) h[t].qos = e[t] + } + r(e, h) + } + }, this.log("subscribe :: call _sendPacket"), this._sendPacket(t), !0 + }; + return (this._storeProcessing || this._storeProcessingQueue.length > 0 || !f()) && this._storeProcessingQueue.push({ + invoke: f, + callback: r + }), this + } + subscribeAsync(e, t) { + return new Promise(((r, i) => { + this.subscribe(e, t, ((e, t) => { + e ? i(e) : r(t) + })) + })) + } + unsubscribe(e, t, r) { + "string" == typeof e && (e = [e]), "function" == typeof t && (r = t), r = r || this.noop; + let i = c.validateTopics(e); + if (null !== i) return w(r, new Error(`Invalid topic ${i}`)), this; + if (this._checkDisconnecting(r)) return this; + let n = () => { + let i = this._nextId(); + if (null === i) return this.log("No messageId left"), !1; + let n = { + cmd: "unsubscribe", + messageId: i, + unsubscriptions: [] + }; + return "string" == typeof e ? n.unsubscriptions = [e] : Array.isArray(e) && (n.unsubscriptions = e), this.options.resubscribe && n.unsubscriptions.forEach((e => { + delete this._resubscribeTopics[e] + })), "object" == typeof t && t.properties && (n.properties = t.properties), this.outgoing[n.messageId] = { + volatile: !0, + cb: r + }, this.log("unsubscribe: call _sendPacket"), this._sendPacket(n), !0 + }; + return (this._storeProcessing || this._storeProcessingQueue.length > 0 || !n()) && this._storeProcessingQueue.push({ + invoke: n, + callback: r + }), this + } + unsubscribeAsync(e, t) { + return new Promise(((r, i) => { + this.unsubscribe(e, t, ((e, t) => { + e ? i(e) : r(t) + })) + })) + } + end(e, t, r) { + this.log("end :: (%s)", this.options.clientId), (null == e || "boolean" != typeof e) && (r = r || t, t = e, e = !1), "object" != typeof t && (r = r || t, t = null), this.log("end :: cb? %s", !!r), (!r || "function" != typeof r) && (r = this.noop); + let i = () => { + this.log("end :: closeStores: closing incoming and outgoing stores"), this.disconnected = !0, this.incomingStore.close((e => { + this.outgoingStore.close((t => { + if (this.log("end :: closeStores: emitting end"), this.emit("end"), r) { + let i = e || t; + this.log("end :: closeStores: invoking callback with args"), r(i) + } + })) + })), this._deferredReconnect && this._deferredReconnect() + }, + n = () => { + this.log("end :: (%s) :: finish :: calling _cleanUp with force %s", this.options.clientId, e), this._cleanUp(e, (() => { + this.log("end :: finish :: calling process.nextTick on closeStores"), m(i) + }), t) + }; + return this.disconnecting ? (r(), this) : (this._clearReconnect(), this.disconnecting = !0, !e && Object.keys(this.outgoing).length > 0 ? (this.log("end :: (%s) :: calling finish in 10ms once outgoing is empty", this.options.clientId), this.once("outgoingEmpty", setTimeout.bind(null, n, 10))) : (this.log("end :: (%s) :: immediately calling finish", this.options.clientId), n()), this) + } + endAsync(e, t) { + return new Promise(((r, i) => { + this.end(e, t, (e => { + e ? i(e) : r() + })) + })) + } + removeOutgoingMessage(e) { + if (this.outgoing[e]) { + let { + cb: t + } = this.outgoing[e]; + this._removeOutgoingAndStoreMessage(e, (() => { + t(new Error("Message removed")) + })) + } + return this + } + reconnect(e) { + this.log("client reconnect"); + let t = () => { + e ? (this.options.incomingStore = e.incomingStore, this.options.outgoingStore = e.outgoingStore) : (this.options.incomingStore = null, this.options.outgoingStore = null), this.incomingStore = this.options.incomingStore || new g.default, this.outgoingStore = this.options.outgoingStore || new g.default, this.disconnecting = !1, this.disconnected = !1, this._deferredReconnect = null, this._reconnect() + }; + return this.disconnecting && !this.disconnected ? this._deferredReconnect = t : t(), this + } + _flushVolatile() { + this.outgoing && (this.log("_flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function"), Object.keys(this.outgoing).forEach((e => { + this.outgoing[e].volatile && "function" == typeof this.outgoing[e].cb && (this.outgoing[e].cb(new Error("Connection closed")), delete this.outgoing[e]) + }))) + } + _flush() { + this.outgoing && (this.log("_flush: queue exists? %b", !!this.outgoing), Object.keys(this.outgoing).forEach((e => { + "function" == typeof this.outgoing[e].cb && (this.outgoing[e].cb(new Error("Connection closed")), delete this.outgoing[e]) + }))) + } + _removeTopicAliasAndRecoverTopicName(e) { + let t; + e.properties && (t = e.properties.topicAlias); + let r = e.topic.toString(); + if (this.log("_removeTopicAliasAndRecoverTopicName :: alias %d, topic %o", t, r), 0 === r.length) { + if (typeof t > "u") return new Error("Unregistered Topic Alias"); + if (r = this.topicAliasSend.getTopicByAlias(t), typeof r > "u") return new Error("Unregistered Topic Alias"); + e.topic = r + } + t && delete e.properties.topicAlias + } + _checkDisconnecting(e) { + return this.disconnecting && (e && e !== this.noop ? e(new Error("client disconnecting")) : this.emit("error", new Error("client disconnecting"))), this.disconnecting + } + _reconnect() { + this.log("_reconnect: emitting reconnect to client"), this.emit("reconnect"), this.connected ? (this.end((() => { + this.connect() + })), this.log("client already connected. disconnecting first.")) : (this.log("_reconnect: calling connect"), this.connect()) + } + _setupReconnect() { + !this.disconnecting && !this.reconnectTimer && this.options.reconnectPeriod > 0 ? (this.reconnecting || (this.log("_setupReconnect :: emit `offline` state"), this.emit("offline"), this.log("_setupReconnect :: set `reconnecting` to `true`"), this.reconnecting = !0), this.log("_setupReconnect :: setting reconnectTimer for %d ms", this.options.reconnectPeriod), this.reconnectTimer = setInterval((() => { + this.log("reconnectTimer :: reconnect triggered!"), this._reconnect() + }), this.options.reconnectPeriod)) : this.log("_setupReconnect :: doing nothing...") + } + _clearReconnect() { + this.log("_clearReconnect : clearing reconnect timer"), this.reconnectTimer && (clearInterval(this.reconnectTimer), this.reconnectTimer = null) + } + _cleanUp(e, t, r = {}) { + if (t && (this.log("_cleanUp :: done callback provided for on stream close"), this.stream.on("close", t)), this.log("_cleanUp :: forced? %s", e), e) 0 === this.options.reconnectPeriod && this.options.clean && this._flush(), this.log("_cleanUp :: (%s) :: destroying stream", this.options.clientId), this.stream.destroy(); + else { + let e = Object.assign({ + cmd: "disconnect" + }, r); + this.log("_cleanUp :: (%s) :: call _sendPacket with disconnect packet", this.options.clientId), this._sendPacket(e, (() => { + this.log("_cleanUp :: (%s) :: destroying stream", this.options.clientId), w((() => { + this.stream.end((() => { + this.log("_cleanUp :: (%s) :: stream destroyed", this.options.clientId) + })) + })) + })) + } + this.disconnecting || (this.log("_cleanUp :: client not disconnecting. Clearing and resetting reconnect."), this._clearReconnect(), this._setupReconnect()), null !== this.pingTimer && (this.log("_cleanUp :: clearing pingTimer"), this.pingTimer.clear(), this.pingTimer = null), t && !this.connected && (this.log("_cleanUp :: (%s) :: removing stream `done` callback `close` listener", this.options.clientId), this.stream.removeListener("close", t), t()) + } + _storeAndSend(e, t, r) { + this.log("storeAndSend :: store packet with cmd %s to outgoingStore", e.cmd); + let i, n = e; + if ("publish" === n.cmd && (n = (0, u.default)(e), i = this._removeTopicAliasAndRecoverTopicName(n), i)) return t && t(i); + this.outgoingStore.put(n, (i => { + if (i) return t && t(i); + r(), this._writePacket(e, t) + })) + } + _applyTopicAlias(e) { + if (5 === this.options.protocolVersion && "publish" === e.cmd) { + let t; + e.properties && (t = e.properties.topicAlias); + let r = e.topic.toString(); + if (this.topicAliasSend) + if (t) { + if (0 !== r.length && (this.log("applyTopicAlias :: register topic: %s - alias: %d", r, t), !this.topicAliasSend.put(r, t))) return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d", r, t), new Error("Sending Topic Alias out of range") + } else 0 !== r.length && (this.options.autoAssignTopicAlias ? (t = this.topicAliasSend.getAliasByTopic(r), t ? (e.topic = "", e.properties = Object.assign(Object.assign({}, e.properties), { + topicAlias: t + }), this.log("applyTopicAlias :: auto assign(use) topic: %s - alias: %d", r, t)) : (t = this.topicAliasSend.getLruAlias(), this.topicAliasSend.put(r, t), e.properties = Object.assign(Object.assign({}, e.properties), { + topicAlias: t + }), this.log("applyTopicAlias :: auto assign topic: %s - alias: %d", r, t))) : this.options.autoUseTopicAlias && (t = this.topicAliasSend.getAliasByTopic(r), t && (e.topic = "", e.properties = Object.assign(Object.assign({}, e.properties), { + topicAlias: t + }), this.log("applyTopicAlias :: auto use topic: %s - alias: %d", r, t)))); + else if (t) return this.log("applyTopicAlias :: error out of range. topic: %s - alias: %d", r, t), new Error("Sending Topic Alias out of range") + } + } + _noop(e) { + this.log("noop ::", e) + } + _writePacket(e, t) { + this.log("_writePacket :: packet: %O", e), this.log("_writePacket :: emitting `packetsend`"), this.emit("packetsend", e), this._shiftPingInterval(), this.log("_writePacket :: writing to stream"); + let r = s.default.writeToStream(e, this.stream, this.options); + this.log("_writePacket :: writeToStream result %s", r), !r && t && t !== this.noop ? (this.log("_writePacket :: handle events on `drain` once through callback."), this.stream.once("drain", t)) : t && (this.log("_writePacket :: invoking cb"), t()) + } + _sendPacket(e, t, r, i) { + this.log("_sendPacket :: (%s) :: start", this.options.clientId), r = r || this.noop, t = t || this.noop; + let n = this._applyTopicAlias(e); + if (n) t(n); + else { + if (!this.connected) return "auth" === e.cmd ? void this._writePacket(e, t) : (this.log("_sendPacket :: client not connected. Storing packet offline."), void this._storePacket(e, t, r)); + if (i) this._writePacket(e, t); + else { + switch (e.cmd) { + case "publish": + break; + case "pubrel": + return void this._storeAndSend(e, t, r); + default: + return void this._writePacket(e, t) + } + switch (e.qos) { + case 2: + case 1: + this._storeAndSend(e, t, r); + break; + default: + this._writePacket(e, t) + } + this.log("_sendPacket :: (%s) :: end", this.options.clientId) + } + } + } + _storePacket(e, t, r) { + this.log("_storePacket :: packet: %o", e), this.log("_storePacket :: cb? %s", !!t), r = r || this.noop; + let i = e; + if ("publish" === i.cmd) { + i = (0, u.default)(e); + let r = this._removeTopicAliasAndRecoverTopicName(i); + if (r) return t && t(r) + } + let n = i.qos || 0; + 0 === n && this.queueQoSZero || "publish" !== i.cmd ? this.queue.push({ + packet: i, + cb: t + }) : n > 0 ? (t = this.outgoing[i.messageId] ? this.outgoing[i.messageId].cb : null, this.outgoingStore.put(i, (e => { + if (e) return t && t(e); + r() + }))) : t && t(new Error("No connection to broker")) + } + _setupPingTimer() { + this.log("_setupPingTimer :: keepalive %d (seconds)", this.options.keepalive), !this.pingTimer && this.options.keepalive && (this.pingResp = !0, this.pingTimer = (0, h.default)((() => { + this._checkPing() + }), 1e3 * this.options.keepalive)) + } + _shiftPingInterval() { + this.pingTimer && this.options.keepalive && this.options.reschedulePings && this.pingTimer.reschedule(1e3 * this.options.keepalive) + } + _checkPing() { + this.log("_checkPing :: checking ping..."), this.pingResp ? (this.log("_checkPing :: ping response received. Clearing flag and sending `pingreq`"), this.pingResp = !1, this._sendPacket({ + cmd: "pingreq" + })) : (this.log("_checkPing :: calling _cleanUp with force true"), this._cleanUp(!0)) + } + _resubscribe() { + this.log("_resubscribe"); + let e = Object.keys(this._resubscribeTopics); + if (!this._firstConnection && (this.options.clean || this.options.protocolVersion >= 4 && !this.connackPacket.sessionPresent) && e.length > 0) + if (this.options.resubscribe) + if (5 === this.options.protocolVersion) { + this.log("_resubscribe: protocolVersion 5"); + for (let t = 0; t < e.length; t++) { + let r = {}; + r[e[t]] = this._resubscribeTopics[e[t]], r.resubscribe = !0, this.subscribe(r, { + properties: r[e[t]].properties + }) + } + } else this._resubscribeTopics.resubscribe = !0, this.subscribe(this._resubscribeTopics); + else this._resubscribeTopics = {}; + this._firstConnection = !1 + } + _onConnect(e) { + if (this.disconnected) return void this.emit("connect", e); + this.connackPacket = e, this.messageIdProvider.clear(), this._setupPingTimer(), this.connected = !0; + let t = () => { + let r = this.outgoingStore.createStream(), + i = () => { + r.destroy(), r = null, this._flushStoreProcessingQueue(), n() + }, + n = () => { + this._storeProcessing = !1, this._packetIdsDuringStoreProcessing = {} + }; + this.once("close", i), r.on("error", (e => { + n(), this._flushStoreProcessingQueue(), this.removeListener("close", i), this.emit("error", e) + })); + let o = () => { + if (!r) return; + let e, t = r.read(1); + t ? (this._storeProcessing = !0, this._packetIdsDuringStoreProcessing[t.messageId] ? o() : this.disconnecting || this.reconnectTimer ? r.destroy && r.destroy() : (e = this.outgoing[t.messageId] ? this.outgoing[t.messageId].cb : null, this.outgoing[t.messageId] = { + volatile: !1, + cb(t, r) { + e && e(t, r), o() + } + }, this._packetIdsDuringStoreProcessing[t.messageId] = !0, this.messageIdProvider.register(t.messageId) ? this._sendPacket(t, void 0, void 0, !0) : this.log("messageId: %d has already used.", t.messageId))) : r.once("readable", o) + }; + r.on("end", (() => { + let r = !0; + for (let e in this._packetIdsDuringStoreProcessing) + if (!this._packetIdsDuringStoreProcessing[e]) { + r = !1; + break + } r ? (n(), this.removeListener("close", i), this._invokeAllStoreProcessingQueue(), this.emit("connect", e)) : t() + })), o() + }; + t() + } + _invokeStoreProcessingQueue() { + if (!this._storeProcessing && this._storeProcessingQueue.length > 0) { + let e = this._storeProcessingQueue[0]; + if (e && e.invoke()) return this._storeProcessingQueue.shift(), !0 + } + return !1 + } + _invokeAllStoreProcessingQueue() { + for (; this._invokeStoreProcessingQueue();); + } + _flushStoreProcessingQueue() { + for (let e of this._storeProcessingQueue) e.cbStorePut && e.cbStorePut(new Error("Connection closed")), e.callback && e.callback(new Error("Connection closed")); + this._storeProcessingQueue.splice(0) + } + _removeOutgoingAndStoreMessage(e, t) { + delete this.outgoing[e], this.outgoingStore.del({ + messageId: e + }, ((r, i) => { + t(r, i), this.messageIdProvider.deallocate(e), this._invokeStoreProcessingQueue() + })) + } + }; + e.default = E + })), + yn = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = un(); + e.default = class { + constructor() { + this.numberAllocator = new t.NumberAllocator(1, 65535) + } + allocate() { + return this.lastId = this.numberAllocator.alloc(), this.lastId + } + getLastAllocated() { + return this.lastId + } + register(e) { + return this.numberAllocator.use(e) + } + deallocate(e) { + this.numberAllocator.free(e) + } + clear() { + this.numberAllocator.clear() + } + } + })); + + function mn(e) { + throw new RangeError(An[e]) + } + + function wn(e, t) { + let r = e.split("@"), + i = ""; + return r.length > 1 && (i = r[0] + "@", e = r[1]), i + function(e, t) { + let r = [], + i = e.length; + for (; i--;) r[i] = t(e[i]); + return r + }((e = e.replace(Sn, ".")).split("."), t).join(".") + } + + function _n(e) { + let t = [], + r = 0, + i = e.length; + for (; r < i;) { + let n = e.charCodeAt(r++); + if (n >= 55296 && n <= 56319 && r < i) { + let i = e.charCodeAt(r++); + 56320 == (64512 & i) ? t.push(((1023 & n) << 10) + (1023 & i) + 65536) : (t.push(n), r--) + } else t.push(n) + } + return t + } + var vn, En, Sn, An, In, kn, Tn, Cn, Rn, On, Pn, Bn = l((() => { + f(), rt(), qe(), vn = /^xn--/, En = /[^\0-\x7E]/, Sn = /[\x2E\u3002\uFF0E\uFF61]/g, An = { + overflow: "Overflow: input needs wider integers to process", + "not-basic": "Illegal input >= 0x80 (not a basic code point)", + "invalid-input": "Invalid input" + }, In = Math.floor, kn = String.fromCharCode, Tn = function(e, t) { + return e + 22 + 75 * (e < 26) - ((0 != t) << 5) + }, Cn = function(e, t, r) { + let i = 0; + for (e = r ? In(e / 700) : e >> 1, e += In(e / t); e > 455; i += 36) e = In(e / 35); + return In(i + 36 * e / (e + 38)) + }, On = function(e) { + let t = [], + r = (e = _n(e)).length, + i = 128, + n = 0, + o = 72; + for (let r of e) r < 128 && t.push(kn(r)); + let s = t.length, + a = s; + for (s && t.push("-"); a < r;) { + let r = 2147483647; + for (let t of e) t >= i && t < r && (r = t); + let l = a + 1; + r - i > In((2147483647 - n) / l) && mn("overflow"), n += (r - i) * l, i = r; + for (let r of e) + if (r < i && ++n > 2147483647 && mn("overflow"), r == i) { + let e = n; + for (let r = 36;; r += 36) { + let i = r <= o ? 1 : r >= o + 26 ? 26 : r - o; + if (e < i) break; + let n = e - i, + s = 36 - i; + t.push(kn(Tn(i + n % s, 0))), e = In(n / s) + } + t.push(kn(Tn(e, 0))), o = Cn(n, l, a == s), n = 0, ++a + }++ n, ++i + } + return t.join("") + }, (Pn = { + version: "2.1.0", + ucs2: { + decode: _n, + encode: e => String.fromCodePoint(...e) + }, + decode: Rn = function(e) { + let t = [], + r = e.length, + i = 0, + n = 128, + o = 72, + s = e.lastIndexOf("-"); + s < 0 && (s = 0); + for (let r = 0; r < s; ++r) e.charCodeAt(r) >= 128 && mn("not-basic"), t.push(e.charCodeAt(r)); + for (let l = s > 0 ? s + 1 : 0; l < r;) { + let s = i; + for (let t = 1, n = 36;; n += 36) { + l >= r && mn("invalid-input"); + let s = (a = e.charCodeAt(l++)) - 48 < 10 ? a - 22 : a - 65 < 26 ? a - 65 : a - 97 < 26 ? a - 97 : 36; + (s >= 36 || s > In((2147483647 - i) / t)) && mn("overflow"), i += s * t; + let h = n <= o ? 1 : n >= o + 26 ? 26 : n - o; + if (s < h) break; + let u = 36 - h; + t > In(2147483647 / u) && mn("overflow"), t *= u + } + let h = t.length + 1; + o = Cn(i - s, h, 0 == s), In(i / h) > 2147483647 - n && mn("overflow"), n += In(i / h), i %= h, t.splice(i++, 0, n) + } + var a; + return String.fromCodePoint(...t) + }, + encode: On, + toASCII: function(e) { + return wn(e, (function(e) { + return En.test(e) ? "xn--" + On(e) : e + })) + }, + toUnicode: function(e) { + return wn(e, (function(e) { + return vn.test(e) ? Rn(e.slice(4).toLowerCase()) : e + })) + } + }).encode, Pn.toASCII, Pn.toUnicode, Pn.ucs2, Pn.version + })); + + function xn(e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + } + var Un, Mn, Ln, Nn, jn = l((() => { + f(), rt(), qe(), Un = function(e, t, r, i) { + t = t || "&", r = r || "="; + var n = {}; + if ("string" != typeof e || 0 === e.length) return n; + var o = /\+/g; + e = e.split(t); + var s = 1e3; + i && "number" == typeof i.maxKeys && (s = i.maxKeys); + var a = e.length; + s > 0 && a > s && (a = s); + for (var l = 0; l < a; ++l) { + var h, u, c, f, p = e[l].replace(o, "%20"), + d = p.indexOf(r); + d >= 0 ? (h = p.substr(0, d), u = p.substr(d + 1)) : (h = p, u = ""), c = decodeURIComponent(h), f = decodeURIComponent(u), xn(n, c) ? Array.isArray(n[c]) ? n[c].push(f) : n[c] = [n[c], f] : n[c] = f + } + return n + }, Mn = function(e) { + switch (typeof e) { + case "string": + return e; + case "boolean": + return e ? "true" : "false"; + case "number": + return isFinite(e) ? e : ""; + default: + return "" + } + }, Ln = function(e, t, r, i) { + return t = t || "&", r = r || "=", null === e && (e = void 0), "object" == typeof e ? Object.keys(e).map((function(i) { + var n = encodeURIComponent(Mn(i)) + r; + return Array.isArray(e[i]) ? e[i].map((function(e) { + return n + encodeURIComponent(Mn(e)) + })).join(t) : n + encodeURIComponent(Mn(e[i])) + })).join(t) : i ? encodeURIComponent(Mn(i)) + r + encodeURIComponent(Mn(e)) : "" + }, (Nn = {}).decode = Nn.parse = Un, Nn.encode = Nn.stringify = Ln, Nn.decode, Nn.encode, Nn.parse, Nn.stringify + })); + + function Dn() { + throw new Error("setTimeout has not been defined") + } + + function Fn() { + throw new Error("clearTimeout has not been defined") + } + + function Wn(e) { + if (Kn === setTimeout) return setTimeout(e, 0); + if ((Kn === Dn || !Kn) && setTimeout) return Kn = setTimeout, setTimeout(e, 0); + try { + return Kn(e, 0) + } catch { + try { + return Kn.call(null, e, 0) + } catch { + return Kn.call(this || Qn, e, 0) + } + } + } + + function $n() { + Zn && Jn && (Zn = !1, Jn.length ? Xn = Jn.concat(Xn) : eo = -1, Xn.length && qn()) + } + + function qn() { + if (!Zn) { + var e = Wn($n); + Zn = !0; + for (var t = Xn.length; t;) { + for (Jn = Xn, Xn = []; ++eo < t;) Jn && Jn[eo].run(); + eo = -1, t = Xn.length + } + Jn = null, Zn = !1, + function(e) { + if (Gn === clearTimeout) return clearTimeout(e); + if ((Gn === Fn || !Gn) && clearTimeout) return Gn = clearTimeout, clearTimeout(e); + try { + Gn(e) + } catch { + try { + return Gn.call(null, e) + } catch { + return Gn.call(this || Qn, e) + } + } + }(e) + } + } + + function Vn(e, t) { + (this || Qn).fun = e, (this || Qn).array = t + } + + function Hn() {} + var zn, Kn, Gn, Qn, Yn, Jn, Xn, Zn, eo, to, ro = l((() => { + f(), rt(), qe(), Qn = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : window, Yn = zn = {}, + function() { + try { + Kn = "function" == typeof setTimeout ? setTimeout : Dn + } catch { + Kn = Dn + } + try { + Gn = "function" == typeof clearTimeout ? clearTimeout : Fn + } catch { + Gn = Fn + } + }(), Xn = [], Zn = !1, eo = -1, Yn.nextTick = function(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var r = 1; r < arguments.length; r++) t[r - 1] = arguments[r]; + Xn.push(new Vn(e, t)), 1 !== Xn.length || Zn || Wn(qn) + }, Vn.prototype.run = function() { + (this || Qn).fun.apply(null, (this || Qn).array) + }, Yn.title = "browser", Yn.browser = !0, Yn.env = {}, Yn.argv = [], Yn.version = "", Yn.versions = {}, Yn.on = Hn, Yn.addListener = Hn, Yn.once = Hn, Yn.off = Hn, Yn.removeListener = Hn, Yn.removeAllListeners = Hn, Yn.emit = Hn, Yn.prependListener = Hn, Yn.prependOnceListener = Hn, Yn.listeners = function(e) { + return [] + }, Yn.binding = function(e) { + throw new Error("process.binding is not supported") + }, Yn.cwd = function() { + return "/" + }, Yn.chdir = function(e) { + throw new Error("process.chdir is not supported") + }, Yn.umask = function() { + return 0 + }, (to = zn).argv, to.binding, to.browser, to.chdir, to.cwd, to.emit, to.env, to.listeners, to.nextTick, to.off, to.on, to.once, to.prependListener, to.prependOnceListener, to.removeAllListeners, to.removeListener, to.title, to.umask, to.version, to.versions + })); + var io, no, oo, so, ao, lo, ho, uo = l((() => { + f(), rt(), qe(), io = {}, no = !1, oo = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : window, (so = function() { + if (no) return io; + no = !0; + var e, t, r = io = {}; + + function i() { + throw new Error("setTimeout has not been defined") + } + + function n() { + throw new Error("clearTimeout has not been defined") + } + + function o(t) { + if (e === setTimeout) return setTimeout(t, 0); + if ((e === i || !e) && setTimeout) return e = setTimeout, setTimeout(t, 0); + try { + return e(t, 0) + } catch { + try { + return e.call(null, t, 0) + } catch { + return e.call(this || oo, t, 0) + } + } + }! function() { + try { + e = "function" == typeof setTimeout ? setTimeout : i + } catch { + e = i + } + try { + t = "function" == typeof clearTimeout ? clearTimeout : n + } catch { + t = n + } + }(); + var s, a = [], + l = !1, + h = -1; + + function u() { + !l || !s || (l = !1, s.length ? a = s.concat(a) : h = -1, a.length && c()) + } + + function c() { + if (!l) { + var e = o(u); + l = !0; + for (var r = a.length; r;) { + for (s = a, a = []; ++h < r;) s && s[h].run(); + h = -1, r = a.length + } + s = null, l = !1, + function(e) { + if (t === clearTimeout) return clearTimeout(e); + if ((t === n || !t) && clearTimeout) return t = clearTimeout, clearTimeout(e); + try { + t(e) + } catch { + try { + return t.call(null, e) + } catch { + return t.call(this || oo, e) + } + } + }(e) + } + } + + function f(e, t) { + (this || oo).fun = e, (this || oo).array = t + } + + function p() {} + return r.nextTick = function(e) { + var t = new Array(arguments.length - 1); + if (arguments.length > 1) + for (var r = 1; r < arguments.length; r++) t[r - 1] = arguments[r]; + a.push(new f(e, t)), 1 === a.length && !l && o(c) + }, f.prototype.run = function() { + (this || oo).fun.apply(null, (this || oo).array) + }, r.title = "browser", r.browser = !0, r.env = {}, r.argv = [], r.version = "", r.versions = {}, r.on = p, r.addListener = p, r.once = p, r.off = p, r.removeListener = p, r.removeAllListeners = p, r.emit = p, r.prependListener = p, r.prependOnceListener = p, r.listeners = function(e) { + return [] + }, r.binding = function(e) { + throw new Error("process.binding is not supported") + }, r.cwd = function() { + return "/" + }, r.chdir = function(e) { + throw new Error("process.chdir is not supported") + }, r.umask = function() { + return 0 + }, io + }()).platform = "browser", so.addListener, so.argv, so.binding, so.browser, so.chdir, so.cwd, so.emit, so.env, so.listeners, so.nextTick, so.off, so.on, so.once, so.prependListener, so.prependOnceListener, so.removeAllListeners, so.removeListener, so.title, so.umask, so.version, so.versions + })), + co = l((() => { + f(), rt(), qe(), uo(), ao = {}, lo = !1, ho = function() { + if (lo) return ao; + lo = !0; + var e = so; + + function t(e) { + if ("string" != typeof e) throw new TypeError("Path must be a string. Received " + JSON.stringify(e)) + } + + function r(e, t) { + for (var r, i = "", n = 0, o = -1, s = 0, a = 0; a <= e.length; ++a) { + if (a < e.length) r = e.charCodeAt(a); + else { + if (47 === r) break; + r = 47 + } + if (47 === r) { + if (o !== a - 1 && 1 !== s) + if (o !== a - 1 && 2 === s) { + if (i.length < 2 || 2 !== n || 46 !== i.charCodeAt(i.length - 1) || 46 !== i.charCodeAt(i.length - 2)) + if (i.length > 2) { + var l = i.lastIndexOf("/"); + if (l !== i.length - 1) { + -1 === l ? (i = "", n = 0) : n = (i = i.slice(0, l)).length - 1 - i.lastIndexOf("/"), o = a, s = 0; + continue + } + } else if (2 === i.length || 1 === i.length) { + i = "", n = 0, o = a, s = 0; + continue + } + t && (i.length > 0 ? i += "/.." : i = "..", n = 2) + } else i.length > 0 ? i += "/" + e.slice(o + 1, a) : i = e.slice(o + 1, a), n = a - o - 1; + o = a, s = 0 + } else 46 === r && -1 !== s ? ++s : s = -1 + } + return i + } + var i = { + resolve: function() { + for (var i, n = "", o = !1, s = arguments.length - 1; s >= -1 && !o; s--) { + var a; + s >= 0 ? a = arguments[s] : (void 0 === i && (i = e.cwd()), a = i), t(a), 0 !== a.length && (n = a + "/" + n, o = 47 === a.charCodeAt(0)) + } + return n = r(n, !o), o ? n.length > 0 ? "/" + n : "/" : n.length > 0 ? n : "." + }, + normalize: function(e) { + if (t(e), 0 === e.length) return "."; + var i = 47 === e.charCodeAt(0), + n = 47 === e.charCodeAt(e.length - 1); + return 0 === (e = r(e, !i)).length && !i && (e = "."), e.length > 0 && n && (e += "/"), i ? "/" + e : e + }, + isAbsolute: function(e) { + return t(e), e.length > 0 && 47 === e.charCodeAt(0) + }, + join: function() { + if (0 === arguments.length) return "."; + for (var e, r = 0; r < arguments.length; ++r) { + var n = arguments[r]; + t(n), n.length > 0 && (void 0 === e ? e = n : e += "/" + n) + } + return void 0 === e ? "." : i.normalize(e) + }, + relative: function(e, r) { + if (t(e), t(r), e === r || (e = i.resolve(e)) === (r = i.resolve(r))) return ""; + for (var n = 1; n < e.length && 47 === e.charCodeAt(n); ++n); + for (var o = e.length, s = o - n, a = 1; a < r.length && 47 === r.charCodeAt(a); ++a); + for (var l = r.length - a, h = s < l ? s : l, u = -1, c = 0; c <= h; ++c) { + if (c === h) { + if (l > h) { + if (47 === r.charCodeAt(a + c)) return r.slice(a + c + 1); + if (0 === c) return r.slice(a + c) + } else s > h && (47 === e.charCodeAt(n + c) ? u = c : 0 === c && (u = 0)); + break + } + var f = e.charCodeAt(n + c); + if (f !== r.charCodeAt(a + c)) break; + 47 === f && (u = c) + } + var p = ""; + for (c = n + u + 1; c <= o; ++c)(c === o || 47 === e.charCodeAt(c)) && (0 === p.length ? p += ".." : p += "/.."); + return p.length > 0 ? p + r.slice(a + u) : (a += u, 47 === r.charCodeAt(a) && ++a, r.slice(a)) + }, + _makeLong: function(e) { + return e + }, + dirname: function(e) { + if (t(e), 0 === e.length) return "."; + for (var r = e.charCodeAt(0), i = 47 === r, n = -1, o = !0, s = e.length - 1; s >= 1; --s) + if (47 === (r = e.charCodeAt(s))) { + if (!o) { + n = s; + break + } + } else o = !1; + return -1 === n ? i ? "/" : "." : i && 1 === n ? "//" : e.slice(0, n) + }, + basename: function(e, r) { + if (void 0 !== r && "string" != typeof r) throw new TypeError('"ext" argument must be a string'); + t(e); + var i, n = 0, + o = -1, + s = !0; + if (void 0 !== r && r.length > 0 && r.length <= e.length) { + if (r.length === e.length && r === e) return ""; + var a = r.length - 1, + l = -1; + for (i = e.length - 1; i >= 0; --i) { + var h = e.charCodeAt(i); + if (47 === h) { + if (!s) { + n = i + 1; + break + } + } else - 1 === l && (s = !1, l = i + 1), a >= 0 && (h === r.charCodeAt(a) ? -1 == --a && (o = i) : (a = -1, o = l)) + } + return n === o ? o = l : -1 === o && (o = e.length), e.slice(n, o) + } + for (i = e.length - 1; i >= 0; --i) + if (47 === e.charCodeAt(i)) { + if (!s) { + n = i + 1; + break + } + } else - 1 === o && (s = !1, o = i + 1); + return -1 === o ? "" : e.slice(n, o) + }, + extname: function(e) { + t(e); + for (var r = -1, i = 0, n = -1, o = !0, s = 0, a = e.length - 1; a >= 0; --a) { + var l = e.charCodeAt(a); + if (47 !== l) - 1 === n && (o = !1, n = a + 1), 46 === l ? -1 === r ? r = a : 1 !== s && (s = 1) : -1 !== r && (s = -1); + else if (!o) { + i = a + 1; + break + } + } + return -1 === r || -1 === n || 0 === s || 1 === s && r === n - 1 && r === i + 1 ? "" : e.slice(r, n) + }, + format: function(e) { + if (null === e || "object" != typeof e) throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof e); + return function(e, t) { + var r = t.dir || t.root, + i = t.base || (t.name || "") + (t.ext || ""); + return r ? r === t.root ? r + i : r + "/" + i : i + }(0, e) + }, + parse: function(e) { + t(e); + var r = { + root: "", + dir: "", + base: "", + ext: "", + name: "" + }; + if (0 === e.length) return r; + var i, n = e.charCodeAt(0), + o = 47 === n; + o ? (r.root = "/", i = 1) : i = 0; + for (var s = -1, a = 0, l = -1, h = !0, u = e.length - 1, c = 0; u >= i; --u) + if (47 !== (n = e.charCodeAt(u))) - 1 === l && (h = !1, l = u + 1), 46 === n ? -1 === s ? s = u : 1 !== c && (c = 1) : -1 !== s && (c = -1); + else if (!h) { + a = u + 1; + break + } + return -1 === s || -1 === l || 0 === c || 1 === c && s === l - 1 && s === a + 1 ? -1 !== l && (r.base = r.name = 0 === a && o ? e.slice(1, l) : e.slice(a, l)) : (0 === a && o ? (r.name = e.slice(1, s), r.base = e.slice(1, l)) : (r.name = e.slice(a, s), r.base = e.slice(a, l)), r.ext = e.slice(s, l)), a > 0 ? r.dir = e.slice(0, a - 1) : o && (r.dir = "/"), r + }, + sep: "/", + delimiter: ":", + win32: null, + posix: null + }; + return i.posix = i, ao = i + }() + })), + fo = {}; + + function po() { + this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null + } + + function go(e, t, r) { + if (e && Eo.isObject(e) && e instanceof po) return e; + var i = new po; + return i.parse(e, t, r), i + } + + function bo(e) { + if ("string" == typeof e) e = new URL(e); + else if (!(e instanceof URL)) throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL"); + if ("file:" !== e.protocol) throw new Deno.errors.InvalidData("invalid url scheme"); + return Vo ? function(e) { + let t = e.hostname, + r = e.pathname; + for (let e = 0; e < r.length; e++) + if ("%" === r[e]) { + let t = r.codePointAt(e + 2) || 32; + if ("2" === r[e + 1] && 102 === t || "5" === r[e + 1] && 99 === t) throw new Deno.errors.InvalidData("must not include encoded \\ or / characters") + } if (r = r.replace(Ho, "\\"), r = decodeURIComponent(r), "" !== t) return `\\\\${t}${r}`; + { + let e = 32 | r.codePointAt(1), + t = r[2]; + if (e < $o || e > qo || ":" !== t) throw new Deno.errors.InvalidData("file url path must be absolute"); + return r.slice(1) + } + }(e) : function(e) { + if ("" !== e.hostname) throw new Deno.errors.InvalidData("invalid file url hostname"); + let t = e.pathname; + for (let e = 0; e < t.length; e++) + if ("%" === t[e]) { + let r = t.codePointAt(e + 2) || 32; + if ("2" === t[e + 1] && 102 === r) throw new Deno.errors.InvalidData("must not include encoded / characters") + } return decodeURIComponent(t) + }(e) + } + + function yo(e) { + let t = jo.resolve(e), + r = e.charCodeAt(e.length - 1); + (r === Wo || Vo && r === Fo) && t[t.length - 1] !== jo.sep && (t += "/"); + let i = new URL("file://"); + return t.includes("%") && (t = t.replace(zo, "%25")), !Vo && t.includes("\\") && (t = t.replace(Ko, "%5C")), t.includes("\n") && (t = t.replace(Go, "%0A")), t.includes("\r") && (t = t.replace(Qo, "%0D")), t.includes("\t") && (t = t.replace(Yo, "%09")), i.pathname = t, i + } + + function mo(e) { + if ("string" == typeof e) e = new URL(e); + else if (!(e instanceof URL)) throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL"); + if ("file:" !== e.protocol) throw new Deno.errors.InvalidData("invalid url scheme"); + return ls ? function(e) { + let t = e.hostname, + r = e.pathname; + for (let e = 0; e < r.length; e++) + if ("%" === r[e]) { + let t = r.codePointAt(e + 2) || 32; + if ("2" === r[e + 1] && 102 === t || "5" === r[e + 1] && 99 === t) throw new Deno.errors.InvalidData("must not include encoded \\ or / characters") + } if (r = r.replace(hs, "\\"), r = decodeURIComponent(r), "" !== t) return `\\\\${t}${r}`; + { + let e = 32 | r.codePointAt(1), + t = r[2]; + if (e < ss || e > as || ":" !== t) throw new Deno.errors.InvalidData("file url path must be absolute"); + return r.slice(1) + } + }(e) : function(e) { + if ("" !== e.hostname) throw new Deno.errors.InvalidData("invalid file url hostname"); + let t = e.pathname; + for (let e = 0; e < t.length; e++) + if ("%" === t[e]) { + let r = t.codePointAt(e + 2) || 32; + if ("2" === t[e + 1] && 102 === r) throw new Deno.errors.InvalidData("must not include encoded / characters") + } return decodeURIComponent(t) + }(e) + } + + function wo(e) { + let t = ho.resolve(e), + r = e.charCodeAt(e.length - 1); + (r === os || ls && r === ns) && t[t.length - 1] !== ho.sep && (t += "/"); + let i = new URL("file://"); + return t.includes("%") && (t = t.replace(us, "%25")), !ls && t.includes("\\") && (t = t.replace(cs, "%5C")), t.includes("\n") && (t = t.replace(fs, "%0A")), t.includes("\r") && (t = t.replace(ps, "%0D")), t.includes("\t") && (t = t.replace(ds, "%09")), i.pathname = t, i + } + u(fo, { + URL: () => is, + Url: () => Xo, + default: () => _o, + fileURLToPath: () => mo, + format: () => Zo, + parse: () => rs, + pathToFileURL: () => wo, + resolve: () => es, + resolveObject: () => ts + }); + var _o, vo, Eo, So, Ao, Io, ko, To, Co, Ro, Oo, Po, Bo, xo, Uo, Mo, Lo, No, jo, Do, Fo, Wo, $o, qo, Vo, Ho, zo, Ko, Go, Qo, Yo, Jo, Xo, Zo, es, ts, rs, is, ns, os, ss, as, ls, hs, us, cs, fs, ps, ds, gs = l((() => { + f(), rt(), qe(), Bn(), jn(), ro(), co(), uo(), vo = Pn, Eo = { + isString: function(e) { + return "string" == typeof e + }, + isObject: function(e) { + return "object" == typeof e && null !== e + }, + isNull: function(e) { + return null === e + }, + isNullOrUndefined: function(e) { + return null == e + } + }, (_o = {}).parse = go, _o.resolve = function(e, t) { + return go(e, !1, !0).resolve(t) + }, _o.resolveObject = function(e, t) { + return e ? go(e, !1, !0).resolveObject(t) : t + }, _o.format = function(e) { + return Eo.isString(e) && (e = go(e)), e instanceof po ? e.format() : po.prototype.format.call(e) + }, _o.Url = po, So = /^([a-z0-9.+-]+:)/i, Ao = /:[0-9]*$/, Io = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, ko = ["{", "}", "|", "\\", "^", "`"].concat(["<", ">", '"', "`", " ", "\r", "\n", "\t"]), To = ["'"].concat(ko), Co = ["%", "/", "?", ";", "#"].concat(To), Ro = ["/", "?", "#"], Oo = /^[+a-z0-9A-Z_-]{0,63}$/, Po = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, Bo = { + javascript: !0, + "javascript:": !0 + }, xo = { + javascript: !0, + "javascript:": !0 + }, Uo = { + http: !0, + https: !0, + ftp: !0, + gopher: !0, + file: !0, + "http:": !0, + "https:": !0, + "ftp:": !0, + "gopher:": !0, + "file:": !0 + }, Mo = Nn, po.prototype.parse = function(e, t, r) { + if (!Eo.isString(e)) throw new TypeError("Parameter 'url' must be a string, not " + typeof e); + var i = e.indexOf("?"), + n = -1 !== i && i < e.indexOf("#") ? "?" : "#", + o = e.split(n); + o[0] = o[0].replace(/\\/g, "/"); + var s = e = o.join(n); + if (s = s.trim(), !r && 1 === e.split("#").length) { + var a = Io.exec(s); + if (a) return this.path = s, this.href = s, this.pathname = a[1], a[2] ? (this.search = a[2], this.query = t ? Mo.parse(this.search.substr(1)) : this.search.substr(1)) : t && (this.search = "", this.query = {}), this + } + var l = So.exec(s); + if (l) { + var h = (l = l[0]).toLowerCase(); + this.protocol = h, s = s.substr(l.length) + } + if (r || l || s.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var u = "//" === s.substr(0, 2); + !u || l && xo[l] || (s = s.substr(2), this.slashes = !0) + } + if (!xo[l] && (u || l && !Uo[l])) { + for (var c, f, p = -1, d = 0; d < Ro.length; d++) - 1 !== (g = s.indexOf(Ro[d])) && (-1 === p || g < p) && (p = g); + for (-1 !== (f = -1 === p ? s.lastIndexOf("@") : s.lastIndexOf("@", p)) && (c = s.slice(0, f), s = s.slice(f + 1), this.auth = decodeURIComponent(c)), p = -1, d = 0; d < Co.length; d++) { + var g; - 1 !== (g = s.indexOf(Co[d])) && (-1 === p || g < p) && (p = g) + } - 1 === p && (p = s.length), this.host = s.slice(0, p), s = s.slice(p), this.parseHost(), this.hostname = this.hostname || ""; + var b = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1]; + if (!b) + for (var y = this.hostname.split(/\./), m = (d = 0, y.length); d < m; d++) { + var w = y[d]; + if (w && !w.match(Oo)) { + for (var _ = "", v = 0, E = w.length; v < E; v++) w.charCodeAt(v) > 127 ? _ += "x" : _ += w[v]; + if (!_.match(Oo)) { + var S = y.slice(0, d), + A = y.slice(d + 1), + I = w.match(Po); + I && (S.push(I[1]), A.unshift(I[2])), A.length && (s = "/" + A.join(".") + s), this.hostname = S.join("."); + break + } + } + } + this.hostname.length > 255 ? this.hostname = "" : this.hostname = this.hostname.toLowerCase(), b || (this.hostname = vo.toASCII(this.hostname)); + var k = this.port ? ":" + this.port : "", + T = this.hostname || ""; + this.host = T + k, this.href += this.host, b && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== s[0] && (s = "/" + s)) + } + if (!Bo[h]) + for (d = 0, m = To.length; d < m; d++) { + var C = To[d]; + if (-1 !== s.indexOf(C)) { + var R = encodeURIComponent(C); + R === C && (R = escape(C)), s = s.split(C).join(R) + } + } + var O = s.indexOf("#"); - 1 !== O && (this.hash = s.substr(O), s = s.slice(0, O)); + var P = s.indexOf("?"); + if (-1 !== P ? (this.search = s.substr(P), this.query = s.substr(P + 1), t && (this.query = Mo.parse(this.query)), s = s.slice(0, P)) : t && (this.search = "", this.query = {}), s && (this.pathname = s), Uo[h] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) { + k = this.pathname || ""; + var B = this.search || ""; + this.path = k + B + } + return this.href = this.format(), this + }, po.prototype.format = function() { + var e = this.auth || ""; + e && (e = (e = encodeURIComponent(e)).replace(/%3A/i, ":"), e += "@"); + var t = this.protocol || "", + r = this.pathname || "", + i = this.hash || "", + n = !1, + o = ""; + this.host ? n = e + this.host : this.hostname && (n = e + (-1 === this.hostname.indexOf(":") ? this.hostname : "[" + this.hostname + "]"), this.port && (n += ":" + this.port)), this.query && Eo.isObject(this.query) && Object.keys(this.query).length && (o = Mo.stringify(this.query)); + var s = this.search || o && "?" + o || ""; + return t && ":" !== t.substr(-1) && (t += ":"), this.slashes || (!t || Uo[t]) && !1 !== n ? (n = "//" + (n || ""), r && "/" !== r.charAt(0) && (r = "/" + r)) : n || (n = ""), i && "#" !== i.charAt(0) && (i = "#" + i), s && "?" !== s.charAt(0) && (s = "?" + s), t + n + (r = r.replace(/[?#]/g, (function(e) { + return encodeURIComponent(e) + }))) + (s = s.replace("#", "%23")) + i + }, po.prototype.resolve = function(e) { + return this.resolveObject(go(e, !1, !0)).format() + }, po.prototype.resolveObject = function(e) { + if (Eo.isString(e)) { + var t = new po; + t.parse(e, !1, !0), e = t + } + for (var r = new po, i = Object.keys(this), n = 0; n < i.length; n++) { + var o = i[n]; + r[o] = this[o] + } + if (r.hash = e.hash, "" === e.href) return r.href = r.format(), r; + if (e.slashes && !e.protocol) { + for (var s = Object.keys(e), a = 0; a < s.length; a++) { + var l = s[a]; + "protocol" !== l && (r[l] = e[l]) + } + return Uo[r.protocol] && r.hostname && !r.pathname && (r.path = r.pathname = "/"), r.href = r.format(), r + } + if (e.protocol && e.protocol !== r.protocol) { + if (!Uo[e.protocol]) { + for (var h = Object.keys(e), u = 0; u < h.length; u++) { + var c = h[u]; + r[c] = e[c] + } + return r.href = r.format(), r + } + if (r.protocol = e.protocol, e.host || xo[e.protocol]) r.pathname = e.pathname; + else { + for (var f = (e.pathname || "").split("/"); f.length && !(e.host = f.shift());); + e.host || (e.host = ""), e.hostname || (e.hostname = ""), "" !== f[0] && f.unshift(""), f.length < 2 && f.unshift(""), r.pathname = f.join("/") + } + if (r.search = e.search, r.query = e.query, r.host = e.host || "", r.auth = e.auth, r.hostname = e.hostname || e.host, r.port = e.port, r.pathname || r.search) { + var p = r.pathname || "", + d = r.search || ""; + r.path = p + d + } + return r.slashes = r.slashes || e.slashes, r.href = r.format(), r + } + var g = r.pathname && "/" === r.pathname.charAt(0), + b = e.host || e.pathname && "/" === e.pathname.charAt(0), + y = b || g || r.host && e.pathname, + m = y, + w = r.pathname && r.pathname.split("/") || [], + _ = (f = e.pathname && e.pathname.split("/") || [], r.protocol && !Uo[r.protocol]); + if (_ && (r.hostname = "", r.port = null, r.host && ("" === w[0] ? w[0] = r.host : w.unshift(r.host)), r.host = "", e.protocol && (e.hostname = null, e.port = null, e.host && ("" === f[0] ? f[0] = e.host : f.unshift(e.host)), e.host = null), y = y && ("" === f[0] || "" === w[0])), b) r.host = e.host || "" === e.host ? e.host : r.host, r.hostname = e.hostname || "" === e.hostname ? e.hostname : r.hostname, r.search = e.search, r.query = e.query, w = f; + else if (f.length) w || (w = []), w.pop(), w = w.concat(f), r.search = e.search, r.query = e.query; + else if (!Eo.isNullOrUndefined(e.search)) return _ && (r.hostname = r.host = w.shift(), (I = !!(r.host && r.host.indexOf("@") > 0) && r.host.split("@")) && (r.auth = I.shift(), r.host = r.hostname = I.shift())), r.search = e.search, r.query = e.query, Eo.isNull(r.pathname) && Eo.isNull(r.search) || (r.path = (r.pathname ? r.pathname : "") + (r.search ? r.search : "")), r.href = r.format(), r; + if (!w.length) return r.pathname = null, r.search ? r.path = "/" + r.search : r.path = null, r.href = r.format(), r; + for (var v = w.slice(-1)[0], E = (r.host || e.host || w.length > 1) && ("." === v || ".." === v) || "" === v, S = 0, A = w.length; A >= 0; A--) "." === (v = w[A]) ? w.splice(A, 1) : ".." === v ? (w.splice(A, 1), S++) : S && (w.splice(A, 1), S--); + if (!y && !m) + for (; S--; S) w.unshift(".."); + !y || "" === w[0] || w[0] && "/" === w[0].charAt(0) || w.unshift(""), E && "/" !== w.join("/").substr(-1) && w.push(""); + var I, k = "" === w[0] || w[0] && "/" === w[0].charAt(0); + return _ && (r.hostname = r.host = k ? "" : w.length ? w.shift() : "", (I = !!(r.host && r.host.indexOf("@") > 0) && r.host.split("@")) && (r.auth = I.shift(), r.host = r.hostname = I.shift())), (y = y || r.host && w.length) && !k && w.unshift(""), w.length ? r.pathname = w.join("/") : (r.pathname = null, r.path = null), Eo.isNull(r.pathname) && Eo.isNull(r.search) || (r.path = (r.pathname ? r.pathname : "") + (r.search ? r.search : "")), r.auth = e.auth || r.auth, r.slashes = r.slashes || e.slashes, r.href = r.format(), r + }, po.prototype.parseHost = function() { + var e = this.host, + t = Ao.exec(e); + t && (":" !== (t = t[0]) && (this.port = t.substr(1)), e = e.substr(0, e.length - t.length)), e && (this.hostname = e) + }, _o.Url, _o.format, _o.resolve, _o.resolveObject, Lo = {}, No = !1, jo = function() { + if (No) return Lo; + No = !0; + var e = to; + + function t(e) { + if ("string" != typeof e) throw new TypeError("Path must be a string. Received " + JSON.stringify(e)) + } + + function r(e, t) { + for (var r, i = "", n = 0, o = -1, s = 0, a = 0; a <= e.length; ++a) { + if (a < e.length) r = e.charCodeAt(a); + else { + if (47 === r) break; + r = 47 + } + if (47 === r) { + if (o !== a - 1 && 1 !== s) + if (o !== a - 1 && 2 === s) { + if (i.length < 2 || 2 !== n || 46 !== i.charCodeAt(i.length - 1) || 46 !== i.charCodeAt(i.length - 2)) + if (i.length > 2) { + var l = i.lastIndexOf("/"); + if (l !== i.length - 1) { + -1 === l ? (i = "", n = 0) : n = (i = i.slice(0, l)).length - 1 - i.lastIndexOf("/"), o = a, s = 0; + continue + } + } else if (2 === i.length || 1 === i.length) { + i = "", n = 0, o = a, s = 0; + continue + } + t && (i.length > 0 ? i += "/.." : i = "..", n = 2) + } else i.length > 0 ? i += "/" + e.slice(o + 1, a) : i = e.slice(o + 1, a), n = a - o - 1; + o = a, s = 0 + } else 46 === r && -1 !== s ? ++s : s = -1 + } + return i + } + var i = { + resolve: function() { + for (var i, n = "", o = !1, s = arguments.length - 1; s >= -1 && !o; s--) { + var a; + s >= 0 ? a = arguments[s] : (void 0 === i && (i = e.cwd()), a = i), t(a), 0 !== a.length && (n = a + "/" + n, o = 47 === a.charCodeAt(0)) + } + return n = r(n, !o), o ? n.length > 0 ? "/" + n : "/" : n.length > 0 ? n : "." + }, + normalize: function(e) { + if (t(e), 0 === e.length) return "."; + var i = 47 === e.charCodeAt(0), + n = 47 === e.charCodeAt(e.length - 1); + return 0 === (e = r(e, !i)).length && !i && (e = "."), e.length > 0 && n && (e += "/"), i ? "/" + e : e + }, + isAbsolute: function(e) { + return t(e), e.length > 0 && 47 === e.charCodeAt(0) + }, + join: function() { + if (0 === arguments.length) return "."; + for (var e, r = 0; r < arguments.length; ++r) { + var n = arguments[r]; + t(n), n.length > 0 && (void 0 === e ? e = n : e += "/" + n) + } + return void 0 === e ? "." : i.normalize(e) + }, + relative: function(e, r) { + if (t(e), t(r), e === r || (e = i.resolve(e)) === (r = i.resolve(r))) return ""; + for (var n = 1; n < e.length && 47 === e.charCodeAt(n); ++n); + for (var o = e.length, s = o - n, a = 1; a < r.length && 47 === r.charCodeAt(a); ++a); + for (var l = r.length - a, h = s < l ? s : l, u = -1, c = 0; c <= h; ++c) { + if (c === h) { + if (l > h) { + if (47 === r.charCodeAt(a + c)) return r.slice(a + c + 1); + if (0 === c) return r.slice(a + c) + } else s > h && (47 === e.charCodeAt(n + c) ? u = c : 0 === c && (u = 0)); + break + } + var f = e.charCodeAt(n + c); + if (f !== r.charCodeAt(a + c)) break; + 47 === f && (u = c) + } + var p = ""; + for (c = n + u + 1; c <= o; ++c)(c === o || 47 === e.charCodeAt(c)) && (0 === p.length ? p += ".." : p += "/.."); + return p.length > 0 ? p + r.slice(a + u) : (a += u, 47 === r.charCodeAt(a) && ++a, r.slice(a)) + }, + _makeLong: function(e) { + return e + }, + dirname: function(e) { + if (t(e), 0 === e.length) return "."; + for (var r = e.charCodeAt(0), i = 47 === r, n = -1, o = !0, s = e.length - 1; s >= 1; --s) + if (47 === (r = e.charCodeAt(s))) { + if (!o) { + n = s; + break + } + } else o = !1; + return -1 === n ? i ? "/" : "." : i && 1 === n ? "//" : e.slice(0, n) + }, + basename: function(e, r) { + if (void 0 !== r && "string" != typeof r) throw new TypeError('"ext" argument must be a string'); + t(e); + var i, n = 0, + o = -1, + s = !0; + if (void 0 !== r && r.length > 0 && r.length <= e.length) { + if (r.length === e.length && r === e) return ""; + var a = r.length - 1, + l = -1; + for (i = e.length - 1; i >= 0; --i) { + var h = e.charCodeAt(i); + if (47 === h) { + if (!s) { + n = i + 1; + break + } + } else - 1 === l && (s = !1, l = i + 1), a >= 0 && (h === r.charCodeAt(a) ? -1 == --a && (o = i) : (a = -1, o = l)) + } + return n === o ? o = l : -1 === o && (o = e.length), e.slice(n, o) + } + for (i = e.length - 1; i >= 0; --i) + if (47 === e.charCodeAt(i)) { + if (!s) { + n = i + 1; + break + } + } else - 1 === o && (s = !1, o = i + 1); + return -1 === o ? "" : e.slice(n, o) + }, + extname: function(e) { + t(e); + for (var r = -1, i = 0, n = -1, o = !0, s = 0, a = e.length - 1; a >= 0; --a) { + var l = e.charCodeAt(a); + if (47 !== l) - 1 === n && (o = !1, n = a + 1), 46 === l ? -1 === r ? r = a : 1 !== s && (s = 1) : -1 !== r && (s = -1); + else if (!o) { + i = a + 1; + break + } + } + return -1 === r || -1 === n || 0 === s || 1 === s && r === n - 1 && r === i + 1 ? "" : e.slice(r, n) + }, + format: function(e) { + if (null === e || "object" != typeof e) throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof e); + return function(e, t) { + var r = t.dir || t.root, + i = t.base || (t.name || "") + (t.ext || ""); + return r ? r === t.root ? r + i : r + "/" + i : i + }(0, e) + }, + parse: function(e) { + t(e); + var r = { + root: "", + dir: "", + base: "", + ext: "", + name: "" + }; + if (0 === e.length) return r; + var i, n = e.charCodeAt(0), + o = 47 === n; + o ? (r.root = "/", i = 1) : i = 0; + for (var s = -1, a = 0, l = -1, h = !0, u = e.length - 1, c = 0; u >= i; --u) + if (47 !== (n = e.charCodeAt(u))) - 1 === l && (h = !1, l = u + 1), 46 === n ? -1 === s ? s = u : 1 !== c && (c = 1) : -1 !== s && (c = -1); + else if (!h) { + a = u + 1; + break + } + return -1 === s || -1 === l || 0 === c || 1 === c && s === l - 1 && s === a + 1 ? -1 !== l && (r.base = r.name = 0 === a && o ? e.slice(1, l) : e.slice(a, l)) : (0 === a && o ? (r.name = e.slice(1, s), r.base = e.slice(1, l)) : (r.name = e.slice(a, s), r.base = e.slice(a, l)), r.ext = e.slice(s, l)), a > 0 ? r.dir = e.slice(0, a - 1) : o && (r.dir = "/"), r + }, + sep: "/", + delimiter: ":", + win32: null, + posix: null + }; + return i.posix = i, Lo = i + }(), Do = typeof Deno < "u" ? "windows" === Deno.build.os ? "win32" : Deno.build.os : void 0, _o.URL = typeof URL < "u" ? URL : null, _o.pathToFileURL = yo, _o.fileURLToPath = bo, _o.Url, _o.format, _o.resolve, _o.resolveObject, _o.URL, Fo = 92, Wo = 47, $o = 97, qo = 122, Vo = "win32" === Do, Ho = /\//g, zo = /%/g, Ko = /\\/g, Go = /\n/g, Qo = /\r/g, Yo = /\t/g, Jo = typeof Deno < "u" ? "windows" === Deno.build.os ? "win32" : Deno.build.os : void 0, _o.URL = typeof URL < "u" ? URL : null, _o.pathToFileURL = wo, _o.fileURLToPath = mo, Xo = _o.Url, Zo = _o.format, es = _o.resolve, ts = _o.resolveObject, rs = _o.parse, is = _o.URL, ns = 92, os = 47, ss = 97, as = 122, ls = "win32" === Jo, hs = /\//g, us = /%/g, cs = /\\/g, fs = /\n/g, ps = /\r/g, ds = /\t/g + })), + bs = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t = typeof window < "u" && typeof window.document < "u" || "object" == typeof self && self.constructor && "DedicatedWorkerGlobalScope" === self.constructor.name || typeof navigator < "u" && "ReactNative" === navigator.product; + e.default = t + })), + ys = {}; + + function ms() { + throw new Error("Node.js net module is not supported by JSPM core outside of Node.js") + } + u(ys, { + Server: () => ms, + Socket: () => ms, + Stream: () => ms, + _createServerHandle: () => ms, + _normalizeArgs: () => ms, + _setSimultaneousAccepts: () => ms, + connect: () => ms, + createConnection: () => ms, + createServer: () => ms, + default: () => ws, + isIP: () => ms, + isIPv4: () => ms, + isIPv6: () => ms + }); + var ws, _s = l((() => { + f(), rt(), qe(), ws = { + _createServerHandle: ms, + _normalizeArgs: ms, + _setSimultaneousAccepts: ms, + connect: ms, + createConnection: ms, + createServer: ms, + isIP: ms, + isIPv4: ms, + isIPv6: ms, + Server: ms, + Socket: ms, + Stream: ms + } + })), + vs = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var r = t((_s(), c(ys))), + i = (0, t(Ai()).default)("mqttjs:tcp"); + e.default = (e, t) => { + t.port = t.port || 1883, t.hostname = t.hostname || t.host || "localhost"; + let { + port: n + } = t, o = t.hostname; + return i("port %d and host %s", n, o), r.default.createConnection(n, o) + } + })), + Es = {}; + u(Es, { + default: () => Ss + }); + var Ss, As = l((() => { + f(), rt(), qe(), Ss = {} + })), + Is = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var r = t((As(), c(Es))), + i = t((_s(), c(ys))), + n = (0, t(Ai()).default)("mqttjs:tls"); + e.default = (e, t) => { + t.port = t.port || 8883, t.host = t.hostname || t.host || "localhost", 0 === i.default.isIP(t.host) && (t.servername = t.host), t.rejectUnauthorized = !1 !== t.rejectUnauthorized, delete t.path, n("port %d host %s rejectUnauthorized %b", t.port, t.host, t.rejectUnauthorized); + let o = r.default.connect(t); + + function s(r) { + t.rejectUnauthorized && e.emit("error", r), o.end() + } + return o.on("secureConnect", (() => { + t.rejectUnauthorized && !o.authorized ? o.emit("error", new Error("TLS not authorized")) : o.removeListener("error", s) + })), o.on("error", s), o + } + })), + ks = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }), e.BufferedDuplex = e.writev = void 0; + var t = bi(); + + function r(e, t) { + let r = new Array(e.length); + for (let t = 0; t < e.length; t++) "string" == typeof e[t].chunk ? r[t] = Xe.from(e[t].chunk, "utf8") : r[t] = e[t].chunk; + this._write(Xe.concat(r), "binary", t) + } + e.writev = r; + var i = class extends t.Duplex { + constructor(e, t, i) { + super({ + objectMode: !0 + }), this.proxy = t, this.socket = i, this.writeQueue = [], e.objectMode || (this._writev = r.bind(this)), this.isSocketOpen = !1, this.proxy.on("data", (e => { + this.push(e) + })) + } + _read(e) { + this.proxy.read(e) + } + _write(e, t, r) { + this.isSocketOpen ? this.writeToProxy(e, t, r) : this.writeQueue.push({ + chunk: e, + encoding: t, + cb: r + }) + } + _final(e) { + this.writeQueue = [], this.proxy.end(e) + } + socketReady() { + this.emit("connect"), this.isSocketOpen = !0, this.processWriteQueue() + } + writeToProxy(e, t, r) { + !1 === this.proxy.write(e, t) ? this.proxy.once("drain", r) : r() + } + processWriteQueue() { + for (; this.writeQueue.length > 0;) { + let { + chunk: e, + encoding: t, + cb: r + } = this.writeQueue.shift(); + this.writeToProxy(e, t, r) + } + } + }; + e.BufferedDuplex = i + })), + Ts = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t, r, i, n = (tt(), c(Ve)), + o = bi(), + s = ks(); + e.default = (e, a) => { + if (a.hostname = a.hostname || a.host, !a.hostname) throw new Error("Could not determine host. Specify host manually."); + let l = "MQIsdp" === a.protocolId && 3 === a.protocolVersion ? "mqttv3.1" : "mqtt"; + ! function(e) { + e.hostname || (e.hostname = "localhost"), e.path || (e.path = "/"), e.wsOptions || (e.wsOptions = {}) + }(a); + let h = function(e, t) { + let r = "wxs" === e.protocol ? "wss" : "ws", + i = `${r}://${e.hostname}${e.path}`; + return e.port && 80 !== e.port && 443 !== e.port && (i = `${r}://${e.hostname}:${e.port}${e.path}`), "function" == typeof e.transformWsUrl && (i = e.transformWsUrl(i, e, t)), i + }(a, e); + t = wx.connectSocket({ + url: h, + protocols: [l] + }), r = function() { + let e = new o.Transform; + return e._write = (e, r, i) => { + t.send({ + data: e.buffer, + success() { + i() + }, + fail(e) { + i(new Error(e)) + } + }) + }, e._flush = e => { + t.close({ + success() { + e() + } + }) + }, e + }(), (i = new s.BufferedDuplex(a, r, t))._destroy = (e, r) => { + t.close({ + success() { + r && r(e) + } + }) + }; + let u = i.destroy; + return i.destroy = (e, r) => (i.destroy = u, setTimeout((() => { + t.close({ + fail() { + i._destroy(e, r) + } + }) + }), 0), i), t.onOpen((() => { + i.socketReady() + })), t.onMessage((e => { + let { + data: t + } = e; + t = t instanceof ArrayBuffer ? n.Buffer.from(t) : n.Buffer.from(t, "utf8"), r.push(t) + })), t.onClose((() => { + i.emit("close"), i.end(), i.destroy() + })), t.onError((e => { + let t = new Error(e.errMsg); + i.destroy(t) + })), i + } + })), + Cs = h((e => { + f(), rt(), qe(), Object.defineProperty(e, "__esModule", { + value: !0 + }); + var t, r, i, n = (tt(), c(Ve)), + o = bi(), + s = ks(), + a = !1; + e.default = (e, l) => { + if (l.hostname = l.hostname || l.host, !l.hostname) throw new Error("Could not determine host. Specify host manually."); + let h = "MQIsdp" === l.protocolId && 3 === l.protocolVersion ? "mqttv3.1" : "mqtt"; + ! function(e) { + e.hostname || (e.hostname = "localhost"), e.path || (e.path = "/"), e.wsOptions || (e.wsOptions = {}) + }(l); + let u = function(e, t) { + let r = "alis" === e.protocol ? "wss" : "ws", + i = `${r}://${e.hostname}${e.path}`; + return e.port && 80 !== e.port && 443 !== e.port && (i = `${r}://${e.hostname}:${e.port}${e.path}`), "function" == typeof e.transformWsUrl && (i = e.transformWsUrl(i, e, t)), i + }(l, e); + return (t = l.my).connectSocket({ + url: u, + protocols: h + }), r = function() { + let e = new o.Transform; + return e._write = (e, r, i) => { + t.sendSocketMessage({ + data: e.buffer, + success() { + i() + }, + fail() { + i(new Error) + } + }) + }, e._flush = e => { + t.closeSocket({ + success() { + e() + } + }) + }, e + }(), i = new s.BufferedDuplex(l, r, t), a || (a = !0, t.onSocketOpen((() => { + i.socketReady() + })), t.onSocketMessage((e => { + if ("string" == typeof e.data) { + let t = n.Buffer.from(e.data, "base64"); + r.push(t) + } else { + let t = new FileReader; + t.addEventListener("load", (() => { + let e = t.result; + e = e instanceof ArrayBuffer ? n.Buffer.from(e) : n.Buffer.from(e, "utf8"), r.push(e) + })), t.readAsArrayBuffer(e.data) + } + })), t.onSocketClose((() => { + i.end(), i.destroy() + })), t.onSocketError((e => { + i.destroy(e) + }))), i + } + })), + Rs = h(((e, t) => { + f(), rt(), qe(), t.exports = function() { + throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object") + } + })), + Os = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var r = (tt(), c(Ve)), + i = t(Rs()), + n = t(Ai()), + o = bi(), + s = t(bs()), + a = ks(), + l = (0, n.default)("mqttjs:ws"), + h = ["rejectUnauthorized", "ca", "cert", "key", "pfx", "passphrase"]; + + function u(e, t) { + let r = `${e.protocol}://${e.hostname}:${e.port}${e.path}`; + return "function" == typeof e.transformWsUrl && (r = e.transformWsUrl(r, e, t)), r + } + + function p(e) { + let t = e; + return e.hostname || (t.hostname = "localhost"), e.port || ("wss" === e.protocol ? t.port = 443 : t.port = 80), e.path || (t.path = "/"), e.wsOptions || (t.wsOptions = {}), !s.default && "wss" === e.protocol && h.forEach((r => { + Object.prototype.hasOwnProperty.call(e, r) && !Object.prototype.hasOwnProperty.call(e.wsOptions, r) && (t.wsOptions[r] = e[r]) + })), t + } + e.default = s.default ? (e, t) => { + l("browserStreamBuilder"); + let i, n = function(e) { + let t = p(e); + if (t.hostname || (t.hostname = t.host), !t.hostname) { + if (typeof document > "u") throw new Error("Could not determine host. Specify host manually."); + let e = new URL(document.URL); + t.hostname = e.hostname, t.port || (t.port = Number(e.port)) + } + return void 0 === t.objectMode && (t.objectMode = !(!0 === t.binary || void 0 === t.binary)), t + }(t).browserBufferSize || 524288, + s = t.browserBufferTimeout || 1e3, + h = !t.objectMode, + c = function(e, t) { + let r, i = "MQIsdp" === t.protocolId && 3 === t.protocolVersion ? "mqttv3.1" : "mqtt", + n = u(t, e); + return r = t.createWebsocket ? t.createWebsocket(n, [i], t) : new WebSocket(n, [i]), r.binaryType = "arraybuffer", r + }(e, t), + f = function(e, t, i) { + let a = new o.Transform({ + objectMode: e.objectMode + }); + return a._write = function e(t, i, o) { + if (c.bufferedAmount > n) return void setTimeout(e, s, t, i, o); + h && "string" == typeof t && (t = r.Buffer.from(t, "utf8")); + try { + c.send(t) + } catch (e) { + return o(e) + } + o() + }, a._flush = function(e) { + c.close(), e() + }, a + }(t); + t.objectMode || (f._writev = a.writev.bind(f)), f.on("close", (() => { + c.close() + })); + let d = typeof c.addEventListener < "u"; + + function g() { + l("WebSocket onOpen"), i instanceof a.BufferedDuplex && i.socketReady() + } + + function b(e) { + l("WebSocket onClose", e), i.end(), i.destroy() + } + + function y(e) { + l("WebSocket onError", e); + let t = new Error("WebSocket error"); + t.event = e, i.destroy(t) + } + + function m(e) { + let { + data: t + } = e; + t = t instanceof ArrayBuffer ? r.Buffer.from(t) : r.Buffer.from(t, "utf8"), f.push(t) + } + return c.readyState === c.OPEN ? (i = f, i.socket = c) : (i = new a.BufferedDuplex(t, f, c), d ? c.addEventListener("open", g) : c.onopen = g), d ? (c.addEventListener("close", b), c.addEventListener("error", y), c.addEventListener("message", m)) : (c.onclose = b, c.onerror = y, c.onmessage = m), i + } : (e, t) => { + l("streamBuilder"); + let r = p(t), + n = u(r, e), + o = function(e, t, r) { + l("createWebSocket"), l(`protocol: ${r.protocolId} ${r.protocolVersion}`); + let n, o = "MQIsdp" === r.protocolId && 3 === r.protocolVersion ? "mqttv3.1" : "mqtt"; + return l(`creating new Websocket for url: ${t} and protocol: ${o}`), n = r.createWebsocket ? r.createWebsocket(t, [o], r) : new i.default(t, [o], r.wsOptions), n + }(0, n, r), + s = i.default.createWebSocketStream(o, r.wsOptions); + return s.url = n, o.on("close", (() => { + s.destroy() + })), s + } + })), + Ps = h((e => { + f(), rt(), qe(); + var t = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.connectAsync = void 0; + var r = t(Ai()), + i = t((gs(), c(fo))), + n = t(bn()), + o = t(bs()), + s = (0, r.default)("mqttjs"), + a = {}; + + function l(e, t) { + if (s("connecting to an MQTT broker..."), "object" == typeof e && !t && (t = e, e = ""), t = t || {}, e && "string" == typeof e) { + let r = i.default.parse(e, !0); + if (null != r.port && (r.port = Number(r.port)), null === (t = Object.assign(Object.assign({}, r), t)).protocol) throw new Error("Missing protocol"); + t.protocol = t.protocol.replace(/:$/, "") + } + if (function(e) { + let t; + e.auth && (t = e.auth.match(/^(.+):(.+)$/), t ? (e.username = t[1], e.password = t[2]) : e.username = e.auth) + }(t), t.query && "string" == typeof t.query.clientId && (t.clientId = t.query.clientId), t.cert && t.key) { + if (!t.protocol) throw new Error("Missing secure protocol key"); + if (-1 === ["mqtts", "wss", "wxs", "alis"].indexOf(t.protocol)) switch (t.protocol) { + case "mqtt": + t.protocol = "mqtts"; + break; + case "ws": + t.protocol = "wss"; + break; + case "wx": + t.protocol = "wxs"; + break; + case "ali": + t.protocol = "alis"; + break; + default: + throw new Error(`Unknown protocol for secure connection: "${t.protocol}"!`) + } + } + if (!a[t.protocol]) { + let e = -1 !== ["mqtts", "wss"].indexOf(t.protocol); + t.protocol = ["mqtt", "mqtts", "ws", "wss", "wx", "wxs", "ali", "alis"].filter(((t, r) => (!e || r % 2 != 0) && "function" == typeof a[t]))[0] + } + if (!1 === t.clean && !t.clientId) throw new Error("Missing clientId for unclean clients"); + t.protocol && (t.defaultProtocol = t.protocol); + let r = new n.default((function(e) { + return t.servers && ((!e._reconnectCount || e._reconnectCount === t.servers.length) && (e._reconnectCount = 0), t.host = t.servers[e._reconnectCount].host, t.port = t.servers[e._reconnectCount].port, t.protocol = t.servers[e._reconnectCount].protocol ? t.servers[e._reconnectCount].protocol : t.defaultProtocol, t.hostname = t.host, e._reconnectCount++), s("calling streambuilder for", t.protocol), a[t.protocol](e, t) + }), t); + return r.on("error", (() => {})), r + } + o.default ? (a.wx = Ts().default, a.wxs = Ts().default, a.ali = Cs().default, a.alis = Cs().default) : (a.mqtt = vs().default, a.tcp = vs().default, a.ssl = Is().default, a.tls = a.ssl, a.mqtts = Is().default), a.ws = Os().default, a.wss = Os().default, e.connectAsync = function(e, t, r = !0) { + return new Promise(((i, n) => { + let o = l(e, t), + s = { + connect: e => { + a(), i(o) + }, + end: () => { + a(), i(o) + }, + error: e => { + a(), o.end(), n(e) + } + }; + + function a() { + Object.keys(s).forEach((e => { + o.off(e, s[e]) + })) + }!1 === r && (s.close = () => { + s.error(new Error("Couldn't connect to server")) + }), Object.keys(s).forEach((e => { + o.on(e, s[e]) + })) + })) + }, e.default = l + })), + Bs = h((e => { + f(), rt(), qe(); + var t = e && e.__createBinding || (Object.create ? function(e, t, r, i) { + void 0 === i && (i = r); + var n = Object.getOwnPropertyDescriptor(t, r); + (!n || ("get" in n ? !t.__esModule : n.writable || n.configurable)) && (n = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, i, n) + } : function(e, t, r, i) { + void 0 === i && (i = r), e[i] = t[r] + }), + r = e && e.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + i = e && e.__importStar || function(e) { + if (e && e.__esModule) return e; + var i = {}; + if (null != e) + for (var n in e) "default" !== n && Object.prototype.hasOwnProperty.call(e, n) && t(i, e, n); + return r(i, e), i + }, + n = e && e.__exportStar || function(e, r) { + for (var i in e) "default" !== i && !Object.prototype.hasOwnProperty.call(r, i) && t(r, e, i) + }, + o = e && e.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.ReasonCodes = e.UniqueMessageIdProvider = e.DefaultMessageIdProvider = e.Store = e.MqttClient = e.connectAsync = e.connect = e.Client = void 0; + var s = o(bn()); + e.MqttClient = s.default; + var a = o(Pi()); + e.DefaultMessageIdProvider = a.default; + var l = o(yn()); + e.UniqueMessageIdProvider = l.default; + var h = o(Li()); + e.Store = h.default; + var u = i(Ps()); + e.connect = u.default, Object.defineProperty(e, "connectAsync", { + enumerable: !0, + get: function() { + return u.connectAsync + } + }), e.Client = s.default, n(bn(), e), n(ji(), e); + var c = Di(); + Object.defineProperty(e, "ReasonCodes", { + enumerable: !0, + get: function() { + return c.ReasonCodes + } + }) + })); + const xs = h((e => { + f(), rt(), qe(); + var t = e && e.__createBinding || (Object.create ? function(e, t, r, i) { + void 0 === i && (i = r); + var n = Object.getOwnPropertyDescriptor(t, r); + (!n || ("get" in n ? !t.__esModule : n.writable || n.configurable)) && (n = { + enumerable: !0, + get: function() { + return t[r] + } + }), Object.defineProperty(e, i, n) + } : function(e, t, r, i) { + void 0 === i && (i = r), e[i] = t[r] + }), + r = e && e.__setModuleDefault || (Object.create ? function(e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }) + } : function(e, t) { + e.default = t + }), + i = e && e.__importStar || function(e) { + if (e && e.__esModule) return e; + var i = {}; + if (null != e) + for (var n in e) "default" !== n && Object.prototype.hasOwnProperty.call(e, n) && t(i, e, n); + return r(i, e), i + }, + n = e && e.__exportStar || function(e, r) { + for (var i in e) "default" !== i && !Object.prototype.hasOwnProperty.call(r, i) && t(r, e, i) + }; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var o = i(Bs()); + e.default = o, n(Bs(), e) + }))() + } + } +]); \ No newline at end of file diff --git a/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js.LICENSE.txt b/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js.LICENSE.txt new file mode 100644 index 0000000..d25d244 --- /dev/null +++ b/mp-core/1310.ccdb6fa732d26e629ac4.bundle.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! Bundled license information: + +@jspm/core/nodelibs/browser/buffer.js: + (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) +*/ diff --git a/mp-core/140.8904bd1233c37c62526e.bundle.js b/mp-core/140.8904bd1233c37c62526e.bundle.js new file mode 100644 index 0000000..773b65b --- /dev/null +++ b/mp-core/140.8904bd1233c37c62526e.bundle.js @@ -0,0 +1,101 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [140], { + 40140: (e, t, r) => { + r.d(t, { + $1: () => i, + Vs: () => s + }); + var n = r(99477), + o = r(25108); + + function i(e, t = 1e-4) { + t = Math.max(t, Number.EPSILON); + const r = {}, + o = e.getIndex(), + i = e.getAttribute("position"), + s = o ? o.count : i.count; + let u = 0; + const a = Object.keys(e.attributes), + l = {}, + f = {}, + c = [], + g = ["getX", "getY", "getZ", "getW"], + m = ["setX", "setY", "setZ", "setW"]; + for (let t = 0, r = a.length; t < r; t++) { + const r = a[t], + o = e.attributes[r]; + l[r] = new n.BufferAttribute(new o.array.constructor(o.count * o.itemSize), o.itemSize, o.normalized); + const i = e.morphAttributes[r]; + i && (f[r] = new n.BufferAttribute(new i.array.constructor(i.count * i.itemSize), i.itemSize, i.normalized)) + } + const d = .5 * t, + h = Math.log10(1 / t), + p = Math.pow(10, h), + b = d * p; + for (let t = 0; t < s; t++) { + const n = o ? o.getX(t) : t; + let i = ""; + for (let t = 0, r = a.length; t < r; t++) { + const r = a[t], + o = e.getAttribute(r), + s = o.itemSize; + for (let e = 0; e < s; e++) i += ~~(o[g[e]](n) * p + b) + "," + } + if (i in r) c.push(r[i]); + else { + for (let t = 0, r = a.length; t < r; t++) { + const r = a[t], + o = e.getAttribute(r), + i = e.morphAttributes[r], + s = o.itemSize, + c = l[r], + d = f[r]; + for (let e = 0; e < s; e++) { + const t = g[e], + r = m[e]; + if (c[r](u, o[t](n)), i) + for (let e = 0, o = i.length; e < o; e++) d[e][r](u, i[e][t](n)) + } + } + r[i] = u, c.push(u), u++ + } + } + const w = e.clone(); + for (const t in e.attributes) { + const e = l[t]; + if (w.setAttribute(t, new n.BufferAttribute(e.array.slice(0, u * e.itemSize), e.itemSize, e.normalized)), t in f) + for (let e = 0; e < f[t].length; e++) { + const r = f[t][e]; + w.morphAttributes[t][e] = new n.BufferAttribute(r.array.slice(0, u * r.itemSize), r.itemSize, r.normalized) + } + } + return w.setIndex(c), w + } + + function s(e, t) { + if (t === n.TrianglesDrawMode) return o.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), e; + if (t === n.TriangleFanDrawMode || t === n.TriangleStripDrawMode) { + let r = e.getIndex(); + if (null === r) { + const t = [], + n = e.getAttribute("position"); + if (void 0 === n) return o.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), e; + for (let e = 0; e < n.count; e++) t.push(e); + e.setIndex(t), r = e.getIndex() + } + const i = r.count - 2, + s = []; + if (t === n.TriangleFanDrawMode) + for (let e = 1; e <= i; e++) s.push(r.getX(0)), s.push(r.getX(e)), s.push(r.getX(e + 1)); + else + for (let e = 0; e < i; e++) e % 2 == 0 ? (s.push(r.getX(e)), s.push(r.getX(e + 1)), s.push(r.getX(e + 2))) : (s.push(r.getX(e + 2)), s.push(r.getX(e + 1)), s.push(r.getX(e))); + s.length / 3 !== i && o.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + const u = e.clone(); + return u.setIndex(s), u.clearGroups(), u + } + return o.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", t), e + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1530.1f599abe6bb0aa7290b8.bundle.js b/mp-core/1530.1f599abe6bb0aa7290b8.bundle.js new file mode 100644 index 0000000..2a679b0 --- /dev/null +++ b/mp-core/1530.1f599abe6bb0aa7290b8.bundle.js @@ -0,0 +1,314 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1530], { + 41530: (e, i, t) => { + t.r(i), t.d(i, { + default: () => h + }); + class a { + isMediaChannel = !0; + audioOutput = null; + videoOutput = null; + channelIsStopped = !1; + channelURL = ""; + async onChannelStart(e) {} + async onChannelStop() {} + onUserInput() {} + } + var n = t(25108); + class d extends a { + mediaElement = null; + isLive = !1; + hls = null; + async onChannelStart(e) { + if (n.debug("[MediaChannelVideoElement] Creating media channel"), this.mediaElement = document.createElement("video"), this.mediaElement.crossOrigin = "anonymous", this.mediaElement.muted = !0, this.mediaElement.autoplay = !0, this.mediaElement.loop = !0, this.mediaElement.playsInline = !0, this.mediaElement.style.cssText = "position: absolute; width: 1024px; height: 1024px; ", this.mediaElement.addEventListener("loadedmetadata", (e => this.onLoadedMetadata(e))), e.includes(".m3u8")) { + const { + default: i + } = await t.e(3041).then(t.bind(t, 93041)); + if (i.isSupported()) { + let t = { + maxLiveSyncPlaybackRate: 1.1, + ignoreDevicePixelRatio: !0 + }; + this.hls = new i(t), this.hls.attachMedia(this.mediaElement), this.hls.loadSource(e), this.hls.on(i.Events.LEVEL_LOADED, ((e, i) => this.onHLSLevelLoaded(e, i))) + } else this.mediaElement.canPlayType("application/vnd.apple.mpegurl") || n.warn("[MediaChannelVideoElement] HLS video feed detected, but HLS is not supported on this browser."), this.mediaElement.src = e + } else this.mediaElement.src = e; + this.videoOutput = new THREE.VideoTexture(this.mediaElement), this.videoOutput.format = THREE.RGBAFormat, this.videoOutput.colorSpace = THREE.SRGBColorSpace, this.audioOutput = metapress.audio.context.createGain(), this.audioElementNode = metapress.audio.context.createMediaElementSource(this.mediaElement), this.audioElementNode.connect(this.audioOutput), this.zeroGainNode = metapress.audio.context.createGain(), this.zeroGainNode.gain.value = 0, this.zeroGainNode.connect(metapress.audio.context.destination), this.audioOutput.connect(this.zeroGainNode), this.attemptResumeAudio() + } + onLoadedMetadata(e) { + this.isLive = this.mediaElement.duration == 1 / 0 + } + onHLSLevelLoaded(e, i) { + this.isLive = !!i?.details?.live + } + onChannelStop() { + n.debug("[MediaChannelVideoElement] Stopping media channel"), this.hls?.detachMedia(), this.hls?.destroy(), this.mediaElement.pause(), this.mediaElement.src = "", this.videoOutput.dispose(), this.audioElementNode.disconnect(), this.zeroGainNode.disconnect() + } + onUserInput() { + this.attemptResumeAudio() + } + async attemptResumeAudio() { + if (this.mediaElement) { + try { + this.mediaElement.muted = !1 + } catch (e) { + n.warn(`[MediaChannelVideoElement] Unable to unmute media element! ${e.message}`) + } + if (!this._played) + if (this.mediaElement.paused) try { + await this.mediaElement.play(), this._played = !0 + } catch (e) { + n.warn(`[MediaChannelVideoElement] Unable to play media element! ${e.message}`) + } else this._played = !0 + } + } + } + var o = t(25108); + class s { + name = "Media"; + description = "Plays audio and/or video in-world."; + provides = ["material"]; + icon = t(39486); + settings = () => [{ + type: "description", + name: "This modifier streams audio and/or video in-world." + }, { + type: "file", + id: "media_url", + name: "Media file", + help: "The file to play." + }, { + type: "file", + id: "placeholder_url", + name: "Placeholder image", + help: "Image to display when user is out of media range." + }, { + type: "button", + id: "media_external_url", + name: "Set external media URL", + help: "Allows you to set a media URL outside of MetaPress. Note that external media files will not be saved as part of world backups.", + onClick: e => this.onSetExternalURL() + }, { + type: "header", + name: "Audio" + }, { + type: "checkbox", + id: "media_audio", + name: "Enable audio", + help: "When enabled, the source's audio will be played in-world." + }, { + type: "checkbox", + id: "media_audio_spatial", + name: "Spatialize", + help: "When enabled, the user will hear the audio coming from the source. If disabled, the audio is played directly.", + hidden: !this.entity.media_audio + }, { + type: "number", + id: "media_audio_range", + name: "Hearing range", + placeholder: 10, + help: "Distance (in meters) that this object can be heard from.", + hidden: !this.entity.media_audio + }, { + type: "number", + id: "media_audio_volume", + name: "Volume %", + placeholder: 100, + help: "Audio volume, from 0 to 100.", + hidden: !this.entity.media_audio + }, { + type: "header", + name: "Video" + }, { + type: "checkbox", + id: "media_video", + name: "Enable video", + help: "When enabled, the source's video will be applied to the surface of this object." + }, { + type: "number", + id: "media_video_range", + name: "Visible range", + placeholder: 10, + help: "When the user is within this distance (in meters) the video will be displayed.", + hidden: !this.entity.media_video + }]; + channel = null; + channelCloser = null; + channelURL = ""; + channelLastError = null; + onLoad() { + this.checkTimer = setInterval((() => this.check()), 1e3), this.displayPlaceholder() + } + async onUnload() { + clearInterval(this.checkTimer), this.channel && await this.stopChannel() + } + async check() { + if (!this.busy) { + this.busy = !0; + try { + await this.checkIteration() + } catch (e) { + this.channelLastError?.message != e.message && o.error(e), this.channelLastError = e + } finally { + this.busy = !1 + } + } + } + async checkIteration() { + let e = this._media_url != this.entity.media_url || this._media_audio != this.entity.media_audio || this._media_audio_spatial != this.entity.media_audio_spatial || this._media_audio_range != this.entity.media_audio_range || this._media_audio_volume != this.entity.media_audio_volume || this._media_video != this.entity.media_video || this._placeholder_url != this.entity.placeholder_url; + this._media_url = this.entity.media_url, this._media_audio = this.entity.media_audio, this._media_audio_spatial = this.entity.media_audio_spatial, this._media_audio_range = this.entity.media_audio_range, this._media_audio_volume = this.entity.media_audio_volume, this._media_video = this.entity.media_video, this._placeholder_url = this.entity.placeholder_url, e && this.channel && await this.stopChannel(); + let i = this.entity.media_url, + t = this.entity.media_audio_range ? parseFloat(this.entity.media_audio_range) : 10, + a = this.entity.media_video_range ? parseFloat(this.entity.media_video_range) : 10; + isNaN(t) && (t = 10), isNaN(a) && (a = 10); + let n = metapress.avatar.distanceTo(this.entity), + d = -1 != n && this.entity.media_audio && n < t + 5, + o = -1 != n && this.entity.media_video && n < a; + d || o || (i = null), i && !this.channel ? await this.startChannel(i) : (this.channel && !i || this.channel && i != this.channelURL) && await this.stopChannel(), this.channel && (this.channel.audioOutput && d ? await this.applyAudio() : this.removeAudio(), this.channel.videoOutput && o ? await this.applyVideo() : this.removeVideo()) + } + async startChannel(e) { + let { + channel: i, + close: t + } = await metapress.media.openChannel(e); + o.debug(`[MediaOutlet] Connected to channel: entity=${this.entity.id}`), this.channel = i, this.channelCloser = t, this.channelURL = e, i.audioOutput || i.videoOutput || o.warn("[MediaOutlet] No media output set. The channel must provide 'audioOutput' and/or 'videoOutput'.") + } + async applyAudio() { + if (this.audioObject) return; + if (this.entity.media_audio_spatial) { + let e = this.entity.media_audio_range && parseFloat(this.entity.media_audio_range) || 10; + this.audioObject = new THREE.PositionalAudio(metapress.audio.listener), this.audioObject.setDistanceModel("linear"), this.audioObject.setRefDistance(e / 2), this.audioObject.setMaxDistance(e), this.audioObject.setRolloffFactor(1) + } else this.audioObject = new THREE.Audio(metapress.audio.listener); + const e = (null != this.entity.media_audio_volume ? parseFloat(this.entity.media_audio_volume) || 0 : 100) / 100; + this.audioObject.setVolume(e), this.audioObject.setNodeSource(this.channel.audioOutput), this.renderer.container.add(this.audioObject) + } + removeAudio() { + this.audioObject && (this.audioObject.disconnect(), this.audioObject.removeFromParent(), this.audioObject = null) + } + async applyVideo() { + if (this.videoMaterial) return; + let e = this.renderer.object; + if (!e?.isMesh) return o.warn(`[MediaOutlet] Could not find mesh for the video to be applied to: entity=${this.entity.id}`); + this.videoMaterial = new THREE.MeshStandardMaterial({ + map: this.channel.videoOutput, + side: THREE.DoubleSide + }), e.material = this.videoMaterial + } + removeVideo() { + if (this.videoMaterial) return this.renderer.object?.isMesh ? (this.videoMaterial.dispose(), this.videoMaterial = null, void this.displayPlaceholder()) : o.warn(`[MediaOutlet] Could not find mesh for the video to be applied to: entity=${this.entity.id}`) + } + async stopChannel() { + this.channelCloser(), o.debug(`[MediaOutlet] Closed channel: entity=${this.entity.id}`), this.channel = null, this.channelCloser = null, this.channelURL = "", this.removeAudio(), this.removeVideo() + } + displayPlaceholder() { + let e = this.renderer.object; + if (!e?.isMesh) return o.warn(`[MediaOutlet] Could not find mesh for the video to be applied to: entity=${this.entity.id}`); + if (null != this.entity.placeholder_url) { + let i = this.entity.scaleX / this.entity.scaleY, + t = (new THREE.TextureLoader).load(this.entity.placeholder_url, (function(e) { + let t = e.image.width / e.image.height; + e.matrixAutoUpdate = !1, i < t ? e.matrix.setUvTransform(0, 0, i / t, 1, 0, .5, .5) : e.matrix.setUvTransform(0, 0, 1, t / i, 0, .5, .5) + })); + e.material = new THREE.MeshBasicMaterial({ + map: t, + side: THREE.DoubleSide + }), e.material.map.colorSpace = THREE.SRGBColorSpace + } else e.material = new THREE.MeshStandardMaterial({ + color: "#000000", + side: THREE.DoubleSide + }) + } + async onSetExternalURL() { + let e = prompt("Enter the URL of the media to play:", this.entity.media_url); + e && metapress.entities.update(this.entity.id, { + media_url: e + }) + } + } + var l = t(25108); + class h { + id = "core.media"; + name = "Media Support"; + description = "Provides the ability to play audio and video files within the world."; + version = "1.0.0"; + provides = ["media", "modifier:mediaoutlet"]; + requires = ["entities", "audio", "avatar"]; + activeChannels = []; + createModifier() { + return new s + } + async openChannel(e) { + let i = new URL(e, window.location.href); + e = i.toString(); + let t = this.activeChannels.find((i => i?.channelURL == e)); + if (!t) { + let i = metapress.plugins.callAll("media_createChannel", e), + a = -99999; + for (let e of i.flat()) { + let i = e.channelPriority || 0; + i > a && (t = e, a = i) + } + if (!t) throw new Error("Unknown channel type for url: " + e); + t.channelURL = e, this.activeChannels.push(t), t._openPromise = Promise.resolve().then((() => t.onChannelStart(e))).catch((i => { + throw l.error(`[MediaPlugin] Failed to open channel for url: ${e}`, i), this.activeChannels = this.activeChannels.filter((e => e != t)), i + })) + } + await t._openPromise, t._usageCount = (t._usageCount || 0) + 1; + var a = !1; + let n = new r; + return n.channel = t, n.close = async () => { + a || (a = !0, t._usageCount -= 1, this.shutdownChannelSoon(t)) + }, n + } + shutdownChannelSoon(e) { + e._shutdownDelay && clearTimeout(e._shutdownDelay), e._shutdownDelay = setTimeout((() => { + e._shutdownDelay = null, e._usageCount > 0 || (this.activeChannels = this.activeChannels.filter((i => i != e)), Promise.resolve().then((() => e.onChannelStop()))) + }), 5e3) + } + $media_createChannel(e) { + let i = new URL(e, window.location.href); + if ("http:" == i.protocol || "https:" == i.protocol) return new d(e) + } + $input_onUserInput() { + for (let e of this.activeChannels) e.onUserInput?.() + } + async $prepareEntityForFile(e) { + return [".mp4", ".mov", ".webm", ".ogv"].find((i => e.name.toLowerCase().endsWith(i))) ? { + name: "Video: " + e.name, + type: "plane", + scaleX: 16 / 9, + "modifier:mediaoutlet": !0, + media_url: "$URL", + media_audio: !0, + media_audio_spatial: !0, + media_video: !0 + } : [".wav", ".mp3", ".ogg"].find((i => e.name.toLowerCase().endsWith(i))) ? { + name: "Audio: " + e.name, + type: "cube", + scaleX: .1, + scaleY: .1, + scaleZ: .1, + "modifier:mediaoutlet": !0, + media_url: "$URL", + media_audio: !0, + media_audio_spatial: !0 + } : void 0 + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "Media Plugin", + tags: "add video, add audio, add video to wall, add sound, add ambient sound, add ambient audio, add music, add ambient music, drag video, sound object, video panel, background music", + content: "\n The Media plugin allows you to create in-world audio and video. Audio and video files can be added to the world by dragging them from your file browser into the world, or by using the Editor in the sidebar. \n Supported formats are: .mp4 .mov .webm .ogv .wav .mp3 .ogg\n " + }] + } + class r { + channel = null; + close() {} + } + }, + 39486: (e, i, t) => { + e.exports = t.p + "mp-core/media.1b58e4b27b7114150e7c.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js b/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js new file mode 100644 index 0000000..941df4b --- /dev/null +++ b/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js @@ -0,0 +1,5771 @@ +/*! For license information please see 1884.2b7cbd8ff99c67d7c3f9.bundle.js.LICENSE.txt */ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1884], { + 94470: e => { + "use strict"; + var t = Object.prototype.hasOwnProperty, + n = Object.prototype.toString, + r = Object.defineProperty, + o = Object.getOwnPropertyDescriptor, + i = function(e) { + return "function" == typeof Array.isArray ? Array.isArray(e) : "[object Array]" === n.call(e) + }, + l = function(e) { + if (!e || "[object Object]" !== n.call(e)) return !1; + var r, o = t.call(e, "constructor"), + i = e.constructor && e.constructor.prototype && t.call(e.constructor.prototype, "isPrototypeOf"); + if (e.constructor && !o && !i) return !1; + for (r in e); + return void 0 === r || t.call(e, r) + }, + s = function(e, t) { + r && "__proto__" === t.name ? r(e, t.name, { + enumerable: !0, + configurable: !0, + value: t.newValue, + writable: !0 + }) : e[t.name] = t.newValue + }, + a = function(e, n) { + if ("__proto__" === n) { + if (!t.call(e, n)) return; + if (o) return o(e, n).value + } + return e[n] + }; + e.exports = function e() { + var t, n, r, o, u, c, f = arguments[0], + p = 1, + d = arguments.length, + h = !1; + for ("boolean" == typeof f && (h = f, f = arguments[1] || {}, p = 2), (null == f || "object" != typeof f && "function" != typeof f) && (f = {}); p < d; ++p) + if (null != (t = arguments[p])) + for (n in t) r = a(f, n), f !== (o = a(t, n)) && (h && o && (l(o) || (u = i(o))) ? (u ? (u = !1, c = r && i(r) ? r : []) : c = r && l(r) ? r : {}, s(f, { + name: n, + newValue: e(h, c, o) + })) : void 0 !== o && s(f, { + name: n, + newValue: o + })); + return f + } + }, + 18139: e => { + var t = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, + n = /\n/g, + r = /^\s*/, + o = /^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/, + i = /^:\s*/, + l = /^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/, + s = /^[;\s]*/, + a = /^\s+|\s+$/g, + u = ""; + + function c(e) { + return e ? e.replace(a, u) : u + } + e.exports = function(e, a) { + if ("string" != typeof e) throw new TypeError("First argument must be a string"); + if (!e) return []; + a = a || {}; + var f = 1, + p = 1; + + function d(e) { + var t = e.match(n); + t && (f += t.length); + var r = e.lastIndexOf("\n"); + p = ~r ? e.length - r : p + e.length + } + + function h() { + var e = { + line: f, + column: p + }; + return function(t) { + return t.position = new m(e), v(), t + } + } + + function m(e) { + this.start = e, this.end = { + line: f, + column: p + }, this.source = a.source + } + m.prototype.content = e; + var g = []; + + function y(t) { + var n = new Error(a.source + ":" + f + ":" + p + ": " + t); + if (n.reason = t, n.filename = a.source, n.line = f, n.column = p, n.source = e, !a.silent) throw n; + g.push(n) + } + + function x(t) { + var n = t.exec(e); + if (n) { + var r = n[0]; + return d(r), e = e.slice(r.length), n + } + } + + function v() { + x(r) + } + + function k(e) { + var t; + for (e = e || []; t = b();) !1 !== t && e.push(t); + return e + } + + function b() { + var t = h(); + if ("/" == e.charAt(0) && "*" == e.charAt(1)) { + for (var n = 2; u != e.charAt(n) && ("*" != e.charAt(n) || "/" != e.charAt(n + 1));) ++n; + if (n += 2, u === e.charAt(n - 1)) return y("End of comment missing"); + var r = e.slice(2, n - 2); + return p += 2, d(r), e = e.slice(n), p += 2, t({ + type: "comment", + comment: r + }) + } + } + + function w() { + var e = h(), + n = x(o); + if (n) { + if (b(), !x(i)) return y("property missing ':'"); + var r = x(l), + a = e({ + type: "declaration", + property: c(n[0].replace(t, u)), + value: r ? c(r[0].replace(t, u)) : u + }); + return x(s), a + } + } + return v(), + function() { + var e, t = []; + for (k(t); e = w();) !1 !== e && (t.push(e), k(t)); + return t + }() + } + }, + 75251: (e, t, n) => { + "use strict"; + var r = n(67294), + o = Symbol.for("react.element"), + i = Symbol.for("react.fragment"), + l = Object.prototype.hasOwnProperty, + s = r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, + a = { + key: !0, + ref: !0, + __self: !0, + __source: !0 + }; + + function u(e, t, n) { + var r, i = {}, + u = null, + c = null; + for (r in void 0 !== n && (u = "" + n), void 0 !== t.key && (u = "" + t.key), void 0 !== t.ref && (c = t.ref), t) l.call(t, r) && !a.hasOwnProperty(r) && (i[r] = t[r]); + if (e && e.defaultProps) + for (r in t = e.defaultProps) void 0 === i[r] && (i[r] = t[r]); + return { + $$typeof: o, + type: e, + key: u, + ref: c, + props: i, + _owner: s.current + } + } + t.Fragment = i, t.jsx = u, t.jsxs = u + }, + 85893: (e, t, n) => { + "use strict"; + e.exports = n(75251) + }, + 5174: function(e, t, n) { + "use strict"; + var r = this && this.__importDefault || function(e) { + return e && e.__esModule ? e : { + default: e + } + }; + Object.defineProperty(t, "__esModule", { + value: !0 + }); + var o = r(n(18139)); + t.default = function(e, t) { + var n = null; + if (!e || "string" != typeof e) return n; + var r = (0, o.default)(e), + i = "function" == typeof t; + return r.forEach((function(e) { + if ("declaration" === e.type) { + var r = e.property, + o = e.value; + i ? t(r, o, e) : o && ((n = n || {})[r] = o) + } + })), n + } + }, + 71884: (e, t, n) => { + "use strict"; + n.d(t, { + U: () => vr + }); + var r = {}; + n.r(r), n.d(r, { + boolean: () => g, + booleanish: () => y, + commaOrSpaceSeparated: () => w, + commaSeparated: () => b, + number: () => v, + overloadedBoolean: () => x, + spaceSeparated: () => k + }); + var o = {}; + n.r(o), n.d(o, { + attentionMarkers: () => Jt, + contentInitial: () => Wt, + disable: () => Zt, + document: () => qt, + flow: () => Kt, + flowInitial: () => Yt, + insideSpan: () => Xt, + string: () => Qt, + text: () => $t + }); + const i = /^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u, + l = /^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u, + s = {}; + + function a(e, t) { + return ((t || s).jsx ? l : i).test(e) + } + const u = /[ \t\n\f\r]/g; + + function c(e) { + return "" === e.replace(u, "") + } + class f { + constructor(e, t, n) { + this.property = e, this.normal = t, n && (this.space = n) + } + } + + function p(e, t) { + const n = {}, + r = {}; + let o = -1; + for (; ++o < e.length;) Object.assign(n, e[o].property), Object.assign(r, e[o].normal); + return new f(n, r, t) + } + + function d(e) { + return e.toLowerCase() + } + f.prototype.property = {}, f.prototype.normal = {}, f.prototype.space = null; + class h { + constructor(e, t) { + this.property = e, this.attribute = t + } + } + h.prototype.space = null, h.prototype.boolean = !1, h.prototype.booleanish = !1, h.prototype.overloadedBoolean = !1, h.prototype.number = !1, h.prototype.commaSeparated = !1, h.prototype.spaceSeparated = !1, h.prototype.commaOrSpaceSeparated = !1, h.prototype.mustUseProperty = !1, h.prototype.defined = !1; + let m = 0; + const g = S(), + y = S(), + x = S(), + v = S(), + k = S(), + b = S(), + w = S(); + + function S() { + return 2 ** ++m + } + const I = Object.keys(r); + class C extends h { + constructor(e, t, n, o) { + let i = -1; + if (super(e, t), E(this, "space", o), "number" == typeof n) + for (; ++i < I.length;) { + const e = I[i]; + E(this, I[i], (n & r[e]) === r[e]) + } + } + } + + function E(e, t, n) { + n && (e[t] = n) + } + C.prototype.defined = !0; + const P = {}.hasOwnProperty; + + function T(e) { + const t = {}, + n = {}; + let r; + for (r in e.properties) + if (P.call(e.properties, r)) { + const o = e.properties[r], + i = new C(r, e.transform(e.attributes || {}, r), o, e.space); + e.mustUseProperty && e.mustUseProperty.includes(r) && (i.mustUseProperty = !0), t[r] = i, n[d(r)] = r, n[d(i.attribute)] = r + } return new f(t, n, e.space) + } + const O = T({ + space: "xlink", + transform: (e, t) => "xlink:" + t.slice(5).toLowerCase(), + properties: { + xLinkActuate: null, + xLinkArcRole: null, + xLinkHref: null, + xLinkRole: null, + xLinkShow: null, + xLinkTitle: null, + xLinkType: null + } + }), + A = T({ + space: "xml", + transform: (e, t) => "xml:" + t.slice(3).toLowerCase(), + properties: { + xmlLang: null, + xmlBase: null, + xmlSpace: null + } + }); + + function L(e, t) { + return t in e ? e[t] : t + } + + function D(e, t) { + return L(e, t.toLowerCase()) + } + const z = T({ + space: "xmlns", + attributes: { + xmlnsxlink: "xmlns:xlink" + }, + transform: D, + properties: { + xmlns: null, + xmlnsXLink: null + } + }), + N = T({ + transform: (e, t) => "role" === t ? t : "aria-" + t.slice(4).toLowerCase(), + properties: { + ariaActiveDescendant: null, + ariaAtomic: y, + ariaAutoComplete: null, + ariaBusy: y, + ariaChecked: y, + ariaColCount: v, + ariaColIndex: v, + ariaColSpan: v, + ariaControls: k, + ariaCurrent: null, + ariaDescribedBy: k, + ariaDetails: null, + ariaDisabled: y, + ariaDropEffect: k, + ariaErrorMessage: null, + ariaExpanded: y, + ariaFlowTo: k, + ariaGrabbed: y, + ariaHasPopup: null, + ariaHidden: y, + ariaInvalid: null, + ariaKeyShortcuts: null, + ariaLabel: null, + ariaLabelledBy: k, + ariaLevel: v, + ariaLive: null, + ariaModal: y, + ariaMultiLine: y, + ariaMultiSelectable: y, + ariaOrientation: null, + ariaOwns: k, + ariaPlaceholder: null, + ariaPosInSet: v, + ariaPressed: y, + ariaReadOnly: y, + ariaRelevant: null, + ariaRequired: y, + ariaRoleDescription: k, + ariaRowCount: v, + ariaRowIndex: v, + ariaRowSpan: v, + ariaSelected: y, + ariaSetSize: v, + ariaSort: null, + ariaValueMax: v, + ariaValueMin: v, + ariaValueNow: v, + ariaValueText: null, + role: null + } + }), + M = T({ + space: "html", + attributes: { + acceptcharset: "accept-charset", + classname: "class", + htmlfor: "for", + httpequiv: "http-equiv" + }, + transform: D, + mustUseProperty: ["checked", "multiple", "muted", "selected"], + properties: { + abbr: null, + accept: b, + acceptCharset: k, + accessKey: k, + action: null, + allow: null, + allowFullScreen: g, + allowPaymentRequest: g, + allowUserMedia: g, + alt: null, + as: null, + async: g, + autoCapitalize: null, + autoComplete: k, + autoFocus: g, + autoPlay: g, + blocking: k, + capture: null, + charSet: null, + checked: g, + cite: null, + className: k, + cols: v, + colSpan: null, + content: null, + contentEditable: y, + controls: g, + controlsList: k, + coords: v | b, + crossOrigin: null, + data: null, + dateTime: null, + decoding: null, + default: g, + defer: g, + dir: null, + dirName: null, + disabled: g, + download: x, + draggable: y, + encType: null, + enterKeyHint: null, + fetchPriority: null, + form: null, + formAction: null, + formEncType: null, + formMethod: null, + formNoValidate: g, + formTarget: null, + headers: k, + height: v, + hidden: g, + high: v, + href: null, + hrefLang: null, + htmlFor: k, + httpEquiv: k, + id: null, + imageSizes: null, + imageSrcSet: null, + inert: g, + inputMode: null, + integrity: null, + is: null, + isMap: g, + itemId: null, + itemProp: k, + itemRef: k, + itemScope: g, + itemType: k, + kind: null, + label: null, + lang: null, + language: null, + list: null, + loading: null, + loop: g, + low: v, + manifest: null, + max: null, + maxLength: v, + media: null, + method: null, + min: null, + minLength: v, + multiple: g, + muted: g, + name: null, + nonce: null, + noModule: g, + noValidate: g, + onAbort: null, + onAfterPrint: null, + onAuxClick: null, + onBeforeMatch: null, + onBeforePrint: null, + onBeforeToggle: null, + onBeforeUnload: null, + onBlur: null, + onCancel: null, + onCanPlay: null, + onCanPlayThrough: null, + onChange: null, + onClick: null, + onClose: null, + onContextLost: null, + onContextMenu: null, + onContextRestored: null, + onCopy: null, + onCueChange: null, + onCut: null, + onDblClick: null, + onDrag: null, + onDragEnd: null, + onDragEnter: null, + onDragExit: null, + onDragLeave: null, + onDragOver: null, + onDragStart: null, + onDrop: null, + onDurationChange: null, + onEmptied: null, + onEnded: null, + onError: null, + onFocus: null, + onFormData: null, + onHashChange: null, + onInput: null, + onInvalid: null, + onKeyDown: null, + onKeyPress: null, + onKeyUp: null, + onLanguageChange: null, + onLoad: null, + onLoadedData: null, + onLoadedMetadata: null, + onLoadEnd: null, + onLoadStart: null, + onMessage: null, + onMessageError: null, + onMouseDown: null, + onMouseEnter: null, + onMouseLeave: null, + onMouseMove: null, + onMouseOut: null, + onMouseOver: null, + onMouseUp: null, + onOffline: null, + onOnline: null, + onPageHide: null, + onPageShow: null, + onPaste: null, + onPause: null, + onPlay: null, + onPlaying: null, + onPopState: null, + onProgress: null, + onRateChange: null, + onRejectionHandled: null, + onReset: null, + onResize: null, + onScroll: null, + onScrollEnd: null, + onSecurityPolicyViolation: null, + onSeeked: null, + onSeeking: null, + onSelect: null, + onSlotChange: null, + onStalled: null, + onStorage: null, + onSubmit: null, + onSuspend: null, + onTimeUpdate: null, + onToggle: null, + onUnhandledRejection: null, + onUnload: null, + onVolumeChange: null, + onWaiting: null, + onWheel: null, + open: g, + optimum: v, + pattern: null, + ping: k, + placeholder: null, + playsInline: g, + popover: null, + popoverTarget: null, + popoverTargetAction: null, + poster: null, + preload: null, + readOnly: g, + referrerPolicy: null, + rel: k, + required: g, + reversed: g, + rows: v, + rowSpan: v, + sandbox: k, + scope: null, + scoped: g, + seamless: g, + selected: g, + shadowRootClonable: g, + shadowRootDelegatesFocus: g, + shadowRootMode: null, + shape: null, + size: v, + sizes: null, + slot: null, + span: v, + spellCheck: y, + src: null, + srcDoc: null, + srcLang: null, + srcSet: null, + start: v, + step: null, + style: null, + tabIndex: v, + target: null, + title: null, + translate: null, + type: null, + typeMustMatch: g, + useMap: null, + value: y, + width: v, + wrap: null, + writingSuggestions: null, + align: null, + aLink: null, + archive: k, + axis: null, + background: null, + bgColor: null, + border: v, + borderColor: null, + bottomMargin: v, + cellPadding: null, + cellSpacing: null, + char: null, + charOff: null, + classId: null, + clear: null, + code: null, + codeBase: null, + codeType: null, + color: null, + compact: g, + declare: g, + event: null, + face: null, + frame: null, + frameBorder: null, + hSpace: v, + leftMargin: v, + link: null, + longDesc: null, + lowSrc: null, + marginHeight: v, + marginWidth: v, + noResize: g, + noHref: g, + noShade: g, + noWrap: g, + object: null, + profile: null, + prompt: null, + rev: null, + rightMargin: v, + rules: null, + scheme: null, + scrolling: y, + standby: null, + summary: null, + text: null, + topMargin: v, + valueType: null, + version: null, + vAlign: null, + vLink: null, + vSpace: v, + allowTransparency: null, + autoCorrect: null, + autoSave: null, + disablePictureInPicture: g, + disableRemotePlayback: g, + prefix: null, + property: null, + results: v, + security: null, + unselectable: null + } + }), + F = T({ + space: "svg", + attributes: { + accentHeight: "accent-height", + alignmentBaseline: "alignment-baseline", + arabicForm: "arabic-form", + baselineShift: "baseline-shift", + capHeight: "cap-height", + className: "class", + clipPath: "clip-path", + clipRule: "clip-rule", + colorInterpolation: "color-interpolation", + colorInterpolationFilters: "color-interpolation-filters", + colorProfile: "color-profile", + colorRendering: "color-rendering", + crossOrigin: "crossorigin", + dataType: "datatype", + dominantBaseline: "dominant-baseline", + enableBackground: "enable-background", + fillOpacity: "fill-opacity", + fillRule: "fill-rule", + floodColor: "flood-color", + floodOpacity: "flood-opacity", + fontFamily: "font-family", + fontSize: "font-size", + fontSizeAdjust: "font-size-adjust", + fontStretch: "font-stretch", + fontStyle: "font-style", + fontVariant: "font-variant", + fontWeight: "font-weight", + glyphName: "glyph-name", + glyphOrientationHorizontal: "glyph-orientation-horizontal", + glyphOrientationVertical: "glyph-orientation-vertical", + hrefLang: "hreflang", + horizAdvX: "horiz-adv-x", + horizOriginX: "horiz-origin-x", + horizOriginY: "horiz-origin-y", + imageRendering: "image-rendering", + letterSpacing: "letter-spacing", + lightingColor: "lighting-color", + markerEnd: "marker-end", + markerMid: "marker-mid", + markerStart: "marker-start", + navDown: "nav-down", + navDownLeft: "nav-down-left", + navDownRight: "nav-down-right", + navLeft: "nav-left", + navNext: "nav-next", + navPrev: "nav-prev", + navRight: "nav-right", + navUp: "nav-up", + navUpLeft: "nav-up-left", + navUpRight: "nav-up-right", + onAbort: "onabort", + onActivate: "onactivate", + onAfterPrint: "onafterprint", + onBeforePrint: "onbeforeprint", + onBegin: "onbegin", + onCancel: "oncancel", + onCanPlay: "oncanplay", + onCanPlayThrough: "oncanplaythrough", + onChange: "onchange", + onClick: "onclick", + onClose: "onclose", + onCopy: "oncopy", + onCueChange: "oncuechange", + onCut: "oncut", + onDblClick: "ondblclick", + onDrag: "ondrag", + onDragEnd: "ondragend", + onDragEnter: "ondragenter", + onDragExit: "ondragexit", + onDragLeave: "ondragleave", + onDragOver: "ondragover", + onDragStart: "ondragstart", + onDrop: "ondrop", + onDurationChange: "ondurationchange", + onEmptied: "onemptied", + onEnd: "onend", + onEnded: "onended", + onError: "onerror", + onFocus: "onfocus", + onFocusIn: "onfocusin", + onFocusOut: "onfocusout", + onHashChange: "onhashchange", + onInput: "oninput", + onInvalid: "oninvalid", + onKeyDown: "onkeydown", + onKeyPress: "onkeypress", + onKeyUp: "onkeyup", + onLoad: "onload", + onLoadedData: "onloadeddata", + onLoadedMetadata: "onloadedmetadata", + onLoadStart: "onloadstart", + onMessage: "onmessage", + onMouseDown: "onmousedown", + onMouseEnter: "onmouseenter", + onMouseLeave: "onmouseleave", + onMouseMove: "onmousemove", + onMouseOut: "onmouseout", + onMouseOver: "onmouseover", + onMouseUp: "onmouseup", + onMouseWheel: "onmousewheel", + onOffline: "onoffline", + onOnline: "ononline", + onPageHide: "onpagehide", + onPageShow: "onpageshow", + onPaste: "onpaste", + onPause: "onpause", + onPlay: "onplay", + onPlaying: "onplaying", + onPopState: "onpopstate", + onProgress: "onprogress", + onRateChange: "onratechange", + onRepeat: "onrepeat", + onReset: "onreset", + onResize: "onresize", + onScroll: "onscroll", + onSeeked: "onseeked", + onSeeking: "onseeking", + onSelect: "onselect", + onShow: "onshow", + onStalled: "onstalled", + onStorage: "onstorage", + onSubmit: "onsubmit", + onSuspend: "onsuspend", + onTimeUpdate: "ontimeupdate", + onToggle: "ontoggle", + onUnload: "onunload", + onVolumeChange: "onvolumechange", + onWaiting: "onwaiting", + onZoom: "onzoom", + overlinePosition: "overline-position", + overlineThickness: "overline-thickness", + paintOrder: "paint-order", + panose1: "panose-1", + pointerEvents: "pointer-events", + referrerPolicy: "referrerpolicy", + renderingIntent: "rendering-intent", + shapeRendering: "shape-rendering", + stopColor: "stop-color", + stopOpacity: "stop-opacity", + strikethroughPosition: "strikethrough-position", + strikethroughThickness: "strikethrough-thickness", + strokeDashArray: "stroke-dasharray", + strokeDashOffset: "stroke-dashoffset", + strokeLineCap: "stroke-linecap", + strokeLineJoin: "stroke-linejoin", + strokeMiterLimit: "stroke-miterlimit", + strokeOpacity: "stroke-opacity", + strokeWidth: "stroke-width", + tabIndex: "tabindex", + textAnchor: "text-anchor", + textDecoration: "text-decoration", + textRendering: "text-rendering", + transformOrigin: "transform-origin", + typeOf: "typeof", + underlinePosition: "underline-position", + underlineThickness: "underline-thickness", + unicodeBidi: "unicode-bidi", + unicodeRange: "unicode-range", + unitsPerEm: "units-per-em", + vAlphabetic: "v-alphabetic", + vHanging: "v-hanging", + vIdeographic: "v-ideographic", + vMathematical: "v-mathematical", + vectorEffect: "vector-effect", + vertAdvY: "vert-adv-y", + vertOriginX: "vert-origin-x", + vertOriginY: "vert-origin-y", + wordSpacing: "word-spacing", + writingMode: "writing-mode", + xHeight: "x-height", + playbackOrder: "playbackorder", + timelineBegin: "timelinebegin" + }, + transform: L, + properties: { + about: w, + accentHeight: v, + accumulate: null, + additive: null, + alignmentBaseline: null, + alphabetic: v, + amplitude: v, + arabicForm: null, + ascent: v, + attributeName: null, + attributeType: null, + azimuth: v, + bandwidth: null, + baselineShift: null, + baseFrequency: null, + baseProfile: null, + bbox: null, + begin: null, + bias: v, + by: null, + calcMode: null, + capHeight: v, + className: k, + clip: null, + clipPath: null, + clipPathUnits: null, + clipRule: null, + color: null, + colorInterpolation: null, + colorInterpolationFilters: null, + colorProfile: null, + colorRendering: null, + content: null, + contentScriptType: null, + contentStyleType: null, + crossOrigin: null, + cursor: null, + cx: null, + cy: null, + d: null, + dataType: null, + defaultAction: null, + descent: v, + diffuseConstant: v, + direction: null, + display: null, + dur: null, + divisor: v, + dominantBaseline: null, + download: g, + dx: null, + dy: null, + edgeMode: null, + editable: null, + elevation: v, + enableBackground: null, + end: null, + event: null, + exponent: v, + externalResourcesRequired: null, + fill: null, + fillOpacity: v, + fillRule: null, + filter: null, + filterRes: null, + filterUnits: null, + floodColor: null, + floodOpacity: null, + focusable: null, + focusHighlight: null, + fontFamily: null, + fontSize: null, + fontSizeAdjust: null, + fontStretch: null, + fontStyle: null, + fontVariant: null, + fontWeight: null, + format: null, + fr: null, + from: null, + fx: null, + fy: null, + g1: b, + g2: b, + glyphName: b, + glyphOrientationHorizontal: null, + glyphOrientationVertical: null, + glyphRef: null, + gradientTransform: null, + gradientUnits: null, + handler: null, + hanging: v, + hatchContentUnits: null, + hatchUnits: null, + height: null, + href: null, + hrefLang: null, + horizAdvX: v, + horizOriginX: v, + horizOriginY: v, + id: null, + ideographic: v, + imageRendering: null, + initialVisibility: null, + in: null, + in2: null, + intercept: v, + k: v, + k1: v, + k2: v, + k3: v, + k4: v, + kernelMatrix: w, + kernelUnitLength: null, + keyPoints: null, + keySplines: null, + keyTimes: null, + kerning: null, + lang: null, + lengthAdjust: null, + letterSpacing: null, + lightingColor: null, + limitingConeAngle: v, + local: null, + markerEnd: null, + markerMid: null, + markerStart: null, + markerHeight: null, + markerUnits: null, + markerWidth: null, + mask: null, + maskContentUnits: null, + maskUnits: null, + mathematical: null, + max: null, + media: null, + mediaCharacterEncoding: null, + mediaContentEncodings: null, + mediaSize: v, + mediaTime: null, + method: null, + min: null, + mode: null, + name: null, + navDown: null, + navDownLeft: null, + navDownRight: null, + navLeft: null, + navNext: null, + navPrev: null, + navRight: null, + navUp: null, + navUpLeft: null, + navUpRight: null, + numOctaves: null, + observer: null, + offset: null, + onAbort: null, + onActivate: null, + onAfterPrint: null, + onBeforePrint: null, + onBegin: null, + onCancel: null, + onCanPlay: null, + onCanPlayThrough: null, + onChange: null, + onClick: null, + onClose: null, + onCopy: null, + onCueChange: null, + onCut: null, + onDblClick: null, + onDrag: null, + onDragEnd: null, + onDragEnter: null, + onDragExit: null, + onDragLeave: null, + onDragOver: null, + onDragStart: null, + onDrop: null, + onDurationChange: null, + onEmptied: null, + onEnd: null, + onEnded: null, + onError: null, + onFocus: null, + onFocusIn: null, + onFocusOut: null, + onHashChange: null, + onInput: null, + onInvalid: null, + onKeyDown: null, + onKeyPress: null, + onKeyUp: null, + onLoad: null, + onLoadedData: null, + onLoadedMetadata: null, + onLoadStart: null, + onMessage: null, + onMouseDown: null, + onMouseEnter: null, + onMouseLeave: null, + onMouseMove: null, + onMouseOut: null, + onMouseOver: null, + onMouseUp: null, + onMouseWheel: null, + onOffline: null, + onOnline: null, + onPageHide: null, + onPageShow: null, + onPaste: null, + onPause: null, + onPlay: null, + onPlaying: null, + onPopState: null, + onProgress: null, + onRateChange: null, + onRepeat: null, + onReset: null, + onResize: null, + onScroll: null, + onSeeked: null, + onSeeking: null, + onSelect: null, + onShow: null, + onStalled: null, + onStorage: null, + onSubmit: null, + onSuspend: null, + onTimeUpdate: null, + onToggle: null, + onUnload: null, + onVolumeChange: null, + onWaiting: null, + onZoom: null, + opacity: null, + operator: null, + order: null, + orient: null, + orientation: null, + origin: null, + overflow: null, + overlay: null, + overlinePosition: v, + overlineThickness: v, + paintOrder: null, + panose1: null, + path: null, + pathLength: v, + patternContentUnits: null, + patternTransform: null, + patternUnits: null, + phase: null, + ping: k, + pitch: null, + playbackOrder: null, + pointerEvents: null, + points: null, + pointsAtX: v, + pointsAtY: v, + pointsAtZ: v, + preserveAlpha: null, + preserveAspectRatio: null, + primitiveUnits: null, + propagate: null, + property: w, + r: null, + radius: null, + referrerPolicy: null, + refX: null, + refY: null, + rel: w, + rev: w, + renderingIntent: null, + repeatCount: null, + repeatDur: null, + requiredExtensions: w, + requiredFeatures: w, + requiredFonts: w, + requiredFormats: w, + resource: null, + restart: null, + result: null, + rotate: null, + rx: null, + ry: null, + scale: null, + seed: null, + shapeRendering: null, + side: null, + slope: null, + snapshotTime: null, + specularConstant: v, + specularExponent: v, + spreadMethod: null, + spacing: null, + startOffset: null, + stdDeviation: null, + stemh: null, + stemv: null, + stitchTiles: null, + stopColor: null, + stopOpacity: null, + strikethroughPosition: v, + strikethroughThickness: v, + string: null, + stroke: null, + strokeDashArray: w, + strokeDashOffset: null, + strokeLineCap: null, + strokeLineJoin: null, + strokeMiterLimit: v, + strokeOpacity: v, + strokeWidth: null, + style: null, + surfaceScale: v, + syncBehavior: null, + syncBehaviorDefault: null, + syncMaster: null, + syncTolerance: null, + syncToleranceDefault: null, + systemLanguage: w, + tabIndex: v, + tableValues: null, + target: null, + targetX: v, + targetY: v, + textAnchor: null, + textDecoration: null, + textRendering: null, + textLength: null, + timelineBegin: null, + title: null, + transformBehavior: null, + type: null, + typeOf: w, + to: null, + transform: null, + transformOrigin: null, + u1: null, + u2: null, + underlinePosition: v, + underlineThickness: v, + unicode: null, + unicodeBidi: null, + unicodeRange: null, + unitsPerEm: v, + values: null, + vAlphabetic: v, + vMathematical: v, + vectorEffect: null, + vHanging: v, + vIdeographic: v, + version: null, + vertAdvY: v, + vertOriginX: v, + vertOriginY: v, + viewBox: null, + viewTarget: null, + visibility: null, + width: null, + widths: null, + wordSpacing: null, + writingMode: null, + x: null, + x1: null, + x2: null, + xChannelSelector: null, + xHeight: v, + y: null, + y1: null, + y2: null, + yChannelSelector: null, + z: null, + zoomAndPan: null + } + }), + _ = p([A, O, z, N, M], "html"), + R = p([A, O, z, N, F], "svg"), + j = /^data[-\w.:]+$/i, + B = /-[a-z]/g, + H = /[A-Z]/g; + + function U(e) { + return "-" + e.toLowerCase() + } + + function V(e) { + return e.charAt(1).toUpperCase() + } + const q = { + classId: "classID", + dataType: "datatype", + itemId: "itemID", + strokeDashArray: "strokeDasharray", + strokeDashOffset: "strokeDashoffset", + strokeLineCap: "strokeLinecap", + strokeLineJoin: "strokeLinejoin", + strokeMiterLimit: "strokeMiterlimit", + typeOf: "typeof", + xLinkActuate: "xlinkActuate", + xLinkArcRole: "xlinkArcrole", + xLinkHref: "xlinkHref", + xLinkRole: "xlinkRole", + xLinkShow: "xlinkShow", + xLinkTitle: "xlinkTitle", + xLinkType: "xlinkType", + xmlnsXLink: "xmlnsXlink" + }; + var W = n(5174); + const Y = W.default || W, + K = $("end"), + Q = $("start"); + + function $(e) { + return function(t) { + const n = t && t.position && t.position[e] || {}; + if ("number" == typeof n.line && n.line > 0 && "number" == typeof n.column && n.column > 0) return { + line: n.line, + column: n.column, + offset: "number" == typeof n.offset && n.offset > -1 ? n.offset : void 0 + } + } + } + + function X(e) { + return e && "object" == typeof e ? "position" in e || "type" in e ? Z(e.position) : "start" in e || "end" in e ? Z(e) : "line" in e || "column" in e ? J(e) : "" : "" + } + + function J(e) { + return G(e && e.line) + ":" + G(e && e.column) + } + + function Z(e) { + return J(e && e.start) + "-" + J(e && e.end) + } + + function G(e) { + return e && "number" == typeof e ? e : 1 + } + class ee extends Error { + constructor(e, t, n) { + super(), "string" == typeof t && (n = t, t = void 0); + let r = "", + o = {}, + i = !1; + if (t && (o = "line" in t && "column" in t || "start" in t && "end" in t ? { + place: t + } : "type" in t ? { + ancestors: [t], + place: t.position + } : { + ...t + }), "string" == typeof e ? r = e : !o.cause && e && (i = !0, r = e.message, o.cause = e), !o.ruleId && !o.source && "string" == typeof n) { + const e = n.indexOf(":"); - 1 === e ? o.ruleId = n : (o.source = n.slice(0, e), o.ruleId = n.slice(e + 1)) + } + if (!o.place && o.ancestors && o.ancestors) { + const e = o.ancestors[o.ancestors.length - 1]; + e && (o.place = e.position) + } + const l = o.place && "start" in o.place ? o.place.start : o.place; + this.ancestors = o.ancestors || void 0, this.cause = o.cause || void 0, this.column = l ? l.column : void 0, this.fatal = void 0, this.file, this.message = r, this.line = l ? l.line : void 0, this.name = X(o.place) || "1:1", this.place = o.place || void 0, this.reason = this.message, this.ruleId = o.ruleId || void 0, this.source = o.source || void 0, this.stack = i && o.cause && "string" == typeof o.cause.stack ? o.cause.stack : "", this.actual, this.expected, this.note, this.url + } + } + ee.prototype.file = "", ee.prototype.name = "", ee.prototype.reason = "", ee.prototype.message = "", ee.prototype.stack = "", ee.prototype.column = void 0, ee.prototype.line = void 0, ee.prototype.ancestors = void 0, ee.prototype.cause = void 0, ee.prototype.fatal = void 0, ee.prototype.place = void 0, ee.prototype.ruleId = void 0, ee.prototype.source = void 0; + const te = {}.hasOwnProperty, + ne = new Map, + re = /[A-Z]/g, + oe = /-([a-z])/g, + ie = new Set(["table", "tbody", "thead", "tfoot", "tr"]), + le = new Set(["td", "th"]), + se = "https://github.com/syntax-tree/hast-util-to-jsx-runtime"; + + function ae(e, t, n) { + return "element" === t.type ? function(e, t, n) { + const r = e.schema; + let o = r; + "svg" === t.tagName.toLowerCase() && "html" === r.space && (o = R, e.schema = o), e.ancestors.push(t); + const i = de(e, t.tagName, !1), + l = function(e, t) { + const n = {}; + let r, o; + for (o in t.properties) + if ("children" !== o && te.call(t.properties, o)) { + const i = pe(e, o, t.properties[o]); + if (i) { + const [o, l] = i; + e.tableCellAlignToStyle && "align" === o && "string" == typeof l && le.has(t.tagName) ? r = l : n[o] = l + } + } return r && ((n.style || (n.style = {}))["css" === e.stylePropertyNameCase ? "text-align" : "textAlign"] = r), n + }(e, t); + let s = fe(e, t); + return ie.has(t.tagName) && (s = s.filter((function(e) { + return "string" != typeof e || !("object" == typeof(t = e) ? "text" === t.type && c(t.value) : c(t)); + var t + }))), ue(e, l, i, t), ce(l, s), e.ancestors.pop(), e.schema = r, e.create(t, i, l, n) + }(e, t, n) : "mdxFlowExpression" === t.type || "mdxTextExpression" === t.type ? function(e, t) { + if (t.data && t.data.estree && e.evaluater) { + const n = t.data.estree.body[0]; + return n.type, e.evaluater.evaluateExpression(n.expression) + } + he(e, t.position) + }(e, t) : "mdxJsxFlowElement" === t.type || "mdxJsxTextElement" === t.type ? function(e, t, n) { + const r = e.schema; + let o = r; + "svg" === t.name && "html" === r.space && (o = R, e.schema = o), e.ancestors.push(t); + const i = null === t.name ? e.Fragment : de(e, t.name, !0), + l = function(e, t) { + const n = {}; + for (const r of t.attributes) + if ("mdxJsxExpressionAttribute" === r.type) + if (r.data && r.data.estree && e.evaluater) { + const t = r.data.estree.body[0]; + t.type; + const o = t.expression; + o.type; + const i = o.properties[0]; + i.type, Object.assign(n, e.evaluater.evaluateExpression(i.argument)) + } else he(e, t.position); + else { + const o = r.name; + let i; + if (r.value && "object" == typeof r.value) + if (r.value.data && r.value.data.estree && e.evaluater) { + const t = r.value.data.estree.body[0]; + t.type, i = e.evaluater.evaluateExpression(t.expression) + } else he(e, t.position); + else i = null === r.value || r.value; + n[o] = i + } + return n + }(e, t), + s = fe(e, t); + return ue(e, l, i, t), ce(l, s), e.ancestors.pop(), e.schema = r, e.create(t, i, l, n) + }(e, t, n) : "mdxjsEsm" === t.type ? function(e, t) { + if (t.data && t.data.estree && e.evaluater) return e.evaluater.evaluateProgram(t.data.estree); + he(e, t.position) + }(e, t) : "root" === t.type ? function(e, t, n) { + const r = {}; + return ce(r, fe(e, t)), e.create(t, e.Fragment, r, n) + }(e, t, n) : "text" === t.type ? function(e, t) { + return t.value + }(0, t) : void 0 + } + + function ue(e, t, n, r) { + "string" != typeof n && n !== e.Fragment && e.passNode && (t.node = r) + } + + function ce(e, t) { + if (t.length > 0) { + const n = t.length > 1 ? t : t[0]; + n && (e.children = n) + } + } + + function fe(e, t) { + const n = []; + let r = -1; + const o = e.passKeys ? new Map : ne; + for (; ++r < t.children.length;) { + const i = t.children[r]; + let l; + if (e.passKeys) { + const e = "element" === i.type ? i.tagName : "mdxJsxFlowElement" === i.type || "mdxJsxTextElement" === i.type ? i.name : void 0; + if (e) { + const t = o.get(e) || 0; + l = e + "-" + t, o.set(e, t + 1) + } + } + const s = ae(e, i, l); + void 0 !== s && n.push(s) + } + return n + } + + function pe(e, t, n) { + const r = function(e, t) { + const n = d(t); + let r = t, + o = h; + if (n in e.normal) return e.property[e.normal[n]]; + if (n.length > 4 && "data" === n.slice(0, 4) && j.test(t)) { + if ("-" === t.charAt(4)) { + const e = t.slice(5).replace(B, V); + r = "data" + e.charAt(0).toUpperCase() + e.slice(1) + } else { + const e = t.slice(4); + if (!B.test(e)) { + let n = e.replace(H, U); + "-" !== n.charAt(0) && (n = "-" + n), t = "data" + n + } + } + o = C + } + return new o(r, t) + }(e.schema, t); + if (!(null == n || "number" == typeof n && Number.isNaN(n))) { + if (Array.isArray(n) && (n = r.commaSeparated ? function(e, t) { + const n = {}; + return ("" === e[e.length - 1] ? [...e, ""] : e).join((n.padRight ? " " : "") + "," + (!1 === n.padLeft ? "" : " ")).trim() + }(n) : n.join(" ").trim()), "style" === r.property) { + let t = "object" == typeof n ? n : function(e, t) { + const n = {}; + try { + Y(t, (function(e, t) { + let r = e; + "--" !== r.slice(0, 2) && ("-ms-" === r.slice(0, 4) && (r = "ms-" + r.slice(4)), r = r.replace(oe, ge)), n[r] = t + })) + } catch (t) { + if (!e.ignoreInvalidStyle) { + const n = t, + r = new ee("Cannot parse `style` attribute", { + ancestors: e.ancestors, + cause: n, + ruleId: "style", + source: "hast-util-to-jsx-runtime" + }); + throw r.file = e.filePath || void 0, r.url = se + "#cannot-parse-style-attribute", r + } + } + return n + }(e, String(n)); + return "css" === e.stylePropertyNameCase && (t = function(e) { + const t = {}; + let n; + for (n in e) te.call(e, n) && (t[me(n)] = e[n]); + return t + }(t)), ["style", t] + } + return ["react" === e.elementAttributeNameCase && r.space ? q[r.property] || r.property : r.attribute, n] + } + } + + function de(e, t, n) { + let r; + if (n) + if (t.includes(".")) { + const e = t.split("."); + let n, o = -1; + for (; ++o < e.length;) { + const t = a(e[o]) ? { + type: "Identifier", + name: e[o] + } : { + type: "Literal", + value: e[o] + }; + n = n ? { + type: "MemberExpression", + object: n, + property: t, + computed: Boolean(o && "Literal" === t.type), + optional: !1 + } : t + } + r = n + } else r = a(t) && !/^[a-z]/.test(t) ? { + type: "Identifier", + name: t + } : { + type: "Literal", + value: t + }; + else r = { + type: "Literal", + value: t + }; + if ("Literal" === r.type) { + const t = r.value; + return te.call(e.components, t) ? e.components[t] : t + } + if (e.evaluater) return e.evaluater.evaluateExpression(r); + he(e) + } + + function he(e, t) { + const n = new ee("Cannot handle MDX estrees without `createEvaluater`", { + ancestors: e.ancestors, + place: t, + ruleId: "mdx-estree", + source: "hast-util-to-jsx-runtime" + }); + throw n.file = e.filePath || void 0, n.url = se + "#cannot-handle-mdx-estrees-without-createevaluater", n + } + + function me(e) { + let t = e.replace(re, ye); + return "ms-" === t.slice(0, 3) && (t = "-" + t), t + } + + function ge(e, t) { + return t.toUpperCase() + } + + function ye(e) { + return "-" + e.toLowerCase() + } + const xe = { + action: ["form"], + cite: ["blockquote", "del", "ins", "q"], + data: ["object"], + formAction: ["button", "input"], + href: ["a", "area", "base", "link"], + icon: ["menuitem"], + itemId: null, + manifest: ["html"], + ping: ["a", "area"], + poster: ["video"], + src: ["audio", "embed", "iframe", "img", "input", "script", "source", "track", "video"] + }; + var ve = n(85893); + const ke = {}; + + function be(e, t, n) { + if (function(e) { + return Boolean(e && "object" == typeof e) + }(e)) { + if ("value" in e) return "html" !== e.type || n ? e.value : ""; + if (t && "alt" in e && e.alt) return e.alt; + if ("children" in e) return we(e.children, t, n) + } + return Array.isArray(e) ? we(e, t, n) : "" + } + + function we(e, t, n) { + const r = []; + let o = -1; + for (; ++o < e.length;) r[o] = be(e[o], t, n); + return r.join("") + } + + function Se(e, t, n, r) { + const o = e.length; + let i, l = 0; + if (t = t < 0 ? -t > o ? 0 : o + t : t > o ? o : t, n = n > 0 ? n : 0, r.length < 1e4) i = Array.from(r), i.unshift(t, n), e.splice(...i); + else + for (n && e.splice(t, n); l < r.length;) i = r.slice(l, l + 1e4), i.unshift(t, 0), e.splice(...i), l += 1e4, t += 1e4 + } + + function Ie(e, t) { + return e.length > 0 ? (Se(e, e.length, 0, t), e) : t + } + class Ce { + constructor(e) { + this.left = e ? [...e] : [], this.right = [] + } + get(e) { + if (e < 0 || e >= this.left.length + this.right.length) throw new RangeError("Cannot access index `" + e + "` in a splice buffer of size `" + (this.left.length + this.right.length) + "`"); + return e < this.left.length ? this.left[e] : this.right[this.right.length - e + this.left.length - 1] + } + get length() { + return this.left.length + this.right.length + } + shift() { + return this.setCursor(0), this.right.pop() + } + slice(e, t) { + const n = null == t ? Number.POSITIVE_INFINITY : t; + return n < this.left.length ? this.left.slice(e, n) : e > this.left.length ? this.right.slice(this.right.length - n + this.left.length, this.right.length - e + this.left.length).reverse() : this.left.slice(e).concat(this.right.slice(this.right.length - n + this.left.length).reverse()) + } + splice(e, t, n) { + const r = t || 0; + this.setCursor(Math.trunc(e)); + const o = this.right.splice(this.right.length - r, Number.POSITIVE_INFINITY); + return n && Ee(this.left, n), o.reverse() + } + pop() { + return this.setCursor(Number.POSITIVE_INFINITY), this.left.pop() + } + push(e) { + this.setCursor(Number.POSITIVE_INFINITY), this.left.push(e) + } + pushMany(e) { + this.setCursor(Number.POSITIVE_INFINITY), Ee(this.left, e) + } + unshift(e) { + this.setCursor(0), this.right.push(e) + } + unshiftMany(e) { + this.setCursor(0), Ee(this.right, e.reverse()) + } + setCursor(e) { + if (!(e === this.left.length || e > this.left.length && 0 === this.right.length || e < 0 && 0 === this.left.length)) + if (e < this.left.length) { + const t = this.left.splice(e, Number.POSITIVE_INFINITY); + Ee(this.right, t.reverse()) + } else { + const t = this.right.splice(this.left.length + this.right.length - e, Number.POSITIVE_INFINITY); + Ee(this.left, t.reverse()) + } + } + } + + function Ee(e, t) { + let n = 0; + if (t.length < 1e4) e.push(...t); + else + for (; n < t.length;) e.push(...t.slice(n, n + 1e4)), n += 1e4 + } + + function Pe(e) { + const t = {}; + let n, r, o, i, l, s, a, u = -1; + const c = new Ce(e); + for (; ++u < c.length;) { + for (; u in t;) u = t[u]; + if (n = c.get(u), u && "chunkFlow" === n[1].type && "listItemPrefix" === c.get(u - 1)[1].type && (s = n[1]._tokenizer.events, o = 0, o < s.length && "lineEndingBlank" === s[o][1].type && (o += 2), o < s.length && "content" === s[o][1].type)) + for (; ++o < s.length && "content" !== s[o][1].type;) "chunkText" === s[o][1].type && (s[o][1]._isInFirstContentOfListItem = !0, o++); + if ("enter" === n[0]) n[1].contentType && (Object.assign(t, Te(c, u)), u = t[u], a = !0); + else if (n[1]._container) { + for (o = u, r = void 0; o-- && (i = c.get(o), "lineEnding" === i[1].type || "lineEndingBlank" === i[1].type);) "enter" === i[0] && (r && (c.get(r)[1].type = "lineEndingBlank"), i[1].type = "lineEnding", r = o); + r && (n[1].end = Object.assign({}, c.get(r)[1].start), l = c.slice(r, u), l.unshift(n), c.splice(r, u - r + 1, l)) + } + } + return Se(e, 0, Number.POSITIVE_INFINITY, c.slice(0)), !a + } + + function Te(e, t) { + const n = e.get(t)[1], + r = e.get(t)[2]; + let o = t - 1; + const i = [], + l = n._tokenizer || r.parser[n.contentType](n.start), + s = l.events, + a = [], + u = {}; + let c, f, p = -1, + d = n, + h = 0, + m = 0; + const g = [m]; + for (; d;) { + for (; e.get(++o)[1] !== d;); + i.push(o), d._tokenizer || (c = r.sliceStream(d), d.next || c.push(null), f && l.defineSkip(d.start), d._isInFirstContentOfListItem && (l._gfmTasklistFirstContentOfListItem = !0), l.write(c), d._isInFirstContentOfListItem && (l._gfmTasklistFirstContentOfListItem = void 0)), f = d, d = d.next + } + for (d = n; ++p < s.length;) "exit" === s[p][0] && "enter" === s[p - 1][0] && s[p][1].type === s[p - 1][1].type && s[p][1].start.line !== s[p][1].end.line && (m = p + 1, g.push(m), d._tokenizer = void 0, d.previous = void 0, d = d.next); + for (l.events = [], d ? (d._tokenizer = void 0, d.previous = void 0) : g.pop(), p = g.length; p--;) { + const t = s.slice(g[p], g[p + 1]), + n = i.pop(); + a.push([n, n + t.length - 1]), e.splice(n, 2, t) + } + for (a.reverse(), p = -1; ++p < a.length;) u[h + a[p][0]] = h + a[p][1], h += a[p][1] - a[p][0] - 1; + return u + } + const Oe = {}.hasOwnProperty; + + function Ae(e, t) { + let n; + for (n in t) { + const r = (Oe.call(e, n) ? e[n] : void 0) || (e[n] = {}), + o = t[n]; + let i; + if (o) + for (i in o) { + Oe.call(r, i) || (r[i] = []); + const e = o[i]; + Le(r[i], Array.isArray(e) ? e : e ? [e] : []) + } + } + } + + function Le(e, t) { + let n = -1; + const r = []; + for (; ++n < t.length;)("after" === t[n].add ? e : r).push(t[n]); + Se(e, 0, 0, r) + } + const De = qe(/[A-Za-z]/), + ze = qe(/[\dA-Za-z]/), + Ne = qe(/[#-'*+\--9=?A-Z^-~]/); + + function Me(e) { + return null !== e && (e < 32 || 127 === e) + } + const Fe = qe(/\d/), + _e = qe(/[\dA-Fa-f]/), + Re = qe(/[!-/:-@[-`{-~]/); + + function je(e) { + return null !== e && e < -2 + } + + function Be(e) { + return null !== e && (e < 0 || 32 === e) + } + + function He(e) { + return -2 === e || -1 === e || 32 === e + } + const Ue = qe(/\p{P}|\p{S}/u), + Ve = qe(/\s/); + + function qe(e) { + return function(t) { + return null !== t && t > -1 && e.test(String.fromCharCode(t)) + } + } + + function We(e, t, n, r) { + const o = r ? r - 1 : Number.POSITIVE_INFINITY; + let i = 0; + return function(r) { + return He(r) ? (e.enter(n), l(r)) : t(r) + }; + + function l(r) { + return He(r) && i++ < o ? (e.consume(r), l) : (e.exit(n), t(r)) + } + } + const Ye = { + tokenize: function(e) { + const t = e.attempt(this.parser.constructs.contentInitial, (function(n) { + if (null !== n) return e.enter("lineEnding"), e.consume(n), e.exit("lineEnding"), We(e, t, "linePrefix"); + e.consume(n) + }), (function(t) { + return e.enter("paragraph"), r(t) + })); + let n; + return t; + + function r(t) { + const r = e.enter("chunkText", { + contentType: "text", + previous: n + }); + return n && (n.next = r), n = r, o(t) + } + + function o(t) { + return null === t ? (e.exit("chunkText"), e.exit("paragraph"), void e.consume(t)) : je(t) ? (e.consume(t), e.exit("chunkText"), r) : (e.consume(t), o) + } + } + }, + Ke = { + tokenize: function(e) { + const t = this, + n = []; + let r, o, i, l = 0; + return s; + + function s(r) { + if (l < n.length) { + const o = n[l]; + return t.containerState = o[1], e.attempt(o[0].continuation, a, u)(r) + } + return u(r) + } + + function a(e) { + if (l++, t.containerState._closeFlow) { + t.containerState._closeFlow = void 0, r && x(); + const n = t.events.length; + let o, i = n; + for (; i--;) + if ("exit" === t.events[i][0] && "chunkFlow" === t.events[i][1].type) { + o = t.events[i][1].end; + break + } y(l); + let s = n; + for (; s < t.events.length;) t.events[s][1].end = Object.assign({}, o), s++; + return Se(t.events, i + 1, 0, t.events.slice(n)), t.events.length = s, u(e) + } + return s(e) + } + + function u(o) { + if (l === n.length) { + if (!r) return p(o); + if (r.currentConstruct && r.currentConstruct.concrete) return h(o); + t.interrupt = Boolean(r.currentConstruct && !r._gfmTableDynamicInterruptHack) + } + return t.containerState = {}, e.check(Qe, c, f)(o) + } + + function c(e) { + return r && x(), y(l), p(e) + } + + function f(e) { + return t.parser.lazy[t.now().line] = l !== n.length, i = t.now().offset, h(e) + } + + function p(n) { + return t.containerState = {}, e.attempt(Qe, d, h)(n) + } + + function d(e) { + return l++, n.push([t.currentConstruct, t.containerState]), p(e) + } + + function h(n) { + return null === n ? (r && x(), y(0), void e.consume(n)) : (r = r || t.parser.flow(t.now()), e.enter("chunkFlow", { + contentType: "flow", + previous: o, + _tokenizer: r + }), m(n)) + } + + function m(n) { + return null === n ? (g(e.exit("chunkFlow"), !0), y(0), void e.consume(n)) : je(n) ? (e.consume(n), g(e.exit("chunkFlow")), l = 0, t.interrupt = void 0, s) : (e.consume(n), m) + } + + function g(e, n) { + const s = t.sliceStream(e); + if (n && s.push(null), e.previous = o, o && (o.next = e), o = e, r.defineSkip(e.start), r.write(s), t.parser.lazy[e.start.line]) { + let e = r.events.length; + for (; e--;) + if (r.events[e][1].start.offset < i && (!r.events[e][1].end || r.events[e][1].end.offset > i)) return; + const n = t.events.length; + let o, s, a = n; + for (; a--;) + if ("exit" === t.events[a][0] && "chunkFlow" === t.events[a][1].type) { + if (o) { + s = t.events[a][1].end; + break + } + o = !0 + } for (y(l), e = n; e < t.events.length;) t.events[e][1].end = Object.assign({}, s), e++; + Se(t.events, a + 1, 0, t.events.slice(n)), t.events.length = e + } + } + + function y(r) { + let o = n.length; + for (; o-- > r;) { + const r = n[o]; + t.containerState = r[1], r[0].exit.call(t, e) + } + n.length = r + } + + function x() { + r.write([null]), o = void 0, r = void 0, t.containerState._closeFlow = void 0 + } + } + }, + Qe = { + tokenize: function(e, t, n) { + return We(e, e.attempt(this.parser.constructs.document, t, n), "linePrefix", this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4) + } + }, + $e = { + tokenize: function(e, t, n) { + return function(t) { + return He(t) ? We(e, r, "linePrefix")(t) : r(t) + }; + + function r(e) { + return null === e || je(e) ? t(e) : n(e) + } + }, + partial: !0 + }, + Xe = { + tokenize: function(e, t) { + let n; + return function(t) { + return e.enter("content"), n = e.enter("chunkContent", { + contentType: "content" + }), r(t) + }; + + function r(t) { + return null === t ? o(t) : je(t) ? e.check(Je, i, o)(t) : (e.consume(t), r) + } + + function o(n) { + return e.exit("chunkContent"), e.exit("content"), t(n) + } + + function i(t) { + return e.consume(t), e.exit("chunkContent"), n.next = e.enter("chunkContent", { + contentType: "content", + previous: n + }), n = n.next, r + } + }, + resolve: function(e) { + return Pe(e), e + } + }, + Je = { + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return e.exit("chunkContent"), e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), We(e, o, "linePrefix") + }; + + function o(o) { + if (null === o || je(o)) return n(o); + const i = r.events[r.events.length - 1]; + return !r.parser.constructs.disable.null.includes("codeIndented") && i && "linePrefix" === i[1].type && i[2].sliceSerialize(i[1], !0).length >= 4 ? t(o) : e.interrupt(r.parser.constructs.flow, n, t)(o) + } + }, + partial: !0 + }, + Ze = { + tokenize: function(e) { + const t = this, + n = e.attempt($e, (function(r) { + if (null !== r) return e.enter("lineEndingBlank"), e.consume(r), e.exit("lineEndingBlank"), t.currentConstruct = void 0, n; + e.consume(r) + }), e.attempt(this.parser.constructs.flowInitial, r, We(e, e.attempt(this.parser.constructs.flow, r, e.attempt(Xe, r)), "linePrefix"))); + return n; + + function r(r) { + if (null !== r) return e.enter("lineEnding"), e.consume(r), e.exit("lineEnding"), t.currentConstruct = void 0, n; + e.consume(r) + } + } + }, + Ge = { + resolveAll: rt() + }, + et = nt("string"), + tt = nt("text"); + + function nt(e) { + return { + tokenize: function(t) { + const n = this, + r = this.parser.constructs[e], + o = t.attempt(r, i, l); + return i; + + function i(e) { + return a(e) ? o(e) : l(e) + } + + function l(e) { + if (null !== e) return t.enter("data"), t.consume(e), s; + t.consume(e) + } + + function s(e) { + return a(e) ? (t.exit("data"), o(e)) : (t.consume(e), s) + } + + function a(e) { + if (null === e) return !0; + const t = r[e]; + let o = -1; + if (t) + for (; ++o < t.length;) { + const e = t[o]; + if (!e.previous || e.previous.call(n, n.previous)) return !0 + } + return !1 + } + }, + resolveAll: rt("text" === e ? ot : void 0) + } + } + + function rt(e) { + return function(t, n) { + let r, o = -1; + for (; ++o <= t.length;) void 0 === r ? t[o] && "data" === t[o][1].type && (r = o, o++) : t[o] && "data" === t[o][1].type || (o !== r + 2 && (t[r][1].end = t[o - 1][1].end, t.splice(r + 2, o - r - 2), o = r + 2), r = void 0); + return e ? e(t, n) : t + } + } + + function ot(e, t) { + let n = 0; + for (; ++n <= e.length;) + if ((n === e.length || "lineEnding" === e[n][1].type) && "data" === e[n - 1][1].type) { + const r = e[n - 1][1], + o = t.sliceStream(r); + let i, l = o.length, + s = -1, + a = 0; + for (; l--;) { + const e = o[l]; + if ("string" == typeof e) { + for (s = e.length; 32 === e.charCodeAt(s - 1);) a++, s--; + if (s) break; + s = -1 + } else if (-2 === e) i = !0, a++; + else if (-1 !== e) { + l++; + break + } + } + if (a) { + const o = { + type: n === e.length || i || a < 2 ? "lineSuffix" : "hardBreakTrailing", + start: { + line: r.end.line, + column: r.end.column - a, + offset: r.end.offset - a, + _index: r.start._index + l, + _bufferIndex: l ? s : r.start._bufferIndex + s + }, + end: Object.assign({}, r.end) + }; + r.end = Object.assign({}, o.start), r.start.offset === r.end.offset ? Object.assign(r, o) : (e.splice(n, 0, ["enter", o, t], ["exit", o, t]), n += 2) + } + n++ + } return e + } + + function it(e, t, n) { + const r = []; + let o = -1; + for (; ++o < e.length;) { + const i = e[o].resolveAll; + i && !r.includes(i) && (t = i(t, n), r.push(i)) + } + return t + } + + function lt(e, t, n) { + let r = Object.assign(n ? Object.assign({}, n) : { + line: 1, + column: 1, + offset: 0 + }, { + _index: 0, + _bufferIndex: -1 + }); + const o = {}, + i = []; + let l = [], + s = [], + a = !0; + const u = { + consume: function(e) { + je(e) ? (r.line++, r.column = 1, r.offset += -3 === e ? 2 : 1, v()) : -1 !== e && (r.column++, r.offset++), r._bufferIndex < 0 ? r._index++ : (r._bufferIndex++, r._bufferIndex === l[r._index].length && (r._bufferIndex = -1, r._index++)), c.previous = e, a = !0 + }, + enter: function(e, t) { + const n = t || {}; + return n.type = e, n.start = h(), c.events.push(["enter", n, c]), s.push(n), n + }, + exit: function(e) { + const t = s.pop(); + return t.end = h(), c.events.push(["exit", t, c]), t + }, + attempt: y((function(e, t) { + x(e, t.from) + })), + check: y(g), + interrupt: y(g, { + interrupt: !0 + }) + }, + c = { + previous: null, + code: null, + containerState: {}, + events: [], + parser: e, + sliceStream: d, + sliceSerialize: function(e, t) { + return function(e, t) { + let n = -1; + const r = []; + let o; + for (; ++n < e.length;) { + const i = e[n]; + let l; + if ("string" == typeof i) l = i; + else switch (i) { + case -5: + l = "\r"; + break; + case -4: + l = "\n"; + break; + case -3: + l = "\r\n"; + break; + case -2: + l = t ? " " : "\t"; + break; + case -1: + if (!t && o) continue; + l = " "; + break; + default: + l = String.fromCharCode(i) + } + o = -2 === i, r.push(l) + } + return r.join("") + }(d(e), t) + }, + now: h, + defineSkip: function(e) { + o[e.line] = e.column, v() + }, + write: function(e) { + return l = Ie(l, e), + function() { + let e; + for (; r._index < l.length;) { + const t = l[r._index]; + if ("string" == typeof t) + for (e = r._index, r._bufferIndex < 0 && (r._bufferIndex = 0); r._index === e && r._bufferIndex < t.length;) m(t.charCodeAt(r._bufferIndex)); + else m(t) + } + }(), null !== l[l.length - 1] ? [] : (x(t, 0), c.events = it(i, c.events, c), c.events) + } + }; + let f, p = t.tokenize.call(c, u); + return t.resolveAll && i.push(t), c; + + function d(e) { + return function(e, t) { + const n = t.start._index, + r = t.start._bufferIndex, + o = t.end._index, + i = t.end._bufferIndex; + let l; + if (n === o) l = [e[n].slice(r, i)]; + else { + if (l = e.slice(n, o), r > -1) { + const e = l[0]; + "string" == typeof e ? l[0] = e.slice(r) : l.shift() + } + i > 0 && l.push(e[o].slice(0, i)) + } + return l + }(l, e) + } + + function h() { + const { + line: e, + column: t, + offset: n, + _index: o, + _bufferIndex: i + } = r; + return { + line: e, + column: t, + offset: n, + _index: o, + _bufferIndex: i + } + } + + function m(e) { + a = void 0, f = e, p = p(e) + } + + function g(e, t) { + t.restore() + } + + function y(e, t) { + return function(n, o, i) { + let l, f, p, d; + return Array.isArray(n) ? g(n) : "tokenize" in n ? g([n]) : (m = n, function(e) { + const t = null !== e && m[e], + n = null !== e && m.null; + return g([...Array.isArray(t) ? t : t ? [t] : [], ...Array.isArray(n) ? n : n ? [n] : []])(e) + }); + var m; + + function g(e) { + return l = e, f = 0, 0 === e.length ? i : y(e[f]) + } + + function y(e) { + return function(n) { + return d = function() { + const e = h(), + t = c.previous, + n = c.currentConstruct, + o = c.events.length, + i = Array.from(s); + return { + restore: function() { + r = e, c.previous = t, c.currentConstruct = n, c.events.length = o, s = i, v() + }, + from: o + } + }(), p = e, e.partial || (c.currentConstruct = e), e.name && c.parser.constructs.disable.null.includes(e.name) ? k() : e.tokenize.call(t ? Object.assign(Object.create(c), t) : c, u, x, k)(n) + } + } + + function x(t) { + return a = !0, e(p, d), o + } + + function k(e) { + return a = !0, d.restore(), ++f < l.length ? y(l[f]) : i + } + } + } + + function x(e, t) { + e.resolveAll && !i.includes(e) && i.push(e), e.resolve && Se(c.events, t, c.events.length - t, e.resolve(c.events.slice(t), c)), e.resolveTo && (c.events = e.resolveTo(c.events, c)) + } + + function v() { + r.line in o && r.column < 2 && (r.column = o[r.line], r.offset += o[r.line] - 1) + } + } + const st = { + name: "thematicBreak", + tokenize: function(e, t, n) { + let r, o = 0; + return function(t) { + return e.enter("thematicBreak"), + function(e) { + return r = e, i(e) + }(t) + }; + + function i(i) { + return i === r ? (e.enter("thematicBreakSequence"), l(i)) : o >= 3 && (null === i || je(i)) ? (e.exit("thematicBreak"), t(i)) : n(i) + } + + function l(t) { + return t === r ? (e.consume(t), o++, l) : (e.exit("thematicBreakSequence"), He(t) ? We(e, i, "whitespace")(t) : i(t)) + } + } + }, + at = { + name: "list", + tokenize: function(e, t, n) { + const r = this, + o = r.events[r.events.length - 1]; + let i = o && "linePrefix" === o[1].type ? o[2].sliceSerialize(o[1], !0).length : 0, + l = 0; + return function(t) { + const o = r.containerState.type || (42 === t || 43 === t || 45 === t ? "listUnordered" : "listOrdered"); + if ("listUnordered" === o ? !r.containerState.marker || t === r.containerState.marker : Fe(t)) { + if (r.containerState.type || (r.containerState.type = o, e.enter(o, { + _container: !0 + })), "listUnordered" === o) return e.enter("listItemPrefix"), 42 === t || 45 === t ? e.check(st, n, a)(t) : a(t); + if (!r.interrupt || 49 === t) return e.enter("listItemPrefix"), e.enter("listItemValue"), s(t) + } + return n(t) + }; + + function s(t) { + return Fe(t) && ++l < 10 ? (e.consume(t), s) : (!r.interrupt || l < 2) && (r.containerState.marker ? t === r.containerState.marker : 41 === t || 46 === t) ? (e.exit("listItemValue"), a(t)) : n(t) + } + + function a(t) { + return e.enter("listItemMarker"), e.consume(t), e.exit("listItemMarker"), r.containerState.marker = r.containerState.marker || t, e.check($e, r.interrupt ? n : u, e.attempt(ut, f, c)) + } + + function u(e) { + return r.containerState.initialBlankLine = !0, i++, f(e) + } + + function c(t) { + return He(t) ? (e.enter("listItemPrefixWhitespace"), e.consume(t), e.exit("listItemPrefixWhitespace"), f) : n(t) + } + + function f(n) { + return r.containerState.size = i + r.sliceSerialize(e.exit("listItemPrefix"), !0).length, t(n) + } + }, + continuation: { + tokenize: function(e, t, n) { + const r = this; + return r.containerState._closeFlow = void 0, e.check($e, (function(n) { + return r.containerState.furtherBlankLines = r.containerState.furtherBlankLines || r.containerState.initialBlankLine, We(e, t, "listItemIndent", r.containerState.size + 1)(n) + }), (function(n) { + return r.containerState.furtherBlankLines || !He(n) ? (r.containerState.furtherBlankLines = void 0, r.containerState.initialBlankLine = void 0, o(n)) : (r.containerState.furtherBlankLines = void 0, r.containerState.initialBlankLine = void 0, e.attempt(ct, t, o)(n)) + })); + + function o(o) { + return r.containerState._closeFlow = !0, r.interrupt = void 0, We(e, e.attempt(at, t, n), "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(o) + } + } + }, + exit: function(e) { + e.exit(this.containerState.type) + } + }, + ut = { + tokenize: function(e, t, n) { + const r = this; + return We(e, (function(e) { + const o = r.events[r.events.length - 1]; + return !He(e) && o && "listItemPrefixWhitespace" === o[1].type ? t(e) : n(e) + }), "listItemPrefixWhitespace", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 5) + }, + partial: !0 + }, + ct = { + tokenize: function(e, t, n) { + const r = this; + return We(e, (function(e) { + const o = r.events[r.events.length - 1]; + return o && "listItemIndent" === o[1].type && o[2].sliceSerialize(o[1], !0).length === r.containerState.size ? t(e) : n(e) + }), "listItemIndent", r.containerState.size + 1) + }, + partial: !0 + }, + ft = { + name: "blockQuote", + tokenize: function(e, t, n) { + const r = this; + return function(t) { + if (62 === t) { + const n = r.containerState; + return n.open || (e.enter("blockQuote", { + _container: !0 + }), n.open = !0), e.enter("blockQuotePrefix"), e.enter("blockQuoteMarker"), e.consume(t), e.exit("blockQuoteMarker"), o + } + return n(t) + }; + + function o(n) { + return He(n) ? (e.enter("blockQuotePrefixWhitespace"), e.consume(n), e.exit("blockQuotePrefixWhitespace"), e.exit("blockQuotePrefix"), t) : (e.exit("blockQuotePrefix"), t(n)) + } + }, + continuation: { + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return He(t) ? We(e, o, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(t) : o(t) + }; + + function o(r) { + return e.attempt(ft, t, n)(r) + } + } + }, + exit: function(e) { + e.exit("blockQuote") + } + }; + + function pt(e, t, n, r, o, i, l, s, a) { + const u = a || Number.POSITIVE_INFINITY; + let c = 0; + return function(t) { + return 60 === t ? (e.enter(r), e.enter(o), e.enter(i), e.consume(t), e.exit(i), f) : null === t || 32 === t || 41 === t || Me(t) ? n(t) : (e.enter(r), e.enter(l), e.enter(s), e.enter("chunkString", { + contentType: "string" + }), h(t)) + }; + + function f(n) { + return 62 === n ? (e.enter(i), e.consume(n), e.exit(i), e.exit(o), e.exit(r), t) : (e.enter(s), e.enter("chunkString", { + contentType: "string" + }), p(n)) + } + + function p(t) { + return 62 === t ? (e.exit("chunkString"), e.exit(s), f(t)) : null === t || 60 === t || je(t) ? n(t) : (e.consume(t), 92 === t ? d : p) + } + + function d(t) { + return 60 === t || 62 === t || 92 === t ? (e.consume(t), p) : p(t) + } + + function h(o) { + return c || null !== o && 41 !== o && !Be(o) ? c < u && 40 === o ? (e.consume(o), c++, h) : 41 === o ? (e.consume(o), c--, h) : null === o || 32 === o || 40 === o || Me(o) ? n(o) : (e.consume(o), 92 === o ? m : h) : (e.exit("chunkString"), e.exit(s), e.exit(l), e.exit(r), t(o)) + } + + function m(t) { + return 40 === t || 41 === t || 92 === t ? (e.consume(t), h) : h(t) + } + } + + function dt(e, t, n, r, o, i) { + const l = this; + let s, a = 0; + return function(t) { + return e.enter(r), e.enter(o), e.consume(t), e.exit(o), e.enter(i), u + }; + + function u(f) { + return a > 999 || null === f || 91 === f || 93 === f && !s || 94 === f && !a && "_hiddenFootnoteSupport" in l.parser.constructs ? n(f) : 93 === f ? (e.exit(i), e.enter(o), e.consume(f), e.exit(o), e.exit(r), t) : je(f) ? (e.enter("lineEnding"), e.consume(f), e.exit("lineEnding"), u) : (e.enter("chunkString", { + contentType: "string" + }), c(f)) + } + + function c(t) { + return null === t || 91 === t || 93 === t || je(t) || a++ > 999 ? (e.exit("chunkString"), u(t)) : (e.consume(t), s || (s = !He(t)), 92 === t ? f : c) + } + + function f(t) { + return 91 === t || 92 === t || 93 === t ? (e.consume(t), a++, c) : c(t) + } + } + + function ht(e, t, n, r, o, i) { + let l; + return function(t) { + return 34 === t || 39 === t || 40 === t ? (e.enter(r), e.enter(o), e.consume(t), e.exit(o), l = 40 === t ? 41 : t, s) : n(t) + }; + + function s(n) { + return n === l ? (e.enter(o), e.consume(n), e.exit(o), e.exit(r), t) : (e.enter(i), a(n)) + } + + function a(t) { + return t === l ? (e.exit(i), s(l)) : null === t ? n(t) : je(t) ? (e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), We(e, a, "linePrefix")) : (e.enter("chunkString", { + contentType: "string" + }), u(t)) + } + + function u(t) { + return t === l || null === t || je(t) ? (e.exit("chunkString"), a(t)) : (e.consume(t), 92 === t ? c : u) + } + + function c(t) { + return t === l || 92 === t ? (e.consume(t), u) : u(t) + } + } + + function mt(e, t) { + let n; + return function r(o) { + return je(o) ? (e.enter("lineEnding"), e.consume(o), e.exit("lineEnding"), n = !0, r) : He(o) ? We(e, r, n ? "linePrefix" : "lineSuffix")(o) : t(o) + } + } + + function gt(e) { + return e.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase() + } + const yt = { + name: "definition", + tokenize: function(e, t, n) { + const r = this; + let o; + return function(t) { + return e.enter("definition"), + function(t) { + return dt.call(r, e, i, n, "definitionLabel", "definitionLabelMarker", "definitionLabelString")(t) + }(t) + }; + + function i(t) { + return o = gt(r.sliceSerialize(r.events[r.events.length - 1][1]).slice(1, -1)), 58 === t ? (e.enter("definitionMarker"), e.consume(t), e.exit("definitionMarker"), l) : n(t) + } + + function l(t) { + return Be(t) ? mt(e, s)(t) : s(t) + } + + function s(t) { + return pt(e, a, n, "definitionDestination", "definitionDestinationLiteral", "definitionDestinationLiteralMarker", "definitionDestinationRaw", "definitionDestinationString")(t) + } + + function a(t) { + return e.attempt(xt, u, u)(t) + } + + function u(t) { + return He(t) ? We(e, c, "whitespace")(t) : c(t) + } + + function c(i) { + return null === i || je(i) ? (e.exit("definition"), r.parser.defined.push(o), t(i)) : n(i) + } + } + }, + xt = { + tokenize: function(e, t, n) { + return function(t) { + return Be(t) ? mt(e, r)(t) : n(t) + }; + + function r(t) { + return ht(e, o, n, "definitionTitle", "definitionTitleMarker", "definitionTitleString")(t) + } + + function o(t) { + return He(t) ? We(e, i, "whitespace")(t) : i(t) + } + + function i(e) { + return null === e || je(e) ? t(e) : n(e) + } + }, + partial: !0 + }, + vt = { + name: "codeIndented", + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return e.enter("codeIndented"), We(e, o, "linePrefix", 5)(t) + }; + + function o(e) { + const t = r.events[r.events.length - 1]; + return t && "linePrefix" === t[1].type && t[2].sliceSerialize(t[1], !0).length >= 4 ? i(e) : n(e) + } + + function i(t) { + return null === t ? s(t) : je(t) ? e.attempt(kt, i, s)(t) : (e.enter("codeFlowValue"), l(t)) + } + + function l(t) { + return null === t || je(t) ? (e.exit("codeFlowValue"), i(t)) : (e.consume(t), l) + } + + function s(n) { + return e.exit("codeIndented"), t(n) + } + } + }, + kt = { + tokenize: function(e, t, n) { + const r = this; + return o; + + function o(t) { + return r.parser.lazy[r.now().line] ? n(t) : je(t) ? (e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), o) : We(e, i, "linePrefix", 5)(t) + } + + function i(e) { + const i = r.events[r.events.length - 1]; + return i && "linePrefix" === i[1].type && i[2].sliceSerialize(i[1], !0).length >= 4 ? t(e) : je(e) ? o(e) : n(e) + } + }, + partial: !0 + }, + bt = { + name: "headingAtx", + tokenize: function(e, t, n) { + let r = 0; + return function(t) { + return e.enter("atxHeading"), + function(t) { + return e.enter("atxHeadingSequence"), o(t) + }(t) + }; + + function o(t) { + return 35 === t && r++ < 6 ? (e.consume(t), o) : null === t || Be(t) ? (e.exit("atxHeadingSequence"), i(t)) : n(t) + } + + function i(n) { + return 35 === n ? (e.enter("atxHeadingSequence"), l(n)) : null === n || je(n) ? (e.exit("atxHeading"), t(n)) : He(n) ? We(e, i, "whitespace")(n) : (e.enter("atxHeadingText"), s(n)) + } + + function l(t) { + return 35 === t ? (e.consume(t), l) : (e.exit("atxHeadingSequence"), i(t)) + } + + function s(t) { + return null === t || 35 === t || Be(t) ? (e.exit("atxHeadingText"), i(t)) : (e.consume(t), s) + } + }, + resolve: function(e, t) { + let n, r, o = e.length - 2, + i = 3; + return "whitespace" === e[i][1].type && (i += 2), o - 2 > i && "whitespace" === e[o][1].type && (o -= 2), "atxHeadingSequence" === e[o][1].type && (i === o - 1 || o - 4 > i && "whitespace" === e[o - 2][1].type) && (o -= i + 1 === o ? 2 : 4), o > i && (n = { + type: "atxHeadingText", + start: e[i][1].start, + end: e[o][1].end + }, r = { + type: "chunkText", + start: e[i][1].start, + end: e[o][1].end, + contentType: "text" + }, Se(e, i, o - i + 1, [ + ["enter", n, t], + ["enter", r, t], + ["exit", r, t], + ["exit", n, t] + ])), e + } + }, + wt = { + name: "setextUnderline", + tokenize: function(e, t, n) { + const r = this; + let o; + return function(t) { + let l, s = r.events.length; + for (; s--;) + if ("lineEnding" !== r.events[s][1].type && "linePrefix" !== r.events[s][1].type && "content" !== r.events[s][1].type) { + l = "paragraph" === r.events[s][1].type; + break + } return r.parser.lazy[r.now().line] || !r.interrupt && !l ? n(t) : (e.enter("setextHeadingLine"), o = t, function(t) { + return e.enter("setextHeadingLineSequence"), i(t) + }(t)) + }; + + function i(t) { + return t === o ? (e.consume(t), i) : (e.exit("setextHeadingLineSequence"), He(t) ? We(e, l, "lineSuffix")(t) : l(t)) + } + + function l(r) { + return null === r || je(r) ? (e.exit("setextHeadingLine"), t(r)) : n(r) + } + }, + resolveTo: function(e, t) { + let n, r, o, i = e.length; + for (; i--;) + if ("enter" === e[i][0]) { + if ("content" === e[i][1].type) { + n = i; + break + } + "paragraph" === e[i][1].type && (r = i) + } else "content" === e[i][1].type && e.splice(i, 1), o || "definition" !== e[i][1].type || (o = i); + const l = { + type: "setextHeading", + start: Object.assign({}, e[r][1].start), + end: Object.assign({}, e[e.length - 1][1].end) + }; + return e[r][1].type = "setextHeadingText", o ? (e.splice(r, 0, ["enter", l, t]), e.splice(o + 1, 0, ["exit", e[n][1], t]), e[n][1].end = Object.assign({}, e[o][1].end)) : e[n][1] = l, e.push(["exit", l, t]), e + } + }, + St = ["address", "article", "aside", "base", "basefont", "blockquote", "body", "caption", "center", "col", "colgroup", "dd", "details", "dialog", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol", "optgroup", "option", "p", "param", "search", "section", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul"], + It = ["pre", "script", "style", "textarea"], + Ct = { + name: "htmlFlow", + tokenize: function(e, t, n) { + const r = this; + let o, i, l, s, a; + return function(t) { + return function(t) { + return e.enter("htmlFlow"), e.enter("htmlFlowData"), e.consume(t), u + }(t) + }; + + function u(s) { + return 33 === s ? (e.consume(s), c) : 47 === s ? (e.consume(s), i = !0, d) : 63 === s ? (e.consume(s), o = 3, r.interrupt ? t : N) : De(s) ? (e.consume(s), l = String.fromCharCode(s), h) : n(s) + } + + function c(i) { + return 45 === i ? (e.consume(i), o = 2, f) : 91 === i ? (e.consume(i), o = 5, s = 0, p) : De(i) ? (e.consume(i), o = 4, r.interrupt ? t : N) : n(i) + } + + function f(o) { + return 45 === o ? (e.consume(o), r.interrupt ? t : N) : n(o) + } + + function p(o) { + const i = "CDATA["; + return o === i.charCodeAt(s++) ? (e.consume(o), s === i.length ? r.interrupt ? t : E : p) : n(o) + } + + function d(t) { + return De(t) ? (e.consume(t), l = String.fromCharCode(t), h) : n(t) + } + + function h(s) { + if (null === s || 47 === s || 62 === s || Be(s)) { + const a = 47 === s, + u = l.toLowerCase(); + return a || i || !It.includes(u) ? St.includes(l.toLowerCase()) ? (o = 6, a ? (e.consume(s), m) : r.interrupt ? t(s) : E(s)) : (o = 7, r.interrupt && !r.parser.lazy[r.now().line] ? n(s) : i ? g(s) : y(s)) : (o = 1, r.interrupt ? t(s) : E(s)) + } + return 45 === s || ze(s) ? (e.consume(s), l += String.fromCharCode(s), h) : n(s) + } + + function m(o) { + return 62 === o ? (e.consume(o), r.interrupt ? t : E) : n(o) + } + + function g(t) { + return He(t) ? (e.consume(t), g) : I(t) + } + + function y(t) { + return 47 === t ? (e.consume(t), I) : 58 === t || 95 === t || De(t) ? (e.consume(t), x) : He(t) ? (e.consume(t), y) : I(t) + } + + function x(t) { + return 45 === t || 46 === t || 58 === t || 95 === t || ze(t) ? (e.consume(t), x) : v(t) + } + + function v(t) { + return 61 === t ? (e.consume(t), k) : He(t) ? (e.consume(t), v) : y(t) + } + + function k(t) { + return null === t || 60 === t || 61 === t || 62 === t || 96 === t ? n(t) : 34 === t || 39 === t ? (e.consume(t), a = t, b) : He(t) ? (e.consume(t), k) : w(t) + } + + function b(t) { + return t === a ? (e.consume(t), a = null, S) : null === t || je(t) ? n(t) : (e.consume(t), b) + } + + function w(t) { + return null === t || 34 === t || 39 === t || 47 === t || 60 === t || 61 === t || 62 === t || 96 === t || Be(t) ? v(t) : (e.consume(t), w) + } + + function S(e) { + return 47 === e || 62 === e || He(e) ? y(e) : n(e) + } + + function I(t) { + return 62 === t ? (e.consume(t), C) : n(t) + } + + function C(t) { + return null === t || je(t) ? E(t) : He(t) ? (e.consume(t), C) : n(t) + } + + function E(t) { + return 45 === t && 2 === o ? (e.consume(t), A) : 60 === t && 1 === o ? (e.consume(t), L) : 62 === t && 4 === o ? (e.consume(t), M) : 63 === t && 3 === o ? (e.consume(t), N) : 93 === t && 5 === o ? (e.consume(t), z) : !je(t) || 6 !== o && 7 !== o ? null === t || je(t) ? (e.exit("htmlFlowData"), P(t)) : (e.consume(t), E) : (e.exit("htmlFlowData"), e.check(Et, F, P)(t)) + } + + function P(t) { + return e.check(Pt, T, F)(t) + } + + function T(t) { + return e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), O + } + + function O(t) { + return null === t || je(t) ? P(t) : (e.enter("htmlFlowData"), E(t)) + } + + function A(t) { + return 45 === t ? (e.consume(t), N) : E(t) + } + + function L(t) { + return 47 === t ? (e.consume(t), l = "", D) : E(t) + } + + function D(t) { + if (62 === t) { + const n = l.toLowerCase(); + return It.includes(n) ? (e.consume(t), M) : E(t) + } + return De(t) && l.length < 8 ? (e.consume(t), l += String.fromCharCode(t), D) : E(t) + } + + function z(t) { + return 93 === t ? (e.consume(t), N) : E(t) + } + + function N(t) { + return 62 === t ? (e.consume(t), M) : 45 === t && 2 === o ? (e.consume(t), N) : E(t) + } + + function M(t) { + return null === t || je(t) ? (e.exit("htmlFlowData"), F(t)) : (e.consume(t), M) + } + + function F(n) { + return e.exit("htmlFlow"), t(n) + } + }, + resolveTo: function(e) { + let t = e.length; + for (; t-- && ("enter" !== e[t][0] || "htmlFlow" !== e[t][1].type);); + return t > 1 && "linePrefix" === e[t - 2][1].type && (e[t][1].start = e[t - 2][1].start, e[t + 1][1].start = e[t - 2][1].start, e.splice(t - 2, 2)), e + }, + concrete: !0 + }, + Et = { + tokenize: function(e, t, n) { + return function(r) { + return e.enter("lineEnding"), e.consume(r), e.exit("lineEnding"), e.attempt($e, t, n) + } + }, + partial: !0 + }, + Pt = { + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return je(t) ? (e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), o) : n(t) + }; + + function o(e) { + return r.parser.lazy[r.now().line] ? n(e) : t(e) + } + }, + partial: !0 + }, + Tt = { + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return null === t ? n(t) : (e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), o) + }; + + function o(e) { + return r.parser.lazy[r.now().line] ? n(e) : t(e) + } + }, + partial: !0 + }, + Ot = { + name: "codeFenced", + tokenize: function(e, t, n) { + const r = this, + o = { + tokenize: function(e, t, n) { + let o = 0; + return function(t) { + return e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), l + }; + + function l(t) { + return e.enter("codeFencedFence"), He(t) ? We(e, a, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(t) : a(t) + } + + function a(t) { + return t === i ? (e.enter("codeFencedFenceSequence"), u(t)) : n(t) + } + + function u(t) { + return t === i ? (o++, e.consume(t), u) : o >= s ? (e.exit("codeFencedFenceSequence"), He(t) ? We(e, c, "whitespace")(t) : c(t)) : n(t) + } + + function c(r) { + return null === r || je(r) ? (e.exit("codeFencedFence"), t(r)) : n(r) + } + }, + partial: !0 + }; + let i, l = 0, + s = 0; + return function(t) { + return function(t) { + const n = r.events[r.events.length - 1]; + return l = n && "linePrefix" === n[1].type ? n[2].sliceSerialize(n[1], !0).length : 0, i = t, e.enter("codeFenced"), e.enter("codeFencedFence"), e.enter("codeFencedFenceSequence"), a(t) + }(t) + }; + + function a(t) { + return t === i ? (s++, e.consume(t), a) : s < 3 ? n(t) : (e.exit("codeFencedFenceSequence"), He(t) ? We(e, u, "whitespace")(t) : u(t)) + } + + function u(n) { + return null === n || je(n) ? (e.exit("codeFencedFence"), r.interrupt ? t(n) : e.check(Tt, d, x)(n)) : (e.enter("codeFencedFenceInfo"), e.enter("chunkString", { + contentType: "string" + }), c(n)) + } + + function c(t) { + return null === t || je(t) ? (e.exit("chunkString"), e.exit("codeFencedFenceInfo"), u(t)) : He(t) ? (e.exit("chunkString"), e.exit("codeFencedFenceInfo"), We(e, f, "whitespace")(t)) : 96 === t && t === i ? n(t) : (e.consume(t), c) + } + + function f(t) { + return null === t || je(t) ? u(t) : (e.enter("codeFencedFenceMeta"), e.enter("chunkString", { + contentType: "string" + }), p(t)) + } + + function p(t) { + return null === t || je(t) ? (e.exit("chunkString"), e.exit("codeFencedFenceMeta"), u(t)) : 96 === t && t === i ? n(t) : (e.consume(t), p) + } + + function d(t) { + return e.attempt(o, x, h)(t) + } + + function h(t) { + return e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), m + } + + function m(t) { + return l > 0 && He(t) ? We(e, g, "linePrefix", l + 1)(t) : g(t) + } + + function g(t) { + return null === t || je(t) ? e.check(Tt, d, x)(t) : (e.enter("codeFlowValue"), y(t)) + } + + function y(t) { + return null === t || je(t) ? (e.exit("codeFlowValue"), g(t)) : (e.consume(t), y) + } + + function x(n) { + return e.exit("codeFenced"), t(n) + } + }, + concrete: !0 + }, + At = document.createElement("i"); + + function Lt(e) { + const t = "&" + e + ";"; + At.innerHTML = t; + const n = At.textContent; + return (59 !== n.charCodeAt(n.length - 1) || "semi" === e) && n !== t && n + } + const Dt = { + name: "characterReference", + tokenize: function(e, t, n) { + const r = this; + let o, i, l = 0; + return function(t) { + return e.enter("characterReference"), e.enter("characterReferenceMarker"), e.consume(t), e.exit("characterReferenceMarker"), s + }; + + function s(t) { + return 35 === t ? (e.enter("characterReferenceMarkerNumeric"), e.consume(t), e.exit("characterReferenceMarkerNumeric"), a) : (e.enter("characterReferenceValue"), o = 31, i = ze, u(t)) + } + + function a(t) { + return 88 === t || 120 === t ? (e.enter("characterReferenceMarkerHexadecimal"), e.consume(t), e.exit("characterReferenceMarkerHexadecimal"), e.enter("characterReferenceValue"), o = 6, i = _e, u) : (e.enter("characterReferenceValue"), o = 7, i = Fe, u(t)) + } + + function u(s) { + if (59 === s && l) { + const o = e.exit("characterReferenceValue"); + return i !== ze || Lt(r.sliceSerialize(o)) ? (e.enter("characterReferenceMarker"), e.consume(s), e.exit("characterReferenceMarker"), e.exit("characterReference"), t) : n(s) + } + return i(s) && l++ < o ? (e.consume(s), u) : n(s) + } + } + }, + zt = { + name: "characterEscape", + tokenize: function(e, t, n) { + return function(t) { + return e.enter("characterEscape"), e.enter("escapeMarker"), e.consume(t), e.exit("escapeMarker"), r + }; + + function r(r) { + return Re(r) ? (e.enter("characterEscapeValue"), e.consume(r), e.exit("characterEscapeValue"), e.exit("characterEscape"), t) : n(r) + } + } + }, + Nt = { + name: "lineEnding", + tokenize: function(e, t) { + return function(n) { + return e.enter("lineEnding"), e.consume(n), e.exit("lineEnding"), We(e, t, "linePrefix") + } + } + }, + Mt = { + name: "labelEnd", + tokenize: function(e, t, n) { + const r = this; + let o, i, l = r.events.length; + for (; l--;) + if (("labelImage" === r.events[l][1].type || "labelLink" === r.events[l][1].type) && !r.events[l][1]._balanced) { + o = r.events[l][1]; + break + } return function(t) { + return o ? o._inactive ? c(t) : (i = r.parser.defined.includes(gt(r.sliceSerialize({ + start: o.end, + end: r.now() + }))), e.enter("labelEnd"), e.enter("labelMarker"), e.consume(t), e.exit("labelMarker"), e.exit("labelEnd"), s) : n(t) + }; + + function s(t) { + return 40 === t ? e.attempt(Ft, u, i ? u : c)(t) : 91 === t ? e.attempt(_t, u, i ? a : c)(t) : i ? u(t) : c(t) + } + + function a(t) { + return e.attempt(Rt, u, c)(t) + } + + function u(e) { + return t(e) + } + + function c(e) { + return o._balanced = !0, n(e) + } + }, + resolveTo: function(e, t) { + let n, r, o, i, l = e.length, + s = 0; + for (; l--;) + if (n = e[l][1], r) { + if ("link" === n.type || "labelLink" === n.type && n._inactive) break; + "enter" === e[l][0] && "labelLink" === n.type && (n._inactive = !0) + } else if (o) { + if ("enter" === e[l][0] && ("labelImage" === n.type || "labelLink" === n.type) && !n._balanced && (r = l, "labelLink" !== n.type)) { + s = 2; + break + } + } else "labelEnd" === n.type && (o = l); + const a = { + type: "labelLink" === e[r][1].type ? "link" : "image", + start: Object.assign({}, e[r][1].start), + end: Object.assign({}, e[e.length - 1][1].end) + }, + u = { + type: "label", + start: Object.assign({}, e[r][1].start), + end: Object.assign({}, e[o][1].end) + }, + c = { + type: "labelText", + start: Object.assign({}, e[r + s + 2][1].end), + end: Object.assign({}, e[o - 2][1].start) + }; + return i = [ + ["enter", a, t], + ["enter", u, t] + ], i = Ie(i, e.slice(r + 1, r + s + 3)), i = Ie(i, [ + ["enter", c, t] + ]), i = Ie(i, it(t.parser.constructs.insideSpan.null, e.slice(r + s + 4, o - 3), t)), i = Ie(i, [ + ["exit", c, t], e[o - 2], e[o - 1], + ["exit", u, t] + ]), i = Ie(i, e.slice(o + 1)), i = Ie(i, [ + ["exit", a, t] + ]), Se(e, r, e.length, i), e + }, + resolveAll: function(e) { + let t = -1; + for (; ++t < e.length;) { + const n = e[t][1]; + "labelImage" !== n.type && "labelLink" !== n.type && "labelEnd" !== n.type || (e.splice(t + 1, "labelImage" === n.type ? 4 : 2), n.type = "data", t++) + } + return e + } + }, + Ft = { + tokenize: function(e, t, n) { + return function(t) { + return e.enter("resource"), e.enter("resourceMarker"), e.consume(t), e.exit("resourceMarker"), r + }; + + function r(t) { + return Be(t) ? mt(e, o)(t) : o(t) + } + + function o(t) { + return 41 === t ? u(t) : pt(e, i, l, "resourceDestination", "resourceDestinationLiteral", "resourceDestinationLiteralMarker", "resourceDestinationRaw", "resourceDestinationString", 32)(t) + } + + function i(t) { + return Be(t) ? mt(e, s)(t) : u(t) + } + + function l(e) { + return n(e) + } + + function s(t) { + return 34 === t || 39 === t || 40 === t ? ht(e, a, n, "resourceTitle", "resourceTitleMarker", "resourceTitleString")(t) : u(t) + } + + function a(t) { + return Be(t) ? mt(e, u)(t) : u(t) + } + + function u(r) { + return 41 === r ? (e.enter("resourceMarker"), e.consume(r), e.exit("resourceMarker"), e.exit("resource"), t) : n(r) + } + } + }, + _t = { + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return dt.call(r, e, o, i, "reference", "referenceMarker", "referenceString")(t) + }; + + function o(e) { + return r.parser.defined.includes(gt(r.sliceSerialize(r.events[r.events.length - 1][1]).slice(1, -1))) ? t(e) : n(e) + } + + function i(e) { + return n(e) + } + } + }, + Rt = { + tokenize: function(e, t, n) { + return function(t) { + return e.enter("reference"), e.enter("referenceMarker"), e.consume(t), e.exit("referenceMarker"), r + }; + + function r(r) { + return 93 === r ? (e.enter("referenceMarker"), e.consume(r), e.exit("referenceMarker"), e.exit("reference"), t) : n(r) + } + } + }; + + function jt(e) { + return null === e || Be(e) || Ve(e) ? 1 : Ue(e) ? 2 : void 0 + } + const Bt = { + name: "attention", + tokenize: function(e, t) { + const n = this.parser.constructs.attentionMarkers.null, + r = this.previous, + o = jt(r); + let i; + return function(t) { + return i = t, e.enter("attentionSequence"), l(t) + }; + + function l(s) { + if (s === i) return e.consume(s), l; + const a = e.exit("attentionSequence"), + u = jt(s), + c = !u || 2 === u && o || n.includes(s), + f = !o || 2 === o && u || n.includes(r); + return a._open = Boolean(42 === i ? c : c && (o || !f)), a._close = Boolean(42 === i ? f : f && (u || !c)), t(s) + } + }, + resolveAll: function(e, t) { + let n, r, o, i, l, s, a, u, c = -1; + for (; ++c < e.length;) + if ("enter" === e[c][0] && "attentionSequence" === e[c][1].type && e[c][1]._close) + for (n = c; n--;) + if ("exit" === e[n][0] && "attentionSequence" === e[n][1].type && e[n][1]._open && t.sliceSerialize(e[n][1]).charCodeAt(0) === t.sliceSerialize(e[c][1]).charCodeAt(0)) { + if ((e[n][1]._close || e[c][1]._open) && (e[c][1].end.offset - e[c][1].start.offset) % 3 && !((e[n][1].end.offset - e[n][1].start.offset + e[c][1].end.offset - e[c][1].start.offset) % 3)) continue; + s = e[n][1].end.offset - e[n][1].start.offset > 1 && e[c][1].end.offset - e[c][1].start.offset > 1 ? 2 : 1; + const f = Object.assign({}, e[n][1].end), + p = Object.assign({}, e[c][1].start); + Ht(f, -s), Ht(p, s), i = { + type: s > 1 ? "strongSequence" : "emphasisSequence", + start: f, + end: Object.assign({}, e[n][1].end) + }, l = { + type: s > 1 ? "strongSequence" : "emphasisSequence", + start: Object.assign({}, e[c][1].start), + end: p + }, o = { + type: s > 1 ? "strongText" : "emphasisText", + start: Object.assign({}, e[n][1].end), + end: Object.assign({}, e[c][1].start) + }, r = { + type: s > 1 ? "strong" : "emphasis", + start: Object.assign({}, i.start), + end: Object.assign({}, l.end) + }, e[n][1].end = Object.assign({}, i.start), e[c][1].start = Object.assign({}, l.end), a = [], e[n][1].end.offset - e[n][1].start.offset && (a = Ie(a, [ + ["enter", e[n][1], t], + ["exit", e[n][1], t] + ])), a = Ie(a, [ + ["enter", r, t], + ["enter", i, t], + ["exit", i, t], + ["enter", o, t] + ]), a = Ie(a, it(t.parser.constructs.insideSpan.null, e.slice(n + 1, c), t)), a = Ie(a, [ + ["exit", o, t], + ["enter", l, t], + ["exit", l, t], + ["exit", r, t] + ]), e[c][1].end.offset - e[c][1].start.offset ? (u = 2, a = Ie(a, [ + ["enter", e[c][1], t], + ["exit", e[c][1], t] + ])) : u = 0, Se(e, n - 1, c - n + 3, a), c = n + a.length - u - 2; + break + } for (c = -1; ++c < e.length;) "attentionSequence" === e[c][1].type && (e[c][1].type = "data"); + return e + } + }; + + function Ht(e, t) { + e.column += t, e.offset += t, e._bufferIndex += t + } + const Ut = { + name: "htmlText", + tokenize: function(e, t, n) { + const r = this; + let o, i, l; + return function(t) { + return e.enter("htmlText"), e.enter("htmlTextData"), e.consume(t), s + }; + + function s(t) { + return 33 === t ? (e.consume(t), a) : 47 === t ? (e.consume(t), k) : 63 === t ? (e.consume(t), x) : De(t) ? (e.consume(t), S) : n(t) + } + + function a(t) { + return 45 === t ? (e.consume(t), u) : 91 === t ? (e.consume(t), i = 0, d) : De(t) ? (e.consume(t), y) : n(t) + } + + function u(t) { + return 45 === t ? (e.consume(t), p) : n(t) + } + + function c(t) { + return null === t ? n(t) : 45 === t ? (e.consume(t), f) : je(t) ? (l = c, D(t)) : (e.consume(t), c) + } + + function f(t) { + return 45 === t ? (e.consume(t), p) : c(t) + } + + function p(e) { + return 62 === e ? L(e) : 45 === e ? f(e) : c(e) + } + + function d(t) { + const r = "CDATA["; + return t === r.charCodeAt(i++) ? (e.consume(t), i === r.length ? h : d) : n(t) + } + + function h(t) { + return null === t ? n(t) : 93 === t ? (e.consume(t), m) : je(t) ? (l = h, D(t)) : (e.consume(t), h) + } + + function m(t) { + return 93 === t ? (e.consume(t), g) : h(t) + } + + function g(t) { + return 62 === t ? L(t) : 93 === t ? (e.consume(t), g) : h(t) + } + + function y(t) { + return null === t || 62 === t ? L(t) : je(t) ? (l = y, D(t)) : (e.consume(t), y) + } + + function x(t) { + return null === t ? n(t) : 63 === t ? (e.consume(t), v) : je(t) ? (l = x, D(t)) : (e.consume(t), x) + } + + function v(e) { + return 62 === e ? L(e) : x(e) + } + + function k(t) { + return De(t) ? (e.consume(t), b) : n(t) + } + + function b(t) { + return 45 === t || ze(t) ? (e.consume(t), b) : w(t) + } + + function w(t) { + return je(t) ? (l = w, D(t)) : He(t) ? (e.consume(t), w) : L(t) + } + + function S(t) { + return 45 === t || ze(t) ? (e.consume(t), S) : 47 === t || 62 === t || Be(t) ? I(t) : n(t) + } + + function I(t) { + return 47 === t ? (e.consume(t), L) : 58 === t || 95 === t || De(t) ? (e.consume(t), C) : je(t) ? (l = I, D(t)) : He(t) ? (e.consume(t), I) : L(t) + } + + function C(t) { + return 45 === t || 46 === t || 58 === t || 95 === t || ze(t) ? (e.consume(t), C) : E(t) + } + + function E(t) { + return 61 === t ? (e.consume(t), P) : je(t) ? (l = E, D(t)) : He(t) ? (e.consume(t), E) : I(t) + } + + function P(t) { + return null === t || 60 === t || 61 === t || 62 === t || 96 === t ? n(t) : 34 === t || 39 === t ? (e.consume(t), o = t, T) : je(t) ? (l = P, D(t)) : He(t) ? (e.consume(t), P) : (e.consume(t), O) + } + + function T(t) { + return t === o ? (e.consume(t), o = void 0, A) : null === t ? n(t) : je(t) ? (l = T, D(t)) : (e.consume(t), T) + } + + function O(t) { + return null === t || 34 === t || 39 === t || 60 === t || 61 === t || 96 === t ? n(t) : 47 === t || 62 === t || Be(t) ? I(t) : (e.consume(t), O) + } + + function A(e) { + return 47 === e || 62 === e || Be(e) ? I(e) : n(e) + } + + function L(r) { + return 62 === r ? (e.consume(r), e.exit("htmlTextData"), e.exit("htmlText"), t) : n(r) + } + + function D(t) { + return e.exit("htmlTextData"), e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), z + } + + function z(t) { + return He(t) ? We(e, N, "linePrefix", r.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4)(t) : N(t) + } + + function N(t) { + return e.enter("htmlTextData"), l(t) + } + } + }, + Vt = { + name: "codeText", + tokenize: function(e, t, n) { + let r, o, i = 0; + return function(t) { + return e.enter("codeText"), e.enter("codeTextSequence"), l(t) + }; + + function l(t) { + return 96 === t ? (e.consume(t), i++, l) : (e.exit("codeTextSequence"), s(t)) + } + + function s(t) { + return null === t ? n(t) : 32 === t ? (e.enter("space"), e.consume(t), e.exit("space"), s) : 96 === t ? (o = e.enter("codeTextSequence"), r = 0, u(t)) : je(t) ? (e.enter("lineEnding"), e.consume(t), e.exit("lineEnding"), s) : (e.enter("codeTextData"), a(t)) + } + + function a(t) { + return null === t || 32 === t || 96 === t || je(t) ? (e.exit("codeTextData"), s(t)) : (e.consume(t), a) + } + + function u(n) { + return 96 === n ? (e.consume(n), r++, u) : r === i ? (e.exit("codeTextSequence"), e.exit("codeText"), t(n)) : (o.type = "codeTextData", a(n)) + } + }, + resolve: function(e) { + let t, n, r = e.length - 4, + o = 3; + if (!("lineEnding" !== e[o][1].type && "space" !== e[o][1].type || "lineEnding" !== e[r][1].type && "space" !== e[r][1].type)) + for (t = o; ++t < r;) + if ("codeTextData" === e[t][1].type) { + e[o][1].type = "codeTextPadding", e[r][1].type = "codeTextPadding", o += 2, r -= 2; + break + } for (t = o - 1, r++; ++t <= r;) void 0 === n ? t !== r && "lineEnding" !== e[t][1].type && (n = t) : t !== r && "lineEnding" !== e[t][1].type || (e[n][1].type = "codeTextData", t !== n + 2 && (e[n][1].end = e[t - 1][1].end, e.splice(n + 2, t - n - 2), r -= t - n - 2, t = n + 2), n = void 0); + return e + }, + previous: function(e) { + return 96 !== e || "characterEscape" === this.events[this.events.length - 1][1].type + } + }, + qt = { + 42: at, + 43: at, + 45: at, + 48: at, + 49: at, + 50: at, + 51: at, + 52: at, + 53: at, + 54: at, + 55: at, + 56: at, + 57: at, + 62: ft + }, + Wt = { + 91: yt + }, + Yt = { + [-2]: vt, + [-1]: vt, + 32: vt + }, + Kt = { + 35: bt, + 42: st, + 45: [wt, st], + 60: Ct, + 61: wt, + 95: st, + 96: Ot, + 126: Ot + }, + Qt = { + 38: Dt, + 92: zt + }, + $t = { + [-5]: Nt, + [-4]: Nt, + [-3]: Nt, + 33: { + name: "labelStartImage", + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return e.enter("labelImage"), e.enter("labelImageMarker"), e.consume(t), e.exit("labelImageMarker"), o + }; + + function o(t) { + return 91 === t ? (e.enter("labelMarker"), e.consume(t), e.exit("labelMarker"), e.exit("labelImage"), i) : n(t) + } + + function i(e) { + return 94 === e && "_hiddenFootnoteSupport" in r.parser.constructs ? n(e) : t(e) + } + }, + resolveAll: Mt.resolveAll + }, + 38: Dt, + 42: Bt, + 60: [{ + name: "autolink", + tokenize: function(e, t, n) { + let r = 0; + return function(t) { + return e.enter("autolink"), e.enter("autolinkMarker"), e.consume(t), e.exit("autolinkMarker"), e.enter("autolinkProtocol"), o + }; + + function o(t) { + return De(t) ? (e.consume(t), i) : 64 === t ? n(t) : a(t) + } + + function i(e) { + return 43 === e || 45 === e || 46 === e || ze(e) ? (r = 1, l(e)) : a(e) + } + + function l(t) { + return 58 === t ? (e.consume(t), r = 0, s) : (43 === t || 45 === t || 46 === t || ze(t)) && r++ < 32 ? (e.consume(t), l) : (r = 0, a(t)) + } + + function s(r) { + return 62 === r ? (e.exit("autolinkProtocol"), e.enter("autolinkMarker"), e.consume(r), e.exit("autolinkMarker"), e.exit("autolink"), t) : null === r || 32 === r || 60 === r || Me(r) ? n(r) : (e.consume(r), s) + } + + function a(t) { + return 64 === t ? (e.consume(t), u) : Ne(t) ? (e.consume(t), a) : n(t) + } + + function u(e) { + return ze(e) ? c(e) : n(e) + } + + function c(n) { + return 46 === n ? (e.consume(n), r = 0, u) : 62 === n ? (e.exit("autolinkProtocol").type = "autolinkEmail", e.enter("autolinkMarker"), e.consume(n), e.exit("autolinkMarker"), e.exit("autolink"), t) : f(n) + } + + function f(t) { + if ((45 === t || ze(t)) && r++ < 63) { + const n = 45 === t ? f : c; + return e.consume(t), n + } + return n(t) + } + } + }, Ut], + 91: { + name: "labelStartLink", + tokenize: function(e, t, n) { + const r = this; + return function(t) { + return e.enter("labelLink"), e.enter("labelMarker"), e.consume(t), e.exit("labelMarker"), e.exit("labelLink"), o + }; + + function o(e) { + return 94 === e && "_hiddenFootnoteSupport" in r.parser.constructs ? n(e) : t(e) + } + }, + resolveAll: Mt.resolveAll + }, + 92: [{ + name: "hardBreakEscape", + tokenize: function(e, t, n) { + return function(t) { + return e.enter("hardBreakEscape"), e.consume(t), r + }; + + function r(r) { + return je(r) ? (e.exit("hardBreakEscape"), t(r)) : n(r) + } + } + }, zt], + 93: Mt, + 95: Bt, + 96: Vt + }, + Xt = { + null: [Bt, Ge] + }, + Jt = { + null: [42, 95] + }, + Zt = { + null: [] + }; + const Gt = /[\0\t\n\r]/g; + + function en(e, t) { + const n = Number.parseInt(e, t); + return n < 9 || 11 === n || n > 13 && n < 32 || n > 126 && n < 160 || n > 55295 && n < 57344 || n > 64975 && n < 65008 || 65535 == (65535 & n) || 65534 == (65535 & n) || n > 1114111 ? "�" : String.fromCodePoint(n) + } + const tn = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; + + function nn(e, t, n) { + if (t) return t; + if (35 === n.charCodeAt(0)) { + const e = n.charCodeAt(1), + t = 120 === e || 88 === e; + return en(n.slice(t ? 2 : 1), t ? 16 : 10) + } + return Lt(n) || e + } + const rn = {}.hasOwnProperty; + + function on(e, t, n) { + return "string" != typeof t && (n = t, t = void 0), + function(e) { + const t = { + transforms: [], + canContainEols: ["emphasis", "fragment", "heading", "paragraph", "strong"], + enter: { + autolink: o(x), + autolinkProtocol: c, + autolinkEmail: c, + atxHeading: o(m), + blockQuote: o((function() { + return { + type: "blockquote", + children: [] + } + })), + characterEscape: c, + characterReference: c, + codeFenced: o(h), + codeFencedFenceInfo: i, + codeFencedFenceMeta: i, + codeIndented: o(h, i), + codeText: o((function() { + return { + type: "inlineCode", + value: "" + } + }), i), + codeTextData: c, + data: c, + codeFlowValue: c, + definition: o((function() { + return { + type: "definition", + identifier: "", + label: null, + title: null, + url: "" + } + })), + definitionDestinationString: i, + definitionLabelString: i, + definitionTitleString: i, + emphasis: o((function() { + return { + type: "emphasis", + children: [] + } + })), + hardBreakEscape: o(g), + hardBreakTrailing: o(g), + htmlFlow: o(y, i), + htmlFlowData: c, + htmlText: o(y, i), + htmlTextData: c, + image: o((function() { + return { + type: "image", + title: null, + url: "", + alt: null + } + })), + label: i, + link: o(x), + listItem: o((function(e) { + return { + type: "listItem", + spread: e._spread, + checked: null, + children: [] + } + })), + listItemValue: function(e) { + this.data.expectingFirstListItemValue && (this.stack[this.stack.length - 2].start = Number.parseInt(this.sliceSerialize(e), 10), this.data.expectingFirstListItemValue = void 0) + }, + listOrdered: o(v, (function() { + this.data.expectingFirstListItemValue = !0 + })), + listUnordered: o(v), + paragraph: o((function() { + return { + type: "paragraph", + children: [] + } + })), + reference: function() { + this.data.referenceType = "collapsed" + }, + referenceString: i, + resourceDestinationString: i, + resourceTitleString: i, + setextHeading: o(m), + strong: o((function() { + return { + type: "strong", + children: [] + } + })), + thematicBreak: o((function() { + return { + type: "thematicBreak" + } + })) + }, + exit: { + atxHeading: s(), + atxHeadingSequence: function(e) { + const t = this.stack[this.stack.length - 1]; + if (!t.depth) { + const n = this.sliceSerialize(e).length; + t.depth = n + } + }, + autolink: s(), + autolinkEmail: function(e) { + f.call(this, e), this.stack[this.stack.length - 1].url = "mailto:" + this.sliceSerialize(e) + }, + autolinkProtocol: function(e) { + f.call(this, e), this.stack[this.stack.length - 1].url = this.sliceSerialize(e) + }, + blockQuote: s(), + characterEscapeValue: f, + characterReferenceMarkerHexadecimal: d, + characterReferenceMarkerNumeric: d, + characterReferenceValue: function(e) { + const t = this.sliceSerialize(e), + n = this.data.characterReferenceType; + let r; + n ? (r = en(t, "characterReferenceMarkerNumeric" === n ? 10 : 16), this.data.characterReferenceType = void 0) : r = Lt(t); + this.stack[this.stack.length - 1].value += r + }, + characterReference: function(e) { + this.stack.pop().position.end = ln(e.end) + }, + codeFenced: s((function() { + const e = this.resume(); + this.stack[this.stack.length - 1].value = e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, ""), this.data.flowCodeInside = void 0 + })), + codeFencedFence: function() { + this.data.flowCodeInside || (this.buffer(), this.data.flowCodeInside = !0) + }, + codeFencedFenceInfo: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].lang = e + }, + codeFencedFenceMeta: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].meta = e + }, + codeFlowValue: f, + codeIndented: s((function() { + const e = this.resume(); + this.stack[this.stack.length - 1].value = e.replace(/(\r?\n|\r)$/g, "") + })), + codeText: s((function() { + const e = this.resume(); + this.stack[this.stack.length - 1].value = e + })), + codeTextData: f, + data: f, + definition: s(), + definitionDestinationString: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].url = e + }, + definitionLabelString: function(e) { + const t = this.resume(), + n = this.stack[this.stack.length - 1]; + n.label = t, n.identifier = gt(this.sliceSerialize(e)).toLowerCase() + }, + definitionTitleString: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].title = e + }, + emphasis: s(), + hardBreakEscape: s(p), + hardBreakTrailing: s(p), + htmlFlow: s((function() { + const e = this.resume(); + this.stack[this.stack.length - 1].value = e + })), + htmlFlowData: f, + htmlText: s((function() { + const e = this.resume(); + this.stack[this.stack.length - 1].value = e + })), + htmlTextData: f, + image: s((function() { + const e = this.stack[this.stack.length - 1]; + if (this.data.inReference) { + const t = this.data.referenceType || "shortcut"; + e.type += "Reference", e.referenceType = t, delete e.url, delete e.title + } else delete e.identifier, delete e.label; + this.data.referenceType = void 0 + })), + label: function() { + const e = this.stack[this.stack.length - 1], + t = this.resume(), + n = this.stack[this.stack.length - 1]; + if (this.data.inReference = !0, "link" === n.type) { + const t = e.children; + n.children = t + } else n.alt = t + }, + labelText: function(e) { + const t = this.sliceSerialize(e), + n = this.stack[this.stack.length - 2]; + n.label = function(e) { + return e.replace(tn, nn) + }(t), n.identifier = gt(t).toLowerCase() + }, + lineEnding: function(e) { + const n = this.stack[this.stack.length - 1]; + if (this.data.atHardBreak) return n.children[n.children.length - 1].position.end = ln(e.end), void(this.data.atHardBreak = void 0); + !this.data.setextHeadingSlurpLineEnding && t.canContainEols.includes(n.type) && (c.call(this, e), f.call(this, e)) + }, + link: s((function() { + const e = this.stack[this.stack.length - 1]; + if (this.data.inReference) { + const t = this.data.referenceType || "shortcut"; + e.type += "Reference", e.referenceType = t, delete e.url, delete e.title + } else delete e.identifier, delete e.label; + this.data.referenceType = void 0 + })), + listItem: s(), + listOrdered: s(), + listUnordered: s(), + paragraph: s(), + referenceString: function(e) { + const t = this.resume(), + n = this.stack[this.stack.length - 1]; + n.label = t, n.identifier = gt(this.sliceSerialize(e)).toLowerCase(), this.data.referenceType = "full" + }, + resourceDestinationString: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].url = e + }, + resourceTitleString: function() { + const e = this.resume(); + this.stack[this.stack.length - 1].title = e + }, + resource: function() { + this.data.inReference = void 0 + }, + setextHeading: s((function() { + this.data.setextHeadingSlurpLineEnding = void 0 + })), + setextHeadingLineSequence: function(e) { + this.stack[this.stack.length - 1].depth = 61 === this.sliceSerialize(e).codePointAt(0) ? 1 : 2 + }, + setextHeadingText: function() { + this.data.setextHeadingSlurpLineEnding = !0 + }, + strong: s(), + thematicBreak: s() + } + }; + sn(t, (e || {}).mdastExtensions || []); + const n = {}; + return function(e) { + let o = { + type: "root", + children: [] + }; + const s = { + stack: [o], + tokenStack: [], + config: t, + enter: l, + exit: a, + buffer: i, + resume: u, + data: n + }, + c = []; + let f = -1; + for (; ++f < e.length;) "listOrdered" !== e[f][1].type && "listUnordered" !== e[f][1].type || ("enter" === e[f][0] ? c.push(f) : f = r(e, c.pop(), f)); + for (f = -1; ++f < e.length;) { + const n = t[e[f][0]]; + rn.call(n, e[f][1].type) && n[e[f][1].type].call(Object.assign({ + sliceSerialize: e[f][2].sliceSerialize + }, s), e[f][1]) + } + if (s.tokenStack.length > 0) { + const e = s.tokenStack[s.tokenStack.length - 1]; + (e[1] || un).call(s, void 0, e[0]) + } + for (o.position = { + start: ln(e.length > 0 ? e[0][1].start : { + line: 1, + column: 1, + offset: 0 + }), + end: ln(e.length > 0 ? e[e.length - 2][1].end : { + line: 1, + column: 1, + offset: 0 + }) + }, f = -1; ++f < t.transforms.length;) o = t.transforms[f](o) || o; + return o + }; + + function r(e, t, n) { + let r, o, i, l, s = t - 1, + a = -1, + u = !1; + for (; ++s <= n;) { + const t = e[s]; + switch (t[1].type) { + case "listUnordered": + case "listOrdered": + case "blockQuote": + "enter" === t[0] ? a++ : a--, l = void 0; + break; + case "lineEndingBlank": + "enter" === t[0] && (!r || l || a || i || (i = s), l = void 0); + break; + case "linePrefix": + case "listItemValue": + case "listItemMarker": + case "listItemPrefix": + case "listItemPrefixWhitespace": + break; + default: + l = void 0 + } + if (!a && "enter" === t[0] && "listItemPrefix" === t[1].type || -1 === a && "exit" === t[0] && ("listUnordered" === t[1].type || "listOrdered" === t[1].type)) { + if (r) { + let l = s; + for (o = void 0; l--;) { + const t = e[l]; + if ("lineEnding" === t[1].type || "lineEndingBlank" === t[1].type) { + if ("exit" === t[0]) continue; + o && (e[o][1].type = "lineEndingBlank", u = !0), t[1].type = "lineEnding", o = l + } else if ("linePrefix" !== t[1].type && "blockQuotePrefix" !== t[1].type && "blockQuotePrefixWhitespace" !== t[1].type && "blockQuoteMarker" !== t[1].type && "listItemIndent" !== t[1].type) break + } + i && (!o || i < o) && (r._spread = !0), r.end = Object.assign({}, o ? e[o][1].start : t[1].end), e.splice(o || s, 0, ["exit", r, t[2]]), s++, n++ + } + if ("listItemPrefix" === t[1].type) { + const o = { + type: "listItem", + _spread: !1, + start: Object.assign({}, t[1].start), + end: void 0 + }; + r = o, e.splice(s, 0, ["enter", o, t[2]]), s++, n++, i = void 0, l = !0 + } + } + } + return e[t][1]._spread = u, n + } + + function o(e, t) { + return function(n) { + l.call(this, e(n), n), t && t.call(this, n) + } + } + + function i() { + this.stack.push({ + type: "fragment", + children: [] + }) + } + + function l(e, t, n) { + this.stack[this.stack.length - 1].children.push(e), this.stack.push(e), this.tokenStack.push([t, n]), e.position = { + start: ln(t.start), + end: void 0 + } + } + + function s(e) { + return function(t) { + e && e.call(this, t), a.call(this, t) + } + } + + function a(e, t) { + const n = this.stack.pop(), + r = this.tokenStack.pop(); + if (!r) throw new Error("Cannot close `" + e.type + "` (" + X({ + start: e.start, + end: e.end + }) + "): it’s not open"); + r[0].type !== e.type && (t ? t.call(this, e, r[0]) : (r[1] || un).call(this, e, r[0])), n.position.end = ln(e.end) + } + + function u() { + return function(e, t) { + return be(e, "boolean" != typeof ke.includeImageAlt || ke.includeImageAlt, "boolean" != typeof ke.includeHtml || ke.includeHtml) + }(this.stack.pop()) + } + + function c(e) { + const t = this.stack[this.stack.length - 1].children; + let n = t[t.length - 1]; + n && "text" === n.type || (n = { + type: "text", + value: "" + }, n.position = { + start: ln(e.start), + end: void 0 + }, t.push(n)), this.stack.push(n) + } + + function f(e) { + const t = this.stack.pop(); + t.value += this.sliceSerialize(e), t.position.end = ln(e.end) + } + + function p() { + this.data.atHardBreak = !0 + } + + function d(e) { + this.data.characterReferenceType = e.type + } + + function h() { + return { + type: "code", + lang: null, + meta: null, + value: "" + } + } + + function m() { + return { + type: "heading", + depth: 0, + children: [] + } + } + + function g() { + return { + type: "break" + } + } + + function y() { + return { + type: "html", + value: "" + } + } + + function x() { + return { + type: "link", + title: null, + url: "", + children: [] + } + } + + function v(e) { + return { + type: "list", + ordered: "listOrdered" === e.type, + start: null, + spread: e._spread, + children: [] + } + } + }(n)(function(e) { + for (; !Pe(e);); + return e + }(function(e) { + const t = function(e) { + const t = {}; + let n = -1; + for (; ++n < e.length;) Ae(t, e[n]); + return t + }([o, ...(e || {}).extensions || []]), + n = { + defined: [], + lazy: {}, + constructs: t, + content: r(Ye), + document: r(Ke), + flow: r(Ze), + string: r(et), + text: r(tt) + }; + return n; + + function r(e) { + return function(t) { + return lt(n, e, t) + } + } + }(n).document().write(function() { + let e, t = 1, + n = "", + r = !0; + return function(o, i, l) { + const s = []; + let a, u, c, f, p; + for (o = n + ("string" == typeof o ? o.toString() : new TextDecoder(i || void 0).decode(o)), c = 0, n = "", r && (65279 === o.charCodeAt(0) && c++, r = void 0); c < o.length;) { + if (Gt.lastIndex = c, a = Gt.exec(o), f = a && void 0 !== a.index ? a.index : o.length, p = o.charCodeAt(f), !a) { + n = o.slice(c); + break + } + if (10 === p && c === f && e) s.push(-3), e = void 0; + else switch (e && (s.push(-5), e = void 0), c < f && (s.push(o.slice(c, f)), t += f - c), p) { + case 0: + s.push(65533), t++; + break; + case 9: + for (u = 4 * Math.ceil(t / 4), s.push(-2); t++ < u;) s.push(-1); + break; + case 10: + s.push(-4), t = 1; + break; + default: + e = !0, t = 1 + } + c = f + 1 + } + return l && (e && s.push(-5), n && s.push(n), s.push(null)), s + } + }()(e, t, !0)))) + } + + function ln(e) { + return { + line: e.line, + column: e.column, + offset: e.offset + } + } + + function sn(e, t) { + let n = -1; + for (; ++n < t.length;) { + const r = t[n]; + Array.isArray(r) ? sn(e, r) : an(e, r) + } + } + + function an(e, t) { + let n; + for (n in t) + if (rn.call(t, n)) switch (n) { + case "canContainEols": { + const r = t[n]; + r && e[n].push(...r); + break + } + case "transforms": { + const r = t[n]; + r && e[n].push(...r); + break + } + case "enter": + case "exit": { + const r = t[n]; + r && Object.assign(e[n], r); + break + } + } + } + + function un(e, t) { + throw e ? new Error("Cannot close `" + e.type + "` (" + X({ + start: e.start, + end: e.end + }) + "): a different token (`" + t.type + "`, " + X({ + start: t.start, + end: t.end + }) + ") is open") : new Error("Cannot close document, a token (`" + t.type + "`, " + X({ + start: t.start, + end: t.end + }) + ") is still open") + } + + function cn(e) { + const t = this; + t.parser = function(n) { + return on(n, { + ...t.data("settings"), + ...e, + extensions: t.data("micromarkExtensions") || [], + mdastExtensions: t.data("fromMarkdownExtensions") || [] + }) + } + } + const fn = "object" == typeof self ? self : globalThis, + pn = e => ((e, t) => { + const n = (t, n) => (e.set(n, t), t), + r = o => { + if (e.has(o)) return e.get(o); + const [i, l] = t[o]; + switch (i) { + case 0: + case -1: + return n(l, o); + case 1: { + const e = n([], o); + for (const t of l) e.push(r(t)); + return e + } + case 2: { + const e = n({}, o); + for (const [t, n] of l) e[r(t)] = r(n); + return e + } + case 3: + return n(new Date(l), o); + case 4: { + const { + source: e, + flags: t + } = l; + return n(new RegExp(e, t), o) + } + case 5: { + const e = n(new Map, o); + for (const [t, n] of l) e.set(r(t), r(n)); + return e + } + case 6: { + const e = n(new Set, o); + for (const t of l) e.add(r(t)); + return e + } + case 7: { + const { + name: e, + message: t + } = l; + return n(new fn[e](t), o) + } + case 8: + return n(BigInt(l), o); + case "BigInt": + return n(Object(BigInt(l)), o) + } + return n(new fn[i](l), o) + }; + return r + })(new Map, e)(0), + dn = "", + { + toString: hn + } = {}, + { + keys: mn + } = Object, + gn = e => { + const t = typeof e; + if ("object" !== t || !e) return [0, t]; + const n = hn.call(e).slice(8, -1); + switch (n) { + case "Array": + return [1, dn]; + case "Object": + return [2, dn]; + case "Date": + return [3, dn]; + case "RegExp": + return [4, dn]; + case "Map": + return [5, dn]; + case "Set": + return [6, dn] + } + return n.includes("Array") ? [1, n] : n.includes("Error") ? [7, n] : [2, n] + }, + yn = ([e, t]) => 0 === e && ("function" === t || "symbol" === t), + xn = (e, { + json: t, + lossy: n + } = {}) => { + const r = []; + return ((e, t, n, r) => { + const o = (e, t) => { + const o = r.push(e) - 1; + return n.set(t, o), o + }, + i = r => { + if (n.has(r)) return n.get(r); + let [l, s] = gn(r); + switch (l) { + case 0: { + let t = r; + switch (s) { + case "bigint": + l = 8, t = r.toString(); + break; + case "function": + case "symbol": + if (e) throw new TypeError("unable to serialize " + s); + t = null; + break; + case "undefined": + return o([-1], r) + } + return o([l, t], r) + } + case 1: { + if (s) return o([s, [...r]], r); + const e = [], + t = o([l, e], r); + for (const t of r) e.push(i(t)); + return t + } + case 2: { + if (s) switch (s) { + case "BigInt": + return o([s, r.toString()], r); + case "Boolean": + case "Number": + case "String": + return o([s, r.valueOf()], r) + } + if (t && "toJSON" in r) return i(r.toJSON()); + const n = [], + a = o([l, n], r); + for (const t of mn(r)) !e && yn(gn(r[t])) || n.push([i(t), i(r[t])]); + return a + } + case 3: + return o([l, r.toISOString()], r); + case 4: { + const { + source: e, + flags: t + } = r; + return o([l, { + source: e, + flags: t + }], r) + } + case 5: { + const t = [], + n = o([l, t], r); + for (const [n, o] of r)(e || !yn(gn(n)) && !yn(gn(o))) && t.push([i(n), i(o)]); + return n + } + case 6: { + const t = [], + n = o([l, t], r); + for (const n of r) !e && yn(gn(n)) || t.push(i(n)); + return n + } + } + const { + message: a + } = r; + return o([l, { + name: s, + message: a + }], r) + }; + return i + })(!(t || n), !!t, new Map, r)(e), r + }, + vn = "function" == typeof structuredClone ? (e, t) => t && ("json" in t || "lossy" in t) ? pn(xn(e, t)) : structuredClone(e) : (e, t) => pn(xn(e, t)); + + function kn(e) { + const t = []; + let n = -1, + r = 0, + o = 0; + for (; ++n < e.length;) { + const i = e.charCodeAt(n); + let l = ""; + if (37 === i && ze(e.charCodeAt(n + 1)) && ze(e.charCodeAt(n + 2))) o = 2; + else if (i < 128) /[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(i)) || (l = String.fromCharCode(i)); + else if (i > 55295 && i < 57344) { + const t = e.charCodeAt(n + 1); + i < 56320 && t > 56319 && t < 57344 ? (l = String.fromCharCode(i, t), o = 1) : l = "�" + } else l = String.fromCharCode(i); + l && (t.push(e.slice(r, n), encodeURIComponent(l)), r = n + o + 1, l = ""), o && (n += o, o = 0) + } + return t.join("") + e.slice(r) + } + + function bn(e, t) { + const n = [{ + type: "text", + value: "↩" + }]; + return t > 1 && n.push({ + type: "element", + tagName: "sup", + properties: {}, + children: [{ + type: "text", + value: String(t) + }] + }), n + } + + function wn(e, t) { + return "Back to reference " + (e + 1) + (t > 1 ? "-" + t : "") + } + const Sn = function(e) { + if (null == e) return Cn; + if ("function" == typeof e) return In(e); + if ("object" == typeof e) return Array.isArray(e) ? function(e) { + const t = []; + let n = -1; + for (; ++n < e.length;) t[n] = Sn(e[n]); + return In((function(...e) { + let n = -1; + for (; ++n < t.length;) + if (t[n].apply(this, e)) return !0; + return !1 + })) + }(e) : function(e) { + const t = e; + return In((function(n) { + const r = n; + let o; + for (o in e) + if (r[o] !== t[o]) return !1; + return !0 + })) + }(e); + if ("string" == typeof e) return t = e, In((function(e) { + return e && e.type === t + })); + var t; + throw new Error("Expected function, string, or object as test") + }; + + function In(e) { + return function(t, n, r) { + return Boolean(function(e) { + return null !== e && "object" == typeof e && "type" in e + }(t) && e.call(this, t, "number" == typeof n ? n : void 0, r || void 0)) + } + } + + function Cn() { + return !0 + } + const En = []; + + function Pn(e, t, n, r) { + let o, i, l; + "function" == typeof t && "function" != typeof n ? (i = void 0, l = t, o = n) : (i = t, l = n, o = r), + function(e, t, n, r) { + let o; + "function" == typeof t && "function" != typeof n ? (r = n, n = t) : o = t; + const i = Sn(o), + l = r ? -1 : 1; + ! function e(o, s, a) { + const u = o && "object" == typeof o ? o : {}; + if ("string" == typeof u.type) { + const e = "string" == typeof u.tagName ? u.tagName : "string" == typeof u.name ? u.name : void 0; + Object.defineProperty(c, "name", { + value: "node (" + o.type + (e ? "<" + e + ">" : "") + ")" + }) + } + return c; + + function c() { + let u, c, f, p = En; + if ((!t || i(o, s, a[a.length - 1] || void 0)) && (p = function(e) { + return Array.isArray(e) ? e : "number" == typeof e ? [!0, e] : null == e ? En : [e] + }(n(o, a)), !1 === p[0])) return p; + if ("children" in o && o.children) { + const t = o; + if (t.children && "skip" !== p[0]) + for (c = (r ? t.children.length : -1) + l, f = a.concat(t); c > -1 && c < t.children.length;) { + const n = t.children[c]; + if (u = e(n, c, f)(), !1 === u[0]) return u; + c = "number" == typeof u[1] ? u[1] : c + l + } + } + return p + } + }(e, void 0, [])() + }(e, i, (function(e, t) { + const n = t[t.length - 1], + r = n ? n.children.indexOf(e) : void 0; + return l(e, r, n) + }), o) + } + + function Tn(e, t) { + const n = t.referenceType; + let r = "]"; + if ("collapsed" === n ? r += "[]" : "full" === n && (r += "[" + (t.label || t.identifier) + "]"), "imageReference" === t.type) return [{ + type: "text", + value: "![" + t.alt + r + }]; + const o = e.all(t), + i = o[0]; + i && "text" === i.type ? i.value = "[" + i.value : o.unshift({ + type: "text", + value: "[" + }); + const l = o[o.length - 1]; + return l && "text" === l.type ? l.value += r : o.push({ + type: "text", + value: r + }), o + } + + function On(e) { + const t = e.spread; + return null == t ? e.children.length > 1 : t + } + + function An(e) { + const t = String(e), + n = /\r?\n|\r/g; + let r = n.exec(t), + o = 0; + const i = []; + for (; r;) i.push(Ln(t.slice(o, r.index), o > 0, !0), r[0]), o = r.index + r[0].length, r = n.exec(t); + return i.push(Ln(t.slice(o), o > 0, !1)), i.join("") + } + + function Ln(e, t, n) { + let r = 0, + o = e.length; + if (t) { + let t = e.codePointAt(r); + for (; 9 === t || 32 === t;) r++, t = e.codePointAt(r) + } + if (n) { + let t = e.codePointAt(o - 1); + for (; 9 === t || 32 === t;) o--, t = e.codePointAt(o - 1) + } + return o > r ? e.slice(r, o) : "" + } + const Dn = { + blockquote: function(e, t) { + const n = { + type: "element", + tagName: "blockquote", + properties: {}, + children: e.wrap(e.all(t), !0) + }; + return e.patch(t, n), e.applyData(t, n) + }, + break: function(e, t) { + const n = { + type: "element", + tagName: "br", + properties: {}, + children: [] + }; + return e.patch(t, n), [e.applyData(t, n), { + type: "text", + value: "\n" + }] + }, + code: function(e, t) { + const n = t.value ? t.value + "\n" : "", + r = {}; + t.lang && (r.className = ["language-" + t.lang]); + let o = { + type: "element", + tagName: "code", + properties: r, + children: [{ + type: "text", + value: n + }] + }; + return t.meta && (o.data = { + meta: t.meta + }), e.patch(t, o), o = e.applyData(t, o), o = { + type: "element", + tagName: "pre", + properties: {}, + children: [o] + }, e.patch(t, o), o + }, + delete: function(e, t) { + const n = { + type: "element", + tagName: "del", + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + emphasis: function(e, t) { + const n = { + type: "element", + tagName: "em", + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + footnoteReference: function(e, t) { + const n = "string" == typeof e.options.clobberPrefix ? e.options.clobberPrefix : "user-content-", + r = String(t.identifier).toUpperCase(), + o = kn(r.toLowerCase()), + i = e.footnoteOrder.indexOf(r); + let l, s = e.footnoteCounts.get(r); + void 0 === s ? (s = 0, e.footnoteOrder.push(r), l = e.footnoteOrder.length) : l = i + 1, s += 1, e.footnoteCounts.set(r, s); + const a = { + type: "element", + tagName: "a", + properties: { + href: "#" + n + "fn-" + o, + id: n + "fnref-" + o + (s > 1 ? "-" + s : ""), + dataFootnoteRef: !0, + ariaDescribedBy: ["footnote-label"] + }, + children: [{ + type: "text", + value: String(l) + }] + }; + e.patch(t, a); + const u = { + type: "element", + tagName: "sup", + properties: {}, + children: [a] + }; + return e.patch(t, u), e.applyData(t, u) + }, + heading: function(e, t) { + const n = { + type: "element", + tagName: "h" + t.depth, + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + html: function(e, t) { + if (e.options.allowDangerousHtml) { + const n = { + type: "raw", + value: t.value + }; + return e.patch(t, n), e.applyData(t, n) + } + }, + imageReference: function(e, t) { + const n = String(t.identifier).toUpperCase(), + r = e.definitionById.get(n); + if (!r) return Tn(e, t); + const o = { + src: kn(r.url || ""), + alt: t.alt + }; + null !== r.title && void 0 !== r.title && (o.title = r.title); + const i = { + type: "element", + tagName: "img", + properties: o, + children: [] + }; + return e.patch(t, i), e.applyData(t, i) + }, + image: function(e, t) { + const n = { + src: kn(t.url) + }; + null !== t.alt && void 0 !== t.alt && (n.alt = t.alt), null !== t.title && void 0 !== t.title && (n.title = t.title); + const r = { + type: "element", + tagName: "img", + properties: n, + children: [] + }; + return e.patch(t, r), e.applyData(t, r) + }, + inlineCode: function(e, t) { + const n = { + type: "text", + value: t.value.replace(/\r?\n|\r/g, " ") + }; + e.patch(t, n); + const r = { + type: "element", + tagName: "code", + properties: {}, + children: [n] + }; + return e.patch(t, r), e.applyData(t, r) + }, + linkReference: function(e, t) { + const n = String(t.identifier).toUpperCase(), + r = e.definitionById.get(n); + if (!r) return Tn(e, t); + const o = { + href: kn(r.url || "") + }; + null !== r.title && void 0 !== r.title && (o.title = r.title); + const i = { + type: "element", + tagName: "a", + properties: o, + children: e.all(t) + }; + return e.patch(t, i), e.applyData(t, i) + }, + link: function(e, t) { + const n = { + href: kn(t.url) + }; + null !== t.title && void 0 !== t.title && (n.title = t.title); + const r = { + type: "element", + tagName: "a", + properties: n, + children: e.all(t) + }; + return e.patch(t, r), e.applyData(t, r) + }, + listItem: function(e, t, n) { + const r = e.all(t), + o = n ? function(e) { + let t = !1; + if ("list" === e.type) { + t = e.spread || !1; + const n = e.children; + let r = -1; + for (; !t && ++r < n.length;) t = On(n[r]) + } + return t + }(n) : On(t), + i = {}, + l = []; + if ("boolean" == typeof t.checked) { + const e = r[0]; + let n; + e && "element" === e.type && "p" === e.tagName ? n = e : (n = { + type: "element", + tagName: "p", + properties: {}, + children: [] + }, r.unshift(n)), n.children.length > 0 && n.children.unshift({ + type: "text", + value: " " + }), n.children.unshift({ + type: "element", + tagName: "input", + properties: { + type: "checkbox", + checked: t.checked, + disabled: !0 + }, + children: [] + }), i.className = ["task-list-item"] + } + let s = -1; + for (; ++s < r.length;) { + const e = r[s]; + (o || 0 !== s || "element" !== e.type || "p" !== e.tagName) && l.push({ + type: "text", + value: "\n" + }), "element" !== e.type || "p" !== e.tagName || o ? l.push(e) : l.push(...e.children) + } + const a = r[r.length - 1]; + a && (o || "element" !== a.type || "p" !== a.tagName) && l.push({ + type: "text", + value: "\n" + }); + const u = { + type: "element", + tagName: "li", + properties: i, + children: l + }; + return e.patch(t, u), e.applyData(t, u) + }, + list: function(e, t) { + const n = {}, + r = e.all(t); + let o = -1; + for ("number" == typeof t.start && 1 !== t.start && (n.start = t.start); ++o < r.length;) { + const e = r[o]; + if ("element" === e.type && "li" === e.tagName && e.properties && Array.isArray(e.properties.className) && e.properties.className.includes("task-list-item")) { + n.className = ["contains-task-list"]; + break + } + } + const i = { + type: "element", + tagName: t.ordered ? "ol" : "ul", + properties: n, + children: e.wrap(r, !0) + }; + return e.patch(t, i), e.applyData(t, i) + }, + paragraph: function(e, t) { + const n = { + type: "element", + tagName: "p", + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + root: function(e, t) { + const n = { + type: "root", + children: e.wrap(e.all(t)) + }; + return e.patch(t, n), e.applyData(t, n) + }, + strong: function(e, t) { + const n = { + type: "element", + tagName: "strong", + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + table: function(e, t) { + const n = e.all(t), + r = n.shift(), + o = []; + if (r) { + const n = { + type: "element", + tagName: "thead", + properties: {}, + children: e.wrap([r], !0) + }; + e.patch(t.children[0], n), o.push(n) + } + if (n.length > 0) { + const r = { + type: "element", + tagName: "tbody", + properties: {}, + children: e.wrap(n, !0) + }, + i = Q(t.children[1]), + l = K(t.children[t.children.length - 1]); + i && l && (r.position = { + start: i, + end: l + }), o.push(r) + } + const i = { + type: "element", + tagName: "table", + properties: {}, + children: e.wrap(o, !0) + }; + return e.patch(t, i), e.applyData(t, i) + }, + tableCell: function(e, t) { + const n = { + type: "element", + tagName: "td", + properties: {}, + children: e.all(t) + }; + return e.patch(t, n), e.applyData(t, n) + }, + tableRow: function(e, t, n) { + const r = n ? n.children : void 0, + o = 0 === (r ? r.indexOf(t) : 1) ? "th" : "td", + i = n && "table" === n.type ? n.align : void 0, + l = i ? i.length : t.children.length; + let s = -1; + const a = []; + for (; ++s < l;) { + const n = t.children[s], + r = {}, + l = i ? i[s] : void 0; + l && (r.align = l); + let u = { + type: "element", + tagName: o, + properties: r, + children: [] + }; + n && (u.children = e.all(n), e.patch(n, u), u = e.applyData(n, u)), a.push(u) + } + const u = { + type: "element", + tagName: "tr", + properties: {}, + children: e.wrap(a, !0) + }; + return e.patch(t, u), e.applyData(t, u) + }, + text: function(e, t) { + const n = { + type: "text", + value: An(String(t.value)) + }; + return e.patch(t, n), e.applyData(t, n) + }, + thematicBreak: function(e, t) { + const n = { + type: "element", + tagName: "hr", + properties: {}, + children: [] + }; + return e.patch(t, n), e.applyData(t, n) + }, + toml: zn, + yaml: zn, + definition: zn, + footnoteDefinition: zn + }; + + function zn() {} + const Nn = {}.hasOwnProperty, + Mn = {}; + + function Fn(e, t) { + e.position && (t.position = function(e) { + const t = Q(e), + n = K(e); + if (t && n) return { + start: t, + end: n + } + }(e)) + } + + function _n(e, t) { + let n = t; + if (e && e.data) { + const t = e.data.hName, + r = e.data.hChildren, + o = e.data.hProperties; + "string" == typeof t && ("element" === n.type ? n.tagName = t : n = { + type: "element", + tagName: t, + properties: {}, + children: "children" in n ? n.children : [n] + }), "element" === n.type && o && Object.assign(n.properties, vn(o)), "children" in n && n.children && null != r && (n.children = r) + } + return n + } + + function Rn(e, t) { + const n = t.data || {}, + r = !("value" in t) || Nn.call(n, "hProperties") || Nn.call(n, "hChildren") ? { + type: "element", + tagName: "div", + properties: {}, + children: e.all(t) + } : { + type: "text", + value: t.value + }; + return e.patch(t, r), e.applyData(t, r) + } + + function jn(e, t) { + const n = []; + let r = -1; + for (t && n.push({ + type: "text", + value: "\n" + }); ++r < e.length;) r && n.push({ + type: "text", + value: "\n" + }), n.push(e[r]); + return t && e.length > 0 && n.push({ + type: "text", + value: "\n" + }), n + } + + function Bn(e) { + let t = 0, + n = e.charCodeAt(t); + for (; 9 === n || 32 === n;) t++, n = e.charCodeAt(t); + return e.slice(t) + } + + function Hn(e, t) { + const n = function(e, t) { + const n = t || Mn, + r = new Map, + o = new Map, + i = new Map, + l = { + ...Dn, + ...n.handlers + }, + s = { + all: function(e) { + const t = []; + if ("children" in e) { + const n = e.children; + let r = -1; + for (; ++r < n.length;) { + const o = s.one(n[r], e); + if (o) { + if (r && "break" === n[r - 1].type && (Array.isArray(o) || "text" !== o.type || (o.value = Bn(o.value)), !Array.isArray(o) && "element" === o.type)) { + const e = o.children[0]; + e && "text" === e.type && (e.value = Bn(e.value)) + } + Array.isArray(o) ? t.push(...o) : t.push(o) + } + } + } + return t + }, + applyData: _n, + definitionById: r, + footnoteById: o, + footnoteCounts: i, + footnoteOrder: [], + handlers: l, + one: function(e, t) { + const n = e.type, + r = s.handlers[n]; + if (Nn.call(s.handlers, n) && r) return r(s, e, t); + if (s.options.passThrough && s.options.passThrough.includes(n)) { + if ("children" in e) { + const { + children: t, + ...n + } = e, r = vn(n); + return r.children = s.all(e), r + } + return vn(e) + } + return (s.options.unknownHandler || Rn)(s, e, t) + }, + options: n, + patch: Fn, + wrap: jn + }; + return Pn(e, (function(e) { + if ("definition" === e.type || "footnoteDefinition" === e.type) { + const t = "definition" === e.type ? r : o, + n = String(e.identifier).toUpperCase(); + t.has(n) || t.set(n, e) + } + })), s + }(e, t), + r = n.one(e, void 0), + o = function(e) { + const t = "string" == typeof e.options.clobberPrefix ? e.options.clobberPrefix : "user-content-", + n = e.options.footnoteBackContent || bn, + r = e.options.footnoteBackLabel || wn, + o = e.options.footnoteLabel || "Footnotes", + i = e.options.footnoteLabelTagName || "h2", + l = e.options.footnoteLabelProperties || { + className: ["sr-only"] + }, + s = []; + let a = -1; + for (; ++a < e.footnoteOrder.length;) { + const o = e.footnoteById.get(e.footnoteOrder[a]); + if (!o) continue; + const i = e.all(o), + l = String(o.identifier).toUpperCase(), + u = kn(l.toLowerCase()); + let c = 0; + const f = [], + p = e.footnoteCounts.get(l); + for (; void 0 !== p && ++c <= p;) { + f.length > 0 && f.push({ + type: "text", + value: " " + }); + let e = "string" == typeof n ? n : n(a, c); + "string" == typeof e && (e = { + type: "text", + value: e + }), f.push({ + type: "element", + tagName: "a", + properties: { + href: "#" + t + "fnref-" + u + (c > 1 ? "-" + c : ""), + dataFootnoteBackref: "", + ariaLabel: "string" == typeof r ? r : r(a, c), + className: ["data-footnote-backref"] + }, + children: Array.isArray(e) ? e : [e] + }) + } + const d = i[i.length - 1]; + if (d && "element" === d.type && "p" === d.tagName) { + const e = d.children[d.children.length - 1]; + e && "text" === e.type ? e.value += " " : d.children.push({ + type: "text", + value: " " + }), d.children.push(...f) + } else i.push(...f); + const h = { + type: "element", + tagName: "li", + properties: { + id: t + "fn-" + u + }, + children: e.wrap(i, !0) + }; + e.patch(o, h), s.push(h) + } + if (0 !== s.length) return { + type: "element", + tagName: "section", + properties: { + dataFootnotes: !0, + className: ["footnotes"] + }, + children: [{ + type: "element", + tagName: i, + properties: { + ...vn(l), + id: "footnote-label" + }, + children: [{ + type: "text", + value: o + }] + }, { + type: "text", + value: "\n" + }, { + type: "element", + tagName: "ol", + properties: {}, + children: e.wrap(s, !0) + }, { + type: "text", + value: "\n" + }] + } + }(n), + i = Array.isArray(r) ? { + type: "root", + children: r + } : r || { + type: "root", + children: [] + }; + return o && i.children.push({ + type: "text", + value: "\n" + }, o), i + } + + function Un(e, t) { + return e && "run" in e ? async function(n, r) { + const o = Hn(n, { + file: r, + ...t + }); + await e.run(o, r) + }: function(n, r) { + return Hn(n, { + file: r, + ...t || e + }) + } + } + + function Vn(e) { + if (e) throw e + } + var qn = n(94470); + + function Wn(e) { + if ("object" != typeof e || null === e) return !1; + const t = Object.getPrototypeOf(e); + return !(null !== t && t !== Object.prototype && null !== Object.getPrototypeOf(t) || Symbol.toStringTag in e || Symbol.iterator in e) + } + const Yn = function(e, t) { + if (void 0 !== t && "string" != typeof t) throw new TypeError('"ext" argument must be a string'); + Jn(e); + let n, r = 0, + o = -1, + i = e.length; + if (void 0 === t || 0 === t.length || t.length > e.length) { + for (; i--;) + if (47 === e.codePointAt(i)) { + if (n) { + r = i + 1; + break + } + } else o < 0 && (n = !0, o = i + 1); + return o < 0 ? "" : e.slice(r, o) + } + if (t === e) return ""; + let l = -1, + s = t.length - 1; + for (; i--;) + if (47 === e.codePointAt(i)) { + if (n) { + r = i + 1; + break + } + } else l < 0 && (n = !0, l = i + 1), s > -1 && (e.codePointAt(i) === t.codePointAt(s--) ? s < 0 && (o = i) : (s = -1, o = l)); + return r === o ? o = l : o < 0 && (o = e.length), e.slice(r, o) + }, + Kn = function(e) { + if (Jn(e), 0 === e.length) return "."; + let t, n = -1, + r = e.length; + for (; --r;) + if (47 === e.codePointAt(r)) { + if (t) { + n = r; + break + } + } else t || (t = !0); + return n < 0 ? 47 === e.codePointAt(0) ? "/" : "." : 1 === n && 47 === e.codePointAt(0) ? "//" : e.slice(0, n) + }, + Qn = function(e) { + Jn(e); + let t, n = e.length, + r = -1, + o = 0, + i = -1, + l = 0; + for (; n--;) { + const s = e.codePointAt(n); + if (47 !== s) r < 0 && (t = !0, r = n + 1), 46 === s ? i < 0 ? i = n : 1 !== l && (l = 1) : i > -1 && (l = -1); + else if (t) { + o = n + 1; + break + } + } + return i < 0 || r < 0 || 0 === l || 1 === l && i === r - 1 && i === o + 1 ? "" : e.slice(i, r) + }, + $n = function(...e) { + let t, n = -1; + for (; ++n < e.length;) Jn(e[n]), e[n] && (t = void 0 === t ? e[n] : t + "/" + e[n]); + return void 0 === t ? "." : function(e) { + Jn(e); + const t = 47 === e.codePointAt(0); + let n = function(e, t) { + let n, r, o = "", + i = 0, + l = -1, + s = 0, + a = -1; + for (; ++a <= e.length;) { + if (a < e.length) n = e.codePointAt(a); + else { + if (47 === n) break; + n = 47 + } + if (47 === n) { + if (l === a - 1 || 1 === s); + else if (l !== a - 1 && 2 === s) { + if (o.length < 2 || 2 !== i || 46 !== o.codePointAt(o.length - 1) || 46 !== o.codePointAt(o.length - 2)) + if (o.length > 2) { + if (r = o.lastIndexOf("/"), r !== o.length - 1) { + r < 0 ? (o = "", i = 0) : (o = o.slice(0, r), i = o.length - 1 - o.lastIndexOf("/")), l = a, s = 0; + continue + } + } else if (o.length > 0) { + o = "", i = 0, l = a, s = 0; + continue + } + t && (o = o.length > 0 ? o + "/.." : "..", i = 2) + } else o.length > 0 ? o += "/" + e.slice(l + 1, a) : o = e.slice(l + 1, a), i = a - l - 1; + l = a, s = 0 + } else 46 === n && s > -1 ? s++ : s = -1 + } + return o + }(e, !t); + return 0 !== n.length || t || (n = "."), n.length > 0 && 47 === e.codePointAt(e.length - 1) && (n += "/"), t ? "/" + n : n + }(t) + }, + Xn = "/"; + + function Jn(e) { + if ("string" != typeof e) throw new TypeError("Path must be a string. Received " + JSON.stringify(e)) + } + const Zn = function() { + return "/" + }; + + function Gn(e) { + return Boolean(null !== e && "object" == typeof e && "href" in e && e.href && "protocol" in e && e.protocol && void 0 === e.auth) + } + const er = ["history", "path", "basename", "stem", "extname", "dirname"]; + class tr { + constructor(e) { + let t; + t = e ? Gn(e) ? { + path: e + } : "string" == typeof e || function(e) { + return Boolean(e && "object" == typeof e && "byteLength" in e && "byteOffset" in e) + }(e) ? { + value: e + } : e : {}, this.cwd = Zn(), this.data = {}, this.history = [], this.messages = [], this.value, this.map, this.result, this.stored; + let n, r = -1; + for (; ++r < er.length;) { + const e = er[r]; + e in t && void 0 !== t[e] && null !== t[e] && (this[e] = "history" === e ? [...t[e]] : t[e]) + } + for (n in t) er.includes(n) || (this[n] = t[n]) + } + get basename() { + return "string" == typeof this.path ? Yn(this.path) : void 0 + } + set basename(e) { + rr(e, "basename"), nr(e, "basename"), this.path = $n(this.dirname || "", e) + } + get dirname() { + return "string" == typeof this.path ? Kn(this.path) : void 0 + } + set dirname(e) { + or(this.basename, "dirname"), this.path = $n(e || "", this.basename) + } + get extname() { + return "string" == typeof this.path ? Qn(this.path) : void 0 + } + set extname(e) { + if (nr(e, "extname"), or(this.dirname, "extname"), e) { + if (46 !== e.codePointAt(0)) throw new Error("`extname` must start with `.`"); + if (e.includes(".", 1)) throw new Error("`extname` cannot contain multiple dots") + } + this.path = $n(this.dirname, this.stem + (e || "")) + } + get path() { + return this.history[this.history.length - 1] + } + set path(e) { + Gn(e) && (e = function(e) { + if ("string" == typeof e) e = new URL(e); + else if (!Gn(e)) { + const t = new TypeError('The "path" argument must be of type string or an instance of URL. Received `' + e + "`"); + throw t.code = "ERR_INVALID_ARG_TYPE", t + } + if ("file:" !== e.protocol) { + const e = new TypeError("The URL must be of scheme file"); + throw e.code = "ERR_INVALID_URL_SCHEME", e + } + return function(e) { + if ("" !== e.hostname) { + const e = new TypeError('File URL host must be "localhost" or empty on darwin'); + throw e.code = "ERR_INVALID_FILE_URL_HOST", e + } + const t = e.pathname; + let n = -1; + for (; ++n < t.length;) + if (37 === t.codePointAt(n) && 50 === t.codePointAt(n + 1)) { + const e = t.codePointAt(n + 2); + if (70 === e || 102 === e) { + const e = new TypeError("File URL path must not include encoded / characters"); + throw e.code = "ERR_INVALID_FILE_URL_PATH", e + } + } return decodeURIComponent(t) + }(e) + }(e)), rr(e, "path"), this.path !== e && this.history.push(e) + } + get stem() { + return "string" == typeof this.path ? Yn(this.path, this.extname) : void 0 + } + set stem(e) { + rr(e, "stem"), nr(e, "stem"), this.path = $n(this.dirname || "", e + (this.extname || "")) + } + fail(e, t, n) { + const r = this.message(e, t, n); + throw r.fatal = !0, r + } + info(e, t, n) { + const r = this.message(e, t, n); + return r.fatal = void 0, r + } + message(e, t, n) { + const r = new ee(e, t, n); + return this.path && (r.name = this.path + ":" + r.name, r.file = this.path), r.fatal = !1, this.messages.push(r), r + } + toString(e) { + return void 0 === this.value ? "" : "string" == typeof this.value ? this.value : new TextDecoder(e || void 0).decode(this.value) + } + } + + function nr(e, t) { + if (e && e.includes(Xn)) throw new Error("`" + t + "` cannot be a path: did not expect `" + Xn + "`") + } + + function rr(e, t) { + if (!e) throw new Error("`" + t + "` cannot be empty") + } + + function or(e, t) { + if (!e) throw new Error("Setting `" + t + "` requires `path` to be set too") + } + const ir = function(e) { + const t = this.constructor.prototype, + n = t[e], + r = function() { + return n.apply(r, arguments) + }; + Object.setPrototypeOf(r, t); + const o = Object.getOwnPropertyNames(n); + for (const e of o) { + const t = Object.getOwnPropertyDescriptor(n, e); + t && Object.defineProperty(r, e, t) + } + return r + }, + lr = {}.hasOwnProperty; + class sr extends ir { + constructor() { + super("copy"), this.Compiler = void 0, this.Parser = void 0, this.attachers = [], this.compiler = void 0, this.freezeIndex = -1, this.frozen = void 0, this.namespace = {}, this.parser = void 0, this.transformers = function() { + const e = [], + t = { + run: function(...t) { + let n = -1; + const r = t.pop(); + if ("function" != typeof r) throw new TypeError("Expected function as last argument, not " + r); + ! function o(i, ...l) { + const s = e[++n]; + let a = -1; + if (i) r(i); + else { + for (; ++a < t.length;) null !== l[a] && void 0 !== l[a] || (l[a] = t[a]); + t = l, s ? function(e, t) { + let n; + return function(...t) { + const i = e.length > t.length; + let l; + i && t.push(r); + try { + l = e.apply(this, t) + } catch (e) { + const t = e; + if (i && n) throw t; + return r(t) + } + i || (l && l.then && "function" == typeof l.then ? l.then(o, r) : l instanceof Error ? r(l) : o(l)) + }; + + function r(e, ...r) { + n || (n = !0, t(e, ...r)) + } + + function o(e) { + r(null, e) + } + }(s, o)(...l) : r(null, ...l) + } + }(null, ...t) + }, + use: function(n) { + if ("function" != typeof n) throw new TypeError("Expected `middelware` to be a function, not " + n); + return e.push(n), t + } + }; + return t + }() + } + copy() { + const e = new sr; + let t = -1; + for (; ++t < this.attachers.length;) { + const n = this.attachers[t]; + e.use(...n) + } + return e.data(qn(!0, {}, this.namespace)), e + } + data(e, t) { + return "string" == typeof e ? 2 === arguments.length ? (fr("data", this.frozen), this.namespace[e] = t, this) : lr.call(this.namespace, e) && this.namespace[e] || void 0 : e ? (fr("data", this.frozen), this.namespace = e, this) : this.namespace + } + freeze() { + if (this.frozen) return this; + const e = this; + for (; ++this.freezeIndex < this.attachers.length;) { + const [t, ...n] = this.attachers[this.freezeIndex]; + if (!1 === n[0]) continue; + !0 === n[0] && (n[0] = void 0); + const r = t.call(e, ...n); + "function" == typeof r && this.transformers.use(r) + } + return this.frozen = !0, this.freezeIndex = Number.POSITIVE_INFINITY, this + } + parse(e) { + this.freeze(); + const t = hr(e), + n = this.parser || this.Parser; + return ur("parse", n), n(String(t), t) + } + process(e, t) { + const n = this; + return this.freeze(), ur("process", this.parser || this.Parser), cr("process", this.compiler || this.Compiler), t ? r(void 0, t) : new Promise(r); + + function r(r, o) { + const i = hr(e), + l = n.parse(i); + + function s(e, n) { + e || !n ? o(e) : r ? r(n) : t(void 0, n) + } + n.run(l, i, (function(e, t, r) { + if (e || !t || !r) return s(e); + const o = t, + i = n.stringify(o, r); + var l; + "string" == typeof(l = i) || function(e) { + return Boolean(e && "object" == typeof e && "byteLength" in e && "byteOffset" in e) + }(l) ? r.value = i: r.result = i, s(e, r) + })) + } + } + processSync(e) { + let t, n = !1; + return this.freeze(), ur("processSync", this.parser || this.Parser), cr("processSync", this.compiler || this.Compiler), this.process(e, (function(e, r) { + n = !0, Vn(e), t = r + })), dr("processSync", "process", n), t + } + run(e, t, n) { + pr(e), this.freeze(); + const r = this.transformers; + return n || "function" != typeof t || (n = t, t = void 0), n ? o(void 0, n) : new Promise(o); + + function o(o, i) { + const l = hr(t); + r.run(e, l, (function(t, r, l) { + const s = r || e; + t ? i(t) : o ? o(s) : n(void 0, s, l) + })) + } + } + runSync(e, t) { + let n, r = !1; + return this.run(e, t, (function(e, t) { + Vn(e), n = t, r = !0 + })), dr("runSync", "run", r), n + } + stringify(e, t) { + this.freeze(); + const n = hr(t), + r = this.compiler || this.Compiler; + return cr("stringify", r), pr(e), r(e, n) + } + use(e, ...t) { + const n = this.attachers, + r = this.namespace; + if (fr("use", this.frozen), null == e); + else if ("function" == typeof e) s(e, t); + else { + if ("object" != typeof e) throw new TypeError("Expected usable value, not `" + e + "`"); + Array.isArray(e) ? l(e) : i(e) + } + return this; + + function o(e) { + if ("function" == typeof e) s(e, []); + else { + if ("object" != typeof e) throw new TypeError("Expected usable value, not `" + e + "`"); + if (Array.isArray(e)) { + const [t, ...n] = e; + s(t, n) + } else i(e) + } + } + + function i(e) { + if (!("plugins" in e) && !("settings" in e)) throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither"); + l(e.plugins), e.settings && (r.settings = qn(!0, r.settings, e.settings)) + } + + function l(e) { + let t = -1; + if (null == e); + else { + if (!Array.isArray(e)) throw new TypeError("Expected a list of plugins, not `" + e + "`"); + for (; ++t < e.length;) o(e[t]) + } + } + + function s(e, t) { + let r = -1, + o = -1; + for (; ++r < n.length;) + if (n[r][0] === e) { + o = r; + break + } if (-1 === o) n.push([e, ...t]); + else if (t.length > 0) { + let [r, ...i] = t; + const l = n[o][1]; + Wn(l) && Wn(r) && (r = qn(!0, l, r)), n[o] = [e, r, ...i] + } + } + } + } + const ar = (new sr).freeze(); + + function ur(e, t) { + if ("function" != typeof t) throw new TypeError("Cannot `" + e + "` without `parser`") + } + + function cr(e, t) { + if ("function" != typeof t) throw new TypeError("Cannot `" + e + "` without `compiler`") + } + + function fr(e, t) { + if (t) throw new Error("Cannot call `" + e + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.") + } + + function pr(e) { + if (!Wn(e) || "string" != typeof e.type) throw new TypeError("Expected node, got `" + e + "`") + } + + function dr(e, t, n) { + if (!n) throw new Error("`" + e + "` finished async. Use `" + t + "` instead") + } + + function hr(e) { + return function(e) { + return Boolean(e && "object" == typeof e && "message" in e && "messages" in e) + }(e) ? e : new tr(e) + } + const mr = [], + gr = { + allowDangerousHtml: !0 + }, + yr = /^(https?|ircs?|mailto|xmpp)$/i, + xr = [{ + from: "astPlugins", + id: "remove-buggy-html-in-markdown-parser" + }, { + from: "allowDangerousHtml", + id: "remove-buggy-html-in-markdown-parser" + }, { + from: "allowNode", + id: "replace-allownode-allowedtypes-and-disallowedtypes", + to: "allowElement" + }, { + from: "allowedTypes", + id: "replace-allownode-allowedtypes-and-disallowedtypes", + to: "allowedElements" + }, { + from: "disallowedTypes", + id: "replace-allownode-allowedtypes-and-disallowedtypes", + to: "disallowedElements" + }, { + from: "escapeHtml", + id: "remove-buggy-html-in-markdown-parser" + }, { + from: "includeElementIndex", + id: "#remove-includeelementindex" + }, { + from: "includeNodeIndex", + id: "change-includenodeindex-to-includeelementindex" + }, { + from: "linkTarget", + id: "remove-linktarget" + }, { + from: "plugins", + id: "change-plugins-to-remarkplugins", + to: "remarkPlugins" + }, { + from: "rawSourcePos", + id: "#remove-rawsourcepos" + }, { + from: "renderers", + id: "change-renderers-to-components", + to: "components" + }, { + from: "source", + id: "change-source-to-children", + to: "children" + }, { + from: "sourcePos", + id: "#remove-sourcepos" + }, { + from: "transformImageUri", + id: "#add-urltransform", + to: "urlTransform" + }, { + from: "transformLinkUri", + id: "#add-urltransform", + to: "urlTransform" + }]; + + function vr(e) { + const t = e.allowedElements, + n = e.allowElement, + r = e.children || "", + o = e.className, + i = e.components, + l = e.disallowedElements, + s = e.rehypePlugins || mr, + a = e.remarkPlugins || mr, + u = e.remarkRehypeOptions ? { + ...e.remarkRehypeOptions, + ...gr + } : gr, + c = e.skipHtml, + f = e.unwrapDisallowed, + p = e.urlTransform || kr, + d = ar().use(cn).use(a).use(Un, u).use(s), + h = new tr; + "string" == typeof r && (h.value = r); + for (const t of xr) Object.hasOwn(e, t.from) && (t.from, t.to && t.to, t.id); + const m = d.parse(h); + let g = d.runSync(m, h); + return o && (g = { + type: "element", + tagName: "div", + properties: { + className: o + }, + children: "root" === g.type ? g.children : [g] + }), Pn(g, (function(e, r, o) { + if ("raw" === e.type && o && "number" == typeof r) return c ? o.children.splice(r, 1) : o.children[r] = { + type: "text", + value: e.value + }, r; + if ("element" === e.type) { + let t; + for (t in xe) + if (Object.hasOwn(xe, t) && Object.hasOwn(e.properties, t)) { + const n = e.properties[t], + r = xe[t]; + (null === r || r.includes(e.tagName)) && (e.properties[t] = p(String(n || ""), t, e)) + } + } + if ("element" === e.type) { + let i = t ? !t.includes(e.tagName) : !!l && l.includes(e.tagName); + if (!i && n && "number" == typeof r && (i = !n(e, r, o)), i && o && "number" == typeof r) return f && e.children ? o.children.splice(r, 1, ...e.children) : o.children.splice(r, 1), r + } + })), + function(e, t) { + if (!t || void 0 === t.Fragment) throw new TypeError("Expected `Fragment` in options"); + const n = t.filePath || void 0; + let r; + if (t.development) { + if ("function" != typeof t.jsxDEV) throw new TypeError("Expected `jsxDEV` in options when `development: true`"); + r = function(e, t) { + return function(n, r, o, i) { + const l = Array.isArray(o.children), + s = Q(n); + return t(r, o, i, l, { + columnNumber: s ? s.column - 1 : void 0, + fileName: e, + lineNumber: s ? s.line : void 0 + }, void 0) + } + }(n, t.jsxDEV) + } else { + if ("function" != typeof t.jsx) throw new TypeError("Expected `jsx` in production options"); + if ("function" != typeof t.jsxs) throw new TypeError("Expected `jsxs` in production options"); + o = t.jsx, i = t.jsxs, r = function(e, t, n, r) { + const l = Array.isArray(n.children) ? i : o; + return r ? l(t, n, r) : l(t, n) + } + } + var o, i; + const l = { + Fragment: t.Fragment, + ancestors: [], + components: t.components || {}, + create: r, + elementAttributeNameCase: t.elementAttributeNameCase || "react", + evaluater: t.createEvaluater ? t.createEvaluater() : void 0, + filePath: n, + ignoreInvalidStyle: t.ignoreInvalidStyle || !1, + passKeys: !1 !== t.passKeys, + passNode: t.passNode || !1, + schema: "svg" === t.space ? R : _, + stylePropertyNameCase: t.stylePropertyNameCase || "dom", + tableCellAlignToStyle: !1 !== t.tableCellAlignToStyle + }, + s = ae(l, e, void 0); + return s && "string" != typeof s ? s : l.create(e, l.Fragment, { + children: s || void 0 + }, void 0) + }(g, { + Fragment: ve.Fragment, + components: i, + ignoreInvalidStyle: !0, + jsx: ve.jsx, + jsxs: ve.jsxs, + passKeys: !0, + passNode: !0 + }) + } + + function kr(e) { + const t = e.indexOf(":"), + n = e.indexOf("?"), + r = e.indexOf("#"), + o = e.indexOf("/"); + return t < 0 || o > -1 && t > o || n > -1 && t > n || r > -1 && t > r || yr.test(e.slice(0, t)) ? e : "" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js.LICENSE.txt b/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js.LICENSE.txt new file mode 100644 index 0000000..e68557b --- /dev/null +++ b/mp-core/1884.2b7cbd8ff99c67d7c3f9.bundle.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/mp-core/1985.72f33bc23aaabe93ae9a.bundle.js b/mp-core/1985.72f33bc23aaabe93ae9a.bundle.js new file mode 100644 index 0000000..3df38c4 --- /dev/null +++ b/mp-core/1985.72f33bc23aaabe93ae9a.bundle.js @@ -0,0 +1,551 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [1985], { + 40001: (e, t, i) => { + i.d(t, { + Lm: () => a, + U8: () => o, + lk: () => n, + sN: () => r + }); + var s = i(67294); + const n = e => s.createElement(s.Fragment, null, s.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, s.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? s.createElement("img", { + draggable: "false", + src: i(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), s.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + a = e => { + let [t, n] = s.useState(!!e.openByDefault); + return !1 === e.visible ? s.createElement(s.Fragment, null) : s.createElement(s.Fragment, null, s.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => n(!t) + }, s.createElement("img", { + draggable: "false", + src: i(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), s.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? s.createElement("img", { + draggable: "false", + src: i(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + r = e => { + let [t, n] = s.useState(!1); + return s.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => n(!0), + onPointerLeave: e => n(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? s.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||i(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||i(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : s.createElement("img", { + draggable: "false", + src: e.icon || i(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), s.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + o = e => s.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, s.createElement("img", { + src: i(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), s.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 46839: (e, t, i) => { + i.d(t, { + Z: () => s + }); + const s = { + appVersion: i(4147).i8, + colors: { + darkGrey: "#272727", + black: "#1a1a1a" + } + } + }, + 31985: (e, t, i) => { + i.r(t), i.d(t, { + default: () => g + }); + var s = i(46839), + n = i(42238), + a = i.n(n), + r = i(67294), + o = i(32589), + l = i(40001); + class h extends r.PureComponent { + render() { + let e = metapress.plugins.callAll("getDebugMenuOptions").flat(); + for (let t of e) t.section = t.section || "General"; + let t = []; + for (let i of e) t.includes(i.section) || t.push(i.section); + return t.sort(((e, t) => e.localeCompare(t))), e.sort(((e, t) => (e.name || "").localeCompare(t.name || ""))), r.createElement(l.lk, { + title: "Debug Menu", + onClose: () => metapress.menubar.closePanel() + }, t.map((t => r.createElement(l.Lm, { + openByDefault: !0, + key: t, + title: t + }, e.filter((e => e.section == t)).map((e => this.renderOption(e))))))) + } + renderOption(e) { + return r.createElement(o.zx, { + key: e.id, + title: e.name, + onClick: () => this.onOptionClick(e) + }) + } + async onOptionClick(e) { + await (e.action?.()), this.forceUpdate() + } + } + var d = i(55293), + c = i(6147); + class p extends c.Z { + canvas = null; + context = null; + iconCache = {}; + onLoad() { + this.canvas = document.createElement("canvas"), this.canvas.width = 1024, this.canvas.height = 1024, this.context = this.canvas.getContext("2d"); + let e = new THREE.CanvasTexture(this.canvas); + e.colorSpace = THREE.SRGBColorSpace, e.anisotropy = metapress.renderer.glrenderer.capabilities.getMaxAnisotropy(); + let t = new THREE.PlaneGeometry(1, 1), + i = new THREE.MeshBasicMaterial({ + map: e, + transparent: !0, + alphaTest: .01 + }); + this.object = new THREE.Mesh(t, i), this.timer = setInterval((() => this.draw()), 1e3) + } + onUnload() { + clearInterval(this.timer) + } + draw() { + if (this.entity.hidden) return; + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + let e = metapress.debug.text.split("\n"); + this.context.fillStyle = "#000", this.context.font = "12px monospace", this.context.textAlign = "left", this.context.textBaseline = "top"; + for (let t = 0; t < e.length; t++) this.context.fillText(e[t], 0, 14 * t); + this.object.material.map.needsUpdate = !0 + } + } + var m = i(25108); + + function u(e) { + let [t, i] = (0, r.useState)(0); + (0, r.useEffect)((() => { + let e = setInterval((() => i((e => e + 1))), 1e3); + return () => clearInterval(e) + }), []); + let s = []; + for (let e of metapress.plugins.stats.recordedEvents) { + let t = s.find((t => t.name == e.name)); + t ? t.events.push(e) : s.push({ + name: e.name, + events: [e] + }) + } + return s.sort(((e, t) => e.name.localeCompare(t.name))), r.createElement(l.lk, { + title: "Event Monitor", + onClose: () => metapress.menubar.closePanel() + }, r.createElement(l.Lm, { + openByDefault: !0, + title: "Actions" + }, r.createElement(o.aW, null, r.createElement(o.ek, { + title: "Clear", + onClick: () => { + metapress.plugins.stats.recordedEvents = [], i((e => e + 1)) + }, + disabled: !metapress.plugins.stats.recordedEvents.length + }), r.createElement(o.ek, { + title: "Start", + onClick: () => { + metapress.plugins.stats.recordEvents = !0, i((e => e + 1)) + }, + disabled: metapress.plugins.stats.recordEvents + }), r.createElement(o.ek, { + title: "Stop", + onClick: () => { + metapress.plugins.stats.recordEvents = !1, i((e => e + 1)) + }, + disabled: !metapress.plugins.stats.recordEvents + }))), r.createElement(l.Lm, { + openByDefault: !0, + title: `Events (${metapress.plugins.stats.recordedEvents.length})` + }, 0 == s.length ? r.createElement("div", { + style: { + margin: "0px 28px", + padding: 0, + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, "No events recorded") : null, s.map(((e, t) => r.createElement(l.sN, { + key: t, + name: `${e.name} (${e.events.length})`, + onClick: () => m.log(e) + }))))) + } + class g { + id = "core.debug"; + name = "Debug Utilities"; + description = "Displays an overlay describing the app internals."; + version = "1.0.0"; + requires = ["renderer", "menubar"]; + provides = ["debug", "render:vr.debug-text"]; + div = document.createElement("div"); + text = ""; + isShown = !1; + onLoad() { + this.div.style.cssText = 'display: none; position: absolute; z-index: 1; top: 10px; left: 10px; max-width: calc(100% - 40px); font-size: 10px; font-family: "Roboto Mono", monospace; color: #e9e9e9; line-height: 1.5; white-space: pre-wrap; pointer-events: none; background-color: rgb(0 0 0 / 60%); border-radius: 10px; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); padding: 10px;', metapress.contentDiv.appendChild(this.div), this.updateTimer = setInterval(this.onTimer.bind(this), 1e3); + let e = new(a())(navigator.userAgent).getResult(); + this.systemLine = `cpu=${e.cpu.architecture||"?"} device=${e.device.type||"?"} model=${e.device.vendor||"?"} ${e.device.model||""} os=${e.os.name||"?"} ${e.os.version||""} browser=${e.browser.name||"?"} ${e.browser.version||""} engine=${e.engine.name||"?"} ${e.engine.version||""}`, window.addEventListener("keydown", (e => { + e.shiftKey && e.ctrlKey && ["`", "~", "§", "±", "0"].includes(e.key) && (e.preventDefault(), this.showDebugMenu()) + })), metapress.entities.add({ + id: "core.debug:vr.text", + type: "vr.debug-text", + name: "VR Debug Text", + hidden: !0, + parent: "core.render.vr:menubar", + x: 0, + y: -.3, + z: 0, + scaleX: .5, + scaleY: .5, + scaleZ: .5, + physical: !1 + }), !this.isShown && localStorage["mp.debug.text"] && this.toggleDisplay() + } + createRenderer(e) { + if ("vr.debug-text" == e) return new p + } + toggleDisplay() { + this.div && (this.isShown ? (this.isShown = !1, this.div.style.display = "none", metapress.entities.update("core.debug:vr.text", { + hidden: !0 + })) : (this.isShown = !0, this.div.style.display = "block", metapress.entities.update("core.debug:vr.text", { + hidden: !1 + })), localStorage["mp.debug.text"] = this.isShown ? "1" : "") + } + $getDebugSection() { + let e = metapress.plugins.all.reduce(((e, t) => e + (t._state == d.BV.Loaded ? 1 : 0)), 0), + t = metapress.plugins.all.length, + i = metapress.storage?.id || "none", + n = { + order: -9999, + id: "core.main", + name: "", + text: `App: version=${s.Z.appVersion} origin=${location.origin} storage=${i}\nPosition: x=${(metapress.avatars?.currentUserEntity.x||0).toFixed(2)} y=${(metapress.avatars?.currentUserEntity.y||0).toFixed(2)} z=${(metapress.avatars?.currentUserEntity.z||0).toFixed(2)}\nSystem: ${this.systemLine}\nPlugins: loaded=${e}/${t} events=${metapress.plugins.stats.eventsEmitted}/s` + }; + return metapress.plugins.stats.eventsEmitted = 0, n + } + $getDebugMenuOptions = () => [{ + id: "core.debug.text", + name: this.isShown ? "Hide debug text" : "Show debug text", + action: () => this.toggleDisplay() + }, { + id: "core.debug.events", + name: "Event monitor", + action: () => this.showEventMonitor() + }]; + onTimer() { + let e = metapress.plugins.callAll("getDebugSection").flat(); + e.sort(((e, t) => { + let i = e.order || 0, + s = t.order || 0; + return i != s ? i - s : (e.name || "").localeCompare(t.name || "") + })); + for (let t = 0; t < e.length; t++) { + let i = e[t], + s = e.findIndex((e => e != i && e.id && e.id == i.id)); - 1 != s && (i.text += "\n" + e[s].text, e.splice(s, 1)) + } + this.text = ""; + for (let t of e)(t.name || t.text) && ("core.main" != t.id && (this.text += "=== " + t.name + "\n"), this.text += t.text + "\n\n"); + this.text = this.text.slice(0, -2), this.div.innerText = this.text + } + showDebugMenu() { + const debugAccess = metapressConfig.debugMenuAccess || 'admins_only'; // Valor padrão + + if (debugAccess === 'admins_only') { + // Apenas admins podem acessar (verifica barra de administração ou canEdit) + if (!metapressConfig.core.integration.wordpress.adminBarShowing && !metapressConfig.core.integration.wordpress.canEdit) { + metapress.menubar.toasts.show({ + text: "Você precisa ser um administrador logado para acessar o menu de debug." + }); + return; + } + } else if (debugAccess === 'logged_in') { + // Todos os usuários logados podem acessar + if (!metapress.user.isLoggedIn) { + metapress.menubar.toasts.show({ + text: "Você precisa estar logado para acessar o menu de debug." + }); + return; + } + } else if (debugAccess === 'everyone') { + // Todos podem acessar, sem verificação + } + + metapress.menubar.toggleReactPanel("core.debug.menu", h) + } + showEventMonitor() { + metapress.menubar.toggleReactPanel("core.debug.events", u) + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:showDebugMenu`, + type: "action", + name: "Debug - Show menu", + tags: "show debug menu, open debug menu", + content: "\n Assistant instruction: Run this action when the user wants to open the debug menu. Don't mention it otherwise. This is a developer feature, don't mention it to normal users.\n ", + action: e => (this.showDebugMenu(), "Menu opened") + }, { + id: `${this.id}:showEventMonitor`, + type: "action", + name: "Debug - Show event monitor", + tags: "show event monitor, open event monitor", + content: "\n Assistant instruction: Run this action when the user wants to see what code events are occurring in the space. Don't mention it otherwise. This is a developer feature, don't mention it to normal users.\n ", + action: e => (this.showEventMonitor(), "Event monitor UI opened") + }, { + id: `${this.id}:showDebugOverlay`, + type: "action", + name: "Debug - Stats text overlay", + tags: "debug text, show debug stats, hide debug stats, show debug statistics, show debug overlay, display debug overlay, display debug stats, remove debug stats, show frame rate, show fps, show memory usage, show graphics memory, show debug information, show debug data, show debug details, show debug info, debug stats, frame rate, fps, memory usage, graphics memory, graphics driver, debug information, debug data, debug details, debug info, graphics card, gfx card, GPU, CPU, processor, RAM, memory, hardware", + content: `\n Assistant instruction: Run this action with value 'show' or 'hide' to show/hide the debug overlay which contains information such as frame rate, graphics memory, etc. Don't mention it otherwise. This is a developer feature, don't mention it to normal users.\n Stats overlay is currently ${this.isShown?"visible":"hidden"}.\n Current stats:\n${this.text}\n `, + action: e => "show" == e.value ? this.isShown ? "Debug stats already visible" : (this.toggleDisplay(), "Debug stats shown") : this.isShown ? (this.toggleDisplay(), "Debug stats hidden") : "Debug stats already hidden" + }] + } + }, + 6147: (e, t, i) => { + i.d(t, { + Z: () => n + }); + var s = i(4028); + class n { + get settings() { + return [{ + type: "checkbox", + id: "hidden", + name: "Hidden", + help: "If enabled, the object will not be visible." + }] + } + static showBoundingBoxes = !1; + static wireframeMode = !1; + _lastEntityWireframe = void 0; + container = new THREE.Object3D; + object = null; + entity = {}; + hideLock = new s.Z; + hasLoaded = !1; + wireframeState = {}; + async onLoad() {} + afterLoad() { + if (!this.object?.isObject3D) throw new Error("The renderer must create an Object3D instance when subclassing Object3DRenderer."); + this.container.entityRenderer = this, this.container.add(this.object), metapress.renderer.scene.add(this.container), this.applyTransforms(), this._lastUrl = this.entity.url, this._lastEntityWireframe = this.entity.wireframe + } + onUnload() {} + afterUnload() { + this.container?.removeFromParent(), this.container = null, this.applyParent() + } + onEntityUpdated() { + this._lastUrl != this.entity.url && metapress.entities.reload(this.entity.id); + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + this.entity.wireframe != this._lastEntityWireframe && (this._lastEntityWireframe = this.entity.wireframe, this.container.traverse((e => { + e.isMesh && e.material && (e.material.wireframe = this.entity.wireframe ?? !1, this.wireframeState[e.uuid] = e.material.wireframe) + }))), this.onRender() + } + onRender() { + this._lastTransformUpdate != this.entity.lastModified && (this._lastTransformUpdate = this.entity.lastModified, this.applyTransforms()), this.applyHideLock(), this.applyBoundingBox(), this.applyWireframe() + } + applyTransforms() { + this.object && (this.entity.x = parseFloat(this.entity.x) || 0, this.entity.y = parseFloat(this.entity.y) || 0, this.entity.z = parseFloat(this.entity.z) || 0, this.entity.scaleX = parseFloat(this.entity.scaleX) || 1, this.entity.scaleY = parseFloat(this.entity.scaleY) || 1, this.entity.scaleZ = parseFloat(this.entity.scaleZ) || 1, this.entity.quatX = parseFloat(this.entity.quatX) || 0, this.entity.quatY = parseFloat(this.entity.quatY) || 0, this.entity.quatZ = parseFloat(this.entity.quatZ) || 0, this.entity.quatW = parseFloat(this.entity.quatW) || 0, this.entity.extra_offset_x = parseFloat(this.entity.extra_offset_x) || 0, this.entity.extra_offset_y = parseFloat(this.entity.extra_offset_y) || 0, this.entity.extra_offset_z = parseFloat(this.entity.extra_offset_z) || 0, this.entity.extra_scale_x = parseFloat(this.entity.extra_scale_x) || 1, this.entity.extra_scale_y = parseFloat(this.entity.extra_scale_y) || 1, this.entity.extra_scale_z = parseFloat(this.entity.extra_scale_z) || 1, this.entity.extra_rotation_x = parseFloat(this.entity.extra_rotation_x) || 0, this.entity.extra_rotation_y = parseFloat(this.entity.extra_rotation_y) || 0, this.entity.extra_rotation_z = parseFloat(this.entity.extra_rotation_z) || 0, this.container.position.set(this.entity.x, this.entity.y, this.entity.z), this.container.scale.set(this.entity.scaleX, this.entity.scaleY, this.entity.scaleZ), this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW ? this.container.quaternion.set(this.entity.quatX, this.entity.quatY, this.entity.quatZ, this.entity.quatW) : this.container.quaternion.set(0, 0, 0, 1), this.object.position.set(this.entity.extra_offset_x, this.entity.extra_offset_y, this.entity.extra_offset_z), this.object.scale.set(this.entity.extra_scale_x, this.entity.extra_scale_y, this.entity.extra_scale_z), this.object.rotation.set(this.entity.extra_rotation_x, this.entity.extra_rotation_y, this.entity.extra_rotation_z)) + } + applyHideLock() { + let e = !this.entity.hidden && !this.hideLock.isAcquired; + this.container.visible && !e ? this.container.visible = !1 : !this.container.visible && e && (this.container.visible = !0) + } + applyBoundingBox() { + this.boundingBoxHelper?.update(); + let e = n.showBoundingBoxes && this.container.visible; + !e && this.boundingBoxHelper ? (this.boundingBoxHelper.removeFromParent(), this.boundingBoxHelper.dispose(), this.boundingBoxHelper = null) : e && !this.boundingBoxHelper && (this.boundingBoxHelper = new THREE.BoxHelper(this.container, 16777215), metapress.renderer.scene.add(this.boundingBoxHelper)) + } + applyWireframe() { + this._lastWireframeMode != n.wireframeMode && (this._lastWireframeMode = n.wireframeMode, this.container.traverse((e => { + e.isMesh && e.material && (this.hasLoaded || (this.wireframeState[e.uuid] = !!e.material.wireframe), e.material.wireframe = !!n.wireframeMode || (this.wireframeState[e.uuid] ?? !1)) + })), this.hasLoaded = !0) + } + applyParent(e) { + if (!e && !this.parentHideLock && void 0 !== this._lastParent && this._lastParent != this.entity.parent) return; + if (this._lastParent = this.entity.parent || "", !e) + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + if (!this.entity.parent) return this.parentHideLock?.(), this.parentHideLock = null, void(this.container && this.container.parent != metapress.renderer.scene && (this.container.removeFromParent(), metapress.renderer.scene.add(this.container))); + let t = metapress.entities.getRenderer(this.entity.parent); + t?.object?.isObject3D ? (this.parentHideLock?.(), this.parentHideLock = null, this.container.parent != t.container && (this.container.removeFromParent(), t.container.add(this.container))) : this.parentHideLock || (this.parentHideLock = this.hideLock.acquire()) + } + } + }, + 4028: (e, t, i) => { + i.d(t, { + Z: () => s + }); + class s { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let e = !1; + return () => { + e || (e = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + }, + 40313: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 83203: (e, t, i) => { + e.exports = i.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, i) => { + e.exports = i.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, i) => { + e.exports = i.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 4147: e => { + e.exports = { + i8: "VerseWeb 1.0 BETA" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2009.dfdb84a8533087597abc.bundle.js b/mp-core/2009.dfdb84a8533087597abc.bundle.js new file mode 100644 index 0000000..b53eea1 --- /dev/null +++ b/mp-core/2009.dfdb84a8533087597abc.bundle.js @@ -0,0 +1,3662 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2009], { + 40001: (e, t, i) => { + i.d(t, { + Lm: () => s, + U8: () => r, + lk: () => a, + sN: () => o + }); + var n = i(67294); + const a = e => n.createElement(n.Fragment, null, n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, n.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? n.createElement("img", { + draggable: "false", + src: i(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), n.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + s = e => { + let [t, a] = n.useState(!!e.openByDefault); + return !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(n.Fragment, null, n.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => a(!t) + }, n.createElement("img", { + draggable: "false", + src: i(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), n.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? n.createElement("img", { + draggable: "false", + src: i(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + o = e => { + let [t, a] = n.useState(!1); + return n.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => a(!0), + onPointerLeave: e => a(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? n.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||i(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||i(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : n.createElement("img", { + draggable: "false", + src: e.icon || i(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), n.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + r = e => n.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, n.createElement("img", { + src: i(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), n.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 42009: (e, t, i) => { + i.r(t), i.d(t, { + default: () => Oe + }); + var n = i(67294), + a = (i(20745), i(40001)), + s = i(54220), + o = i(32589), + r = i(25108); + class l { + async callPreProcessing(e) { + let t = metapress.plugins.callAll("upload_getFileOptimizationStages").flat().filter((e => !!e)).filter((t => !t.filter || t.filter(e))).sort(((e, t) => (e.priority || 0) - (t.priority || 0))); + if (0 == t.length) return e; + let i = metapress.dialogs.show({ + title: "Optimize file", + text: "Would you like to optimize this file?", + height: "auto", + content: n.createElement(c, { + onClose: e => { + e.optimize ? (t.forEach((t => { + t.settings.forEach((t => { + void 0 !== e[t.id] && (t.value = e[t.id]) + })) + })), i.result = !0) : i.result = !1, i.close() + }, + stages: t, + getComponentForType: this.getComponentForType + }) + }); + for (; !i.isClosed;) await new Promise((e => setTimeout(e, 150))); + if (0 == i.result) return e; + for (let i of t) "function" == typeof i.execute ? await i.execute(i, e).catch((e => { + r.error("Error in stage", i, e) + })).then((t => { + t && (e = t) + })) : r.warn("Stage.execute is not a function and will be skipped:", i.execute); + return e + } + getComponentForType(e) { + return "header" == e.type ? n.createElement("div", { + style: { + margin: "14px calc(22px + 0.5%) -6px calc(22px + 0.5%)", + fontSize: 12, + color: "rgba(255, 255, 255, 0.3)", + textAlign: "left" + } + }, e.name) : "description" == e.type ? n.createElement("div", { + style: { + margin: "10px calc(22px + 0.5%)", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, e.name) : "checkbox" == e.type ? e.id ? n.createElement(o.ji, { + name: e.name || e.id, + tooltip: e.help, + default: e.default, + onChange: t => e.value = t.target.checked + }) : null : "select" == e.type ? e.id ? n.createElement(o.mg, { + name: e.name || e.id, + tooltip: e.help, + values: e.values, + labels: e.labels, + default: e.default, + onChange: t => e.value = t.target.value + }) : null : "button" == e.type ? n.createElement(o.zx, { + title: e.name || e.id, + tooltip: e.help, + onClick: t => e.onClick() + }) : "number" == e.type ? e.id ? n.createElement(o.nv, { + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + default: e.default, + onChange: t => e.value = t.target.value + }) : null : "color" == e.type ? n.createElement(o.zH, { + name: e.name || e.id, + tooltip: e.help, + default: e.default, + onChange: t => e.value = t.target.value + }) : "textarea" == e.type ? e.id ? n.createElement(o.eo, { + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + default: e.default, + onChange: t => e.value = t.target.value + }) : null : e.id ? n.createElement(o.nv, { + name: e.name || e.id, + tooltip: e.help, + placeholder: e.placeholder, + default: e.default, + onChange: t => e.value = t.target.value + }) : null + } + } + const c = ({ + onClose: e, + stages: t, + getComponentForType: i + }) => { + const [a, s] = (0, n.useState)((() => { + const e = {}; + return t.forEach((t => { + t.settings.forEach((t => { + t.id && (e[t.id] = t.placeholder || "") + })) + })), e + })), r = t.map((e => e.settings.map((e => { + const t = i(e); + return n.cloneElement(t, { + key: e.id, + value: a[e.id], + onChange: t => { + return i = e.id, n = t.target.value, void s((e => ({ + ...e, + [i]: n + }))); + var i, n + } + }) + })))); + return n.createElement(n.Fragment, null, r, n.createElement(o.aW, null, n.createElement(o.ek, { + title: "Optimize", + onClick: () => { + e({ + optimize: !0, + ...a + }) + } + }), n.createElement(o.ek, { + title: "Skip Optimization", + onClick: () => { + e({ + optimize: !1 + }) + } + }))) + }; + var d = i(25108); + + function p() { + return p = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var i = arguments[t]; + for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]) + } + return e + }, p.apply(this, arguments) + } + const h = e => { + let [t, i] = n.useState(e.entity[e.property] || ""); + return n.createElement(o.nv, { + name: e.name, + tooltip: e.tooltip, + value: t, + onChange: t => { + if (e.disabled) return; + let n = t.currentTarget.value || ""; + metapress.entities.update(e.entity.id, { + [e.property]: n, + lastEdited: Date.now() + }), i(n), e.onUpdate?.(n) + }, + disabled: e.disabled, + placeholder: e.placeholder, + type: e.type + }) + }, + m = e => { + let [t, i] = n.useState(e.entity[e.property] || ""); + return n.createElement(o.eo, { + name: e.name, + tooltip: e.tooltip, + value: t, + onChange: t => { + if (e.disabled) return; + let n = t.currentTarget.value || ""; + metapress.entities.update(e.entity.id, { + [e.property]: n, + lastEdited: Date.now() + }), i(n), e.onUpdate?.(n) + }, + disabled: e.disabled, + placeholder: e.placeholder, + type: e.type + }) + }, + u = e => { + let t = parseFloat(e.entity[e.property1]) || 0, + i = parseFloat(e.entity[e.property2]) || 0, + a = parseFloat(e.entity[e.property3]) || 0; + const s = e.isScale ? 1 : e.default || 0; + let r = e.isScale ? o.f4 : o.tC; + return n.createElement(r, { + name: e.name, + tooltip: e.tooltip, + value: { + x: t, + y: i, + z: a + }, + onChange: t => { + e.disabled || (e.isScale && (t.x = t.x <= 0 ? Math.max(e.entity[e.property1] || s, s) : t.x, t.y = t.y <= 0 ? Math.max(e.entity[e.property2] || s, s) : t.y, t.z = t.z <= 0 ? Math.max(e.entity[e.property3] || s, s) : t.z), metapress.entities.update(e.entity.id, { + [e.property1]: t.x, + [e.property2]: t.y, + [e.property3]: t.z, + lastEdited: Date.now() + }), e.onUpdate?.()) + }, + disabled: e.disabled + }) + }, + g = e => n.createElement(u, p({ + isScale: !0 + }, e)), + y = e => { + let t = parseFloat(e.entity[e.propertyX]) || 0, + i = parseFloat(e.entity[e.propertyY]) || 0, + a = parseFloat(e.entity[e.propertyZ]) || 0, + s = parseFloat(e.entity[e.propertyW]) || 0, + [r, l] = n.useState(0); + return n.createElement(o.f, { + name: e.name, + tooltip: e.tooltip, + value: { + x: t, + y: i, + z: a, + w: s + }, + onChange: t => { + metapress.entities.update(e.entity.id, { + [e.propertyX]: t.x, + [e.propertyY]: t.y, + [e.propertyZ]: t.z, + [e.propertyW]: t.w, + lastEdited: Date.now() + }), l(Date.now()), e.onUpdate?.() + }, + disabled: e.disabled + }) + }, + f = e => { + let [t, i] = n.useState(e.entity[e.property]); + return !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(o.ji, { + name: e.name, + tooltip: e.tooltip, + value: t, + onChange: n => { + e.disabled || (metapress.entities.update(e.entity.id, { + [e.property]: n, + lastEdited: Date.now() + }), i(n), e.onUpdate?.(t)) + } + }) + }, + w = e => { + let [t, i] = n.useState(e.entity[e.property] || ""); + return n.createElement(o.j9, { + name: e.name, + tooltip: e.tooltip, + value: t, + onSelect: async t => { + let n = new l; + t = await n.callPreProcessing(t); + let a = await metapress.storage.uploadFile("custom-template", t); + a = a + (a.includes("?") ? "&_=" : "?_=") + Date.now(), metapress.entities.update(e.entity.id, { + [e.property]: a, + lastEdited: Date.now() + }), i(a); + try { + e.onUpdate && "function" == typeof e.onUpdate && e.onUpdate(a) + } catch (e) { + d.warn("[FileUpload] Something went wrong when updating file.", e) + } + }, + onClear: e.allowClear ? () => { + metapress.entities.update(e.entity.id, { + [e.property]: "", + lastEdited: Date.now() + }), i(""); + try { + e.onRemove && "function" == typeof e.onRemove && e.onRemove(), e.onUpdate && "function" == typeof e.onUpdate && e.onUpdate("") + } catch (e) { + d.warn("[FileUpload] Something went wrong when removing file.", e) + } + } : null + }) + }, + b = e => { + let [t, i] = n.useState(e.entity[e.property] || e.default || ""); + return n.createElement(o.mg, { + name: e.name, + tooltip: e.tooltip, + value: t, + onChange: t => { + if (e.disabled) return; + let n = t.currentTarget.value || ""; + metapress.entities.update(e.entity.id, { + [e.property]: n, + lastEdited: Date.now() + }), i(n), e.onUpdate?.(n) + }, + disabled: e.disabled, + placeholder: e.placeholder, + values: e.values, + labels: e.labels + }) + }, + v = e => { + const t = null != e.entity[e.property] ? e.entity[e.property] : null != e.defaultValue ? e.defaultValue : "#ffffff"; + let [i, a] = n.useState(t); + return n.createElement(o.zH, { + name: e.name, + tooltip: e.tooltip, + value: i, + onChange: t => { + metapress.entities.update(e.entity.id, { + [e.property]: t, + lastEdited: Date.now() + }), a(t); + try { + e.onUpdate && "function" == typeof e.onUpdate && e.onUpdate(i) + } catch (e) { + d.warn("[ColorPicker] Something went wrong when changing color.", e) + } + } + }) + }, + E = e => { + const [t, a] = (0, n.useState)(!1), [r, l] = (0, n.useState)(""); + return n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center" + } + }, n.createElement("img", { + draggable: "false", + src: i(62842), + style: { + height: 64, + opacity: .25, + marginBottom: 40 + } + }), n.createElement("div", { + style: { + fontSize: 16, + fontWeight: "bold", + textAlign: "center", + marginBottom: 10, + opacity: .5 + } + }, "Unlock the Editor"), n.createElement("div", { + style: { + fontSize: 12, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5 + } + }, "The Editor allows you to visually design and customize your world beyond what's available through templates."), n.createElement("div", { + style: { + alignSelf: "stretch", + display: "flex", + flexDirection: "row", + alignItems: "center" + } + }, n.createElement("input", { + value: r, + onChange: e => l(e.currentTarget.value), + placeholder: "Affiliate Code", + style: { + fontSize: 12, + flex: "1 1 1px", + alignSelf: "stretch", + margin: "0px 0px 0px 30px", + padding: "5px 8px", + color: "white", + background: "none", + border: "1px solid rgba(255, 255, 255, 0.1)", + borderRadius: 5, + outline: "none" + } + }), n.createElement("div", { + style: { + flex: "0 0 auto", + width: 20, + alignSelf: "stretch", + margin: "0px 10px 0px 0px", + opacity: .5, + backgroundSize: "14px", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + backgroundImage: "url(" + i(8189) + ")", + cursor: "pointer" + }, + onClick: e => window.open(metapress.config["core.integration.wordpress"]?.isLocalEnvironment ? "/get.metapress.dev/#/affiliate-program" : "https://get.metapress.dev/#/affiliate-program", "_blank") + })), n.createElement("div", { + style: { + alignSelf: "stretch", + margin: "0px 10px" + } + }, n.createElement(o.aW, null, n.createElement(o.ek, { + title: t ? "Please wait..." : "Unlock Editor", + disabled: t, + onClick: async () => { + metapress.backend.logEvent("world_editor_subscribe_click"); + try { + a(!0), await s.H.shared.subscribe(r), Ae.current?.forceUpdate() + } catch (e) { + d.error(e), metapress.dialogs.alert({ + icon: "error", + title: "Unable to subscribe", + text: e.message + }) + } finally { + a(!1) + } + } + }), n.createElement(o.ek, { + title: "Select Template", + onClick: () => Ae.current?.updateState({ + page: "settings" + }) + }))), n.createElement("div", { + style: { + display: "flex", + alignSelf: "stretch", + margin: "-5px 20px 10px 20px", + fontSize: 10, + textAlign: "center", + opacity: .3 + } + }, n.createElement("div", { + style: { + flex: "1 1 1px", + padding: "0px 20px", + boxSizing: "border-box" + } + }, window.location.hostname), n.createElement("div", { + style: { + flex: "1 1 1px", + padding: "0px 20px", + boxSizing: "border-box" + } + }))) + }, + x = e => n.createElement("div", { + style: { + display: "flex", + flexDirection: "row", + alignSelf: "stretch", + alignItems: "center", + margin: "0px 20px 10px 20px", + backgroundColor: "rgba(255, 255, 255, 0.1)", + borderRadius: 5, + overflow: "hidden", + cursor: "pointer", + height: 80 + }, + onClick: e.onClick + }, n.createElement("img", { + draggable: "false", + src: e.image, + style: { + alignSelf: "stretch", + aspectRatio: "4/3", + objectFit: "cover", + flex: "0 0 auto" + } + }), n.createElement("div", { + style: { + margin: "0px 10px 0px 10px", + flex: "1 1 1px", + maxHeight: 80 + } + }, n.createElement("div", { + style: { + fontSize: 14, + lineHeight: "1.5", + fontWeight: "bold", + color: "rgba(255, 255, 255, 0.75)" + } + }, e.title), n.createElement("div", { + style: { + fontSize: 12, + lineHeight: "1.5", + color: "rgba(255, 255, 255, 0.5)" + } + }, e.subtitle))); + class S extends n.PureComponent { + static async doAddAction(e) { + let t = new THREE.Vector3, + i = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(t), metapress.renderer.camera.getWorldDirection(i), i.setLength(2), i.add(new THREE.Vector3(0, 1, 0).cross(i).setLength(1)), i.add(t); + let n = { + sync: "template", + x: i.x, + y: i.y, + z: i.z + }, + a = await e.action(n); + a && metapress.editor.selectionManager.select(a) + } + render() { + let e = metapress.plugins.callAll("editor_getAddableEntities").flat().filter((e => !!e)).sort(((e, t) => e.name.localeCompare(t.name))); + return s.H.shared.editorUnlocked ? n.createElement(n.Fragment, null, n.createElement("div", { + style: { + height: 10 + } + }), e.filter((e => "builtin" == e.section)).map((e => n.createElement(a.sN, { + key: e.id, + icon: e.icon, + name: e.name, + onClick: t => S.doAddAction(e) + }))), e.length > 0 ? n.createElement("div", { + style: { + margin: "5px 16px", + height: 1, + backgroundColor: "rgba(255, 255, 255, 0.1)" + } + }) : null, e.filter((e => "builtin" != e.section)).map((e => n.createElement(a.sN, { + key: e.id, + icon: e.icon, + name: e.name, + onClick: t => S.doAddAction(e) + }))), n.createElement("div", { + style: { + margin: "30px 50px", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "center", + lineHeight: 1.5 + } + }, "You can also drag and drop files directly into your world.")) : n.createElement(E, null) + } + } + var M = i(25108); + class k extends n.PureComponent { + state = { + modifiers: [] + }; + entityModifiers = []; + componentDidMount() { + let e = metapress.entities.get(this.props.selectedEntityID); + if (!e) return M.warn("[Editor] Selected entity not found in AddModifierPanel"); + let t = []; + for (let i of metapress.plugins.all) + for (let n of i.provides || []) { + if (!n.startsWith("modifier:")) continue; + let a = n.split(":")[1], + s = i.createModifier?.(a, e, ""); + if (s && a && !t.find((e => e.id == a))) + if (e["modifier:" + a]) this.entityModifiers.push(s); + else if (!s.hidden) { + if (null != s.isEntitySupported) try { + const t = s.isEntitySupported(e); + "boolean" != typeof t || t ? "object" == typeof t && !1 === t.result && (s.showAsDisabled = !0, s.showAsDisabledReason = t.reason || null) : s.showAsDisabled = !0 + } catch (e) {} + s.id = a, t.push(s) + } + } + t.sort(((e, t) => (e.name || e.id).localeCompare(t.name || t.id))), this.setState({ + modifiers: t + }) + } + addModifier(e) { + if (e?.provides) + for (let t of this.entityModifiers) + if (t.provides) + for (let i of t.provides) + for (let n of e.provides) + if (i == n) return void metapress.dialogs.alert({ + icon: "warn", + title: "Cannot Add Modifier", + text: `This modifier conflicts with ${t.name}, please remove it first.` + }); + metapress.entities.update(this.props.selectedEntityID, { + ["modifier:" + e.id]: !0 + }), this.props.onSwitchPage("entity") + } + render() { + return n.createElement(n.Fragment, null, n.createElement("div", { + style: { + height: 5, + flexShrink: 0 + } + }), n.createElement(o.zx, { + title: "Cancel", + onClick: e => this.props.onSwitchPage("entity") + }), this.state.modifiers.map((e => n.createElement(a.sN, { + key: e.id, + disabled: !!e.showAsDisabled, + tooltip: e.showAsDisabledReason || null, + icon: e.icon || i(42065), + name: e.name || e.id, + onClick: () => this.addModifier(e) + })))) + } + } + var C = i(28721), + A = i(25108); + class P extends n.PureComponent { + state = { + actionList: [], + selectedTrigger: "load", + selectedAction: "showalert", + selectedAnimation: "", + triggerText: "", + triggerTitle: "", + proximityRange: 2, + animationDuration: null, + actionLimit: 0, + fileURL: null, + addAction: !1, + editAction: !1, + editObject: null, + synchronized: !1 + }; + onChangeAction = e => { + let t = e.currentTarget.value || ""; + this.setState({ + selectedAction: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeTrigger = e => { + let t = e.currentTarget.value || ""; + this.setState({ + selectedTrigger: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeTitle = e => { + let t = e.currentTarget.value || ""; + this.setState({ + triggerTitle: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeText = e => { + let t = e.currentTarget.value || ""; + this.setState({ + triggerText: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeLimit = e => { + let t = e.currentTarget.value || ""; + t = parseInt(t), "number" != typeof t && (t = 0), Number.isInteger(t) || (t = 0), this.setState({ + actionLimit: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeProximity = e => { + let t = e.currentTarget.value || ""; + this.setState({ + proximityRange: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeDuration = e => { + let t = e.currentTarget.value || ""; + this.setState({ + animationDuration: t + }), this.state.editAction && this.setState({ + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeAnimation = e => { + let t = e.currentTarget.value || ""; + this.setState({ + selectedAnimation: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeSound = e => { + let t = e.currentTarget.value || ""; + this.setState({ + fileURL: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + onChangeSync = e => { + let t = e || !1; + this.setState({ + synchronized: t, + editedValue: !0 + }), this.props.onUpdate?.(t) + }; + componentDidMount() { + this.entity = metapress.entities.get(this.props.selectedEntityID); + const e = metapress.entities.getOrCreateRenderer(this.entity); + if (this.entityActions = this.entity.entityActions || [], this.animations = [""], e?.animationClips) + for (let t of e?.animationClips) this.animations.push(t.name); + this.updateActions() + } + openAddSection() { + this.setState({ + addAction: !0, + editAction: !1, + selectedTrigger: "load", + selectedAction: "showalert", + selectedAnimation: "", + triggerText: "", + triggerTitle: "", + proximityRange: 2, + animationDuration: null, + actionLimit: 0, + fileURL: null, + synchronized: !1 + }); + var e = document.getElementById("actionscripterdiv"); + e && (e.parentElement.scrollTop = 100) + } + addAction(e) { + if (!metapress.entities.get(this.props.selectedEntityID)) return A.warn("[Editor] Selected entity not found in ActionScripterPanel"); + let t = null; + if (this.entity.action_scripter_sound_url) { + let e = this.entity.action_scripter_sound_url.indexOf("?"); - 1 != e && (t = this.entity.action_scripter_sound_url.substring(0, e)); + let i = t.split("/"); + t = i[i.length - 1] + } + let i = {}; + i.id = e ? e.id : (0, C.Z)(), i.trigger = this.state.selectedTrigger, i.action = this.state.selectedAction, i.triggerText = this.state.triggerText || "", i.triggerTitle = this.state.triggerTitle || "", i.proximityRange = this.state.proximityRange || 2, i.actionLimit = this.state.actionLimit || 0, i.animationDuration = this.state.animationDuration || null, i.animation = this.state.selectedAnimation || null, i.fileURL = this.entity.action_scripter_sound_url || null, i.synchronized = this.state.synchronized; + let n = "", + a = "", + s = i.actionLimit > 0 ? " Limit of: " + i.actionLimit : " With no limit", + o = i.synchronized ? ". The action is synchronized for all users." : "."; + switch (this.state.selectedTrigger) { + case "load": + n = "On load"; + break; + case "click": + n = "On object click"; + break; + case "proximityenter": + n = "On object proximity entry (" + i.proximityRange + "m)" + } + switch (this.state.selectedAction) { + case "showalert": + a = "show the following alert text: (" + i.triggerText + "), titled: " + i.triggerTitle + s; + break; + case "showpanel": + a = "show the following panel url: (" + i.triggerText + ")" + s; + break; + case "showpopup": + a = "show the following popup url: (" + i.triggerText + ")" + s; + break; + case "showsidebar": + a = "show the following url in the sidebar: (" + i.triggerText + ")" + s; + break; + case "playsound": + a = "play the following sound: (" + t + ")" + s; + break; + case "playanimation": + a = "play the following animation: (" + i.animation + ")", i.animationDuration ? a += " for " + i.animationDuration + " seconds" + s : a += s + } + a += o, i.triggerLabel = n, i.actionLabel = a, e ? this.entityActions = this.modifyActions(i) : this.entityActions.push(i), metapress.entities.update(this.props.selectedEntityID, { + entityActions: this.entityActions, + lastEdited: Date.now() + }), this.setState({ + editedValue: !1 + }), metapress.plugins.sendEvent("onUnsavedFieldsChanged"), this.updateActions() + } + modifyActions(e) { + return this.entityActions.map((t => t.id === e.id ? { + ...t, + trigger: e.trigger, + action: e.action, + triggerText: e.triggerText, + triggerTitle: e.triggerTitle, + proximityRange: e.proximityRange, + actionLimit: e.actionLimit, + animationDuration: e.animationDuration, + animation: e.animation, + fileURL: e.fileURL, + triggerLabel: e.triggerLabel, + actionLabel: e.actionLabel, + synchronized: e.synchronized + } : t)) + } + updateActions() { + this.setState({ + addAction: !1, + editAction: !1, + selectedTrigger: "load", + selectedAction: "showalert", + selectedAnimation: "", + triggerText: "", + triggerTitle: "", + proximityRange: 2, + animationDuration: null, + actionLimit: 0, + fileURL: null, + synchronized: !1, + editObject: null + }), this.forceUpdate() + } + deleteAction(e) { + this.entityActions = this.entityActions.filter((t => t.id != e.id)), metapress.entities.update(this.props.selectedEntityID, { + entityActions: this.entityActions, + lastEdited: Date.now() + }), metapress.plugins.sendEvent("onUnsavedFieldsChanged"), this.updateActions() + } + editAction(e) { + this.setState({ + editAction: !0, + addAction: !1, + selectedTrigger: e.trigger, + selectedAction: e.action, + selectedAnimation: e.animation, + triggerText: e.triggerText, + triggerTitle: e.triggerTitle, + proximityRange: e.proximityRange, + animationDuration: e.animationDuration, + actionLimit: e.actionLimit, + fileURL: e.fileURL, + synchronized: e.synchronized, + editObject: e + }); + var t = document.getElementById("actionscripterdiv"); + t && (t.parentElement.scrollTop = 100) + } + saveEditAction() { + metapress.plugins.sendEvent("onUnsavedFieldsChanged"), this.addAction(this.state.editObject) + } + render() { + return n.createElement(n.Fragment, null, n.createElement(o.zx, { + title: "Add Action", + onClick: e => this.openAddSection() + }), n.createElement(o.zx, { + title: "Cancel", + onClick: e => this.props.onSwitchPage("entity") + }), 1 == this.state.addAction || 1 == this.state.editAction ? n.createElement("div", { + id: "actionscripterdiv" + }, n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + left: 0, + width: "100%", + height: 30, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, 1 == this.state.addAction ? n.createElement("div", { + style: { + fontSize: 15, + marginLeft: 20 + } + }, "Adding New Action") : 1 == this.state.editAction ? n.createElement("div", { + style: { + fontSize: 15, + marginLeft: 20 + } + }, "Editing Action") : null), n.createElement("div", { + style: { + height: 5, + flexShrink: 0 + } + }), n.createElement(o.mg, { + id: "entityTrigger", + entity: this.props.selectedEntityID, + name: "Trigger", + property: "action_scripter_trigger", + default: "", + labels: ["Load", "Click", "Proximity"], + values: ["load", "click", "proximityenter"], + onUpdate: () => this.forceUpdate(), + onChange: this.onChangeTrigger, + value: this.state.selectedTrigger + }), n.createElement(o.mg, { + id: "entityAction", + entity: this.props.selectedEntityID, + name: "Action", + property: "action_scripter_action", + default: "", + labels: ["Show Alert", "Show Panel", "Show Popup", "Show Sidebar", "Play Sound", "Play Animation"], + values: ["showalert", "showpanel", "showpopup", "showsidebar", "playsound", "playanimation"], + onUpdate: () => this.forceUpdate(), + onChange: this.onChangeAction, + value: this.state.selectedAction + }), n.createElement(o.nv, { + name: "Action Limit", + onChange: this.onChangeLimit, + placeholder: "0", + value: this.state.actionLimit + }), n.createElement(o.ji, { + name: "Synchronized", + value: this.state.synchronized, + onChange: this.onChangeSync + }), "showalert" == this.state.selectedAction ? n.createElement("div", null, n.createElement(o.nv, { + name: "Title", + onChange: this.onChangeTitle, + placeholder: "title", + value: this.state.triggerTitle + }), n.createElement(o.nv, { + name: "Text", + onChange: this.onChangeText, + placeholder: "text", + value: this.state.triggerText + })) : "showpanel" == this.state.selectedAction || "showpopup" == this.state.selectedAction || "showsidebar" == this.state.selectedAction ? n.createElement(o.nv, { + name: "URL", + onChange: this.onChangeText, + placeholder: "url", + value: this.state.triggerText + }) : "playsound" == this.state.selectedAction ? n.createElement(w, { + entity: this.entity, + property: "action_scripter_sound_url", + name: "Upload Sound", + value: this.state.fileURL, + onChange: this.onChangeSound + }) : "playanimation" == this.state.selectedAction ? n.createElement("div", null, n.createElement(o.mg, { + id: "entityAnimation", + entity: this.props.selectedEntityID, + name: "Animation", + property: "action_scripter_animation", + default: "", + labels: this.animations, + values: this.animations, + onUpdate: () => this.forceUpdate(), + onChange: this.onChangeAnimation, + value: this.state.selectedAnimation + }), n.createElement(o.nv, { + name: "Animation Duration (s)", + onChange: this.onChangeDuration, + placeholder: "2", + value: this.state.animationDuration + })) : null, "proximityenter" == this.state.selectedTrigger ? n.createElement(o.nv, { + name: "Proximity range (m)", + onChange: this.onChangeProximity, + placeholder: "2", + value: this.state.proximityRange + }) : null) : null, 1 == this.state.addAction ? n.createElement(o.zx, { + title: "Add", + onClick: e => this.addAction(), + style: { + backgroundColor: this.state.editedValue ? "#954303" : "rgba(255, 255, 255, 0.1)" + } + }) : null, 1 == this.state.editAction ? n.createElement(o.zx, { + title: "Update", + onClick: e => this.saveEditAction(), + style: { + backgroundColor: this.state.editedValue ? "#954303" : "rgba(255, 255, 255, 0.1)" + } + }) : null, n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + left: 0, + width: "100%", + height: 30, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, n.createElement("div", { + style: { + fontSize: 15, + marginLeft: 20 + } + }, "Actions")), this.entityActions?.map((e => n.createElement("div", { + id: e.id, + style: { + padding: "0px 10px", + borderBottom: "1px solid rgba(255, 255, 255, 0.1)", + alignItems: "center" + } + }, n.createElement("p", { + style: { + fontSize: 12, + padding: "0px 15px", + margin: "10px 0px 0px 0px" + } + }, e.triggerLabel, " ", e.actionLabel, " "), n.createElement("div", { + style: { + display: "flex", + position: "relative", + left: "80%", + marginBottom: 5 + } + }, n.createElement("div", { + onClick: t => { + this.editAction(e) + }, + style: { + cursor: "pointer", + fontSize: 10, + color: "white", + width: "10%" + } + }, "Edit"), n.createElement("div", { + onClick: t => { + this.deleteAction(e) + }, + style: { + cursor: "pointer", + fontSize: 10, + color: "lightgrey", + width: "10%" + } + }, "Delete")))))) + } + } + + function D() { + return D = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var i = arguments[t]; + for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]) + } + return e + }, D.apply(this, arguments) + } + const T = "Global region", + I = e => { + let [t, r] = n.useState(""); + if (!s.H.shared.editorUnlocked) return n.createElement(E, null); + let l = metapress.entities.all; + if (I.showAllEntities || (l = l.filter((e => "template" == e.sync))), l = l.filter((e => "template-global-region" != e.id)), t) { + let e = t.toLowerCase(); + l = l.filter((t => t.name?.toLowerCase()?.includes(e) || t.type?.toLowerCase()?.includes(e))) + } + l.sort(((e, t) => (e.name || e.id).localeCompare(t.name || t.id))); + let c = !t || t && T.toLowerCase().includes(t.toLowerCase()); + return n.createElement(n.Fragment, null, n.createElement(o.Um, { + allowClear: !0, + onSearch: e => r(e) + }), c ? n.createElement(a.sN, { + icon: i(26247), + name: T, + onClick: () => metapress.editor.selectionManager.select("template-global-region"), + selected: "template-global-region" == e.selectedEntityID + }) : null, l.length > 0 ? l.map((t => n.createElement(j, { + key: t.id, + entity: t, + onClick: () => metapress.editor.selectionManager.select(t.id), + selected: e.selectedEntityID == t.id + }))) : c ? null : n.createElement("div", { + style: { + color: "#999", + padding: 10, + fontSize: 14, + textAlign: "center" + } + }, t ? "No entities found." : "No entities exist."), n.createElement("div", { + style: { + height: 10 + } + })) + }; + I.showAllEntities = !1; + const z = {}, + j = e => { + let t = ""; + e.entity.type in z ? t = z[e.entity.type] : e.entity.id in z ? t = z[e.entity.id] : "cube" == e.entity.type ? t = i(90371) : "plane" == e.entity.type ? t = i(26192) : "circle" == e.entity.type ? t = i(41598) : "cylinder" == e.entity.type ? t = i(5461) : "mesh" == e.entity.type ? t = i(78365) : "region" == e.entity.type ? t = i(26247) : "sphere" == e.entity.type && (t = i(34949)); + const s = metapress.entities.getModifiers(e.entity.id); + if ((!t || s.length > 0) && null == z[e.entity.id]) { + const i = metapress.plugins.callAll("editor_getAddableEntities").flat().filter((e => !!e)), + n = i.find((t => e.entity.type == t.id)); + if (n) t = n.icon, z[e.entity.type] = t; + else if (s && s.length > 0) { + const n = s.map((e => e.id)), + a = i.filter((e => e.icon && n.includes(e.id))); + a.length > 0 && (t = a[0].icon, z[e.entity.id] = t) + } + } + t || (t = i(8189)); + let o = e.entity.name || `Untitled ${e.entity.type}`; + return "template" != e.entity.sync && (o += " (unmanaged)"), n.createElement(a.sN, D({ + icon: t, + name: o + }, e)) + }; + var _ = i(25108); + class U extends n.PureComponent { + async onDelete() { + await metapress.dialogs.confirm({ + title: "Delete item", + text: "Are you sure you want to delete this item?" + }) && (metapress.entities.remove(this.props.selectedEntityID), this.props.onSwitchPage("entities"), metapress.renderer.canvas.focus()) + } + onDuplicate() { + let e = metapress.entities.get(this.props.selectedEntityID); + if (!e) return metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Unable to duplicate: Object does not exist.", + duration: 3e3 + }); + e = Object.assign({}, e); + let t = new THREE.Vector3, + i = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(t), metapress.renderer.camera.getWorldDirection(i), i.setLength(2), i.add(new THREE.Vector3(0, 1, 0).cross(i).setLength(1)), i.add(t), e.sync = "template", e.x = i.x, e.y = i.y, e.z = i.z, delete e.id; + let n = metapress.entities.add(e); + metapress.editor.selectionManager.select(n.id), metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Duplicated " + (e.name || `Untitled ${e.type}`), + duration: 3e3 + }), metapress.renderer.canvas.focus() + } + moveObjectToMe() { + let e = metapress.entities.get(this.props.selectedEntityID); + if (!e) return; + const t = new THREE.Quaternion(metapress.avatars.currentUserEntity.quatX, metapress.avatars.currentUserEntity.quatY, metapress.avatars.currentUserEntity.quatZ, metapress.avatars.currentUserEntity.quatW), + i = (new THREE.Euler).setFromQuaternion(t), + n = Math.abs(i.x), + a = Math.abs(i.z), + s = Math.max(n, a); + let o = s === n ? i.x >= 0 ? 1 : -1 : 0, + r = s === a ? i.z >= 0 ? 1 : -1 : 0; + n === a && (o = i.x >= 0 ? .5 : -.5, r = i.z >= 0 ? .5 : -.5), metapress.entities.update(e.id, { + x: metapress.avatars.currentUserEntity.x + o, + y: metapress.avatars.currentUserEntity.y + .5, + z: metapress.avatars.currentUserEntity.z + r, + lastEdited: Date.now() + }), metapress.renderer.canvas.focus() + } + moveToObject() { + let e = metapress.entities.get(this.props.selectedEntityID); + e && (metapress.avatars.moveTo(e.x, e.y, e.z), metapress.renderer.canvas.focus()) + } + render() { + if (!s.H.shared.editorUnlocked) return n.createElement(E, null); + if (metapress.entities.checkAllEntities(), !this.props.selectedEntityID) return n.createElement("div", { + style: { + margin: "50px 20px", + fontSize: 12, + opacity: .5, + textAlign: "center" + } + }, "Nothing selected"); + let e = metapress.entities.get(this.props.selectedEntityID); + if (!e) return n.createElement("div", { + style: { + margin: "50px 20px", + fontSize: 12, + opacity: .5, + textAlign: "center" + } + }, "Nothing selected"); + let t = metapress.entities.getRenderer(this.props.selectedEntityID, !0), + i = metapress.entities.getModifiers(this.props.selectedEntityID); + return i.sort(((e, t) => (e.name || e.id).localeCompare(t.name || t.id))), n.createElement(n.Fragment, null, n.createElement(a.Lm, { + title: "General", + openByDefault: !0 + }, n.createElement(h, { + entity: e, + name: "Name", + property: "name", + tooltip: "The name of this object, shown in the Editor." + }), n.createElement(h, { + entity: e, + name: "Type", + property: "type", + disabled: !0, + tooltip: "The object type." + }), n.createElement(h, { + entity: e, + name: "Comment", + property: "comment", + tooltip: "A custom comment, shown in the Editor." + }), t?.settings?.map(((t, i) => n.createElement(n.Fragment, { + key: t.id || i + }, this.renderSetting(e, t)))), "template-global-region" != e.id ? n.createElement(o.aW, null, n.createElement(o.ek, { + title: "Duplicate", + onClick: () => this.onDuplicate() + }), n.createElement(o.ek, { + title: "Delete", + onClick: () => this.onDelete() + })) : null), n.createElement(a.Lm, { + title: "Transform", + visible: "template-global-region" != e.id, + openByDefault: !0 + }, n.createElement(u, { + entity: e, + name: "Position", + property1: "x", + property2: "y", + property3: "z", + tooltip: "The object's position in meters." + }), n.createElement(y, { + entity: e, + name: "Rotation", + propertyX: "quatX", + propertyY: "quatY", + propertyZ: "quatZ", + propertyW: "quatW", + tooltip: "The object's rotation in degrees." + }), n.createElement(g, { + entity: e, + name: "Scale", + property1: "scaleX", + property2: "scaleY", + property3: "scaleZ", + tooltip: "Multiplies the size of the object." + }), n.createElement(o.aW, null, n.createElement(o.ek, { + title: "Move object to me", + onClick: () => this.moveObjectToMe() + }), n.createElement(o.ek, { + title: "Move to object", + onClick: () => this.moveToObject() + }))), i.map((t => { + let i = t.settings; + if ("function" == typeof i) try { + i = i(e) + } catch (e) { + i = null, _.warn(`[EntityPanel] Error getting modifier settings for ${t.id}`, e) + } + return n.createElement(a.Lm, { + key: t.id + t.instanceID, + title: t.name || t.id, + onRemove: () => this.onRemoveModifier(t), + openByDefault: !0 + }, i?.length ? null : n.createElement("div", { + style: { + margin: "0px 30px", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, "This modifier has no settings."), i?.map(((t, i) => n.createElement(n.Fragment, { + key: t.id || i + }, this.renderSetting(e, t))))) + })), n.createElement("div", { + style: { + height: 20 + } + }), n.createElement(o.zx, { + title: "Add Modifier", + onClick: () => this.props.onSwitchPage("add-modifier") + }), n.createElement(o.zx, { + title: "Action Scripter", + onClick: () => this.actionScripterClick() + })) + } + actionScripterClick() { + let e = metapress.entities.get(this.props.selectedEntityID); + metapress.entities.update(e.id, { + "modifier:object_interaction": !0 + }), this.props.onSwitchPage("action-scripter") + } + renderSetting(e, t) { + return t.hidden ? null : "header" == t.type ? n.createElement("div", { + style: { + margin: "14px calc(22px + 0.5%) -6px calc(22px + 0.5%)", + fontSize: 12, + color: "rgba(255, 255, 255, 0.3)", + textAlign: "left" + } + }, t.name) : "description" == t.type ? n.createElement("div", { + style: { + margin: "10px calc(22px + 0.5%)", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, t.name) : "checkbox" == t.type ? t.id ? n.createElement(f, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + placeholder: t.placeholder, + onUpdate: () => this.forceUpdate() + }) : null : "file" == t.type ? t.id ? n.createElement(w, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + placeholder: t.placeholder, + allowClear: t.allowClear ?? !1, + onUpdate: () => this.forceUpdate() + }) : null : "select" == t.type ? t.id ? n.createElement(b, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + default: t.default, + values: t.values, + labels: t.labels, + onUpdate: () => this.forceUpdate() + }) : null : "button" == t.type ? n.createElement(o.zx, { + title: t.name || t.id, + tooltip: t.help, + onClick: i => this.onEntityButtonClick(e, t) + }) : "number" == t.type ? t.id ? n.createElement(h, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + placeholder: t.placeholder, + type: "number" + }) : null : "color" == t.type ? n.createElement(v, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + defaultValue: t.default, + onUpdate: () => this.forceUpdate() + }) : "textarea" == t.type ? t.id ? n.createElement(m, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + placeholder: t.placeholder + }) : null : t.id ? n.createElement(h, { + entity: e, + name: t.name || t.id, + property: t.id, + tooltip: t.help, + placeholder: t.placeholder + }) : null + } + async onEntityButtonClick(e, t) { + if (!t.onClick) return _.warn("[Editor] No onClick action defined for entity button", t); + await t.onClick(t, e), this.forceUpdate() + } + onRemoveModifier(e) { + metapress.entities.update(this.props.selectedEntityID, { + ["modifier:" + e.id]: !1 + }), this.forceUpdate() + } + } + class L extends n.PureComponent { + render = () => n.createElement(n.Fragment, null) + } + var O = i(49220), + R = i.n(O), + F = i(25108); + class $ extends n.PureComponent { + state = { + templates: [], + loadingTemplates: !0 + }; + render = () => n.createElement(n.Fragment, null, n.createElement(a.Lm, { + title: "General", + openByDefault: !0 + }, s.H.shared.activeSubscription ? n.createElement(n.Fragment, null, n.createElement(a.U8, { + text: n.createElement(n.Fragment, null, "The subscription for ", n.createElement("b", null, window.location.hostname), " is managed by ", n.createElement("b", null, s.H.shared.activeSubscription.payerName || s.H.shared.activeSubscription.provider || "(private)"), ".", "paypal" == s.H.shared.activeSubscription.provider ? n.createElement("a", { + style: { + color: "rgb(81, 145, 209)", + textDecoration: "none", + fontWeight: "bold" + }, + href: "https://www.paypal.com/myaccount/autopay/", + target: "_blank" + }, "View on PayPal") : null) + }), n.createElement(o.zx, { + title: "Load from Backup", + icon: i(36449), + onClick: () => this.loadBackup() + }), n.createElement(o.zx, { + title: "Save Backup", + icon: i(75588), + onClick: () => this.saveBackup() + }), n.createElement(o.zx, { + title: "Delete Everything", + icon: i(81501), + onClick: () => this.deleteAll() + })) : null, s.H.shared.activeSubscription ? null : n.createElement(a.U8, { + text: n.createElement(n.Fragment, null, "There is no active subscription for ", n.createElement("b", null, window.location.hostname), ". ", n.createElement("a", { + style: { + color: "rgb(81, 145, 209)", + textDecoration: "none", + fontWeight: "bold", + cursor: "pointer" + }, + onClick: () => this.props.onSwitchPage("entities") + }, "Unlock the Editor")) + })), n.createElement(a.Lm, { + title: "Templates", + openByDefault: !0 + }, this.state.templates.map((e => n.createElement(x, { + key: e.url, + image: e.image, + title: e.name, + subtitle: e.description, + onClick: () => this.loadTemplate(e) + }))), 0 == this.state.templates.length ? n.createElement("div", { + style: { + margin: "0px 30px", + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left" + } + }, this.state.loadingTemplates ? "Loading templates..." : "No templates found.") : null)); + async componentDidMount() { + try { + this.setState({ + loadingTemplates: !0 + }); + let e = await metapress.plugins.callAllAsync("editor_getTemplates"); + e = e.flat().filter((e => e?.url && e?.name)), e.sort(((e, t) => (e.name || "").localeCompare(t.name || ""))), this.setState({ + templates: e + }) + } catch (e) { + F.warn(e), metapress.menubar.toasts.show({ + text: "Unable to load templates: " + e.message + }) + } finally { + this.setState({ + loadingTemplates: !1 + }) + } + } + async saveBackup() { + if (!this.isSaving) { + this.isSaving = !0; + try { + metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Saving backup...", + sticky: !0 + }); + let e = await metapress.editor.saveBackup((e => { + metapress.menubar.toasts.show({ + id: "editor.backup", + text: e, + sticky: !0 + }) + })); + new O.JSFile(e, "MetaPress Backup.mpbackup").save(), metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Backup saved successfully." + }) + } catch (e) { + F.warn(e), metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Unable to save backup: " + e.message + }) + } finally { + this.isSaving = !1 + } + } + } + async loadBackup() { + if (!this.isSaving) try { + let e = null; + try { + if (e = await R().pick({ + accept: ".mpbackup" + }), !e) return + } catch (e) { + return void F.warn("[MetaPress] Error selecting file: ", e) + } + this.isSaving = !0; + let t = (await metapress.editor.getBackupMetadata(await e.getBlob()))?.plugins || [], + i = []; + for (let e of t) metapress.plugins.all.find((t => t.id == e.id)) || i.push(e); + if (!await metapress.dialogs.confirm({ + title: "Load backup", + text: `All current world data will be deleted on the server and replaced with the content of this backup. Are you sure you want to continue?\n ${i.length>0?`\n**This backup requires the following missing plugins:** \n${i.map((e=>e.name)).join(" \n")}`:""}\n ` + })) return; + metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Loading backup...", + sticky: !0 + }), await metapress.editor.loadBackup(await e.getBlob(), (e => { + metapress.menubar.toasts.show({ + id: "editor.backup", + text: e, + sticky: !0 + }) + })), metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Backup loaded successfully." + }) + } catch (e) { + F.warn(e), metapress.menubar.toasts.hide("editor.backup"), metapress.dialogs.alert({ + icon: "error", + title: "Unable to load backup", + text: e.message + }) + } finally { + this.isSaving = !1 + } + } + async loadTemplate(e) { + if (!this.isSaving) { + this.isSaving = !0; + try { + let t = e?.plugins || [], + i = []; + for (let e of t) metapress.plugins.all.find((t => t.id == e.id)) || i.push(e); + if (!await metapress.dialogs.confirm({ + title: "Load template", + text: `All current world data will be deleted on the server and replaced with the content of this backup. Are you sure you want to continue?\n ${i.length>0?`\n**This backup requires the following missing plugins:** \n${i.map((e=>e.name)).join(" \n")}`:""}\n ` + })) return; + metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Loading template...", + sticky: !0 + }), await metapress.editor.loadBackup(e.url, (e => { + metapress.menubar.toasts.show({ + id: "editor.backup", + text: e, + sticky: !0 + }) + })), metapress.menubar.toasts.show({ + id: "editor.backup", + text: "Template loaded successfully." + }) + } catch (e) { + F.warn(e), metapress.menubar.toasts.hide("editor.backup"), metapress.dialogs.alert({ + icon: "error", + title: "Unable to load template", + text: e.message + }) + } finally { + this.isSaving = !1 + } + } + } + async deleteAll() { + let e = metapress.entities.all.filter((e => "template" == e.sync)); + if (await metapress.dialogs.confirm({ + title: "Delete all entities", + text: `Are you sure you want to delete ${e.length} ${1==e.length?"entity":"entities"}?` + })) { + for (let t of e) metapress.entities.remove(t.id); + metapress.editor.createGlobalRegionIfNeeded() + } + } + } + var B = i(99477), + W = i(25108); + const Y = new B.Raycaster, + q = new B.Vector3, + V = new B.Vector3, + X = new B.Quaternion, + Q = { + X: new B.Vector3(1, 0, 0), + Y: new B.Vector3(0, 1, 0), + Z: new B.Vector3(0, 0, 1) + }, + G = { + type: "change" + }, + Z = { + type: "mouseDown" + }, + N = { + type: "mouseUp", + mode: null + }, + H = { + type: "objectChange" + }; + class J extends B.Object3D { + constructor(e, t) { + super(), void 0 === t && (W.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'), t = document), this.isTransformControls = !0, this.visible = !1, this.domElement = t, this.domElement.style.touchAction = "none"; + const i = new Se; + this._gizmo = i, this.add(i); + const n = new Me; + this._plane = n, this.add(n); + const a = this; + + function s(e, t) { + let s = t; + Object.defineProperty(a, e, { + get: function() { + return void 0 !== s ? s : t + }, + set: function(t) { + s !== t && (s = t, n[e] = t, i[e] = t, a.dispatchEvent({ + type: e + "-changed", + value: t + }), a.dispatchEvent(G)) + } + }), a[e] = t, n[e] = t, i[e] = t + } + s("camera", e), s("object", void 0), s("enabled", !0), s("axis", null), s("mode", "translate"), s("translationSnap", null), s("rotationSnap", null), s("scaleSnap", null), s("space", "world"), s("size", 1), s("dragging", !1), s("showX", !0), s("showY", !0), s("showZ", !0); + const o = new B.Vector3, + r = new B.Vector3, + l = new B.Quaternion, + c = new B.Quaternion, + d = new B.Vector3, + p = new B.Quaternion, + h = new B.Vector3, + m = new B.Vector3, + u = new B.Vector3, + g = new B.Vector3; + s("worldPosition", o), s("worldPositionStart", r), s("worldQuaternion", l), s("worldQuaternionStart", c), s("cameraPosition", d), s("cameraQuaternion", p), s("pointStart", h), s("pointEnd", m), s("rotationAxis", u), s("rotationAngle", 0), s("eye", g), this._offset = new B.Vector3, this._startNorm = new B.Vector3, this._endNorm = new B.Vector3, this._cameraScale = new B.Vector3, this._parentPosition = new B.Vector3, this._parentQuaternion = new B.Quaternion, this._parentQuaternionInv = new B.Quaternion, this._parentScale = new B.Vector3, this._worldScaleStart = new B.Vector3, this._worldQuaternionInv = new B.Quaternion, this._worldScale = new B.Vector3, this._positionStart = new B.Vector3, this._quaternionStart = new B.Quaternion, this._scaleStart = new B.Vector3, this._getPointer = K.bind(this), this._onPointerDown = te.bind(this), this._onPointerHover = ee.bind(this), this._onPointerMove = ie.bind(this), this._onPointerUp = ne.bind(this), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointermove", this._onPointerHover), this.domElement.addEventListener("pointerup", this._onPointerUp) + } + updateMatrixWorld() { + void 0 !== this.object && (this.object.updateMatrixWorld(), null === this.object.parent ? W.error("TransformControls: The attached 3D object must be a part of the scene graph.") : this.object.parent.matrixWorld.decompose(this._parentPosition, this._parentQuaternion, this._parentScale), this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this._worldScale), this._parentQuaternionInv.copy(this._parentQuaternion).invert(), this._worldQuaternionInv.copy(this.worldQuaternion).invert()), this.camera.updateMatrixWorld(), this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this._cameraScale), this.camera.isOrthographicCamera ? this.camera.getWorldDirection(this.eye).negate() : this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(), super.updateMatrixWorld(this) + } + pointerHover(e) { + if (void 0 === this.object || !0 === this.dragging) return; + Y.setFromCamera(e, this.camera); + const t = ae(this._gizmo.picker[this.mode], Y); + this.axis = t ? t.object.name : null + } + pointerDown(e) { + if (void 0 !== this.object && !0 !== this.dragging && 0 === e.button && null !== this.axis) { + Y.setFromCamera(e, this.camera); + const t = ae(this._plane, Y, !0); + t && (this.object.updateMatrixWorld(), this.object.parent.updateMatrixWorld(), this._positionStart.copy(this.object.position), this._quaternionStart.copy(this.object.quaternion), this._scaleStart.copy(this.object.scale), this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart), this.pointStart.copy(t.point).sub(this.worldPositionStart)), this.dragging = !0, Z.mode = this.mode, this.dispatchEvent(Z) + } + } + pointerMove(e) { + const t = this.axis, + i = this.mode, + n = this.object; + let a = this.space; + if ("scale" === i ? a = "local" : "E" !== t && "XYZE" !== t && "XYZ" !== t || (a = "world"), void 0 === n || null === t || !1 === this.dragging || -1 !== e.button) return; + Y.setFromCamera(e, this.camera); + const s = ae(this._plane, Y, !0); + if (s) { + if (this.pointEnd.copy(s.point).sub(this.worldPositionStart), "translate" === i) this._offset.copy(this.pointEnd).sub(this.pointStart), "local" === a && "XYZ" !== t && this._offset.applyQuaternion(this._worldQuaternionInv), -1 === t.indexOf("X") && (this._offset.x = 0), -1 === t.indexOf("Y") && (this._offset.y = 0), -1 === t.indexOf("Z") && (this._offset.z = 0), "local" === a && "XYZ" !== t ? this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale) : this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale), n.position.copy(this._offset).add(this._positionStart), this.translationSnap && ("local" === a && (n.position.applyQuaternion(X.copy(this._quaternionStart).invert()), -1 !== t.search("X") && (n.position.x = Math.round(n.position.x / this.translationSnap) * this.translationSnap), -1 !== t.search("Y") && (n.position.y = Math.round(n.position.y / this.translationSnap) * this.translationSnap), -1 !== t.search("Z") && (n.position.z = Math.round(n.position.z / this.translationSnap) * this.translationSnap), n.position.applyQuaternion(this._quaternionStart)), "world" === a && (n.parent && n.position.add(q.setFromMatrixPosition(n.parent.matrixWorld)), -1 !== t.search("X") && (n.position.x = Math.round(n.position.x / this.translationSnap) * this.translationSnap), -1 !== t.search("Y") && (n.position.y = Math.round(n.position.y / this.translationSnap) * this.translationSnap), -1 !== t.search("Z") && (n.position.z = Math.round(n.position.z / this.translationSnap) * this.translationSnap), n.parent && n.position.sub(q.setFromMatrixPosition(n.parent.matrixWorld)))); + else if ("scale" === i) { + if (-1 !== t.search("XYZ")) { + let e = this.pointEnd.length() / this.pointStart.length(); + this.pointEnd.dot(this.pointStart) < 0 && (e *= -1), V.set(e, e, e) + } else q.copy(this.pointStart), V.copy(this.pointEnd), q.applyQuaternion(this._worldQuaternionInv), V.applyQuaternion(this._worldQuaternionInv), V.divide(q), -1 === t.search("X") && (V.x = 1), -1 === t.search("Y") && (V.y = 1), -1 === t.search("Z") && (V.z = 1), V.x < 0 && (V.x = .01), V.y < 0 && (V.y = .01), V.z < 0 && (V.z = .01); + n.scale.copy(this._scaleStart).multiply(V), this.scaleSnap && (-1 !== t.search("X") && (n.scale.x = Math.round(n.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap), -1 !== t.search("Y") && (n.scale.y = Math.round(n.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap), -1 !== t.search("Z") && (n.scale.z = Math.round(n.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap)) + } else if ("rotate" === i) { + this._offset.copy(this.pointEnd).sub(this.pointStart); + const e = 20 / this.worldPosition.distanceTo(q.setFromMatrixPosition(this.camera.matrixWorld)); + let i = !1; + "XYZE" === t ? (this.rotationAxis.copy(this._offset).cross(this.eye).normalize(), this.rotationAngle = this._offset.dot(q.copy(this.rotationAxis).cross(this.eye)) * e) : "X" !== t && "Y" !== t && "Z" !== t || (this.rotationAxis.copy(Q[t]), q.copy(Q[t]), "local" === a && q.applyQuaternion(this.worldQuaternion), q.cross(this.eye), 0 === q.length() ? i = !0 : this.rotationAngle = this._offset.dot(q.normalize()) * e), ("E" === t || i) && (this.rotationAxis.copy(this.eye), this.rotationAngle = this.pointEnd.angleTo(this.pointStart), this._startNorm.copy(this.pointStart).normalize(), this._endNorm.copy(this.pointEnd).normalize(), this.rotationAngle *= this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1), this.rotationSnap && (this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap), "local" === a && "E" !== t && "XYZE" !== t ? (n.quaternion.copy(this._quaternionStart), n.quaternion.multiply(X.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize()) : (this.rotationAxis.applyQuaternion(this._parentQuaternionInv), n.quaternion.copy(X.setFromAxisAngle(this.rotationAxis, this.rotationAngle)), n.quaternion.multiply(this._quaternionStart).normalize()) + } + this.dispatchEvent(G), this.dispatchEvent(H) + } + } + pointerUp(e) { + 0 === e.button && (this.dragging && null !== this.axis && (N.mode = this.mode, this.dispatchEvent(N)), this.dragging = !1, this.axis = null) + } + dispose() { + this.domElement.removeEventListener("pointerdown", this._onPointerDown), this.domElement.removeEventListener("pointermove", this._onPointerHover), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.traverse((function(e) { + e.geometry && e.geometry.dispose(), e.material && e.material.dispose() + })) + } + attach(e) { + return this.object = e, this.visible = !0, this + } + detach() { + return this.object = void 0, this.visible = !1, this.axis = null, this + } + reset() { + this.enabled && this.dragging && (this.object.position.copy(this._positionStart), this.object.quaternion.copy(this._quaternionStart), this.object.scale.copy(this._scaleStart), this.dispatchEvent(G), this.dispatchEvent(H), this.pointStart.copy(this.pointEnd)) + } + getRaycaster() { + return Y + } + getMode() { + return this.mode + } + setMode(e) { + this.mode = e + } + setTranslationSnap(e) { + this.translationSnap = e + } + setRotationSnap(e) { + this.rotationSnap = e + } + setScaleSnap(e) { + this.scaleSnap = e + } + setSize(e) { + this.size = e + } + setSpace(e) { + this.space = e + } + } + + function K(e) { + if (this.domElement.ownerDocument.pointerLockElement) return { + x: 0, + y: 0, + button: e.button + }; + { + const t = this.domElement.getBoundingClientRect(); + return { + x: (e.clientX - t.left) / t.width * 2 - 1, + y: -(e.clientY - t.top) / t.height * 2 + 1, + button: e.button + } + } + } + + function ee(e) { + if (this.enabled) switch (e.pointerType) { + case "mouse": + case "pen": + this.pointerHover(this._getPointer(e)) + } + } + + function te(e) { + this.enabled && (document.pointerLockElement || this.domElement.setPointerCapture(e.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.pointerHover(this._getPointer(e)), this.pointerDown(this._getPointer(e))) + } + + function ie(e) { + this.enabled && this.pointerMove(this._getPointer(e)) + } + + function ne(e) { + this.enabled && (this.domElement.releasePointerCapture(e.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.pointerUp(this._getPointer(e))) + } + + function ae(e, t, i) { + const n = t.intersectObject(e, !0); + for (let e = 0; e < n.length; e++) + if (n[e].object.visible || i) return n[e]; + return !1 + } + const se = new B.Euler, + oe = new B.Vector3(0, 1, 0), + re = new B.Vector3(0, 0, 0), + le = new B.Matrix4, + ce = new B.Quaternion, + de = new B.Quaternion, + pe = new B.Vector3, + he = new B.Matrix4, + me = new B.Vector3(1, 0, 0), + ue = new B.Vector3(0, 1, 0), + ge = new B.Vector3(0, 0, 1), + ye = new B.Vector3, + fe = new B.Vector3, + we = new B.Vector3, + be = "#e74c3c", + ve = "#27ae60", + Ee = "#3498db", + xe = "#f1c40f"; + class Se extends B.Object3D { + constructor() { + super(), this.isTransformControlsGizmo = !0, this.type = "TransformControlsGizmo"; + const e = new B.MeshBasicMaterial({ + depthTest: !1, + depthWrite: !1, + fog: !1, + toneMapped: !1, + transparent: !0 + }), + t = new B.LineBasicMaterial({ + depthTest: !1, + depthWrite: !1, + fog: !1, + toneMapped: !1, + transparent: !0 + }), + i = e.clone(); + i.opacity = .15; + const n = t.clone(); + n.opacity = .5; + const a = e.clone(); + a.color.set(be); + const s = e.clone(); + s.color.set(ve); + const o = e.clone(); + o.color.set(Ee); + const r = e.clone(); + r.color.set(be), r.opacity = .5; + const l = e.clone(); + l.color.set(ve), l.opacity = .5; + const c = e.clone(); + c.color.set(Ee), c.opacity = .5; + const d = e.clone(); + d.opacity = .25; + const p = e.clone(); + p.color.set(xe), p.opacity = .25, e.clone().color.set(xe); + const h = e.clone(); + h.color.setHex(7895160); + const m = new B.CylinderGeometry(0, .04, .1, 12); + m.translate(0, .05, 0); + const u = new B.BoxGeometry(.08, .08, .08); + u.translate(0, .04, 0); + const g = new B.BufferGeometry; + g.setAttribute("position", new B.Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3)); + const y = new B.CylinderGeometry(.0075, .0075, .5, 3); + + function f(e, t) { + const i = new B.TorusGeometry(e, .0075, 3, 64, t * Math.PI * 2); + return i.rotateY(Math.PI / 2), i.rotateX(Math.PI / 2), i + } + y.translate(0, .25, 0); + const w = { + X: [ + [new B.Mesh(m, a), [.5, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new B.Mesh(m, a), [-.5, 0, 0], + [0, 0, Math.PI / 2] + ], + [new B.Mesh(y, a), [0, 0, 0], + [0, 0, -Math.PI / 2] + ] + ], + Y: [ + [new B.Mesh(m, s), [0, .5, 0]], + [new B.Mesh(m, s), [0, -.5, 0], + [Math.PI, 0, 0] + ], + [new B.Mesh(y, s)] + ], + Z: [ + [new B.Mesh(m, o), [0, 0, .5], + [Math.PI / 2, 0, 0] + ], + [new B.Mesh(m, o), [0, 0, -.5], + [-Math.PI / 2, 0, 0] + ], + [new B.Mesh(y, o), null, [Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new B.Mesh(new B.OctahedronGeometry(.1, 0), d.clone()), [0, 0, 0]] + ], + XY: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), c.clone()), [.15, .15, 0]] + ], + YZ: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), r.clone()), [0, .15, .15], + [0, Math.PI / 2, 0] + ] + ], + XZ: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), l.clone()), [.15, 0, .15], + [-Math.PI / 2, 0, 0] + ] + ] + }, + b = { + X: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [.3, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [-.3, 0, 0], + [0, 0, Math.PI / 2] + ] + ], + Y: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, .3, 0]], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, -.3, 0], + [0, 0, Math.PI] + ] + ], + Z: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, 0, .3], + [Math.PI / 2, 0, 0] + ], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, 0, -.3], + [-Math.PI / 2, 0, 0] + ] + ], + XYZ: [ + [new B.Mesh(new B.OctahedronGeometry(.2, 0), i)] + ], + XY: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [.15, .15, 0]] + ], + YZ: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [0, .15, .15], + [0, Math.PI / 2, 0] + ] + ], + XZ: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [.15, 0, .15], + [-Math.PI / 2, 0, 0] + ] + ] + }, + v = { + START: [ + [new B.Mesh(new B.OctahedronGeometry(.01, 2), n), null, null, null, "helper"] + ], + END: [ + [new B.Mesh(new B.OctahedronGeometry(.01, 2), n), null, null, null, "helper"] + ], + DELTA: [ + [new B.Line(function() { + const e = new B.BufferGeometry; + return e.setAttribute("position", new B.Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3)), e + }(), n), null, null, null, "helper"] + ], + X: [ + [new B.Line(g, n.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new B.Line(g, n.clone()), [0, -1e3, 0], + [0, 0, Math.PI / 2], + [1e6, 1, 1], "helper" + ] + ], + Z: [ + [new B.Line(g, n.clone()), [0, 0, -1e3], + [0, -Math.PI / 2, 0], + [1e6, 1, 1], "helper" + ] + ] + }, + E = { + XYZE: [ + [new B.Mesh(f(.5, 1), h), null, [0, Math.PI / 2, 0]] + ], + X: [ + [new B.Mesh(f(.5, .5), a)] + ], + Y: [ + [new B.Mesh(f(.5, .5), s), null, [0, 0, -Math.PI / 2]] + ], + Z: [ + [new B.Mesh(f(.5, .5), o), null, [0, Math.PI / 2, 0]] + ], + E: [ + [new B.Mesh(f(.75, 1), p), null, [0, Math.PI / 2, 0]] + ] + }, + x = { + AXIS: [ + [new B.Line(g, n.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ] + }, + S = { + XYZE: [ + [new B.Mesh(new B.SphereGeometry(.25, 10, 8), i)] + ], + X: [ + [new B.Mesh(new B.TorusGeometry(.5, .1, 4, 24), i), [0, 0, 0], + [0, -Math.PI / 2, -Math.PI / 2] + ] + ], + Y: [ + [new B.Mesh(new B.TorusGeometry(.5, .1, 4, 24), i), [0, 0, 0], + [Math.PI / 2, 0, 0] + ] + ], + Z: [ + [new B.Mesh(new B.TorusGeometry(.5, .1, 4, 24), i), [0, 0, 0], + [0, 0, -Math.PI / 2] + ] + ], + E: [ + [new B.Mesh(new B.TorusGeometry(.75, .1, 2, 24), i)] + ] + }, + M = { + X: [ + [new B.Mesh(u, a), [.5, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new B.Mesh(y, a), [0, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new B.Mesh(u, a), [-.5, 0, 0], + [0, 0, Math.PI / 2] + ] + ], + Y: [ + [new B.Mesh(u, s), [0, .5, 0]], + [new B.Mesh(y, s)], + [new B.Mesh(u, s), [0, -.5, 0], + [0, 0, Math.PI] + ] + ], + Z: [ + [new B.Mesh(u, o), [0, 0, .5], + [Math.PI / 2, 0, 0] + ], + [new B.Mesh(y, o), [0, 0, 0], + [Math.PI / 2, 0, 0] + ], + [new B.Mesh(u, o), [0, 0, -.5], + [-Math.PI / 2, 0, 0] + ] + ], + XY: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), c), [.15, .15, 0]] + ], + YZ: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), r), [0, .15, .15], + [0, Math.PI / 2, 0] + ] + ], + XZ: [ + [new B.Mesh(new B.BoxGeometry(.15, .15, .01), l), [.15, 0, .15], + [-Math.PI / 2, 0, 0] + ] + ], + XYZ: [ + [new B.Mesh(new B.BoxGeometry(.1, .1, .1), d.clone())] + ] + }, + k = { + X: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [.3, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [-.3, 0, 0], + [0, 0, Math.PI / 2] + ] + ], + Y: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, .3, 0]], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, -.3, 0], + [0, 0, Math.PI] + ] + ], + Z: [ + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, 0, .3], + [Math.PI / 2, 0, 0] + ], + [new B.Mesh(new B.CylinderGeometry(.2, 0, .6, 4), i), [0, 0, -.3], + [-Math.PI / 2, 0, 0] + ] + ], + XY: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [.15, .15, 0]] + ], + YZ: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [0, .15, .15], + [0, Math.PI / 2, 0] + ] + ], + XZ: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .01), i), [.15, 0, .15], + [-Math.PI / 2, 0, 0] + ] + ], + XYZ: [ + [new B.Mesh(new B.BoxGeometry(.2, .2, .2), i), [0, 0, 0]] + ] + }, + C = { + X: [ + [new B.Line(g, n.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new B.Line(g, n.clone()), [0, -1e3, 0], + [0, 0, Math.PI / 2], + [1e6, 1, 1], "helper" + ] + ], + Z: [ + [new B.Line(g, n.clone()), [0, 0, -1e3], + [0, -Math.PI / 2, 0], + [1e6, 1, 1], "helper" + ] + ] + }; + + function A(e) { + const t = new B.Object3D; + for (const i in e) + for (let n = e[i].length; n--;) { + const a = e[i][n][0].clone(), + s = e[i][n][1], + o = e[i][n][2], + r = e[i][n][3], + l = e[i][n][4]; + a.name = i, a.tag = l, s && a.position.set(s[0], s[1], s[2]), o && a.rotation.set(o[0], o[1], o[2]), r && a.scale.set(r[0], r[1], r[2]), a.updateMatrix(); + const c = a.geometry.clone(); + c.applyMatrix4(a.matrix), a.geometry = c, a.renderOrder = 1 / 0, a.position.set(0, 0, 0), a.rotation.set(0, 0, 0), a.scale.set(1, 1, 1), t.add(a) + } + return t + } + this.gizmo = {}, this.picker = {}, this.helper = {}, this.add(this.gizmo.translate = A(w)), this.add(this.gizmo.rotate = A(E)), this.add(this.gizmo.scale = A(M)), this.add(this.picker.translate = A(b)), this.add(this.picker.rotate = A(S)), this.add(this.picker.scale = A(k)), this.add(this.helper.translate = A(v)), this.add(this.helper.rotate = A(x)), this.add(this.helper.scale = A(C)), this.picker.translate.visible = !1, this.picker.rotate.visible = !1, this.picker.scale.visible = !1 + } + updateMatrixWorld(e) { + const t = "local" === ("scale" === this.mode ? "local" : this.space) ? this.worldQuaternion : de; + this.gizmo.translate.visible = "translate" === this.mode, this.gizmo.rotate.visible = "rotate" === this.mode, this.gizmo.scale.visible = "scale" === this.mode, this.helper.translate.visible = "translate" === this.mode, this.helper.rotate.visible = "rotate" === this.mode, this.helper.scale.visible = "scale" === this.mode; + let i = []; + i = i.concat(this.picker[this.mode].children), i = i.concat(this.gizmo[this.mode].children), i = i.concat(this.helper[this.mode].children); + for (let e = 0; e < i.length; e++) { + const n = i[e]; + let a; + if (n.visible = !0, n.rotation.set(0, 0, 0), n.position.copy(this.worldPosition), a = this.camera.isOrthographicCamera ? (this.camera.top - this.camera.bottom) / this.camera.zoom : this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7), n.scale.set(1, 1, 1).multiplyScalar(a * this.size / 4), "helper" !== n.tag) { + if (n.quaternion.copy(t), "translate" === this.mode || "scale" === this.mode) { + const e = .99, + i = .2; + "X" === n.name && Math.abs(oe.copy(me).applyQuaternion(t).dot(this.eye)) > e && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "Y" === n.name && Math.abs(oe.copy(ue).applyQuaternion(t).dot(this.eye)) > e && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "Z" === n.name && Math.abs(oe.copy(ge).applyQuaternion(t).dot(this.eye)) > e && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "XY" === n.name && Math.abs(oe.copy(ge).applyQuaternion(t).dot(this.eye)) < i && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "YZ" === n.name && Math.abs(oe.copy(me).applyQuaternion(t).dot(this.eye)) < i && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "XZ" === n.name && Math.abs(oe.copy(ue).applyQuaternion(t).dot(this.eye)) < i && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1) + } else "rotate" === this.mode && (ce.copy(t), oe.copy(this.eye).applyQuaternion(X.copy(t).invert()), -1 !== n.name.search("E") && n.quaternion.setFromRotationMatrix(le.lookAt(this.eye, re, ue)), "X" === n.name && (X.setFromAxisAngle(me, Math.atan2(-oe.y, oe.z)), X.multiplyQuaternions(ce, X), n.quaternion.copy(X)), "Y" === n.name && (X.setFromAxisAngle(ue, Math.atan2(oe.x, oe.z)), X.multiplyQuaternions(ce, X), n.quaternion.copy(X)), "Z" === n.name && (X.setFromAxisAngle(ge, Math.atan2(oe.y, oe.x)), X.multiplyQuaternions(ce, X), n.quaternion.copy(X))); + n.visible = n.visible && (-1 === n.name.indexOf("X") || this.showX), n.visible = n.visible && (-1 === n.name.indexOf("Y") || this.showY), n.visible = n.visible && (-1 === n.name.indexOf("Z") || this.showZ), n.visible = n.visible && (-1 === n.name.indexOf("E") || this.showX && this.showY && this.showZ), n.material._color = n.material._color || n.material.color.clone(), n.material._opacity = n.material._opacity || n.material.opacity, n.material.color.copy(n.material._color), n.material.opacity = n.material._opacity, this.enabled && this.axis && (n.name === this.axis || this.axis.split("").some((function(e) { + return n.name === e + }))) && (n.material.color.setHex(16776960), n.material.opacity = 1) + } else n.visible = !1, "AXIS" === n.name ? (n.visible = !!this.axis, "X" === this.axis && (X.setFromEuler(se.set(0, 0, 0)), n.quaternion.copy(t).multiply(X), Math.abs(oe.copy(me).applyQuaternion(t).dot(this.eye)) > .9 && (n.visible = !1)), "Y" === this.axis && (X.setFromEuler(se.set(0, 0, Math.PI / 2)), n.quaternion.copy(t).multiply(X), Math.abs(oe.copy(ue).applyQuaternion(t).dot(this.eye)) > .9 && (n.visible = !1)), "Z" === this.axis && (X.setFromEuler(se.set(0, Math.PI / 2, 0)), n.quaternion.copy(t).multiply(X), Math.abs(oe.copy(ge).applyQuaternion(t).dot(this.eye)) > .9 && (n.visible = !1)), "XYZE" === this.axis && (X.setFromEuler(se.set(0, Math.PI / 2, 0)), oe.copy(this.rotationAxis), n.quaternion.setFromRotationMatrix(le.lookAt(re, oe, ue)), n.quaternion.multiply(X), n.visible = this.dragging), "E" === this.axis && (n.visible = !1)) : "START" === n.name ? (n.position.copy(this.worldPositionStart), n.visible = this.dragging) : "END" === n.name ? (n.position.copy(this.worldPosition), n.visible = this.dragging) : "DELTA" === n.name ? (n.position.copy(this.worldPositionStart), n.quaternion.copy(this.worldQuaternionStart), q.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1), q.applyQuaternion(this.worldQuaternionStart.clone().invert()), n.scale.copy(q), n.visible = this.dragging) : (n.quaternion.copy(t), this.dragging ? n.position.copy(this.worldPositionStart) : n.position.copy(this.worldPosition), this.axis && (n.visible = -1 !== this.axis.search(n.name))) + } + super.updateMatrixWorld(e) + } + } + class Me extends B.Mesh { + constructor() { + super(new B.PlaneGeometry(1e5, 1e5, 2, 2), new B.MeshBasicMaterial({ + visible: !1, + wireframe: !0, + side: B.DoubleSide, + transparent: !0, + opacity: .1, + toneMapped: !1 + })), this.isTransformControlsPlane = !0, this.type = "TransformControlsPlane" + } + updateMatrixWorld(e) { + let t = this.space; + switch (this.position.copy(this.worldPosition), "scale" === this.mode && (t = "local"), ye.copy(me).applyQuaternion("local" === t ? this.worldQuaternion : de), fe.copy(ue).applyQuaternion("local" === t ? this.worldQuaternion : de), we.copy(ge).applyQuaternion("local" === t ? this.worldQuaternion : de), oe.copy(fe), this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + oe.copy(this.eye).cross(ye), pe.copy(ye).cross(oe); + break; + case "Y": + oe.copy(this.eye).cross(fe), pe.copy(fe).cross(oe); + break; + case "Z": + oe.copy(this.eye).cross(we), pe.copy(we).cross(oe); + break; + case "XY": + pe.copy(we); + break; + case "YZ": + pe.copy(ye); + break; + case "XZ": + oe.copy(we), pe.copy(fe); + break; + case "XYZ": + case "E": + pe.set(0, 0, 0) + } + break; + default: + pe.set(0, 0, 0) + } + 0 === pe.length() ? this.quaternion.copy(this.cameraQuaternion) : (he.lookAt(q.set(0, 0, 0), pe, oe), this.quaternion.setFromRotationMatrix(he)), super.updateMatrixWorld(e) + } + } + class ke extends B.Object3D { + editingObject = null; + listenerElement = null; + camera = null; + dragging = !1; + gizmo = null; + gizmoHovering = !1; + constructor(e, t) { + super(), this.listenerElement = t, this.camera = e, this.listenerElement.addEventListener("pointerdown", this.onPointerDown), this.listenerElement.addEventListener("pointermove", this.onPointerMove), this.listenerElement.addEventListener("pointerup", this.onPointerUp), this.listenerElement.addEventListener("pointercancel", this.onPointerUp), this.gizmoIdleMaterial = new B.MeshBasicMaterial({ + color: 16777215, + opacity: .25, + depthTest: !1, + depthWrite: !1, + fog: !1, + toneMapped: !1, + transparent: !0 + }), this.gizmoHoveringMaterial = new B.MeshBasicMaterial({ + color: 16776960, + opacity: .95, + depthTest: !1, + depthWrite: !1, + fog: !1, + toneMapped: !1, + transparent: !0 + }); + let i = new B.BoxGeometry; + this.gizmo = new B.Mesh(i, this.gizmoIdleMaterial), this.gizmo.renderOrder = 1 / 0, this.gizmo.visible = !1, this.gizmo.onBeforeRender = this.onGizmoBeforeRender.bind(this), this.add(this.gizmo) + } + attach(e) { + this.editingObject = e, this.gizmo.visible = !0, this.onGizmoBeforeRender() + } + detach() { + this.onPointerUp(), this.editingObject = null, this.gizmo.visible = !1 + } + dispose() { + this.listenerElement.removeEventListener("pointerdown", this.onPointerDown), this.listenerElement.removeEventListener("pointermove", this.onPointerMove), this.listenerElement.removeEventListener("pointerup", this.onPointerUp), this.listenerElement.removeEventListener("pointercancel", this.onPointerUp) + } + onPointerDown = e => { + this.editingObject && this.gizmoHovering && (e.preventDefault(), e.stopPropagation(), this.dragging = !0) + }; + onPointerMove = e => { + this.dragging ? this.onPointerDrag(e) : this.checkHoveringGizmo(e) + }; + checkHoveringGizmo(e) { + this.v2a || (this.v2a = new B.Vector2), this.v2a.x = (e.x - metapress.renderer.canvasRect.left) / metapress.renderer.canvasRect.width * 2 - 1, this.v2a.y = -(e.y - metapress.renderer.canvasRect.top) / metapress.renderer.canvasRect.height * 2 + 1, this.caster || (this.caster = new B.Raycaster), this.caster.setFromCamera(this.v2a, this.camera), this.caster.intersectObject(this.gizmo, !1).length > 0 ? (this.gizmo.material = this.gizmoHoveringMaterial, this.gizmoHovering = !0) : (this.gizmo.material = this.gizmoIdleMaterial, this.gizmoHovering = !1) + } + static transformForCoordinates(e, t, i, n, a, s) { + this.v2a || (this.v2a = new B.Vector2), this.v2a.x = e / window.innerWidth * 2 - 1, this.v2a.y = -t / window.innerHeight * 2 + 1, this.caster || (this.caster = new B.Raycaster), this.caster.setFromCamera(this.v2a, i); + let o = this.caster.intersectObject(n, !0); + if (o = o.filter((e => { + if (!e.object || !e.face) return !1; + let t = e.object.visible, + i = e.object; + for (; t && i.parent;) i = i.parent, t = i.visible; + return !(!t || s && !s(e)) + })), !this.zeroYplane) { + let e = new B.PlaneGeometry(1e3, 1e3), + t = new B.MeshBasicMaterial; + this.zeroYplane = new B.Mesh(e, t), this.zeroYplane.rotation.x = -Math.PI / 2, this.zeroYplane.name = "Place on Wall: Zero Plane", this.zeroYplane.visible = !1 + } + let r = o[0]; + return r || (i.getWorldPosition(this.zeroYplane.position), this.zeroYplane.position.y = 0, this.zeroYplane.updateMatrixWorld(!0), r = this.caster.intersectObject(this.zeroYplane, !1)[0]), r ? (this.m4a || (this.m4a = new B.Matrix4), this.v3a || (this.v3a = new B.Vector3), this.m4a.extractRotation(r.object.matrixWorld), this.v3a.copy(r.face.normal), this.v3a.applyMatrix4(this.m4a), this.v3a.normalize(), this.zeroVector || (this.zeroVector = new B.Vector3(0, 0, 0)), this.xAxis || (this.xAxis = new B.Vector3(1, 0, 0)), this.yAxis || (this.yAxis = new B.Vector3(0, 1, 0)), this.qa || (this.qa = new B.Quaternion), this.m4b || (this.m4b = new B.Matrix4), this.m4a.lookAt(this.zeroVector, this.v3a, B.Object3D.DEFAULT_UP), a ? this.m4b.makeRotationAxis(this.yAxis, Math.PI) : this.m4b.makeRotationAxis(this.xAxis, -Math.PI / 2), this.m4a.multiply(this.m4b), this.qa.setFromRotationMatrix(this.m4a), this.v3b || (this.v3b = new B.Vector3), this.v3b.copy(this.v3a), this.v3b.multiplyScalar(.01), this.v3b.add(r.point), { + position: this.v3b, + quaternion: this.qa + }) : null + } + onPointerDrag(e) { + let t = this.editingObject.isMesh && "PlaneGeometry" == this.editingObject.geometry?.type; + t = t || this.editingObject.children[0]?.isMesh && "PlaneGeometry" == this.editingObject.children[0]?.geometry?.type; + let i = ke.transformForCoordinates(e.x, e.y, this.camera, this.parent, t, (e => e.object != this.gizmo && e.object != this.editingObject && !this.editingObject.getObjectById(e.object.id))); + i && (this.editingObject.position.copy(i.position), this.editingObject.quaternion.copy(i.quaternion)) + } + onPointerUp = e => { + this.dragging && (this.dragging = !1, this.dispatchEvent({ + type: "objectChange" + })) + }; + onGizmoBeforeRender() { + if (!this.editingObject) return; + this.editingObject.getWorldPosition(this.gizmo.position), this.v3a || (this.v3a = new B.Vector3), this.camera.getWorldPosition(this.v3a); + let e = this.v3a.distanceTo(this.gizmo.position); + this.gizmo.scale.setScalar(.035 * e) + } + } + var Ce = i(25108); + class Ae extends n.PureComponent { + static current = null; + state = { + page: "entities", + selectedEntityID: "", + transformControlMode: "" + }; + transformControl = null; + wallTool = null; + _lastEditingMode = ""; + _lastEntityID = ""; + componentDidMount() { + this.releaseMouseInput = metapress.input.mouse.preventInput.acquire(), this.releaseTouchInput = metapress.input.touch.preventInput.acquire(), metapress.renderer.canvas.addEventListener("pointerdown", this.onPointerDown), metapress.plugins.addEventListener("onUnsavedFieldsChanged", this.onUnsavedChanges), window.addEventListener("keydown", this.onKeyDown), window.addEventListener("keyup", this.onKeyUp), Ae.current = this; + const e = metapress.editor.selectionManager.selectedEntityIDs[0] || ""; + this.setState({ + selectedEntityID: e, + transformControlMode: Ae.lastTransformControlMode || "", + page: Ae.lastPage || "entities" + }), this._lastEntityID = e + } + componentWillUnmount() { + this.releaseMouseInput?.(), this.releaseTouchInput?.(), metapress.renderer.canvas.removeEventListener("pointerdown", this.onPointerDown), metapress.plugins.removeEventListener("onUnsavedFieldsChanged", this.onUnsavedChanges), window.removeEventListener("keydown", this.onKeyDown), window.removeEventListener("keyup", this.onKeyUp), Ae.current == this && (Ae.current = this), this.transformControl?.removeFromParent(), this.transformControl?.dispose(), this.wallTool?.removeFromParent(), this.wallTool?.dispose(), this.wallTool = null, Ae.lastTransformControlMode = this.state.transformControlMode, Ae.lastPage = this.state.page + } + onPointerDown = async e => { + if (e.preventDefault(), metapress.renderer.canvas.focus(), await new Promise((e => setTimeout(e, 1))), this.transformControl?.dragging || this.wallTool?.dragging) return; + let t = metapress.raycast.atScreenCoordinates(e.x, e.y); + if (!t?.entity) return; + let i = t.entity; + for (; i && "template" != i.sync && i.parent;) i = metapress.entities.get(i.parent); + i && metapress.editor.selectionManager.select(i.id) + }; + onKeyDown = async e => { + if ("Control" != e.key && "Shift" != e.key && "Alt" != e.key && "Meta" != e.key || (this.transformControl?.setTranslationSnap(.2), this.transformControl?.setScaleSnap(.2), this.transformControl?.setRotationSnap(Math.PI / 16)), (e.ctrlKey || e.metaKey) && "c" == e.key) { + if ("INPUT" == document.activeElement?.tagName || "TEXTAREA" == document.activeElement?.tagName) return; + e.preventDefault(), this.copySelectedEntities() + } + }; + async copySelectedEntities() { + try { + if ("INPUT" == document.activeElement?.tagName || "TEXTAREA" == document.activeElement?.tagName) return; + if (!metapress.editor.selectionManager.selectedEntityIDs.length) throw new Error("Nothing selected."); + let e = metapress.entities.get(metapress.editor.selectionManager.selectedEntityIDs[0]); + if (!e) throw new Error("Entity not found."); + await navigator.clipboard.writeText("metapress.entity:" + JSON.stringify(e)), metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Copied " + (e.name || `Untitled ${e.type}`), + duration: 3e3 + }) + } catch (e) { + Ce.warn("Failed to copy:", e), metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Cannot copy: " + e.message, + duration: 3e3 + }) + } + } + onKeyUp = e => { + "Control" != e.key && "Shift" != e.key && "Alt" != e.key && "Meta" != e.key || (this.transformControl?.setTranslationSnap(0), this.transformControl?.setScaleSnap(0), this.transformControl?.setRotationSnap(0)) + }; + async updateState(e, t, i = null) { + if (!e || "object" != typeof e || Array.isArray(e) || Object.keys(e).length < 1) Ce.warn("[EditorWindow] Invalid state update.", e); + else if (this.setState({ + ...e + }, t), i) { + const e = 100, + t = 1e3 / e * 1; + let n = 0; + for (; !metapress.entities.getRenderer(i) && (n += 1, !(n >= t));) await new Promise((t => setTimeout(t, e))); + this.updateTransformControl(!0) + } + } + updateTransformControl(e = !1) { + if (!e && this.state.transformControlMode == this._lastEditingMode && this.state.selectedEntityID == this._lastEntityID) return; + this._lastEditingMode = this.state.transformControlMode, this._lastEntityID = this.state.selectedEntityID, this.transformControl?.detach(), this.wallTool?.detach(); + let t = this.state.selectedEntityID && metapress.entities.getRenderer(this.state.selectedEntityID); + t?.object?.isObject3D && ("translate" == this.state.transformControlMode || "rotate" == this.state.transformControlMode || "scale" == this.state.transformControlMode ? (this.transformControl || (this.transformControl = new J(metapress.renderer.camera, metapress.renderer.canvas), this.transformControl.addEventListener("objectChange", this.onTransformControlObjectChange.bind(this)), metapress.renderer.scene.add(this.transformControl)), this.transformControl.setMode(this.state.transformControlMode), this.transformControl.attach(t.container)) : "wall" == this.state.transformControlMode && (this.wallTool || (this.wallTool = new ke(metapress.renderer.camera, metapress.renderer.canvas), this.wallTool.addEventListener("objectChange", this.onTransformControlObjectChange.bind(this)), metapress.renderer.scene.add(this.wallTool)), this.wallTool.attach(t.container))) + } + onTransformControlObjectChange() { + let e = this.state.selectedEntityID && metapress.entities.getRenderer(this.state.selectedEntityID); + e && metapress.entities.update(e.entity.id, { + x: e.container.position.x, + y: e.container.position.y, + z: e.container.position.z, + scaleX: e.container.scale.x, + scaleY: e.container.scale.y, + scaleZ: e.container.scale.z, + quatX: e.container.quaternion.x, + quatY: e.container.quaternion.y, + quatZ: e.container.quaternion.z, + quatW: e.container.quaternion.w, + lastEdited: Date.now() + }) + } + onUnsavedChanges = () => { + this.forceUpdate() + }; + render() { + return this.updateTransformControl(), n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%" + } + }, n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, n.createElement("div", { + style: { + fontSize: 15, + marginLeft: 20 + } + }, "Editor"), n.createElement("div", { + style: { + flex: "1 1 auto" + } + }), n.createElement(Pe, { + icon: i(67742), + enabled: "entities" == this.state.page, + onClick: e => this.setState({ + page: "entities" + }) + }), n.createElement(Pe, { + icon: i(75848), + enabled: "entity" == this.state.page, + onClick: e => this.setState({ + page: "entity" + }) + }), n.createElement(Pe, { + icon: i(88989), + enabled: "settings" == this.state.page, + onClick: e => this.setState({ + page: "settings" + }) + }), n.createElement(Pe, { + icon: i(42065), + enabled: "add" == this.state.page, + onClick: e => this.setState({ + page: "add" + }), + style: { + backgroundSize: 28 + } + }), n.createElement("div", { + style: { + flex: "1 1 auto" + } + }), n.createElement("img", { + draggable: "false", + src: i(42728), + title: "Close", + style: { + flexShrink: 0, + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: () => metapress.menubar.closePanel() + })), n.createElement("div", { + style: { + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: `calc(100% - ${45+(s.H.shared.editorUnlocked?45:0)}px)`, + overflowX: "hidden", + overflowY: "auto" + } + }, "settings" == this.state.page ? n.createElement($, { + plugin: this.props.plugin, + onSwitchPage: e => this.setState({ + page: e + }) + }) : null, "entity" == this.state.page ? n.createElement(U, { + key: this.state.selectedEntityID || "", + plugin: this.props.plugin, + selectedEntityID: this.state.selectedEntityID, + onSwitchPage: e => this.setState({ + page: e + }) + }) : null, "entities" == this.state.page ? n.createElement(I, { + plugin: this.props.plugin, + selectedEntityID: this.state.selectedEntityID + }) : null, "add" == this.state.page ? n.createElement(S, { + plugin: this.props.plugin + }) : null, "set-region-environment" == this.state.page ? n.createElement(L, { + plugin: this.props.plugin, + selectedEntityID: this.state.selectedEntityID, + onSwitchPage: e => this.setState({ + page: e + }) + }) : null, "add-modifier" == this.state.page ? n.createElement(k, { + plugin: this.props.plugin, + selectedEntityID: this.state.selectedEntityID, + onSwitchPage: e => this.setState({ + page: e + }) + }) : null, "action-scripter" == this.state.page ? n.createElement(P, { + selectedEntityID: this.state.selectedEntityID, + onSwitchPage: e => this.setState({ + page: e + }) + }) : null), s.H.shared.editorUnlocked ? n.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: "calc(100% - 45px)", + left: 0, + width: "100%", + height: 44, + borderTop: "1px solid rgba(255, 255, 255, 0.1)" + } + }, n.createElement("div", { + style: { + width: 10, + flex: "0 0 auto" + } + }), n.createElement(Pe, { + enabled: !0, + icon: i(78371), + title: "Save", + onClick: e => metapress.editor.save() + }), n.createElement("div", { + style: { + flex: "1 1 1px" + } + }), n.createElement(Pe, { + enabled: "" == this.state.transformControlMode, + icon: i(40938), + title: "Select", + onClick: e => this.setState({ + transformControlMode: "" + }) + }), n.createElement(Pe, { + enabled: "translate" == this.state.transformControlMode, + icon: i(97165), + title: "Move", + onClick: e => this.setState({ + transformControlMode: "translate" + }) + }), n.createElement(Pe, { + enabled: "rotate" == this.state.transformControlMode, + icon: i(22907), + title: "Rotate", + onClick: e => this.setState({ + transformControlMode: "rotate" + }) + }), n.createElement(Pe, { + enabled: "scale" == this.state.transformControlMode, + icon: i(23527), + title: "Scale", + onClick: e => this.setState({ + transformControlMode: "scale" + }) + }), n.createElement(Pe, { + enabled: "wall" == this.state.transformControlMode, + icon: i(10965), + title: "Surface Movement", + onClick: e => this.setState({ + transformControlMode: "wall" + }) + }), n.createElement("div", { + style: { + flex: "1 1 1px" + } + }), metapress.editor.hasUnsavedChanges ? n.createElement(Pe, { + enabled: !0, + icon: i(38765), + title: "Unsaved changes" + }) : n.createElement(Pe, { + enabled: !0, + icon: i(78226), + title: "No issues detected" + }), n.createElement("div", { + style: { + width: 10, + flex: "0 0 auto" + } + })) : null) + } + onRender3D() {} + onEntityLoaded(e) { + this.forceUpdate() + } + } + const Pe = e => n.createElement("div", { + style: Object.assign({ + width: 33, + height: "100%", + flex: "0 0 auto", + opacity: e.enabled ? 1 : .4, + cursor: "pointer", + backgroundSize: "22px", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + backgroundImage: `url(${e.icon})` + }, e.style), + onClick: e.onClick, + title: e.title + }); + var De = i(25108); + class Te { + selectedEntityIDs = []; + select(e) { + if (!e) return this.deselect(); + let t = metapress.entities.get(e); + return !!t && ("template" != t.sync ? (De.warn(`[Editor] Can't select entity ${e} because it's not managed by us.`), !1) : (De.debug("[Editor] Selecting entity: ", t), this.selectedEntityIDs = [e], Ae.current?.updateState({ + page: "entity", + selectedEntityID: e + }, void 0, e), metapress.plugins.sendEvent("onEditorSelectionChanged", this.selectedEntityIDs), !0)) + } + deselect() { + return this.selectedEntityIDs = [], metapress.plugins.sendEvent("onEditorSelectionChanged", this.selectedEntityIDs), !0 + } + deselectOnly(e) { + return this.selectedEntityIDs = this.selectedEntityIDs.filter((t => t != e)), metapress.plugins.sendEvent("onEditorSelectionChanged", this.selectedEntityIDs), !0 + } + isSelected(e) { + return this.selectedEntityIDs.includes(e) + } + } + var Ie = i(25108); + class ze { + constructor() { + metapress.entities.add({ + id: "temporary:object-dropzone-indicator", + type: "mesh", + url: i(42969), + hidden: !0 + }), this.PreProcessing = new l, metapress.renderer.canvas.addEventListener("dragover", this.onDragOver.bind(this)), metapress.renderer.canvas.addEventListener("dragleave", this.onDragLeave.bind(this)), metapress.renderer.canvas.addEventListener("drop", this.onDrop.bind(this)) + } + async onDragOver(e) { + if (!s.H.shared.editorUnlocked) return; + if (this.isDraggingOver = !0, e.preventDefault(), e.dataTransfer.dropEffect = "copy", this._isDebouncing) return; + if (this._isDebouncing = !0, await new Promise((e => setTimeout(e, 1))), this._isDebouncing = !1, !this.isDraggingOver) return; + let t = ke.transformForCoordinates(e.x, e.y, metapress.renderer.camera, metapress.renderer.scene, !1, (e => { + let t = null; + return e.object.traverseAncestors((e => { + t || (t = e.entityRenderer) + })), "temporary:object-dropzone-indicator" != t?.entity?.id + })); + t && metapress.entities.update("temporary:object-dropzone-indicator", { + x: t.position.x, + y: t.position.y, + z: t.position.z, + quatX: t.quaternion.x, + quatY: t.quaternion.y, + quatZ: t.quaternion.z, + quatW: t.quaternion.w, + hidden: !1 + }) + } + onDragLeave(e) { + s.H.shared.editorUnlocked && (e.preventDefault(), this.isDraggingOver = !1, metapress.entities.update("temporary:object-dropzone-indicator", { + hidden: !0 + })) + } + async onDrop(e) { + if (!s.H.shared.editorUnlocked) return; + e.preventDefault(), this.isDraggingOver = !1, metapress.entities.update("temporary:object-dropzone-indicator", { + hidden: !0 + }); + let t = e.dataTransfer.files[0]; + if (!t) return; + let i = metapress.menubar.toasts.show({ + sticky: !0, + text: `Saving ${t.name}...` + }); + try { + t = await this.PreProcessing.callPreProcessing(t); + let i = await metapress.plugins.callAsync("prepareEntityForFile", t); + if (!i) throw new Error("Unsupported file type."); + i.name || (i.name = t.name); + let n = "plane" == i.type, + a = ke.transformForCoordinates(e.x, e.y, metapress.renderer.camera, metapress.renderer.scene, n, (e => { + let t = null; + return e.object.traverseAncestors((e => { + t || (t = e.entityRenderer) + })), "temporary:object-dropzone-indicator" != t?.entity?.id + })); + if (!a) throw new Error("The item could not be placed at this position."); + let s = await metapress.storage.uploadFile("custom-template", t); + for (let e in i) "$URL" == i[e] && (i[e] = s); + let o = metapress.entities.add({ + ...i, + sync: "template", + x: a.position.x, + y: a.position.y, + z: a.position.z, + quatX: a.quaternion.x, + quatY: a.quaternion.y, + quatZ: a.quaternion.z, + quatW: a.quaternion.w + }); + metapress.editor.editEntity(o.id) + } catch (e) { + Ie.warn("[MetaPress] Unable to save dropped file.", e), "cancelled" != e.message && metapress.menubar.toasts.show({ + text: "Unable to save: " + e.message + }) + } + metapress.menubar.toasts.close(i) + } + } + var je = i(25108); + const _e = e => { + let [t, a] = (0, n.useState)("select-template"), [s, o] = (0, n.useState)(""), { + templates: r, + templatesLoading: l, + templatesError: c + } = Ue(), d = metapress.dialogs.useDialog(); + return metapress.editor.canEdit ? "select-template" == t ? n.createElement("div", { + style: { + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "flex-start" + } + }, n.createElement("img", { + draggable: "false", + src: i(40249), + style: { + height: 64, + marginBottom: 40 + } + }), n.createElement("div", { + style: { + fontSize: 16, + fontWeight: "bold", + textAlign: "center", + marginBottom: 10, + opacity: .5, + maxWidth: 300 + } + }, "Get Started"), n.createElement("div", { + style: { + fontSize: 12, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 60px 40px", + opacity: .5, + maxWidth: 300 + } + }, "To get started, select a template world below. You can always change your template or customize it later from the Editor."), l && 0 == r.length ? n.createElement("div", { + style: { + textAlign: "center", + fontSize: 15 + } + }, "Loading templates...") : null, r.map((e => n.createElement(x, { + key: e.url, + image: e.image, + title: e.name, + subtitle: e.description, + onClick: () => (async e => { + try { + a("loading-template"), o("Fetching template..."), await metapress.editor.loadBackup(e.url, (e => { + o(e) + })), a("complete"), o(""), await new Promise((e => setTimeout(e, 2e3))), d.close() + } catch (e) { + je.warn("[MetaPress] Unable to load template: ", e), a("select-template"), o(""), metapress.dialogs.alert({ + icon: "error", + title: "Unable to load template", + text: e.message + }) + } + })(e) + }))), n.createElement("div", { + style: { + height: 10 + } + })) : "loading-template" == t ? n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center" + } + }, n.createElement("img", { + draggable: "false", + src: i(27745), + style: { + height: 64, + marginBottom: 40 + } + }), n.createElement("div", { + style: { + fontSize: 16, + fontWeight: "bold", + textAlign: "center", + marginBottom: 10, + opacity: .5, + maxWidth: 300 + } + }, "Loading template, please wait..."), n.createElement("div", { + style: { + fontSize: 12, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5, + maxWidth: 300 + } + }, s)) : "complete" == t ? n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center" + } + }, n.createElement("img", { + draggable: "false", + src: i(92260), + style: { + height: 64, + marginBottom: 40 + } + }), n.createElement("div", { + style: { + fontSize: 16, + fontWeight: "bold", + textAlign: "center", + marginBottom: 10, + opacity: .5, + maxWidth: 300 + } + }, "Done!"), n.createElement("div", { + style: { + fontSize: 12, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5, + maxWidth: 300 + } + }, "Your world has been set up successfully.")) : void 0 : n.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center" + } + }, n.createElement("img", { + draggable: "false", + src: i(31495), + style: { + height: 64, + opacity: .25, + marginBottom: 40 + } + }), n.createElement("div", { + style: { + fontSize: 16, + fontWeight: "bold", + textAlign: "center", + marginBottom: 10, + opacity: .5, + maxWidth: 300 + } + }, "No Content"), n.createElement("div", { + style: { + fontSize: 12, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5, + maxWidth: 300 + } + }, "This world currently has no content. Please contact an administrator to set up this world.")) + }, + Ue = () => { + let [e, t] = n.useState([]), [i, a] = n.useState(!1), [s, o] = n.useState(null); + return n.useEffect((() => { + (async () => { + try { + a(!0); + let e = await metapress.plugins.callAllAsync("editor_getTemplates"); + e = e.flat().filter((e => e?.url && e?.name)), e.sort(((e, t) => (e.name || "").localeCompare(t.name || ""))), t(e), a(!1), o(null) + } catch (e) { + je.warn("[MetaPress] Error fetching templates: " + e.message), a(!1), o(e) + } + })() + }), []), { + templates: e, + templatesLoading: i, + templatesError: s + } + }; + var Le = i(25108); + class Oe { + id = "core.ui.editor"; + name = "Editor"; + description = "Allows editing of the world."; + requires = ["backend", "entities", "storage", "dialogs", "renderer", "raycast"]; + provides = ["editor"]; + editorMenuID = "core.ui.editor.menu"; + prevOpenID = null; + templateLastEdited = 0; + selectionManager = null; + PlaceOnWallTool = ke; + dropzone = null; + get canEdit() { + return metapress.storage.canEdit + } + get currentTool() { + return Ae?.current?._lastEditingMode || "" + } + async onLoad() { + if (await this.loadTemplateFromServer(), !this.canEdit) return Le.debug("[MetaPress] Editor disabled, user does not have editing permission in this world."); + metapress.entities.add({ + id: this.editorMenuID, + type: "menubar.item", + name: "Editor", + description: "Can be used to edit the world. Only visible to admins.", + is_panel: !0, + order: 99, + icon: i(44209), + onClick: () => this.toggleEditor() + }), this.selectionManager = new Te, this.dropzone = new ze, this.prevOpenID = metapress.menubar.openPanelID || null; + try { + window.parent.addEventListener("beforeunload", this.onBeforeUnload.bind(this)) + } catch (e) { + Le.warn(`[Editor] Unable to add the 'beforeunload' handler. ${e.message}`) + } + window.addEventListener("keydown", (e => { + if ((e.ctrlKey || e.metaKey) && "v" == e.key) { + if ("INPUT" == document.activeElement?.tagName || "TEXTAREA" == document.activeElement?.tagName) return; + e.preventDefault(), this.pasteEntities() + } else "Tab" == e.key && (e.preventDefault(), this.toggleEditor()) + })) + } + async pasteEntities() { + try { + if ("INPUT" == document.activeElement?.tagName || "TEXTAREA" == document.activeElement?.tagName) return; + let e = await navigator.clipboard.readText(); + if (!e) throw new Error("Nothing copied."); + if (!e.startsWith("metapress.entity:")) throw new Error("Nothing copied..."); + let t = JSON.parse(e.substring("metapress.entity:".length)), + i = new THREE.Vector3, + n = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(i), metapress.renderer.camera.getWorldDirection(n), n.setLength(2), n.add(new THREE.Vector3(0, 1, 0).cross(n).setLength(1)), n.add(i), t.sync = "template", t.x = n.x, t.y = n.y, t.z = n.z, delete t.id; + let a = metapress.entities.add(t); + this.selectionManager.select(a.id), metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Pasted " + (t.name || `Untitled ${t.type}`), + duration: 3e3 + }) + } catch (e) { + Le.warn("Failed to paste:", e), metapress.menubar.toasts.show({ + id: "editor.copying", + text: "Cannot paste: " + e.message, + duration: 3e3 + }) + } + } + async loadTemplateFromServer(e = !1) { + try { + let t = await metapress.storage.getFileURL("custom-template", "template.json"); + (e || this.config.templateVersion) && (t += (t.includes("?") ? "&" : "?") + "v=" + (e ? Date.now() : this.config.templateVersion)); + let i = await fetch(t); + if (404 == i.status || !i.ok && !1 === this.config.templateDataExists) return this.lastWorldLoadState = "not-found", Le.warn("[MetaPress] Unable to load editor template: The template doesn't exist (404)."), void metapress.backend.logEvent("world_editor_load_template_404"); + if (!i.ok) throw new Error(`${i.status} ${i.statusText}`); + let n = await i.json(); + this.loadTemplateFromData(n), Le.debug("[MetaPress] Editor template loaded!"), this.lastWorldLoadState = "loaded", metapress.backend.logEvent("world_editor_load_template_success") + } catch (e) { + Le.warn(`[MetaPress] Unable to load editor template: ${e.message}`), this.lastWorldLoadState = "failed", metapress.dialogs.alert({ + icon: "error", + title: "Unable to load world", + text: e.message + }), metapress.backend.logEvent("world_editor_load_template_error") + } + } + loadTemplateFromData(e) { + if ("metapress:custom-template" != e.type) throw new Error("Template data was not valid."); + for (let t of e.entities) { + t.sync = "template"; + let e = metapress.entities.get(t.id); + if (e) { + Object.assign(e, t); + for (let i in e) i in t || delete e[i] + } else e = metapress.entities.add(t) + } + let t = metapress.entities.all.slice(); + for (let i of t) "template" == i.sync && (e.entities.find((e => e.id == i.id)) || metapress.entities.remove(i.id)); + this.createGlobalRegionIfNeeded(), this.templateLastEdited = e.entities.reduce(((e, t) => Math.max(e, t.lastEdited || 0)), 0) + } + createGlobalRegionIfNeeded() { + metapress.entities.all.find((e => "template-global-region" == e.id)) || metapress.entities.add({ + id: "template-global-region", + type: "region", + name: "Global region", + sync: "template", + scaleX: 9999999, + scaleY: 9999999, + scaleZ: 9999999, + region_preset: "core.sunny" + }) + } + get isOpen() { + return metapress.menubar.openPanelID == this.editorMenuID + } + showEditor() { + this.isOpen || (metapress.menubar.openReactPanel(this.editorMenuID, (() => n.createElement(Ae, { + plugin: this + }))), metapress.plugins.sendEvent("editor_onOpen", !0), metapress.backend.logEvent("world_editor_open")) + } + hideEditor() { + this.isOpen && (metapress.menubar.closePanel(), metapress.plugins.sendEvent("editor_onClose", !1), metapress.backend.logEvent("world_editor_close")) + } + toggleEditor() { + this.isOpen ? this.hideEditor() : this.showEditor() + } + $menubar_onPanelChange(e) { + this.prevOpenID != e && (this.prevOpenID == this.editorMenuID && e != this.editorMenuID && metapress.plugins.sendEvent("editor_onClose", !1), this.prevOpenID != this.editorMenuID && e == this.editorMenuID && metapress.plugins.sendEvent("editor_onOpen", !0), this.prevOpenID = e || null) + } + $listActionsForEntity(e) { + if ("template" == e.sync) return [{ + id: "properties", + name: "Properties", + action: () => Le.log("h") + }] + } + closeEditor() { + metapress.menubar.openPanelID == this.editorMenuID && metapress.menubar.closePanel(), metapress.backend.logEvent("world_editor_close") + } + $onEditorSelectionChanged(e) { + Ae.current?.updateState({ + selectedEntityID: e[0] + }) + } + get hasUnsavedChanges() { + return metapress.entities.all.filter((e => "template" == e.sync)).reduce(((e, t) => Math.max(e, t.lastEdited || 0)), 0) > this.templateLastEdited + } + onBeforeUnload(e) { + if (this.hasUnsavedChanges) return e.preventDefault(), e.returnValue = "Are you sure you want to leave? Unsaved changes to the template will be lost." + } + $getDebugMenuOptions = () => []; + $onEntityLoaded(e) { + Ae.current?.onEntityLoaded(e) + } + editEntity(e) { + let t = metapress.entities.get(e); + return !(!t || "template" != t.sync || (this.selectionManager.select(e), Ae.lastPage = "entity", this.showEditor(), 0)) + } + assetsFromEntityList(e) { + let t = []; + for (let i of e) + for (let e in i) { + let n = i[e]; + if ("string" != typeof n || !n.startsWith("http")) continue; + let a = n.indexOf("/custom-template/"); + if (-1 == a) continue; + let s = n.substring(a + 17); + a = s.indexOf("?"), -1 != a && (s = s.substring(0, a)), a = s.indexOf("#"), -1 != a && (s = s.substring(0, a)); + let o = t.find((e => e.filename == s)); + o ? o.entities.push({ + id: i.id, + key: e + }) : t.push({ + url: n, + filename: s, + entities: [{ + id: i.id, + key: e + }] + }) + } + return t + } + async getBackupMetadata(e) { + if (!e) return; + if ("string" == typeof e) progressCb?.("Downloading resource..."), e = await fetch(e).then((e => e.blob())); + else if (!(e instanceof Blob)) throw new Error("Invalid file specified for import. Must be either a string URL or a Blob."); + let { + default: t + } = await Promise.all([i.e(8764), i.e(5733)]).then(i.t.bind(i, 55733, 23)), n = new t; + await n.loadAsync(e); + let a = await n.file("template.json"); + if (!a) throw new Error("Missing template.json in backup file."); + return JSON.parse(await a.async("string")) + } + async loadBackup(e, t) { + if (!e) throw new Error("No file specified for import."); + if ("string" == typeof e) t?.("Downloading resource..."), e = await fetch(e).then((e => e.blob())); + else if (!(e instanceof Blob)) throw new Error("Invalid file specified for import. Must be either a string URL or a Blob."); + const { + default: n + } = await i.e(983).then(i.t.bind(i, 80983, 19)); + let { + default: a + } = await Promise.all([i.e(8764), i.e(5733)]).then(i.t.bind(i, 55733, 23)), s = new a; + await s.loadAsync(e); + let o = await s.file("template.json"); + if (!o) throw new Error("Missing template.json in backup file."); + let r = JSON.parse(await o.async("string")); + if ("metapress:custom-template" != r.type) throw new Error("Invalid data in backup file."); + let l = this.assetsFromEntityList(r.entities); + for (let e = 0; e < l.length; e++) { + t?.(`Uploading assets: ${e+1} of ${l.length}`); + let i = l[e], + a = s.file(i.filename); + if (!a) throw new Error(`Missing asset: ${i.filename}`); + let o = await a.async("blob"), + c = new File([o], a.name, { + type: n.lookup(a.name) || "application/octet-stream" + }), + d = await metapress.storage.uploadFile("custom-template", c); + for (let e of i.entities) r.entities.find((t => t.id == e.id))[e.key] = d + } + let c = new File([JSON.stringify(r)], "template.json", { + type: "text/plain" + }); + await metapress.storage.uploadFile("custom-template", c), metapress.editor.loadTemplateFromData(r), metapress.messaging.send("global", "core.ui.editor:template-updated", { + templateLastEdited: metapress.editor.templateLastEdited + }), metapress.spawnpoints.respawn(), metapress.plugins.sendEvent("editor_onBackupLoaded"), metapress.backend.logEvent("world_editor_load_backup") + } + async saveBackup(e) { + let t = []; + for (let e of metapress.plugins.all) t.push({ + id: e.id, + name: e.name, + description: e.description, + version: e.version || "", + requires: e.requires || [], + provides: e.provides || [], + metadata: e.metadata || {} + }); + let n = metapress.entities.all.filter((e => "template" == e.sync)), + a = { + type: "metapress:custom-template", + date: Date.now(), + plugins: [...t], + entities: n + }, + { + default: s + } = await Promise.all([i.e(8764), i.e(5733)]).then(i.t.bind(i, 55733, 23)), + o = new s; + o.file("template.json", JSON.stringify(a)); + let r = this.assetsFromEntityList(a.entities); + for (let t = 0; t < r.length; t++) { + e?.(`Fetching assets: ${t+1} of ${r.length}`); + let i = r[t], + n = await fetch(i.url); + if (!n.ok) throw new Error(`Unable to fetch ${i.filename}: ${n.status} ${n.statusText}`); + let a = await n.blob(); + o.file(i.filename, a) + } + return metapress.backend.logEvent("world_editor_save_backup"), e?.("Packaging backup..."), await o.generateAsync({ + type: "blob" + }) + } + async $loader_onEnterWorld() { + "not-found" == this.lastWorldLoadState && (await new Promise((e => setTimeout(e, 1e3))), Le.debug("[MetaPress] Showing first time world setup UI..."), metapress.dialogs.show({ + title: "World Setup", + noDismiss: !0, + noHeader: !0, + content: n.createElement(_e, null) + })) + } + async $onIncomingMessage(e) { + if ("core.ui.editor:template-updated" == e.name) { + let t = metapress.avatars.users.find((t => t.instanceID == e.from))?.name || ""; + if (this.hasUnsavedChanges && this.canEdit && !await metapress.dialogs.confirm({ + title: "Reload World", + text: `${t} has made changes to the world, but you have unsaved changes as well. Do you want to reload it now? You will lose your unsaved changes.` + })) return; + this.loadTemplateFromServer(!0) + } + } + createEntityNearby(e) { + let t = new THREE.Vector3, + i = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(t), metapress.renderer.camera.getWorldDirection(i), i.setLength(2), i.add(new THREE.Vector3(0, -1, 0).cross(i).setLength(1)), i.add(t); + let n = metapress.entities.add({ + sync: "template", + x: i.x, + y: i.y, + z: i.z, + ...e + }); + return this.showEditor(), metapress.editor.selectionManager.select(n.id), n.id + } + save() { + this._isSaving || (this._isSaving = !0, metapress.menubar.toasts.show({ + id: "editor.saving", + sticky: !0, + text: "Saving, please wait..." + }), this.save2().then((() => { + metapress.menubar.toasts.show({ + id: "editor.saving", + text: "Save complete!" + }), this._isSaving = !1, metapress.plugins.sendEvent("onUnsavedFieldsChanged") + })).catch((e => { + Le.warn(e), metapress.menubar.toasts.show({ + id: "editor.saving", + text: "Save failed: " + e.message + }), this._isSaving = !1 + }))) + } + async save2() { + let e = metapress.entities.all.filter((e => "template" == e.sync)), + t = JSON.stringify({ + type: "metapress:custom-template", + date: Date.now(), + entities: e + }), + i = new File([t], "template.json", { + type: "text/plain" + }); + await metapress.storage.uploadFile("custom-template", i), metapress.editor.templateLastEdited = metapress.entities.all.filter((e => "template" == e.sync)).reduce(((e, t) => Math.max(e, t.lastEdited || 0)), 0), metapress.messaging.send("global", "core.ui.editor:template-updated", { + templateLastEdited: metapress.editor.templateLastEdited + }) + } + ai_getKnowledgeBaseEntries = () => { + let e = metapress.plugins.callAll("editor_getAddableEntities").flat().filter((e => !!e)).sort(((e, t) => e.name.localeCompare(t.name))), + t = []; + return t = this.GetModifiersForEntity(this.selectionManager.selectedEntityIDs), [{ + id: `${this.id}:addObject`, + type: "action", + name: "Add object", + tags: e.map((e => `add ${e.name}, create ${e.name}, make ${e.name}`)).join(", "), + disabled: !this.canEdit, + content: `\n Run this action to add an object to the world. Action value is the ID of the object to add. Available objects:\n ${e.map((e=>`- id=${e.id} name=${e.name} description=${e.description||"none"}`)).join("\n")}\n `, + action: async t => { + let i = e.find((e => e.id == t.value)); + if (!i) throw new Error(`Object with ID '${t.value}' not found.`); + try { + await S.doAddAction(i) + } catch (e) { + throw new Error(`Failed to add object: ${e.message}`) + } + return "Success, object created and selected in the Editor" + } + }, { + id: `${this.id}:addModifier`, + type: "action", + name: "Add modifier", + tags: "add modifier, add effect, add behavior", + disabled: !this.canEdit && null != t, + content: `Run this action to add a modifier to the selected object. Action value is the ID of the modifier to add.\n Available modifiers:\n ${t?t.map((e=>`- id=${e.id} name=${e.name||"noname"} description=${e.description||"none"}`)).join("\n"):"none for current selected object."},\n User ${this.id}:addModifier with value as id of the modifier to add.\n `, + action: async e => { + try { + return this.addModifier(t.find((t => t.id == e.value)), metapress.entities.get(this.selectionManager.selectedEntityIDs)), "Success, modifier added to the selected object." + } catch (e) { + throw new Error(`Failed to add modifier: ${e.message}`) + } + } + }, { + id: `${this.id}:updateObjectSettings`, + type: "action", + name: "update object settings", + tags: `set/update/edit/remove/change/adjust/list/view: ${t?.settings?t.settings.map((e=>`- id=${e.id||"none"}`)).join(", "):""}`, + disabled: !this.canEdit, + content: `Run this action to update/change the settings of an object.\n Action value is a JSON object with the following format:\n e.g. value = {setting: {setting.id: value}} // This sets the value of the setting\n Example of modifier settings for the selected object:\n ${t?t.map((e=>`${t?.settings?t.settings.map((e=>`- id=${e.id||"none"}`)).join(", "):""}`)).join("\n"):"none for current selected object."},\n Use ${this.id}:updateObjectSettings with value as JSON object with setting to update, the setting key HAS to exist either on the object or the modifier.\n Current selected object id: ${this.selectionManager.selectedEntityIDs}\n curent settings: ${JSON.stringify(metapress.entities.get(this.selectionManager.selectedEntityIDs))}\n `, + action: e => { + try { + return this.UpdateObjectSettings(e, t), "Success, object settings updated." + } catch (e) { + throw new Error(`Failed to update object settings: ${e.message}`) + } + } + }, { + id: `${this.id}:viewObjectSettings`, + type: "info", + name: "view object settings", + tags: `show/list/view, ${t?.settings?t.settings.map((e=>`- id=${e.id||"none"}`)).join(", "):""}`, + disabled: !this.canEdit, + content: `Run this action to update/change the settings of an object.\n Action value is a JSON object with the following format:\n e.g. value = {setting: {setting.id: value}} // This sets the value of the setting\n Example of modifier settings for the selected object:\n ${t?t.map((e=>`${t?.settings?t.settings.map((e=>`- id=${e.id||"none"}`)).join(", "):""}`)).join("\n"):"none for current selected object."},\n Use ${this.id}:updateObjectSettings with value as JSON object with setting to update, the setting key HAS to exist either on the object or the modifier.\n Current selected object id: ${this.selectionManager.selectedEntityIDs}\n curent settings: ${JSON.stringify(metapress.entities.get(this.selectionManager.selectedEntityIDs))}\n ` + }, { + id: `${this.id}:saveChanges`, + type: "action", + name: "Save world changes", + tags: "save world, save changes, save editor, save template", + disabled: !this.canEdit, + content: `Saves the changes made to the world. The world currently has ${this.hasUnsavedChanges?"some":"no"} unsaved changes.`, + action: async e => { + try { + return this.save(), "Success, changes saved." + } catch (e) { + throw new Error(`Failed to save changes: ${e.message}`) + } + } + }, { + id: `${this.id}:pasteEntities`, + type: "action", + name: "Paste copied entities", + tags: "paste entities, paste copied entities, paste", + disabled: !this.canEdit, + content: "Pastes the entities that were copied earlier.", + action: async e => { + try { + return await this.pasteEntities(), "Success, entities pasted." + } catch (e) { + throw new Error(`Failed to paste entities: ${e.message}`) + } + } + }, { + id: `${this.id}:copyEntities`, + type: "action", + name: "Copy entities", + tags: "copy entities, copy selected entities, copy", + disabled: !this.canEdit, + content: "Copies the selected entities to the clipboard.", + action: async e => { + try { + return this.showEditor(), Ae.current?.copyEntities(), "Success, entities copied." + } catch (e) { + throw new Error(`Failed to copy entities: ${e.message}`) + } + } + }, { + id: `${this.id}:selectEntity`, + type: "action", + name: "Select entity by name", + tags: "select entity, select entity by name, select", + disabled: !this.canEdit, + content: `Selects the entity by its select type 'name', 'type', 'id':\n ${metapress.entities.all.filter((e=>"template"==e.sync)).map((e=>`id: ${e.id} name:${e.name||"Untitled "+e.type} type:${e.type}`)).join("\n")}.\n With input value as id of the object.\n `, + action: async e => { + let t; + if (t = metapress.entities.all.filter((e => "template" == e.sync)).find((t => t.id == e.value)), !t) throw new Error(`Entity with id ${e.value.substring("id".length).trim()} not found.`); + if (this.editEntity(t.id)) return "Success, entity selected."; + throw new Error(`Failed to select entity: ${t.name||"Untitled "+t.type}`) + } + }, { + id: `${this.id}:listEntities`, + type: "info", + name: "List entities", + tags: "list entities, list all entities, list", + disabled: !this.canEdit, + content: `Lists all entities by name. If they are unnamed, lists by "untitled" and type:\n ${metapress.entities.all.filter((e=>"template"==e.sync)).map((e=>`id: ${e.id} name:${e.name||"Untitled "+e.type} type:${e.type}`)).join("\n")}.\n ` + }, { + id: `${this.id}:saveBackup`, + type: "action", + name: "Save backup", + tags: "save backup, backup world, backup", + disabled: !this.canEdit, + content: "Saves a backup of the world to your computer.", + action: async e => { + let t = await this.saveBackup(), + i = URL.createObjectURL(t), + n = `metapress-backup-${(new Date).toISOString().replace(/[^0-9]/g,"")}.zip`, + a = document.createElement("a"); + return a.href = i, a.download = n, a.click(), URL.revokeObjectURL(i), "Success, backup saved." + } + }, { + id: `${this.id}:loadBackup`, + type: "action", + name: "Load backup", + tags: "load backup, restore world, restore", + disabled: !this.canEdit, + content: "Restores the world from a backup file.", + action: async e => { + this.showEditor(), Ae.current?.setState({ + page: "settings" + }) + } + }] + }; + UpdateObjectSettings(e, t) { + let i = JSON.parse(e.value); + i.setting && (i = i.setting); + let n = !1, + a = metapress.entities.get(this.selectionManager.selectedEntityIDs), + s = []; + for (let e in a) + if (e.startsWith("modifier:")) { + Le.log(e.substring("modifier:".length)); + let i = t.find((t => t.id == e.substring("modifier:".length))); + i && s.push(i) + } if (n = this.checkModifierExists(s, i, n), !n) { + for (let e in i) + for (let t in a) + if (t == e) { + n = !0; + break + } if (!n) throw new Error(`Setting ${i} does not exist in the object or the modifier`) + } + i.lastModified = Date.now(), metapress.entities.update(this.selectionManager.selectedEntityIDs, i), this.toggleEditor(), this.showEditor() + } + checkModifierExists(e, t) { + if (!e) return !1; + Le.log("Modifiers:", e); + for (let i of e) { + if (!i.settings) continue; + let e = i.settings; + if (e || "function" != typeof i.settings || (e = i.settings()), e) { + "function" == typeof e && (e = e()), Le.log("Settings:", e); + for (let i of e) + if (i.id && i.id in t) return !0 + } + } + return !1 + } + GetModifiersForEntity(e) { + let t = metapress.entities.get(e); + if (!t) return Le.warn("[Editor] Selected entity not found in AddModifierPanel"); + let i = []; + for (let e of metapress.plugins.all) + for (let n of e.provides || []) { + if (!n.startsWith("modifier:")) continue; + let a = n.split(":")[1], + s = e.createModifier?.(a, t, ""); + if (s && a && !i.find((e => e.id == a)) && !t["modifier:" + a] && !s.hidden) { + if (null != s.isEntitySupported) try { + const e = s.isEntitySupported(t); + "boolean" != typeof e || e ? "object" == typeof e && !1 === e.result && (s.showAsDisabled = !0, s.showAsDisabledReason = e.reason || null) : s.showAsDisabled = !0 + } catch (e) {} + s.id = a, i.push(s) + } + } + return i + } + addModifier(e, t) { + if (e?.provides) + for (let i of t.getModifiers()) { + if (i.id == e.id) return; + if (i.provides) + for (let t of i.provides) + for (let n of e.provides) + if (t == n) return void metapress.dialogs.alert({ + icon: "warn", + title: "Cannot Add Modifier", + text: `This modifier conflicts with ${i.name}, please remove it first.` + }) + } + metapress.entities.update(t.id, { + ["modifier:" + e.id]: !0 + }) + } + } + }, + 40313: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 83203: (e, t, i) => { + e.exports = i.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, i) => { + e.exports = i.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, i) => { + e.exports = i.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 42065: (e, t, i) => { + e.exports = i.p + "mp-core/add.d19777da7e52d2999ddd.svg" + }, + 75848: (e, t, i) => { + e.exports = i.p + "mp-core/cube.59aa124e53e51e4d295c.svg" + }, + 81501: (e, t, i) => { + e.exports = i.p + "mp-core/delete-all.018efb47e737d7ecac63.svg" + }, + 44209: (e, t, i) => { + e.exports = i.p + "mp-core/draw.564c14085951335df236.svg" + }, + 42969: (e, t, i) => { + e.exports = i.p + "mp-core/dropzone.d32446ef000317b13930.glb" + }, + 40249: (e, t, i) => { + e.exports = i.p + "mp-core/first-experience-template-icon.feb62c563237bcaf597d.svg" + }, + 88989: (e, t, i) => { + e.exports = i.p + "mp-core/gear.8cb3aa11048e7d496917.svg" + }, + 78226: (e, t, i) => { + e.exports = i.p + "mp-core/icon-good.332ed59028d6225e5a04.svg" + }, + 78371: (e, t, i) => { + e.exports = i.p + "mp-core/icon-save.d8b6415eeda427d0fe6e.svg" + }, + 38765: (e, t, i) => { + e.exports = i.p + "mp-core/icon-warning.45f9e38b9fdce56ced4d.svg" + }, + 67742: (e, t, i) => { + e.exports = i.p + "mp-core/list.f7d07d7e71c99a51f176.svg" + }, + 36449: (e, t, i) => { + e.exports = i.p + "mp-core/load-backup.94221f0c16ebbd449932.svg" + }, + 27745: (e, t, i) => { + e.exports = i.p + "mp-core/loading-animated.b8537734bb8cb396f7b9.svg" + }, + 62842: (e, t, i) => { + e.exports = i.p + "mp-core/lock.d546211e87b9420e55ce.svg" + }, + 31495: (e, t, i) => { + e.exports = i.p + "mp-core/missing-content.ae18a1e0aaabaa6815c3.svg" + }, + 41598: (e, t, i) => { + e.exports = i.p + "mp-core/object-circle.f7abe3405d346872969c.svg" + }, + 90371: (e, t, i) => { + e.exports = i.p + "mp-core/object-cube.28f5b6d5b3236e38a354.svg" + }, + 5461: (e, t, i) => { + e.exports = i.p + "mp-core/object-cylinder.8ba97d22a2f697c6e15f.svg" + }, + 78365: (e, t, i) => { + e.exports = i.p + "mp-core/object-mesh.60ce208a667a30abb2b7.svg" + }, + 26192: (e, t, i) => { + e.exports = i.p + "mp-core/object-plane.12f4b034648a5127c7b9.svg" + }, + 26247: (e, t, i) => { + e.exports = i.p + "mp-core/object-region.9d3d97740123301db48b.svg" + }, + 34949: (e, t, i) => { + e.exports = i.p + "mp-core/object-sphere.76ed3af0e9e4df404a93.svg" + }, + 8189: (e, t, i) => { + e.exports = i.p + "mp-core/object-unknown.d1faaedbffb45df69323.svg" + }, + 75588: (e, t, i) => { + e.exports = i.p + "mp-core/save-backup.ce66e8326235b6179957.svg" + }, + 92260: (e, t, i) => { + e.exports = i.p + "mp-core/success-party.9044e4d331f82a323672.svg" + }, + 40938: (e, t, i) => { + e.exports = i.p + "mp-core/tool-cursor.077130a01d5158d46356.svg" + }, + 22907: (e, t, i) => { + e.exports = i.p + "mp-core/tool-rotate.9688b0709dbd4b453928.svg" + }, + 23527: (e, t, i) => { + e.exports = i.p + "mp-core/tool-scale.4bcc2cec75b1f9f61a23.svg" + }, + 97165: (e, t, i) => { + e.exports = i.p + "mp-core/tool-translate.4f2b8e082a5d8e724090.svg" + }, + 10965: (e, t, i) => { + e.exports = i.p + "mp-core/tool-wall.98a5c1acfa3b9e9d139a.svg" + } + } +]); + +// ... existing code ... +try { + s.H.shared.activeSubscription = { + payerName: "Simulated User", + provider: "SimulatedProvider", + valid: true, + subscription: "active" + }; +} catch (e) {} +// ... existing code ... \ No newline at end of file diff --git a/mp-core/2031.f295fecf8726ab70c465.bundle.js b/mp-core/2031.f295fecf8726ab70c465.bundle.js new file mode 100644 index 0000000..9939a52 --- /dev/null +++ b/mp-core/2031.f295fecf8726ab70c465.bundle.js @@ -0,0 +1,212 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2031], { + 32031: (t, e, i) => { + i.r(e), i.d(e, { + default: () => o + }); + var s = i(99477), + n = i(6147); + class a extends n.Z { + async onLoad() { + this.object = new s.Group, metapress.editor?.isOpen && this.$editor_onOpen() + } + $editor_onOpen() { + this.tool || (this.tool = metapress.entities.add({ + type: "mesh", + url: i(63216), + parent: this.entity.id, + hidden: !1, + physical: !0 + })), metapress.entities.update(this.tool.id, { + hidden: !1, + physical: !0 + }) + } + $editor_onClose() { + this.tool && metapress.entities.update(this.tool.id, { + hidden: !0, + physical: !1 + }) + } + } + var r = i(25108); + class o { + id = "core.spawnpoint"; + name = "Spawn point"; + description = "This plugin allows the user to specify spawn points."; + version = "1.0.0"; + requires = ["avatars"]; + provides = ["spawnpoints", "render:spawnpoint"]; + createRenderer(t) { + if ("spawnpoint" == t) return new a + } + $editor_getAddableEntities = () => [{ + id: "spawnpoint", + name: "Spawn Point", + icon: i(83843), + description: "Specifies where new users will appear.", + action: t => this.addSpawnPoint() + }]; + addSpawnPoint() { + let t = new THREE.Vector3, + e = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(t), metapress.renderer.camera.getWorldDirection(e), e.setLength(2), e.add(new THREE.Vector3(0, 1, 0).cross(e).setLength(1)), e.add(t); + let i = metapress.entities.add({ + type: "spawnpoint", + name: "Spawn Point", + sync: "template", + x: e.x, + y: e.y, + z: e.z + }); + metapress.editor.selectionManager.select(i.id) + } + $loader_onEnterWorld() { + this.respawn() + } + respawn() { + let t = metapress.entities.all.filter((t => "spawnpoint" == t.type)), + e = t[Math.floor(Math.random() * t.length)], + i = e?.x || 0, + s = (e?.y || 0) + .1, + n = e?.z || 0; + if (e || r.warn("[SpawnPointPlugin] No spawn points found in the space."), i += 1 * Math.random() * 2 - 1, n += 1 * Math.random() * 2 - 1, metapress.avatars.moveTo(i, s, n), e?.quatX || e?.quatY || e?.quatZ || e?.quatW) { + let t = new THREE.Quaternion(e.quatX || 0, e.quatY || 0, e.quatZ || 0, e.quatW || 0), + i = (new THREE.Euler).setFromQuaternion(t, "YXZ"); + metapress.camera.rotation.y = i.y + } + let a = !this.hasSpawned; + this.hasSpawned = !0, metapress.plugins.sendEvent("spawnpoint_onSpawn", { + x: i, + y: s, + z: n, + isFirstSpawn: a + }) + } + $getDebugMenuOptions = () => [{ + id: "core.spawnpoint.respawn", + section: "Avatar", + name: "Respawn", + action: () => this.respawn() + }]; + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "Spawn point", + tags: "spawn point", + content: "\n Spawn Points are used to determine where a new user should spawn in the world. You can use the Editor to create new spawn points.\n " + }, { + id: `${this.id}:respawn`, + type: "action", + name: "Respawn", + tags: "respawn, unstuck, stuck in ground, stuck in world, stuck in floor, stuck in wall, stuck in ceiling", + content: "\n Use this action to respawn the user. This can be used if the user gets stuck as well.\n ", + action: t => (this.respawn(), "Success") + }] + } + }, + 6147: (t, e, i) => { + i.d(e, { + Z: () => n + }); + var s = i(4028); + class n { + get settings() { + return [{ + type: "checkbox", + id: "hidden", + name: "Hidden", + help: "If enabled, the object will not be visible." + }] + } + static showBoundingBoxes = !1; + static wireframeMode = !1; + _lastEntityWireframe = void 0; + container = new THREE.Object3D; + object = null; + entity = {}; + hideLock = new s.Z; + hasLoaded = !1; + wireframeState = {}; + async onLoad() {} + afterLoad() { + if (!this.object?.isObject3D) throw new Error("The renderer must create an Object3D instance when subclassing Object3DRenderer."); + this.container.entityRenderer = this, this.container.add(this.object), metapress.renderer.scene.add(this.container), this.applyTransforms(), this._lastUrl = this.entity.url, this._lastEntityWireframe = this.entity.wireframe + } + onUnload() {} + afterUnload() { + this.container?.removeFromParent(), this.container = null, this.applyParent() + } + onEntityUpdated() { + this._lastUrl != this.entity.url && metapress.entities.reload(this.entity.id); + for (let t of metapress.entities.renderers) t != this && t.container?.isObject3D && t.applyParent && t.applyParent(!0); + this.entity.wireframe != this._lastEntityWireframe && (this._lastEntityWireframe = this.entity.wireframe, this.container.traverse((t => { + t.isMesh && t.material && (t.material.wireframe = this.entity.wireframe ?? !1, this.wireframeState[t.uuid] = t.material.wireframe) + }))), this.onRender() + } + onRender() { + this._lastTransformUpdate != this.entity.lastModified && (this._lastTransformUpdate = this.entity.lastModified, this.applyTransforms()), this.applyHideLock(), this.applyBoundingBox(), this.applyWireframe() + } + applyTransforms() { + this.object && (this.entity.x = parseFloat(this.entity.x) || 0, this.entity.y = parseFloat(this.entity.y) || 0, this.entity.z = parseFloat(this.entity.z) || 0, this.entity.scaleX = parseFloat(this.entity.scaleX) || 1, this.entity.scaleY = parseFloat(this.entity.scaleY) || 1, this.entity.scaleZ = parseFloat(this.entity.scaleZ) || 1, this.entity.quatX = parseFloat(this.entity.quatX) || 0, this.entity.quatY = parseFloat(this.entity.quatY) || 0, this.entity.quatZ = parseFloat(this.entity.quatZ) || 0, this.entity.quatW = parseFloat(this.entity.quatW) || 0, this.entity.extra_offset_x = parseFloat(this.entity.extra_offset_x) || 0, this.entity.extra_offset_y = parseFloat(this.entity.extra_offset_y) || 0, this.entity.extra_offset_z = parseFloat(this.entity.extra_offset_z) || 0, this.entity.extra_scale_x = parseFloat(this.entity.extra_scale_x) || 1, this.entity.extra_scale_y = parseFloat(this.entity.extra_scale_y) || 1, this.entity.extra_scale_z = parseFloat(this.entity.extra_scale_z) || 1, this.entity.extra_rotation_x = parseFloat(this.entity.extra_rotation_x) || 0, this.entity.extra_rotation_y = parseFloat(this.entity.extra_rotation_y) || 0, this.entity.extra_rotation_z = parseFloat(this.entity.extra_rotation_z) || 0, this.container.position.set(this.entity.x, this.entity.y, this.entity.z), this.container.scale.set(this.entity.scaleX, this.entity.scaleY, this.entity.scaleZ), this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW ? this.container.quaternion.set(this.entity.quatX, this.entity.quatY, this.entity.quatZ, this.entity.quatW) : this.container.quaternion.set(0, 0, 0, 1), this.object.position.set(this.entity.extra_offset_x, this.entity.extra_offset_y, this.entity.extra_offset_z), this.object.scale.set(this.entity.extra_scale_x, this.entity.extra_scale_y, this.entity.extra_scale_z), this.object.rotation.set(this.entity.extra_rotation_x, this.entity.extra_rotation_y, this.entity.extra_rotation_z)) + } + applyHideLock() { + let t = !this.entity.hidden && !this.hideLock.isAcquired; + this.container.visible && !t ? this.container.visible = !1 : !this.container.visible && t && (this.container.visible = !0) + } + applyBoundingBox() { + this.boundingBoxHelper?.update(); + let t = n.showBoundingBoxes && this.container.visible; + !t && this.boundingBoxHelper ? (this.boundingBoxHelper.removeFromParent(), this.boundingBoxHelper.dispose(), this.boundingBoxHelper = null) : t && !this.boundingBoxHelper && (this.boundingBoxHelper = new THREE.BoxHelper(this.container, 16777215), metapress.renderer.scene.add(this.boundingBoxHelper)) + } + applyWireframe() { + this._lastWireframeMode != n.wireframeMode && (this._lastWireframeMode = n.wireframeMode, this.container.traverse((t => { + t.isMesh && t.material && (this.hasLoaded || (this.wireframeState[t.uuid] = !!t.material.wireframe), t.material.wireframe = !!n.wireframeMode || (this.wireframeState[t.uuid] ?? !1)) + })), this.hasLoaded = !0) + } + applyParent(t) { + if (!t && !this.parentHideLock && void 0 !== this._lastParent && this._lastParent != this.entity.parent) return; + if (this._lastParent = this.entity.parent || "", !t) + for (let t of metapress.entities.renderers) t != this && t.container?.isObject3D && t.applyParent && t.applyParent(!0); + if (!this.entity.parent) return this.parentHideLock?.(), this.parentHideLock = null, void(this.container && this.container.parent != metapress.renderer.scene && (this.container.removeFromParent(), metapress.renderer.scene.add(this.container))); + let e = metapress.entities.getRenderer(this.entity.parent); + e?.object?.isObject3D ? (this.parentHideLock?.(), this.parentHideLock = null, this.container.parent != e.container && (this.container.removeFromParent(), e.container.add(this.container))) : this.parentHideLock || (this.parentHideLock = this.hideLock.acquire()) + } + } + }, + 4028: (t, e, i) => { + i.d(e, { + Z: () => s + }); + class s { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let t = !1; + return () => { + t || (t = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + }, + 63216: (t, e, i) => { + t.exports = i.p + "mp-core/Spawn Point Indicator.53f9ae103a84ba06c10b.glb" + }, + 83843: (t, e, i) => { + t.exports = i.p + "mp-core/spawnpoint-icon.9e8b1ced194273c71120.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/2050.1d65bfa04ba15a8db781.bundle.js b/mp-core/2050.1d65bfa04ba15a8db781.bundle.js new file mode 100644 index 0000000..692ba42 --- /dev/null +++ b/mp-core/2050.1d65bfa04ba15a8db781.bundle.js @@ -0,0 +1,463 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2050], { + 9801: (t, e, s) => { + s.d(e, { + X: () => r + }); + var i = s(99477), + o = s(1217), + n = s(25108); + class a { + constructor(t, e, s, i, a = null, r = null) { + this.controller = e, this.handModel = t, this.bones = [], null === a && (a = new o.E).setPath(s || "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/"), a.load(`${i}.glb`, (t => { + const e = t.scene.children[0]; + this.handModel.add(e); + const s = e.getObjectByProperty("type", "SkinnedMesh"); + s.frustumCulled = !1, s.castShadow = !0, s.receiveShadow = !0, ["wrist", "thumb-metacarpal", "thumb-phalanx-proximal", "thumb-phalanx-distal", "thumb-tip", "index-finger-metacarpal", "index-finger-phalanx-proximal", "index-finger-phalanx-intermediate", "index-finger-phalanx-distal", "index-finger-tip", "middle-finger-metacarpal", "middle-finger-phalanx-proximal", "middle-finger-phalanx-intermediate", "middle-finger-phalanx-distal", "middle-finger-tip", "ring-finger-metacarpal", "ring-finger-phalanx-proximal", "ring-finger-phalanx-intermediate", "ring-finger-phalanx-distal", "ring-finger-tip", "pinky-finger-metacarpal", "pinky-finger-phalanx-proximal", "pinky-finger-phalanx-intermediate", "pinky-finger-phalanx-distal", "pinky-finger-tip"].forEach((t => { + const s = e.getObjectByName(t); + void 0 !== s ? s.jointName = t : n.warn(`Couldn't find ${t} in ${i} hand mesh`), this.bones.push(s) + })), r && r(e) + })) + } + updateMesh() { + const t = this.controller.joints; + for (let e = 0; e < this.bones.length; e++) { + const s = this.bones[e]; + if (s) { + const e = t[s.jointName]; + if (e.visible) { + const t = e.position; + s.position.copy(t), s.quaternion.copy(e.quaternion) + } + } + } + } + } + class r extends i.Object3D { + constructor(t, e = null, s = null) { + super(), this.controller = t, this.motionController = null, this.envMap = null, this.loader = e, this.onLoad = s, this.mesh = null, t.addEventListener("connected", (e => { + const s = e.data; + s.hand && !this.motionController && (this.xrInputSource = s, this.motionController = new a(this, t, this.path, s.handedness, this.loader, this.onLoad)) + })), t.addEventListener("disconnected", (() => { + this.clear(), this.motionController = null + })) + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), this.motionController && this.motionController.updateMesh() + } + getPointerPosition() { + const t = this.controller.joints["index-finger-tip"]; + return t ? t.position : null + } + intersectBoxObject(t) { + const e = this.getPointerPosition(); + if (e) { + const s = new i.Sphere(e, .01), + o = (new i.Box3).setFromObject(t); + return s.intersectsBox(o) + } + return !1 + } + checkButton(t) { + this.intersectBoxObject(t) ? t.onPress() : t.onClear(), t.isPressed() && t.whilePressed() + } + } + }, + 1594: (t, e, s) => { + s.d(e, { + P: () => h + }); + var i = s(99477); + const o = .4, + n = 16, + a = new i.Vector3(0, 1, 0), + r = new i.Vector3(0, 0, 1); + class h extends i.Object3D { + constructor(t, e) { + super(), this.hand = t, this.controller = e, this.motionController = null, this.envMap = null, this.mesh = null, this.pointerGeometry = null, this.pointerMesh = null, this.pointerObject = null, this.pinched = !1, this.attached = !1, this.cursorObject = null, this.raycaster = null, this._onConnected = this._onConnected.bind(this), this._onDisconnected = this._onDisconnected.bind(this), this.hand.addEventListener("connected", this._onConnected), this.hand.addEventListener("disconnected", this._onDisconnected) + } + _onConnected(t) { + const e = t.data; + e.hand && (this.visible = !0, this.xrInputSource = e, this.createPointer()) + } + _onDisconnected() { + this.visible = !1, this.xrInputSource = null, this.pointerGeometry && this.pointerGeometry.dispose(), this.pointerMesh && this.pointerMesh.material && this.pointerMesh.material.dispose(), this.clear() + } + _drawVerticesRing(t, e, s) { + const i = e.clone(); + for (let e = 0; e < n; e++) { + i.applyAxisAngle(r, 2 * Math.PI / n); + const o = s * n + e; + t[3 * o] = i.x, t[3 * o + 1] = i.y, t[3 * o + 2] = i.z + } + } + _updatePointerVertices(t) { + const e = this.pointerGeometry.attributes.position.array, + s = new i.Vector3(.002, 0, -1 * (.035 - t)); + this._drawVerticesRing(e, s, 0); + const o = new i.Vector3(Math.sin(110 * Math.PI / 180) * t, Math.cos(110 * Math.PI / 180) * t, 0); + for (let t = 0; t < 12; t++) this._drawVerticesRing(e, o, t + 1), o.applyAxisAngle(a, 110 * Math.PI / 180 / -24); + const n = new i.Vector3(0, 0, -1 * (.035 - t)); + e[624] = n.x, e[625] = n.y, e[626] = n.z; + const r = new i.Vector3(0, 0, t); + e[627] = r.x, e[628] = r.y, e[629] = r.z, this.pointerGeometry.setAttribute("position", new i.Float32BufferAttribute(e, 3)) + } + createPointer() { + let t, e; + const s = new Array(630).fill(0), + a = []; + for (this.pointerGeometry = new i.BufferGeometry, this.pointerGeometry.setAttribute("position", new i.Float32BufferAttribute(s, 3)), this._updatePointerVertices(.01), t = 0; t < 12; t++) { + for (e = 0; e < 15; e++) a.push(t * n + e, t * n + e + 1, (t + 1) * n + e), a.push(t * n + e + 1, (t + 1) * n + e + 1, (t + 1) * n + e); + a.push((t + 1) * n - 1, t * n, (t + 2) * n - 1), a.push(t * n, (t + 1) * n, (t + 2) * n - 1) + } + for (t = 0; t < 15; t++) a.push(208, t + 1, t), a.push(209, t + 192, t + 192 + 1); + a.push(208, 0, 15), a.push(209, 207, 192); + const r = new i.MeshBasicMaterial; + r.transparent = !0, r.opacity = o, this.pointerGeometry.setIndex(a), this.pointerMesh = new i.Mesh(this.pointerGeometry, r), this.pointerMesh.position.set(0, 0, -.01), this.pointerObject = new i.Object3D, this.pointerObject.add(this.pointerMesh), this.raycaster = new i.Raycaster; + const h = new i.SphereGeometry(.02, 10, 10), + l = new i.MeshBasicMaterial; + l.transparent = !0, l.opacity = o, this.cursorObject = new i.Mesh(h, l), this.pointerObject.add(this.cursorObject), this.add(this.pointerObject) + } + _updateRaycaster() { + if (this.raycaster) { + const t = this.pointerObject.matrixWorld, + e = new i.Matrix4; + e.identity().extractRotation(t), this.raycaster.ray.origin.setFromMatrixPosition(t), this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(e) + } + } + _updatePointer() { + this.pointerObject.visible = this.controller.visible; + const t = this.hand.joints["index-finger-tip"], + e = this.hand.joints["thumb-tip"], + s = t.position.distanceTo(e.position), + i = t.position.clone().add(e.position).multiplyScalar(.5); + this.pointerObject.position.copy(i), this.pointerObject.quaternion.copy(this.controller.quaternion), this.pinched = s <= .02; + const n = (s - .01) / .04, + a = (s - .01) / .01; + if (n > 1) this._updatePointerVertices(.01), this.pointerMesh.position.set(0, 0, -.01), this.pointerMesh.material.opacity = o; + else if (n > 0) { + const t = .007 * n + .003; + this._updatePointerVertices(t), a < 1 ? (this.pointerMesh.position.set(0, 0, -1 * t - .02 * (1 - a)), this.pointerMesh.material.opacity = o + .6 * (1 - a)) : (this.pointerMesh.position.set(0, 0, -1 * t), this.pointerMesh.material.opacity = o) + } else this._updatePointerVertices(.003), this.pointerMesh.position.set(0, 0, -.023), this.pointerMesh.material.opacity = 1; + this.cursorObject.material.opacity = this.pointerMesh.material.opacity + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), this.pointerGeometry && (this._updatePointer(), this._updateRaycaster()) + } + isPinched() { + return this.pinched + } + setAttached(t) { + this.attached = t + } + isAttached() { + return this.attached + } + intersectObject(t, e = !0) { + if (this.raycaster) return this.raycaster.intersectObject(t, e) + } + intersectObjects(t, e = !0) { + if (this.raycaster) return this.raycaster.intersectObjects(t, e) + } + checkIntersections(t, e = !1) { + if (this.raycaster && !this.attached) { + const s = this.raycaster.intersectObjects(t, e), + o = new i.Vector3(0, 0, -1); + if (s.length > 0) { + const t = s[0].distance; + this.cursorObject.position.copy(o.multiplyScalar(t)) + } else this.cursorObject.position.copy(o.multiplyScalar(1.5)) + } + } + setCursor(t) { + const e = new i.Vector3(0, 0, -1); + this.raycaster && !this.attached && this.cursorObject.position.copy(e.multiplyScalar(t)) + } + dispose() { + this._onDisconnected(), this.hand.removeEventListener("connected", this._onConnected), this.hand.removeEventListener("disconnected", this._onDisconnected) + } + } + }, + 92583: (t, e, s) => { + s.d(e, { + i: () => m + }); + var i = s(99477), + o = s(1217); + const n = { + Handedness: Object.freeze({ + NONE: "none", + LEFT: "left", + RIGHT: "right" + }), + ComponentState: Object.freeze({ + DEFAULT: "default", + TOUCHED: "touched", + PRESSED: "pressed" + }), + ComponentProperty: Object.freeze({ + BUTTON: "button", + X_AXIS: "xAxis", + Y_AXIS: "yAxis", + STATE: "state" + }), + ComponentType: Object.freeze({ + TRIGGER: "trigger", + SQUEEZE: "squeeze", + TOUCHPAD: "touchpad", + THUMBSTICK: "thumbstick", + BUTTON: "button" + }), + ButtonTouchThreshold: .05, + AxisTouchThreshold: .1, + VisualResponseProperty: Object.freeze({ + TRANSFORM: "transform", + VISIBILITY: "visibility" + }) + }; + async function a(t) { + const e = await fetch(t); + if (e.ok) return e.json(); + throw new Error(e.statusText) + } + const r = { + xAxis: 0, + yAxis: 0, + button: 0, + state: n.ComponentState.DEFAULT + }; + class h { + constructor(t) { + this.componentProperty = t.componentProperty, this.states = t.states, this.valueNodeName = t.valueNodeName, this.valueNodeProperty = t.valueNodeProperty, this.valueNodeProperty === n.VisualResponseProperty.TRANSFORM && (this.minNodeName = t.minNodeName, this.maxNodeName = t.maxNodeName), this.value = 0, this.updateFromComponent(r) + } + updateFromComponent({ + xAxis: t, + yAxis: e, + button: s, + state: i + }) { + const { + normalizedXAxis: o, + normalizedYAxis: a + } = function(t = 0, e = 0) { + let s = t, + i = e; + if (Math.sqrt(t * t + e * e) > 1) { + const o = Math.atan2(e, t); + s = Math.cos(o), i = Math.sin(o) + } + return { + normalizedXAxis: .5 * s + .5, + normalizedYAxis: .5 * i + .5 + } + }(t, e); + switch (this.componentProperty) { + case n.ComponentProperty.X_AXIS: + this.value = this.states.includes(i) ? o : .5; + break; + case n.ComponentProperty.Y_AXIS: + this.value = this.states.includes(i) ? a : .5; + break; + case n.ComponentProperty.BUTTON: + this.value = this.states.includes(i) ? s : 0; + break; + case n.ComponentProperty.STATE: + this.valueNodeProperty === n.VisualResponseProperty.VISIBILITY ? this.value = this.states.includes(i) : this.value = this.states.includes(i) ? 1 : 0; + break; + default: + throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`) + } + } + } + class l { + constructor(t, e) { + if (!(t && e && e.visualResponses && e.gamepadIndices && 0 !== Object.keys(e.gamepadIndices).length)) throw new Error("Invalid arguments supplied"); + this.id = t, this.type = e.type, this.rootNodeName = e.rootNodeName, this.touchPointNodeName = e.touchPointNodeName, this.visualResponses = {}, Object.keys(e.visualResponses).forEach((t => { + const s = new h(e.visualResponses[t]); + this.visualResponses[t] = s + })), this.gamepadIndices = Object.assign({}, e.gamepadIndices), this.values = { + state: n.ComponentState.DEFAULT, + button: void 0 !== this.gamepadIndices.button ? 0 : void 0, + xAxis: void 0 !== this.gamepadIndices.xAxis ? 0 : void 0, + yAxis: void 0 !== this.gamepadIndices.yAxis ? 0 : void 0 + } + } + get data() { + return { + id: this.id, + ...this.values + } + } + updateFromGamepad(t) { + if (this.values.state = n.ComponentState.DEFAULT, void 0 !== this.gamepadIndices.button && t.buttons.length > this.gamepadIndices.button) { + const e = t.buttons[this.gamepadIndices.button]; + this.values.button = e.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, e.pressed || 1 === this.values.button ? this.values.state = n.ComponentState.PRESSED : (e.touched || this.values.button > n.ButtonTouchThreshold) && (this.values.state = n.ComponentState.TOUCHED) + } + void 0 !== this.gamepadIndices.xAxis && t.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = t.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state === n.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > n.AxisTouchThreshold && (this.values.state = n.ComponentState.TOUCHED)), void 0 !== this.gamepadIndices.yAxis && t.axes.length > this.gamepadIndices.yAxis && (this.values.yAxis = t.axes[this.gamepadIndices.yAxis], this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis, this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis, this.values.state === n.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > n.AxisTouchThreshold && (this.values.state = n.ComponentState.TOUCHED)), Object.values(this.visualResponses).forEach((t => { + t.updateFromComponent(this.values) + })) + } + } + class c { + constructor(t, e, s) { + if (!t) throw new Error("No xrInputSource supplied"); + if (!e) throw new Error("No profile supplied"); + this.xrInputSource = t, this.assetUrl = s, this.id = e.profileId, this.layoutDescription = e.layouts[t.handedness], this.components = {}, Object.keys(this.layoutDescription.components).forEach((t => { + const e = this.layoutDescription.components[t]; + this.components[t] = new l(t, e) + })), this.updateFromGamepad() + } + get gripSpace() { + return this.xrInputSource.gripSpace + } + get targetRaySpace() { + return this.xrInputSource.targetRaySpace + } + get data() { + const t = []; + return Object.values(this.components).forEach((e => { + t.push(e.data) + })), t + } + updateFromGamepad() { + Object.values(this.components).forEach((t => { + t.updateFromGamepad(this.xrInputSource.gamepad) + })) + } + } + var p = s(25108); + class d extends i.Object3D { + constructor() { + super(), this.motionController = null, this.envMap = null + } + setEnvironmentMap(t) { + return this.envMap == t || (this.envMap = t, this.traverse((t => { + t.isMesh && (t.material.envMap = this.envMap, t.material.needsUpdate = !0) + }))), this + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), this.motionController && (this.motionController.updateFromGamepad(), Object.values(this.motionController.components).forEach((t => { + Object.values(t.visualResponses).forEach((t => { + const { + valueNode: e, + minNode: s, + maxNode: i, + value: o, + valueNodeProperty: a + } = t; + e && (a === n.VisualResponseProperty.VISIBILITY ? e.visible = o : a === n.VisualResponseProperty.TRANSFORM && (e.quaternion.slerpQuaternions(s.quaternion, i.quaternion, o), e.position.lerpVectors(s.position, i.position, o))) + })) + }))) + } + } + + function u(t, e) { + ! function(t, e) { + Object.values(t.components).forEach((t => { + const { + type: s, + touchPointNodeName: o, + visualResponses: a + } = t; + if (s === n.ComponentType.TOUCHPAD) + if (t.touchPointNode = e.getObjectByName(o), t.touchPointNode) { + const e = new i.SphereGeometry(.001), + s = new i.MeshBasicMaterial({ + color: 255 + }), + o = new i.Mesh(e, s); + t.touchPointNode.add(o) + } else p.warn(`Could not find touch dot, ${t.touchPointNodeName}, in touchpad component ${t.id}`); + Object.values(a).forEach((t => { + const { + valueNodeName: s, + minNodeName: i, + maxNodeName: o, + valueNodeProperty: a + } = t; + if (a === n.VisualResponseProperty.TRANSFORM) { + if (t.minNode = e.getObjectByName(i), t.maxNode = e.getObjectByName(o), !t.minNode) return void p.warn(`Could not find ${i} in the model`); + if (!t.maxNode) return void p.warn(`Could not find ${o} in the model`) + } + t.valueNode = e.getObjectByName(s), t.valueNode || p.warn(`Could not find ${s} in the model`) + })) + })) + }(t.motionController, e), t.envMap && e.traverse((e => { + e.isMesh && (e.material.envMap = t.envMap, e.material.needsUpdate = !0) + })), t.add(e) + } + class m { + constructor(t = null, e = null) { + this.gltfLoader = t, this.path = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles", this._assetCache = {}, this.onLoad = e, this.gltfLoader || (this.gltfLoader = new o.E) + } + setPath(t) { + return this.path = t, this + } + createControllerModel(t) { + const e = new d; + let s = null; + return t.addEventListener("connected", (t => { + const i = t.data; + "tracked-pointer" === i.targetRayMode && i.gamepad && async function(t, e, s = null, i = !0) { + if (!t) throw new Error("No xrInputSource supplied"); + if (!e) throw new Error("No basePath supplied"); + const o = await async function(t) { + if (!t) throw new Error("No basePath supplied"); + return await a(`${t}/profilesList.json`) + }(e); + let n; + if (t.profiles.some((t => { + const s = o[t]; + return s && (n = { + profileId: t, + profilePath: `${e}/${s.path}`, + deprecated: !!s.deprecated + }), !!n + })), !n) { + if (!s) throw new Error("No matching profile name found"); + const t = o[s]; + if (!t) throw new Error(`No matching profile name found and default profile "${s}" missing.`); + n = { + profileId: s, + profilePath: `${e}/${t.path}`, + deprecated: !!t.deprecated + } + } + const r = await a(n.profilePath); + let h; + if (i) { + let e; + if (e = "any" === t.handedness ? r.layouts[Object.keys(r.layouts)[0]] : r.layouts[t.handedness], !e) throw new Error(`No matching handedness, ${t.handedness}, in profile ${n.profileId}`); + e.assetPath && (h = n.profilePath.replace("profile.json", e.assetPath)) + } + return { + profile: r, + assetPath: h + } + }(i, this.path, "generic-trigger").then((({ + profile: t, + assetPath: o + }) => { + e.motionController = new c(i, t, o); + const n = this._assetCache[e.motionController.assetUrl]; + if (n) s = n.scene.clone(), u(e, s), this.onLoad && this.onLoad(s); + else { + if (!this.gltfLoader) throw new Error("GLTFLoader not set."); + this.gltfLoader.setPath(""), this.gltfLoader.load(e.motionController.assetUrl, (t => { + this._assetCache[e.motionController.assetUrl] = t, s = t.scene.clone(), u(e, s), this.onLoad && this.onLoad(s) + }), null, (() => { + throw new Error(`Asset ${e.motionController.assetUrl} missing or malformed.`) + })) + } + })).catch((t => { + p.warn(t) + })) + })), t.addEventListener("disconnected", (() => { + e.motionController = null, e.remove(s), s = null + })), e + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2116.43ed19b0c5c4834034ad.bundle.js b/mp-core/2116.43ed19b0c5c4834034ad.bundle.js new file mode 100644 index 0000000..363bcc0 --- /dev/null +++ b/mp-core/2116.43ed19b0c5c4834034ad.bundle.js @@ -0,0 +1,377 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2116], { + 62116: (t, e, i) => { + i.r(e), i.d(e, { + default: () => p + }); + const n = new class { + isValid(t) { + try { + return new URL(t), !0 + } catch (t) { + return !1 + } + } + }; + var o = i(83674), + s = i(60516), + a = i(25108); + class r { + name = "Open Link"; + icon = i(44455); + get settings() { + let t = []; + return t.push({ + type: "description", + name: "Allows you to perform actions when clicking this object." + }, { + type: "select", + id: "content_type", + name: "Content Type", + placeholder: "url", + values: ["url", "post"], + labels: ["URL", "Post"], + help: "Type of Content to open when clicking the object" + }, { + type: "select", + id: "post_display_type", + name: "Display Type", + placeholder: "panel", + values: ["panel", "popup", "same-tab", "new-tab", "sidebar"], + labels: ["Open in panel", "Open in browser popup", "Open in same tab", "Open in new tab", "Open in sidebar"], + help: "Controls how the content will be displayed when the user clicks on the object." + }, { + type: "checkbox", + id: "distance_trigger", + name: "Trigger on Distance", + help: "When enabled, the click action will be triggered when the user is within the specified distance to the object." + }), this.entity.distance_trigger && (t = t.concat([{ + type: "number", + id: "distance_value", + name: "Distance Value", + help: "The distance the user needs to be from the object in order to trigger its action. The default is 2 meters." + }])), t = this.entity.content_type && "url" != this.entity.content_type ? t.concat([{ + type: "button", + id: "post", + name: "Select Post", + help: "Select the content to display in this slot.", + onClick: () => this.showContentPicker() + }, { + type: "text", + id: "contentSlot_source", + name: "Source ID", + placeholder: "any:0", + help: "Can either be a direct post ID or an offset in a list, ie 'posts:0' would return the first post etc." + }, { + type: "checkbox", + id: "disable_click", + name: "Disable Click Interaction", + help: "When enabled, the click action will not trigger the action." + }]) : t.concat([{ + type: "text", + id: "link_url", + name: "URL", + help: "URL to open when clicking the object." + }]), t + } + onLoad() { + this.updateTimer = setInterval(this.checkDistance.bind(this), 1e3) + } + onUnload() { + this.updateTimer && clearInterval(this.updateTimer), this.updateTimer = null + } + showContentPicker() { + metapress.menubar.openReactPanel("site-content-picker", o.g, { + entityID: this.entity.id + }) + } + getContent() { + if (!this.entity.content_type || "url" == this.entity.content_type) { + const t = this.entity.link_url ? this.entity.link_url.trim() : ""; + return t.length < 1 ? void a.warn("[ActionScripterModifier] No URL provided.") : n.isValid(t) ? { + title: this.entity.name || "Link", + link: t + } : void a.warn("[ActionScripterModifier] Invalid URL provided.") + } + const t = metapress.siteContent.getItem(this.entity.contentSlot_source || "any:0"); + if (t && t.link) return t + } + async onClick() { + this.entity.disable_click && this.entity.distance_trigger || await this.onAction() + } + async onAction(t) { + const e = this.getContent(); + if (e?.link) + if (metapress.action_scripter.sendMessage({ + source: "openlink", + entity: this.entity.id + }), "same-tab" == this.entity.post_display_type) metapress.close(), await new Promise((t => setTimeout(t, 500))), location.href = e.link; + else if ("new-tab" == this.entity.post_display_type) window.parent.open(e.link, "_blank"); + else if ("popup" == this.entity.post_display_type) { + let t = 600, + i = 800, + n = window.screenLeft || window.screenX || 0, + o = window.screenTop || window.screenY || 0, + s = window.outerWidth || 1920, + a = window.outerHeight || 1080, + r = Math.max(n + s / 2 - t / 2, 0), + c = Math.max(o + a / 2 - i / 2, 0); + window.open(e.link, "_blank", `width=${t},height=${i},left=${r},top=${c},menubar=no,toolbar=no,location=no,personalbar=no,status=no`), metapress.input.movement.x = 0, metapress.input.movement.y = 0, metapress.input.devices.forEach((t => { + for (let e in t.activeKeys) t.activeKeys[e] = !1 + })) + } else "sidebar" == this.entity.post_display_type ? metapress.menubar.openReactPanel("sidebar-iframe", s.T, { + item: e, + onClose: () => metapress.menubar.closePanel() + }) : (t && (this.popupOpen = !0), this.popup = metapress.dialogs.show({ + title: e.title, + url: e.link, + width: Math.floor(.8 * window.innerWidth), + height: Math.floor(.8 * window.innerHeight) + })) + } + checkDistance() { + let t = this.entity.distance_value || 2; + if (!(this.entity.distance_trigger && this.entity && metapress.avatars && t)) return; + let e = new THREE.Vector3(metapress.avatars?.currentUserEntity.x || 0, metapress.avatars?.currentUserEntity.y || 0, metapress.avatars?.currentUserEntity.z || 0), + i = new THREE.Vector3(this.entity?.x, this.entity?.y, this.entity?.z); + e.distanceTo(i) <= t ? this.triggered || (this.triggered = !0, this.onAction(!0)) : (this.popup && this.popupOpen && (this.popup.close(), this.popup = null, this.popupOpen = !1), this.triggered = !1) + } + } + var c = i(25108); + class l { + name = "Object Interaction"; + hidden = !0; + get settings() { + return [{ + type: "description", + name: "Used to execute the actions from the action scripter." + }] + } + entity = null; + actionsTriggered = []; + mixer = null; + onLoad() { + this.updateTimer = setInterval(this.checkDistance.bind(this), 1e3), this.mixer = new THREE.AnimationMixer(this.renderer.object), this.triggeredActions = [], this.entity.entityActions?.forEach((t => { + "load" == t.trigger && this.onAction(t) + })) + } + onUnload() { + this.updateTimer && clearInterval(this.updateTimer), this.updateTimer = null + } + async onClick() { + this.entity.entityActions && this.entity.entityActions.length > 0 && this.entity.entityActions.forEach((t => { + "click" == t.trigger && this.onAction(t) + })) + } + async onAction(t, e) { + this.actionsTriggered.push(t), !e && t.synchronized && metapress.messaging.send("global", "actionscripter:action", { + action: t + }), 0 != t.actionLimit && null != t.actionLimit && this.actionsTriggered.filter((e => e.id == t.id))?.length > t.actionLimit || (metapress.action_scripter.sendMessage({ + source: "actionscripter", + entity: this.entity.id, + action: t.action + }), "playsound" == t.action && this.playSound(t.fileURL, t.trigger), "playanimation" == t.action && this.playAnimation(t.animation, t.animationDuration), "showalert" != t.action && "showpanel" != t.action && "showsidebar" != t.action && "showpopup" != t.action || await this.openURL(t)) + } + checkDistance() { + if (!this.entity.entityActions || this.entity.entityActions.length < 1) return; + let t = new THREE.Vector3(metapress.avatars?.currentUserEntity.x || 0, metapress.avatars?.currentUserEntity.y || 0, metapress.avatars?.currentUserEntity.z || 0), + e = new THREE.Vector3(this.entity?.x, this.entity?.y, this.entity?.z), + i = t.distanceTo(e); + this.entity.entityActions.forEach((t => { + let e = t.proximityRange ? parseInt(t.proximityRange) : 2; + "proximityenter" == t.trigger && (i <= e ? this.triggeredActions.find((e => e.id == t.id)) || (this.onAction(t), this.triggeredActions.push({ + id: t.id + })) : (this.triggeredActions = this.triggeredActions.filter((e => e.id != t.id)), this.stopAudio())), i > e && (this.popup && "proximityenter" == this.popupTrigger && (this.popup.close(), this.popup = null, this.popupTrigger = null), "proximityenter" == this.alertTrigger && (metapress.dialogs.closeAll(), this.alertTrigger = null)) + })) + } + playAnimation(t, e) { + if (t) { + if (this.entity?.["modifier:animator"] || metapress.entities.update(this.entity.id, { + "modifier:animator": !0 + }), e = e ? 1e3 * parseInt(e) : 2e3, Date.now(), this.lastMoveTime, this.entity.lastAnimationTriggerDate) { + if (!(Date.now() - this.entity.lastAnimationTriggerDate > e)) return; + this.playCurrentAnimation(t) + } else this.playCurrentAnimation(t); + metapress.entities.update(this.entity.id, { + lastAnimationTriggerDate: Date.now() + }), setTimeout((() => { + this.action && (this.previousAnimation ? this.playCurrentAnimation(this.previousAnimation) : (this.action.stop(), this.action.enabled = !1, this.action = null, this.entity.animation_name = null)) + }), e) + } + } + playSound(t, e) { + if (t) { + if (this.audio && (this.stopAudio(), this.lastURL == t && "click" == e && this.audio.duration > 8)) { + let t = 1e3 * this.audio.duration, + e = Date.now() - this.lastPlayDate; + if ("play" == this.lastAction && e < t) return this.lastAction = "stop", void(this.lastURL = null) + } + this.audio = new Audio(t), this.audio.play(), this.lastAction = "play", this.lastURL = t, this.lastPlayDate = Date.now() + } + } + stopAudio() { + this.audio && (this.audio.duration > 0 && !this.audio.paused && this.audio.pause(), this.audio.src = "") + } + playCurrentAnimation(t) { + let e = metapress.animation.getClip(t, this.renderer); + if (!e) return this["_notified_clipNotFound_" + t] || c.warn(`[MetaPress > Animator] Animation clip not found: ${t}`), void(this["_notified_clipNotFound_" + t] = !0); + this.previousAnimation = this.entity.animation_name; + let i = this.mixer.clipAction(e); + this.action = i, this.entity.animation_nonce = Date.now(), this.entity.animation_name = t, this.entity.animation_loop = !1 + } + getContent(t) { + if (t) { + const e = t ? t.trim() : ""; + return e.length < 1 ? void c.warn("[ObjectInteractionModifier] No URL provided.") : n.isValid(e) ? { + title: this.entity.name || "Link", + link: e + } : void c.warn("[ObjectInteractionModifier] Invalid URL provided.") + } + } + async openURL(t) { + const e = this.getContent(t.triggerText); + if (e?.link || "showalert" == t.action) + if ("showpopup" == t.action) { + let t = 600, + i = 800, + n = window.screenLeft || window.screenX || 0, + o = window.screenTop || window.screenY || 0, + s = window.outerWidth || 1920, + a = window.outerHeight || 1080, + r = Math.max(n + s / 2 - t / 2, 0), + c = Math.max(o + a / 2 - i / 2, 0); + window.open(e.link, "_blank", `width=${t},height=${i},left=${r},top=${c},menubar=no,toolbar=no,location=no,personalbar=no,status=no`), metapress.input.movement.x = 0, metapress.input.movement.y = 0, metapress.input.devices.forEach((t => { + for (let e in t.activeKeys) t.activeKeys[e] = !1 + })) + } else "showsidebar" == t.action ? metapress.menubar.openReactPanel("sidebar-iframe", s.T, { + item: e, + onClose: () => metapress.menubar.closePanel() + }) : "showpanel" == t.action ? (this.popup && (this.popup.close(), this.popup = null, this.popupTrigger = null), this.popupTrigger = t.trigger, this.popup = await metapress.dialogs.show({ + title: e.title, + url: e.link, + width: Math.floor(.8 * window.innerWidth), + height: Math.floor(.8 * window.innerHeight) + })) : "showalert" == t.action && (metapress.dialogs.closeAll(), this.alertTrigger = t.trigger, this.alert = await metapress.dialogs.alert({ + icon: "info", + title: t.triggerTitle, + text: t.triggerText + })) + } + $onIncomingMessage(t) { + "actionscripter:action" == t.name && this.onAction(t.data.action, !0) + } + actionTrigger(t) { + this.onAction(t, !0) + } + } + class p { + id = "core.misc.action_scripter"; + name = "Open Link"; + description = "Allows the user perform actions when interacting with a object."; + requires = ["entities"]; + provides = ["action_scripter", "modifier:action_scripter_click", "modifier:object_interaction"]; + createModifier(t) { + return "action_scripter_click" == t ? new r : "object_interaction" == t ? new l : void 0 + } + sendMessage(t) { + metapress.plugins.sendEvent("actionScripter_onObjectAction", { + entity: t.entity, + action: t.action, + source: t.source + }) + } + getObjects() { + return metapress.entities.all.filter((t => t.entityActions && t.entityActions?.length > 0)) + } + getClosest(t) { + let e = this.getObjects(), + i = [], + n = []; + if (t) + if ("any" == t) i = e; + else + for (let n of e) { + let e = !1; + for (let i of n.entityActions) i.action == t && (e = !0); + e && i.push(n) + } + let o = new THREE.Vector3(metapress.avatars?.currentUserEntity.x || 0, metapress.avatars?.currentUserEntity.y || 0, metapress.avatars?.currentUserEntity.z || 0); + for (let t of i) { + let e = t, + i = new THREE.Vector3(t.x, t.y, t.z), + s = o.distanceTo(i); + e.distance = s, n.push(e) + } + return n.sort(((t, e) => t.distance - e.distance)), n[0] + } + triggerActions(t) { + let e = this.getObjects(); + for (let i of e) + for (let e of i.entityActions) e.action == t && metapress.entities.getModifier(i.id, "object_interaction").actionTrigger(e) + } + triggerAction(t) { + let e = this.getClosest(t); + for (let i of e.entityActions) i.action == t && metapress.entities.getModifier(e.id, "object_interaction").actionTrigger(i) + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "Action scripter", + tags: "action scripter, scripts, logic, perform automatic actions, automate, automation, click actions, object actions, object interaction", + content: '\n The action scripter can be used to automate things within the world. For example, show a message when a user clicks an object or gets near an object, etc.\n To use it, add the "Action Scripter" modifier to an object in the Editor and configure the actions you want to perform.\n ' + }, { + id: `${this.id}:triggerActionsOfTypeOnClosest`, + type: "action", + name: "Action Scripter - Trigger specific closest action", + tags: "trigger playanimation, trigger playsound, trigger showpopup, trigger showalert", + content: "\n Assistant instruction: Run this action with value 'playanimation' or 'playsound' or 'showpopup' or 'showalert' and when the user asks to trigger a type of action scripter actions.\n ", + action: t => { + if (!t.value) throw new Error("Cannot send empty message."); + return this.triggerAction(t.value), "Triggered action" + } + }, { + id: `${this.id}:triggerActionsOnClosest`, + type: "action", + name: "Action Scripter - Trigger any closest action", + tags: "trigger closest action, trigger closest action scripter action, play closest action, play closest action scripter action", + content: "\n Assistant instruction: Run this action with value 'any' when the user asks for the closest object to trigger the action scripter actions.\n ", + action: t => { + if (!t.value) throw new Error("Cannot send empty message."); + return this.triggerAction(t.value), "Triggered action" + } + }, { + id: `${this.id}:getObjectActionScripterList`, + type: "action", + name: "Action Scripter - Specific object actions list", + tags: "object animate, get object actions, get object actions list, get object action scripter actions list", + content: `\n To retrieve the list of actions that can be performed on a specific object, run the KB action '${this.id}:getObjectActionScripterList' with the value as the object name.\n\n Available objects: ${this.getObjects().map((t=>`- ${t.name}`)).join("\n")}\n `, + action: t => { + if (!t.value) throw new Error("Cannot send empty message."); + for (let e of this.getObjects()) + if (e?.name?.includes(t.value) && e.entityActions.length > 0) return `The object plays ${e.entityActions.map((t=>`${t.action} ${t.triggerLabel}`)).join(", ")}.`; + return "No Action Scripter actions found for the object." + } + }, { + id: `${this.id}:triggerActionOnObject`, + type: "action", + name: "Action Scripter - Trigger specific object action", + tags: "trigger object, trigger object action, click object, play sound, trigger object action scripter action, start object", + content: `\n Assistant instruction: Run this action when the user asks to animate a specific object that has Action scripter actions. \n Run the KB action '${this.id}:triggerActionOnObject' with the value as the object name.\n Available objects: ${this.getObjects().map((t=>`- ${t.name}`)).join("\n")}\n `, + action: t => { + if (!t.value) throw new Error("Cannot send empty message."); + for (let e of this.getObjects()) + if (e?.name?.includes(t.value) && e.entityActions.length > 0) { + let t = metapress.entities.getModifier(e.id, "object_interaction"); + for (let i of e.entityActions) t.actionTrigger(i); + return `Triggered the object action: ${e.name}` + } return "No Action Scripter actions found for the object." + } + }] + } + }, + 44455: (t, e, i) => { + t.exports = i.p + "mp-core/action.091e0874ceb265e38c22.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/2167.febbff22e51ce16e09a8.bundle.js b/mp-core/2167.febbff22e51ce16e09a8.bundle.js new file mode 100644 index 0000000..ec09ef8 --- /dev/null +++ b/mp-core/2167.febbff22e51ce16e09a8.bundle.js @@ -0,0 +1,66 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2167], { + 92167: (e, t, i) => { + i.r(t), i.d(t, { + default: () => s + }); + var n = i(25108); + class s { + id = "core.audio"; + name = "Audio Support"; + description = "Provides audio for the environment."; + version = "1.0.0"; + provides = ["audio"]; + requires = ["renderer"]; + context = null; + listener = null; + inputNode = null; + micStream = null; + outputNode = null; + onLoad() { + if (this.listener = new THREE.AudioListener, this.context = this.listener.context, metapress.renderer.camera.add(this.listener), "suspended" == this.context.state) { + let e = () => { + this.context.resume(), window.removeEventListener("keydown", e), window.removeEventListener("pointerdown", e) + }; + window.addEventListener("keydown", e), window.addEventListener("pointerdown", e) + } + this.inputNode = this.context.createGain(), this.outputNode = this.context.createGain(), this.outputNode.connect(this.context.destination) + } + _muted = !0; + get muted() { + return this._muted + } + set muted(e) { + this._muted != e && (this._muted = !!e, e ? (this.micNode?.disconnect(), this.micNode = null, this.micStream?.getTracks()?.forEach((e => e.stop())), this.micStream = null) : navigator.mediaDevices.getUserMedia({ + audio: !0, + video: !1 + }).then((e => { + this.micNode?.disconnect(), this.micNode = null, this.micStream?.getTracks()?.forEach((e => e.stop())), this.micStream = null, this.micStream = e, this.micNode = this.context.createMediaStreamSource(this.micStream), this.micNode.connect(this.inputNode) + })).catch((e => { + n.warn(`[MetaPress] Unable to fetch microphone input! ${e.message}`), this._muted = !0 + })), metapress.plugins.sendEvent("onAudioMuteChanged", !!e)) + } + $getDebugSection = () => ({ + id: "core.main", + text: `Audio: state=${this.context?.state}` + }); + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:setMute`, + type: "action", + name: "mute/unmute microphone", + tags: "mute,unmute", + content: `\n Run the KB action "${this.id}:setMute" with value "true" or "false" to mute or unmute this user.\n `, + action: async e => { + if ("mute" == e.value || "true" == e.value) this.muted = !0; + else { + if ("unmute" != e.value && "false" != e.value) return n.warn(`[MetaPress] Invalid input for mute/unmute action: ${e.value}`), `invalid input: ${e.value}`; + this.muted = !1 + } + return metapress.p2p?.updateMicButton(), `muted: ${this.muted}` + } + }] + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2212.175a913bb63f201676f3.bundle.js b/mp-core/2212.175a913bb63f201676f3.bundle.js new file mode 100644 index 0000000..5f3563f --- /dev/null +++ b/mp-core/2212.175a913bb63f201676f3.bundle.js @@ -0,0 +1,343 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2212], { + 12212: (t, e, i) => { + i.r(e), i.d(e, { + default: () => m + }); + var h = i(99477); + class n extends EventTarget { + manager = null; + parent = null; + children = []; + x = 0; + y = 0; + width = 1024; + height = 1024; + hidden = !1; + background = "transparent"; + borderRadius = 0; + onLayout() {} + onRender(t) { + if (this.background && "transparent" != this.background && !this.borderRadius) t.fillStyle = this.background || "black", t.fillRect(0, 0, this.width, this.height); + else if (this.background && "transparent" != this.background) { + let e = Math.min(this.borderRadius, this.width / 2, this.height / 2); + t.fillStyle = this.background || "black", n.drawRoundedRect(t, 0, 0, this.width, this.height, e) + } + } + add(t) { + if (t == this) throw new Error("Cannot add an element to itself."); + if (t.parent) throw new Error("This element already has a parent."); + this.children.push(t), t.parent = this + } + remove(t) { + if (t == this) throw new Error("Cannot remove an element from itself."); + if (t.parent != this) throw new Error("The provided element is not a child of this element."); + this.children = this.children.filter((e => e != t)), t.parent = null + } + removeFromParent() { + this.parent && this.parent.remove(this) + } + static drawRoundedRect(t, e, i, h, n, s) { + t.beginPath(), t.moveTo(e + s, i), t.lineTo(e + h - s, i), t.quadraticCurveTo(e + h, i, e + h, i + s), t.lineTo(e + h, i + n - s), t.quadraticCurveTo(e + h, i + n, e + h - s, i + n), t.lineTo(e + s, i + n), t.quadraticCurveTo(e, i + n, e, i + n - s), t.lineTo(e, i + s), t.quadraticCurveTo(e, i, e + s, i), t.closePath(), t.fill() + } + } + class s extends n { + onLayout() { + for (let t of this.children) t.x = 0, t.y = 0, t.width = this.width, t.height = this.height + } + } + class r extends h.MeshBasicMaterial { + canvas = null; + canvasCtx = null; + baseView = new s; + imageCache = {}; + viewportSize = { + width: 1024, + height: 1024 + }; + static maxRedrawsPerFrame = 1; + static redrawQueue = []; + static frameCounter = 0; + get isOnscreen() { + return Math.abs(r.frameCounter - this.lastFrameIndex) < 3 + } + constructor(t) { + let e = document.createElement("canvas"); + e.width = t.width || 1024, e.height = t.height || 1024, delete t.width, delete t.height; + let i = e.getContext("2d"), + n = new h.Texture(e); + n.colorSpace = THREE.SRGBColorSpace, n.minFilter = h.LinearFilter, n.magFilter = h.LinearFilter, n.generateMipmaps = !1, super({ + side: THREE.DoubleSide, + map: n, + ...t + }), this.viewportSize = { + width: e.width, + height: e.height + }, this.canvas = e, this.canvasCtx = i, this.invalidate() + } + onBeforeRender(t, e, i, h, n, s) { + super.onBeforeRender(t, e, i, h, n, s), this.lastFrameIndex = r.frameCounter + } + render2D() { + this.canvasCtx.resetTransform(), this.canvasCtx.clearRect(0, 0, this.canvas.width, this.canvas.height), this.map && (this.map.needsUpdate = !0); + let t = this.canvas.width / this.viewportSize.width, + e = this.canvas.height / this.viewportSize.height; + this.canvasCtx.scale(t, e), this.baseView && (this.baseView.x = 0, this.baseView.y = 0, this.baseView.width = this.viewportSize.width, this.baseView.height = this.viewportSize.height, function t(e, i) { + e.manager = i; + for (let h of e.children) t(h, i) + }(this.baseView, this), this.drawView(this.baseView)) + } + drawView(t) { + if (!t.hidden) { + this.canvasCtx.translate(t.x || 0, t.y || 0), t.manager = this, t.onLayout?.(), t.onRender?.(this.canvasCtx); + for (let e of t.children) this.drawView(e); + this.canvasCtx.translate(-(t.x || 0), -(t.y || 0)) + } + } + invalidate() { + r.redrawQueue.includes(this) || r.redrawQueue.push(this) + } + static onRender() { + r.frameCounter += 1; + for (let t = 0; t < r.maxRedrawsPerFrame; t++) { + let t = r.nextItemToRender(); + if (!t) break; + t.render2D() + } + } + static nextItemToRender() { + for (let t = 0; t < r.redrawQueue.length; t++) { + let e = r.redrawQueue[t]; + if (e.isOnscreen) return r.redrawQueue.splice(t, 1), e + } + } + incomingClick(t, e, i) { + i && (t *= this.viewportSize.width, e *= this.viewportSize.height); + let h = this.hitTest(t, e); + if (!h) return; + let n = new Event("click"); + n.targetView = h, n.viewX = t, n.viewY = e; + let s = h; + for (; s && (s.dispatchEvent?.(n), !n.defaultPrevented);) s = s.parent + } + hitTest(t, e) { + return function i(h, n, s) { + if (!(t < n || t > n + h.width || e < s || e > s + h.height)) { + for (let t of h.children) { + let e = i(t, n + t.x, s + t.y); + if (e) return e + } + return h + } + }(this.baseView, 0, 0) + } + } + class a extends n { + url = ""; + scaleMode = "stretch"; + onRender(t) { + if (super.onRender(t), this._lastURL !== this.url) { + if (this._lastURL = this.url, !this.url) return void(this._image = null); + this._image = new Image, this._image.crossOrigin = "anonymous", this._image.src = this.url, this._image.addEventListener("load", (() => this.manager?.invalidate())) + } + if (!this._image?.complete) return; + let e = 0, + i = 0, + h = this.width, + n = this.height, + s = this._image.width / this._image.height, + r = this.width / this.height; + "fill" == this.scaleMode ? (s > r ? (n = this.height, h = n * s) : (h = this.width, n = h / s), e = (this.width - h) / 2, i = (this.height - n) / 2) : "fit" == this.scaleMode && (s > r ? (h = this.width, n = h / s) : (n = this.height, h = n * s), e = (this.width - h) / 2, i = (this.height - n) / 2), t.drawImage(this._image, e, i, h, n) + } + } + var l = new Map, + o = new Map, + d = new Map; + + function u(t, e, i, h) { + var n, s; + let r = o.get(i); + if (h && void 0 !== r && r.count > 2e4) { + let h = d.get(i); + if (void 0 === h && (h = function(t, e) { + var i; + let h = new Map, + n = 0; + for (let e of "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,.-+=?") { + let i = t.measureText(e).width; + h.set(e, i), n += i + } + let s = n / h.size, + r = (e / s + 3) / 4, + a = h.keys(); + for (let t of a) h.set(t, (null != (i = h.get(t)) ? i : s) * r); + return h + }(t, r.size), d.set(i, h)), r.count > 5e5) { + let t = 0; + for (let i of e) t += null != (n = h.get(i)) ? n : r.size; + return 1.01 * t + } + let s = t.measureText(e); + return function(t, e, i, h, n) { + var s, r, a; + let l = 0, + o = {}; + for (let e of t) l += null != (s = i.get(e)) ? s : n, o[e] = (null != (r = o[e]) ? r : 0) + 1; + let d = e - l; + for (let t of Object.keys(o)) { + let e = o[t], + s = null != (a = i.get(t)) ? a : n, + r = s + d * (s * e / l) * h / e; + i.set(t, r) + } + }(e, s.width, h, Math.max(.05, 1 - r.count / 2e5), r.size), o.set(i, { + count: r.count + e.length, + size: r.size + }), s.width + } + let a = t.measureText(e), + l = a.width / e.length; + if ((null != (s = null == r ? void 0 : r.count) ? s : 0) > 2e4) return a.width; + if (void 0 === r) o.set(i, { + count: e.length, + size: l + }); + else { + let t = l - r.size, + h = e.length / (r.count + e.length), + n = r.size + t * h; + o.set(i, { + count: r.count + e.length, + size: n + }) + } + return a.width + } + + function c(t, e, i, h, n, s, r, a) { + if (e.length <= 1) return e.length; + if (n < i) return -1; + let l = Math.floor(i / n * s), + o = u(t, e.slice(0, Math.max(0, l)), h, r), + d = null == a ? void 0 : a(e); + if (o !== i) + if (o < i) { + for (; o < i;) l++, o = u(t, e.slice(0, Math.max(0, l)), h, r); + l-- + } else + for (; o > i;) { + let i = void 0 !== d ? 0 : e.lastIndexOf(" ", l - 1); + i > 0 ? l = i : l--, o = u(t, e.slice(0, Math.max(0, l)), h, r) + } + if (" " !== e[l]) { + let t = 0; + if (void 0 === d) t = e.lastIndexOf(" ", l); + else + for (let e of d) { + if (e > l) break; + t = e + } + t > 0 && (l = t) + } + return l + } + class g extends n { + text = ""; + autoHeight = !0; + font = "16px sans-serif"; + color = "#888888"; + lineHeight = 1.2; + textAlign = "left"; + onLayout() { + if (!this.autoHeight) return; + let t = this.manager.canvasCtx; + t.font = this.font, t.textBaseline = "top", t.textAlign = "left"; + let e = this.splitLines(t, this.text, this.width), + i = t.measureText("|"), + h = (i.actualBoundingBoxAscent + i.actualBoundingBoxDescent) * this.lineHeight, + n = e.length * h; + this.height != n && (this.height = n) + } + onRender(t) { + super.onRender(t), t.font = this.font, t.textBaseline = "top", t.textAlign = this.textAlign, t.fillStyle = this.color; + let e = t.measureText("|"), + i = (e.actualBoundingBoxAscent + e.actualBoundingBoxDescent) * this.lineHeight, + h = this.splitLines(t, this.text, this.width), + n = 0; + for (let e of h) { + let h = 0, + s = n; + "center" == this.textAlign ? h = Math.round(this.width / 2) : "right" == this.textAlign && (h = this.width), t.fillText(e, h, s), n += i + } + } + splitLines(t, e, i) { + return function(t, e, i, h, n, s) { + let r = `${e}_${i}_${h}px`, + a = l.get(r); + if (void 0 !== a) return a; + if (h <= 0) return []; + let d = [], + g = e.split("\n"), + f = o.get(i), + w = void 0 === f ? e.length : h / f.size * 1.5, + m = void 0 !== f && f.count > 2e4; + for (let e of g) { + let n = u(t, e.slice(0, Math.max(0, w)), i, m), + s = Math.min(e.length, w); + if (n <= h) d.push(e); + else { + for (; n > h;) { + let r = c(t, e, h, i, n, s, m, undefined), + a = e.slice(0, Math.max(0, r)); + e = e.slice(a.length), d.push(a), n = u(t, e.slice(0, Math.max(0, w)), i, m), s = Math.min(e.length, w) + } + n > 0 && d.push(e) + } + } + return d = d.map(((t, e) => 0 === e ? t.trimEnd() : t.trim())), l.set(r, d), l.size > 500 && l.delete(l.keys().next().value), d + }(t, e, t.font, i) + } + } + class f extends n { + onLayout() { + for (let t of this.children) t.onLayout?.(); + for (let t of this.children) t.x = Math.round((this.width - t.width) / 2), t.y = Math.round((this.height - t.height) / 2) + } + } + class w extends n { + direction = "row"; + justify = "start"; + align = "stretch"; + onLayout() { + for (let t of this.children) t.onLayout?.(); + let t = 0; + for (let e of this.children) "row" == this.direction ? t += e.width + (e.marginLeft || 0) + (e.marginRight || 0) : t += e.height + (e.marginTop || 0) + (e.marginBottom || 0); + let e = 0; + "center" == this.justify ? e = Math.max(0, Math.round(this.height / 2 - t / 2)) : "end" == this.justify && (e = Math.max(0, this.height - t)); + for (let t of this.children) "row" == this.direction ? t.x = e + (t.marginLeft || 0) : t.y = e + (t.marginTop || 0), "start" == this.align ? "row" == this.direction ? t.y = t.marginTop || 0 : t.x = t.marginLeft || 0 : "center" == this.align ? "row" == this.direction ? t.y = Math.round((this.height - t.height) / 2) : t.x = Math.round((this.width - t.width) / 2) : "end" == this.align ? "row" == this.direction ? t.y = this.height - t.height - (t.marginBottom || 0) : t.x = this.width - t.width - (t.marginRight || 0) : "stretch" == this.align && ("row" == this.direction ? (t.y = t.marginTop || 0, t.height = this.height - (t.marginTop || 0) - (t.marginBottom || 0)) : (t.x = t.marginLeft || 0, t.width = this.width - (t.marginLeft || 0) - (t.marginRight || 0))), "row" == this.direction ? e += t.width + (t.marginLeft || 0) + (t.marginRight || 0) : e += t.height + (t.marginTop || 0) + (t.marginBottom || 0) + } + } + class m { + id = "core.ui"; + name = "User Interface"; + description = "Provide 2D UI elements in the metaverse."; + version = "1.0.0"; + requires = ["entities"]; + provides = ["ui"]; + createMaterial(t) { + return new r(t) + } + createElement(t) { + return metapress.plugins.call("ui_createElement", t) + } + $ui_createElement(t) { + return "box" == t ? new n : "image" == t ? new a : "text" == t ? new g : "center-layout" == t ? new f : "stretch-layout" == t ? new s : "flex-layout" == t ? new w : void 0 + } + $onRender() { + r.onRender() + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2238.25311b5bca452092272c.bundle.js b/mp-core/2238.25311b5bca452092272c.bundle.js new file mode 100644 index 0000000..ae3854a --- /dev/null +++ b/mp-core/2238.25311b5bca452092272c.bundle.js @@ -0,0 +1,711 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2238], { + 42238: function(i, e, o) { + var a; + ! function(r, n) { + "use strict"; + var t = "function", + s = "undefined", + b = "object", + w = "string", + l = "model", + d = "name", + c = "type", + u = "vendor", + m = "version", + p = "architecture", + h = "console", + f = "mobile", + v = "tablet", + g = "smarttv", + k = "wearable", + x = "embedded", + y = "Amazon", + _ = "Apple", + T = "ASUS", + S = "BlackBerry", + q = "Google", + z = "Huawei", + A = "LG", + N = "Microsoft", + C = "Motorola", + O = "Samsung", + E = "Sharp", + B = "Sony", + U = "Xiaomi", + j = "Zebra", + P = "Facebook", + R = "Chromium OS", + M = "Mac OS", + V = function(i) { + for (var e = {}, o = 0; o < i.length; o++) e[i[o].toUpperCase()] = i[o]; + return e + }, + D = function(i, e) { + return typeof i === w && -1 !== F(e).indexOf(F(i)) + }, + F = function(i) { + return i.toLowerCase() + }, + I = function(i, e) { + if (typeof i === w) return i = i.replace(/^\s\s*/, ""), typeof e === s ? i : i.substring(0, 350) + }, + W = function(i, e) { + for (var o, a, r, s, w, l, d = 0; d < e.length && !w;) { + var c = e[d], + u = e[d + 1]; + for (o = a = 0; o < c.length && !w && c[o];) + if (w = c[o++].exec(i)) + for (r = 0; r < u.length; r++) l = w[++a], typeof(s = u[r]) === b && s.length > 0 ? 2 === s.length ? typeof s[1] == t ? this[s[0]] = s[1].call(this, l) : this[s[0]] = s[1] : 3 === s.length ? typeof s[1] !== t || s[1].exec && s[1].test ? this[s[0]] = l ? l.replace(s[1], s[2]) : n : this[s[0]] = l ? s[1].call(this, l, s[2]) : n : 4 === s.length && (this[s[0]] = l ? s[3].call(this, l.replace(s[1], s[2])) : n) : this[s] = l || n; + d += 2 + } + }, + G = function(i, e) { + for (var o in e) + if (typeof e[o] === b && e[o].length > 0) { + for (var a = 0; a < e[o].length; a++) + if (D(e[o][a], i)) return "?" === o ? n : o + } else if (D(e[o], i)) return "?" === o ? n : o; + return i + }, + H = { + ME: "4.90", + "NT 3.11": "NT3.51", + "NT 4.0": "NT4.0", + 2e3: "NT 5.0", + XP: ["NT 5.1", "NT 5.2"], + Vista: "NT 6.0", + 7: "NT 6.1", + 8: "NT 6.2", + 8.1: "NT 6.3", + 10: ["NT 6.4", "NT 10.0"], + RT: "ARM" + }, + L = { + browser: [ + [/\b(?:crmo|crios)\/([\w\.]+)/i], + [m, [d, "Chrome"]], + [/edg(?:e|ios|a)?\/([\w\.]+)/i], + [m, [d, "Edge"]], + [/(opera mini)\/([-\w\.]+)/i, /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i], + [d, m], + [/opios[\/ ]+([\w\.]+)/i], + [m, [d, "Opera Mini"]], + [/\bopr\/([\w\.]+)/i], + [m, [d, "Opera"]], + [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i, /(ba?idubrowser)[\/ ]?([\w\.]+)/i, /(?:ms|\()(ie) ([\w\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, /(heytap|ovi)browser\/([\d\.]+)/i, /(weibo)__([\d\.]+)/i], + [d, m], + [/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i], + [m, [d, "UCBrowser"]], + [/microm.+\bqbcore\/([\w\.]+)/i, /\bqbcore\/([\w\.]+).+microm/i], + [m, [d, "WeChat(Win) Desktop"]], + [/micromessenger\/([\w\.]+)/i], + [m, [d, "WeChat"]], + [/konqueror\/([\w\.]+)/i], + [m, [d, "Konqueror"]], + [/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i], + [m, [d, "IE"]], + [/ya(?:search)?browser\/([\w\.]+)/i], + [m, [d, "Yandex"]], + [/(avast|avg)\/([\w\.]+)/i], + [ + [d, /(.+)/, "$1 Secure Browser"], m + ], + [/\bfocus\/([\w\.]+)/i], + [m, [d, "Firefox Focus"]], + [/\bopt\/([\w\.]+)/i], + [m, [d, "Opera Touch"]], + [/coc_coc\w+\/([\w\.]+)/i], + [m, [d, "Coc Coc"]], + [/dolfin\/([\w\.]+)/i], + [m, [d, "Dolphin"]], + [/coast\/([\w\.]+)/i], + [m, [d, "Opera Coast"]], + [/miuibrowser\/([\w\.]+)/i], + [m, [d, "MIUI Browser"]], + [/fxios\/([-\w\.]+)/i], + [m, [d, "Firefox"]], + [/\bqihu|(qi?ho?o?|360)browser/i], + [ + [d, "360 Browser"] + ], + [/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i], + [ + [d, /(.+)/, "$1 Browser"], m + ], + [/(comodo_dragon)\/([\w\.]+)/i], + [ + [d, /_/g, " "], m + ], + [/(electron)\/([\w\.]+) safari/i, /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i], + [d, m], + [/(metasr)[\/ ]?([\w\.]+)/i, /(lbbrowser)/i, /\[(linkedin)app\]/i], + [d], + [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i], + [ + [d, P], m + ], + [/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, /safari (line)\/([\w\.]+)/i, /\b(line)\/([\w\.]+)\/iab/i, /(chromium|instagram)[\/ ]([-\w\.]+)/i], + [d, m], + [/\bgsa\/([\w\.]+) .*safari\//i], + [m, [d, "GSA"]], + [/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i], + [m, [d, "TikTok"]], + [/headlesschrome(?:\/([\w\.]+)| )/i], + [m, [d, "Chrome Headless"]], + [/ wv\).+(chrome)\/([\w\.]+)/i], + [ + [d, "Chrome WebView"], m + ], + [/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i], + [m, [d, "Android Browser"]], + [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i], + [d, m], + [/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i], + [m, [d, "Mobile Safari"]], + [/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i], + [m, d], + [/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i], + [d, [m, G, { + "1.0": "/8", + 1.2: "/1", + 1.3: "/3", + "2.0": "/412", + "2.0.2": "/416", + "2.0.3": "/417", + "2.0.4": "/419", + "?": "/" + }]], + [/(webkit|khtml)\/([\w\.]+)/i], + [d, m], + [/(navigator|netscape\d?)\/([-\w\.]+)/i], + [ + [d, "Netscape"], m + ], + [/mobile vr; rv:([\w\.]+)\).+firefox/i], + [m, [d, "Firefox Reality"]], + [/ekiohf.+(flow)\/([\w\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, /(firefox)\/([\w\.]+)/i, /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, /(links) \(([\w\.]+)/i, /panasonic;(viera)/i], + [d, m], + [/(cobalt)\/([\w\.]+)/i], + [d, [m, /master.|lts./, ""]] + ], + cpu: [ + [/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i], + [ + [p, "amd64"] + ], + [/(ia32(?=;))/i], + [ + [p, F] + ], + [/((?:i[346]|x)86)[;\)]/i], + [ + [p, "ia32"] + ], + [/\b(aarch64|arm(v?8e?l?|_?64))\b/i], + [ + [p, "arm64"] + ], + [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i], + [ + [p, "armhf"] + ], + [/windows (ce|mobile); ppc;/i], + [ + [p, "arm"] + ], + [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i], + [ + [p, /ower/, "", F] + ], + [/(sun4\w)[;\)]/i], + [ + [p, "sparc"] + ], + [/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i], + [ + [p, F] + ] + ], + device: [ + [/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i], + [l, [u, O], + [c, v] + ], + [/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i], + [l, [u, O], + [c, f] + ], + [/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i], + [l, [u, _], + [c, f] + ], + [/\((ipad);[-\w\),; ]+apple/i, /applecoremedia\/[\w\.]+ \((ipad)/i, /\b(ipad)\d\d?,\d\d?[;\]].+ios/i], + [l, [u, _], + [c, v] + ], + [/(macintosh);/i], + [l, [u, _]], + [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i], + [l, [u, E], + [c, f] + ], + [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i], + [l, [u, z], + [c, v] + ], + [/(?:huawei|honor)([-\w ]+)[;\)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i], + [l, [u, z], + [c, f] + ], + [/\b(poco[\w ]+)(?: bui|\))/i, /\b; (\w+) build\/hm\1/i, /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i], + [ + [l, /_/g, " "], + [u, U], + [c, f] + ], + [/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i], + [ + [l, /_/g, " "], + [u, U], + [c, v] + ], + [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i], + [l, [u, "OPPO"], + [c, f] + ], + [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i], + [l, [u, "Vivo"], + [c, f] + ], + [/\b(rmx[12]\d{3})(?: bui|;|\))/i], + [l, [u, "Realme"], + [c, f] + ], + [/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i], + [l, [u, C], + [c, f] + ], + [/\b(mz60\d|xoom[2 ]{0,2}) build\//i], + [l, [u, C], + [c, v] + ], + [/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i], + [l, [u, A], + [c, v] + ], + [/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, /\blg-?([\d\w]+) bui/i], + [l, [u, A], + [c, f] + ], + [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i], + [l, [u, "Lenovo"], + [c, v] + ], + [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i], + [ + [l, /_/g, " "], + [u, "Nokia"], + [c, f] + ], + [/(pixel c)\b/i], + [l, [u, q], + [c, v] + ], + [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i], + [l, [u, q], + [c, f] + ], + [/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i], + [l, [u, B], + [c, f] + ], + [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i], + [ + [l, "Xperia Tablet"], + [u, B], + [c, v] + ], + [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i], + [l, [u, "OnePlus"], + [c, f] + ], + [/(alexa)webm/i, /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, /(kf[a-z]+)( bui|\)).+silk\//i], + [l, [u, y], + [c, v] + ], + [/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i], + [ + [l, /(.+)/g, "Fire Phone $1"], + [u, y], + [c, f] + ], + [/(playbook);[-\w\),; ]+(rim)/i], + [l, u, [c, v]], + [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i], + [l, [u, S], + [c, f] + ], + [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i], + [l, [u, T], + [c, v] + ], + [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i], + [l, [u, T], + [c, f] + ], + [/(nexus 9)/i], + [l, [u, "HTC"], + [c, v] + ], + [/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i], + [u, [l, /_/g, " "], + [c, f] + ], + [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i], + [l, [u, "Acer"], + [c, v] + ], + [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i], + [l, [u, "Meizu"], + [c, f] + ], + [/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, /(hp) ([\w ]+\w)/i, /(asus)-?(\w+)/i, /(microsoft); (lumia[\w ]+)/i, /(lenovo)[-_ ]?([-\w]+)/i, /(jolla)/i, /(oppo) ?([\w ]+) bui/i], + [u, l, [c, f]], + [/(kobo)\s(ereader|touch)/i, /(archos) (gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\/([\w\.]+)/i, /(nook)[\w ]+build\/(\w+)/i, /(dell) (strea[kpr\d ]*[\dko])/i, /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, /(trinity)[- ]*(t\d{3}) bui/i, /(gigaset)[- ]+(q\w{1,9}) bui/i, /(vodafone) ([\w ]+)(?:\)| bui)/i], + [u, l, [c, v]], + [/(surface duo)/i], + [l, [u, N], + [c, v] + ], + [/droid [\d\.]+; (fp\du?)(?: b|\))/i], + [l, [u, "Fairphone"], + [c, f] + ], + [/(u304aa)/i], + [l, [u, "AT&T"], + [c, f] + ], + [/\bsie-(\w*)/i], + [l, [u, "Siemens"], + [c, f] + ], + [/\b(rct\w+) b/i], + [l, [u, "RCA"], + [c, v] + ], + [/\b(venue[\d ]{2,7}) b/i], + [l, [u, "Dell"], + [c, v] + ], + [/\b(q(?:mv|ta)\w+) b/i], + [l, [u, "Verizon"], + [c, v] + ], + [/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i], + [l, [u, "Barnes & Noble"], + [c, v] + ], + [/\b(tm\d{3}\w+) b/i], + [l, [u, "NuVision"], + [c, v] + ], + [/\b(k88) b/i], + [l, [u, "ZTE"], + [c, v] + ], + [/\b(nx\d{3}j) b/i], + [l, [u, "ZTE"], + [c, f] + ], + [/\b(gen\d{3}) b.+49h/i], + [l, [u, "Swiss"], + [c, f] + ], + [/\b(zur\d{3}) b/i], + [l, [u, "Swiss"], + [c, v] + ], + [/\b((zeki)?tb.*\b) b/i], + [l, [u, "Zeki"], + [c, v] + ], + [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i], + [ + [u, "Dragon Touch"], l, [c, v] + ], + [/\b(ns-?\w{0,9}) b/i], + [l, [u, "Insignia"], + [c, v] + ], + [/\b((nxa|next)-?\w{0,9}) b/i], + [l, [u, "NextBook"], + [c, v] + ], + [/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i], + [ + [u, "Voice"], l, [c, f] + ], + [/\b(lvtel\-)?(v1[12]) b/i], + [ + [u, "LvTel"], l, [c, f] + ], + [/\b(ph-1) /i], + [l, [u, "Essential"], + [c, f] + ], + [/\b(v(100md|700na|7011|917g).*\b) b/i], + [l, [u, "Envizen"], + [c, v] + ], + [/\b(trio[-\w\. ]+) b/i], + [l, [u, "MachSpeed"], + [c, v] + ], + [/\btu_(1491) b/i], + [l, [u, "Rotor"], + [c, v] + ], + [/(shield[\w ]+) b/i], + [l, [u, "Nvidia"], + [c, v] + ], + [/(sprint) (\w+)/i], + [u, l, [c, f]], + [/(kin\.[onetw]{3})/i], + [ + [l, /\./g, " "], + [u, N], + [c, f] + ], + [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i], + [l, [u, j], + [c, v] + ], + [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i], + [l, [u, j], + [c, f] + ], + [/smart-tv.+(samsung)/i], + [u, [c, g]], + [/hbbtv.+maple;(\d+)/i], + [ + [l, /^/, "SmartTV"], + [u, O], + [c, g] + ], + [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i], + [ + [u, A], + [c, g] + ], + [/(apple) ?tv/i], + [u, [l, "Apple TV"], + [c, g] + ], + [/crkey/i], + [ + [l, "Chromecast"], + [u, q], + [c, g] + ], + [/droid.+aft(\w)( bui|\))/i], + [l, [u, y], + [c, g] + ], + [/\(dtv[\);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i], + [l, [u, E], + [c, g] + ], + [/(bravia[\w ]+)( bui|\))/i], + [l, [u, B], + [c, g] + ], + [/(mitv-\w{5}) bui/i], + [l, [u, U], + [c, g] + ], + [/Hbbtv.*(technisat) (.*);/i], + [u, l, [c, g]], + [/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i], + [ + [u, I], + [l, I], + [c, g] + ], + [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i], + [ + [c, g] + ], + [/(ouya)/i, /(nintendo) ([wids3utch]+)/i], + [u, l, [c, h]], + [/droid.+; (shield) bui/i], + [l, [u, "Nvidia"], + [c, h] + ], + [/(playstation [345portablevi]+)/i], + [l, [u, B], + [c, h] + ], + [/\b(xbox(?: one)?(?!; xbox))[\); ]/i], + [l, [u, N], + [c, h] + ], + [/((pebble))app/i], + [u, l, [c, k]], + [/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i], + [l, [u, _], + [c, k] + ], + [/droid.+; (glass) \d/i], + [l, [u, q], + [c, k] + ], + [/droid.+; (wt63?0{2,3})\)/i], + [l, [u, j], + [c, k] + ], + [/(quest( 2| pro)?)/i], + [l, [u, P], + [c, k] + ], + [/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i], + [u, [c, x]], + [/(aeobc)\b/i], + [l, [u, y], + [c, x] + ], + [/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i], + [l, [c, f]], + [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i], + [l, [c, v]], + [/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i], + [ + [c, v] + ], + [/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i], + [ + [c, f] + ], + [/(android[-\w\. ]{0,9});.+buil/i], + [l, [u, "Generic"]] + ], + engine: [ + [/windows.+ edge\/([\w\.]+)/i], + [m, [d, "EdgeHTML"]], + [/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i], + [m, [d, "Blink"]], + [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /ekioh(flow)\/([\w\.]+)/i, /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, /(icab)[\/ ]([23]\.[\d\.]+)/i, /\b(libweb)/i], + [d, m], + [/rv\:([\w\.]{1,9})\b.+(gecko)/i], + [m, d] + ], + os: [ + [/microsoft (windows) (vista|xp)/i], + [d, m], + [/(windows) nt 6\.2; (arm)/i, /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i], + [d, [m, G, H]], + [/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i], + [ + [d, "Windows"], + [m, G, H] + ], + [/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, /ios;fbsv\/([\d\.]+)/i, /cfnetwork\/.+darwin/i], + [ + [m, /_/g, "."], + [d, "iOS"] + ], + [/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i], + [ + [d, M], + [m, /_/g, "."] + ], + [/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i], + [m, d], + [/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, /(blackberry)\w*\/([\w\.]*)/i, /(tizen|kaios)[\/ ]([\w\.]+)/i, /\((series40);/i], + [d, m], + [/\(bb(10);/i], + [m, [d, S]], + [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i], + [m, [d, "Symbian"]], + [/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i], + [m, [d, "Firefox OS"]], + [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i], + [m, [d, "webOS"]], + [/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i], + [m, [d, "watchOS"]], + [/crkey\/([\d\.]+)/i], + [m, [d, "Chromecast"]], + [/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i], + [ + [d, R], m + ], + [/panasonic;(viera)/i, /(netrange)mmh/i, /(nettv)\/(\d+\.[\w\.]+)/i, /(nintendo|playstation) ([wids345portablevuch]+)/i, /(xbox); +xbox ([^\);]+)/i, /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, /(mint)[\/\(\) ]?(\w*)/i, /(mageia|vectorlinux)[; ]/i, /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, /(hurd|linux) ?([\w\.]*)/i, /(gnu) ?([\w\.]*)/i, /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, /(haiku) (\w+)/i], + [d, m], + [/(sunos) ?([\w\.\d]*)/i], + [ + [d, "Solaris"], m + ], + [/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, /(unix) ?([\w\.]*)/i], + [d, m] + ] + }, + Z = function(i, e) { + if (typeof i === b && (e = i, i = n), !(this instanceof Z)) return new Z(i, e).getResult(); + var o = typeof r !== s && r.navigator ? r.navigator : n, + a = i || (o && o.userAgent ? o.userAgent : ""), + l = o && o.userAgentData ? o.userAgentData : n, + d = e ? function(i, e) { + var o = {}; + for (var a in i) e[a] && e[a].length % 2 == 0 ? o[a] = e[a].concat(i[a]) : o[a] = i[a]; + return o + }(L, e) : L, + c = o && o.userAgent == a; + return this.getBrowser = function() { + var i, e = {}; + return e.name = n, e.version = n, W.call(e, a, d.browser), e.major = typeof(i = e.version) === w ? i.replace(/[^\d\.]/g, "").split(".")[0] : n, c && o && o.brave && typeof o.brave.isBrave == t && (e.name = "Brave"), e + }, this.getCPU = function() { + var i = {}; + return i.architecture = n, W.call(i, a, d.cpu), i + }, this.getDevice = function() { + var i = {}; + return i.vendor = n, i.model = n, i.type = n, W.call(i, a, d.device), c && !i.type && l && l.mobile && (i.type = f), c && "Macintosh" == i.model && o && typeof o.standalone !== s && o.maxTouchPoints && o.maxTouchPoints > 2 && (i.model = "iPad", i.type = v), i + }, this.getEngine = function() { + var i = {}; + return i.name = n, i.version = n, W.call(i, a, d.engine), i + }, this.getOS = function() { + var i = {}; + return i.name = n, i.version = n, W.call(i, a, d.os), c && !i.name && l && "Unknown" != l.platform && (i.name = l.platform.replace(/chrome os/i, R).replace(/macos/i, M)), i + }, this.getResult = function() { + return { + ua: this.getUA(), + browser: this.getBrowser(), + engine: this.getEngine(), + os: this.getOS(), + device: this.getDevice(), + cpu: this.getCPU() + } + }, this.getUA = function() { + return a + }, this.setUA = function(i) { + return a = typeof i === w && i.length > 350 ? I(i, 350) : i, this + }, this.setUA(a), this + }; + Z.VERSION = "1.0.35", Z.BROWSER = V([d, m, "major"]), Z.CPU = V([p]), Z.DEVICE = V([l, u, c, h, f, g, v, k, x]), Z.ENGINE = Z.OS = V([d, m]), typeof e !== s ? (i.exports && (e = i.exports = Z), e.UAParser = Z) : o.amdO ? (a = function() { + return Z + }.call(e, o, e, i)) === n || (i.exports = a) : typeof r !== s && (r.UAParser = Z); + var $ = typeof r !== s && (r.jQuery || r.Zepto); + if ($ && !$.ua) { + var X = new Z; + $.ua = X.getResult(), $.ua.get = function() { + return X.getUA() + }, $.ua.set = function(i) { + X.setUA(i); + var e = X.getResult(); + for (var o in e) $.ua[o] = e[o] + } + } + }("object" == typeof window ? window : this) + } + } +]); \ No newline at end of file diff --git a/mp-core/2302.004dd82aad40d71680cc.bundle.js b/mp-core/2302.004dd82aad40d71680cc.bundle.js new file mode 100644 index 0000000..4eda2ee --- /dev/null +++ b/mp-core/2302.004dd82aad40d71680cc.bundle.js @@ -0,0 +1,68 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2302], { + 22302: (t, e, i) => { + i.r(e), i.d(e, { + default: () => n + }); + class n { + id = "core.integration.template-file"; + name = "Tempate File Integration"; + description = "Loads world data from a URL pointing to an .mpbackup file."; + version = "1.0.0"; + requires = ["backend", "assets"]; + provides = []; + contentURL = ""; + contentZip = null; + async onLoad() { + if (this.config.contentURL) this.contentURL = this.config.contentURL; + else { + if (!this.config.templateID) throw { + message: "Not configured.", + cancelled: !0 + }; + { + let t = await metapress.plugins.callAllAsync("editor_getTemplates"); + t = t.flat().filter((t => t?.url && t?.name)); + let e = t.find((t => t.id === this.config.templateID)); + if (!e) throw new Error(`Template with ID '${this.config.templateID}' was not found.`); + this.contentURL = e.url + } + } + let t = await metapress.assets.load("blob", this.contentURL); + const { + default: e + } = await Promise.all([i.e(8764), i.e(5733)]).then(i.t.bind(i, 55733, 23)); + let n = await e.loadAsync(t); + this.contentZip = n; + let s = await n.file("template.json"); + if (!s) throw new Error("Missing template.json in template file."); + let a = JSON.parse(await s.async("string")); + if ("metapress:custom-template" != a.type) throw new Error("Invalid data in template file."); + let l = {}; + for (let t of a.entities) + for (let e in t) { + let i = this.getEntityRelativePath(t[e]); + if (!i) continue; + let s = l[i]; + if (!s) { + let t = n.file(i); + if (!t) continue; + let e = await t.async("blob"); + s = URL.createObjectURL(e) + "#" + i, l[i] = s + } + t[e] = s + } + for (let t of a.entities) metapress.entities.add(t) + } + getEntityRelativePath(t) { + if ("string" != typeof t || !t.startsWith("http:") && !t.startsWith("https:")) return null; + let e = t.indexOf("/custom-template/"); + if (-1 == e) return null; + let i = t.substring(e + 17); + return e = i.indexOf("?"), -1 != e && (i = i.substring(0, e)), e = i.indexOf("#"), -1 != e && (i = i.substring(0, e)), i + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2371.de1b9165c5c02c010699.bundle.js b/mp-core/2371.de1b9165c5c02c010699.bundle.js new file mode 100644 index 0000000..20c9ae4 --- /dev/null +++ b/mp-core/2371.de1b9165c5c02c010699.bundle.js @@ -0,0 +1,2214 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2371], { + 62371: (e, t, i) => { + i.d(t, { + CD: () => k, + H5: () => K, + Ln: () => O, + YQ: () => E, + bn: () => X, + rk: () => L, + xC: () => S + }); + var r = i(99477), + n = i(25108), + s = .001, + a = new r.Camera, + o = null, + l = class e { + constructor(e = "Pass", t = new r.Scene, i = a) { + this.name = e, this.renderer = null, this.scene = t, this.camera = i, this.screen = null, this.rtt = !0, this.needsSwap = !0, this.needsDepthTexture = !1, this.enabled = !0 + } + get renderToScreen() { + return !this.rtt + } + set renderToScreen(e) { + if (this.rtt === e) { + const t = this.fullscreenMaterial; + null !== t && (t.needsUpdate = !0), this.rtt = !e + } + } + set mainScene(e) {} + set mainCamera(e) {} + setRenderer(e) { + this.renderer = e + } + isEnabled() { + return this.enabled + } + setEnabled(e) { + this.enabled = e + } + get fullscreenMaterial() { + return null !== this.screen ? this.screen.material : null + } + set fullscreenMaterial(e) { + let t = this.screen; + null !== t ? t.material = e : (t = new r.Mesh(function() { + if (null === o) { + const e = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]), + t = new Float32Array([0, 0, 2, 0, 0, 2]); + void 0 !== (o = new r.BufferGeometry).setAttribute ? (o.setAttribute("position", new r.BufferAttribute(e, 3)), o.setAttribute("uv", new r.BufferAttribute(t, 2))) : (o.addAttribute("position", new r.BufferAttribute(e, 3)), o.addAttribute("uv", new r.BufferAttribute(t, 2))) + } + return o + }(), e), t.frustumCulled = !1, null === this.scene && (this.scene = new r.Scene), this.scene.add(t), this.screen = t) + } + getFullscreenMaterial() { + return this.fullscreenMaterial + } + setFullscreenMaterial(e) { + this.fullscreenMaterial = e + } + getDepthTexture() { + return null + } + setDepthTexture(e, t = r.BasicDepthPacking) {} + render(e, t, i, r, n) { + throw new Error("Render method not implemented!") + } + setSize(e, t) {} + initialize(e, t, i) {} + dispose() { + for (const t of Object.keys(this)) { + const i = this[t]; + (i instanceof r.WebGLRenderTarget || i instanceof r.Material || i instanceof r.Texture || i instanceof e) && this[t].dispose() + } + } + }, + u = class extends l { + constructor() { + super("ClearMaskPass", null, null), this.needsSwap = !1 + } + render(e, t, i, r, n) { + const s = e.state.buffers.stencil; + s.setLocked(!1), s.setTest(!1) + } + }, + h = Number(r.REVISION.replace(/\D+/g, "")); + + function c(e) { + return h < 154 ? e.replace("colorspace_fragment", "encodings_fragment") : e + } + var f = "varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}", + d = class extends r.ShaderMaterial { + constructor() { + super({ + name: "CopyMaterial", + uniforms: { + inputBuffer: new r.Uniform(null), + opacity: new r.Uniform(1) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + fragmentShader: "#include \n#include \n#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;\n#else\nuniform lowp sampler2D inputBuffer;\n#endif\nuniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel;\n#include \n#include \n}", + vertexShader: f + }), this.fragmentShader = c(this.fragmentShader) + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + setInputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + getOpacity(e) { + return this.uniforms.opacity.value + } + setOpacity(e) { + this.uniforms.opacity.value = e + } + }, + p = class extends l { + constructor(e, t = !0) { + super("CopyPass"), this.fullscreenMaterial = new d, this.needsSwap = !1, this.renderTarget = e, void 0 === e && (this.renderTarget = new r.WebGLRenderTarget(1, 1, { + minFilter: r.LinearFilter, + magFilter: r.LinearFilter, + stencilBuffer: !1, + depthBuffer: !1 + }), this.renderTarget.texture.name = "CopyPass.Target"), this.autoResize = t + } + get resize() { + return this.autoResize + } + set resize(e) { + this.autoResize = e + } + get texture() { + return this.renderTarget.texture + } + getTexture() { + return this.renderTarget.texture + } + setAutoResizeEnabled(e) { + this.autoResize = e + } + render(e, t, i, r, n) { + this.fullscreenMaterial.inputBuffer = t.texture, e.setRenderTarget(this.renderToScreen ? null : this.renderTarget), e.render(this.scene, this.camera) + } + setSize(e, t) { + this.autoResize && this.renderTarget.setSize(e, t) + } + initialize(e, t, i) { + void 0 !== i && (this.renderTarget.texture.type = i, i !== r.UnsignedByteType ? this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1" : null !== e && e.outputColorSpace === r.SRGBColorSpace && (this.renderTarget.texture.colorSpace = r.SRGBColorSpace)) + } + }, + v = new r.Color, + m = class extends l { + constructor(e = !0, t = !0, i = !1) { + super("ClearPass", null, null), this.needsSwap = !1, this.color = e, this.depth = t, this.stencil = i, this.overrideClearColor = null, this.overrideClearAlpha = -1 + } + setClearFlags(e, t, i) { + this.color = e, this.depth = t, this.stencil = i + } + getOverrideClearColor() { + return this.overrideClearColor + } + setOverrideClearColor(e) { + this.overrideClearColor = e + } + getOverrideClearAlpha() { + return this.overrideClearAlpha + } + setOverrideClearAlpha(e) { + this.overrideClearAlpha = e + } + render(e, t, i, r, n) { + const s = this.overrideClearColor, + a = this.overrideClearAlpha, + o = e.getClearAlpha(), + l = null !== s, + u = a >= 0; + l ? (e.getClearColor(v), e.setClearColor(s, u ? a : o)) : u && e.setClearAlpha(a), e.setRenderTarget(this.renderToScreen ? null : t), e.clear(this.color, this.depth, this.stencil), l ? e.setClearColor(v, o) : u && e.setClearAlpha(o) + } + }, + g = class extends l { + constructor(e, t) { + super("MaskPass", e, t), this.needsSwap = !1, this.clearPass = new m(!1, !1, !0), this.inverse = !1 + } + set mainScene(e) { + this.scene = e + } + set mainCamera(e) { + this.camera = e + } + get inverted() { + return this.inverse + } + set inverted(e) { + this.inverse = e + } + get clear() { + return this.clearPass.enabled + } + set clear(e) { + this.clearPass.enabled = e + } + getClearPass() { + return this.clearPass + } + isInverted() { + return this.inverted + } + setInverted(e) { + this.inverted = e + } + render(e, t, i, r, n) { + const s = e.getContext(), + a = e.state.buffers, + o = this.scene, + l = this.camera, + u = this.clearPass, + h = this.inverted ? 0 : 1, + c = 1 - h; + a.color.setMask(!1), a.depth.setMask(!1), a.color.setLocked(!0), a.depth.setLocked(!0), a.stencil.setTest(!0), a.stencil.setOp(s.REPLACE, s.REPLACE, s.REPLACE), a.stencil.setFunc(s.ALWAYS, h, 4294967295), a.stencil.setClear(c), a.stencil.setLocked(!0), this.clearPass.enabled && (this.renderToScreen ? u.render(e, null) : (u.render(e, t), u.render(e, i))), this.renderToScreen ? (e.setRenderTarget(null), e.render(o, l)) : (e.setRenderTarget(t), e.render(o, l), e.setRenderTarget(i), e.render(o, l)), a.color.setLocked(!1), a.depth.setLocked(!1), a.stencil.setLocked(!1), a.stencil.setFunc(s.EQUAL, 1, 4294967295), a.stencil.setOp(s.KEEP, s.KEEP, s.KEEP), a.stencil.setLocked(!0) + } + }, + S = class { + constructor(e = null, { + depthBuffer: t = !0, + stencilBuffer: i = !1, + multisampling: r = 0, + frameBufferType: n + } = {}) { + this.renderer = null, this.inputBuffer = this.createBuffer(t, i, n, r), this.outputBuffer = this.inputBuffer.clone(), this.copyPass = new p, this.depthTexture = null, this.passes = [], this.timer = new class { + constructor() { + this.startTime = performance.now(), this.previousTime = 0, this.currentTime = 0, this._delta = 0, this._elapsed = 0, this._fixedDelta = 1e3 / 60, this.timescale = 1, this.useFixedDelta = !1, this._autoReset = !1 + } + get autoReset() { + return this._autoReset + } + set autoReset(e) { + "undefined" != typeof document && void 0 !== document.hidden && (e ? document.addEventListener("visibilitychange", this) : document.removeEventListener("visibilitychange", this), this._autoReset = e) + } + get delta() { + return this._delta * s + } + get fixedDelta() { + return this._fixedDelta * s + } + set fixedDelta(e) { + this._fixedDelta = 1e3 * e + } + get elapsed() { + return this._elapsed * s + } + update(e) { + this.useFixedDelta ? this._delta = this.fixedDelta : (this.previousTime = this.currentTime, this.currentTime = (void 0 !== e ? e : performance.now()) - this.startTime, this._delta = this.currentTime - this.previousTime), this._delta *= this.timescale, this._elapsed += this._delta + } + reset() { + this._delta = 0, this._elapsed = 0, this.currentTime = performance.now() - this.startTime + } + getDelta() { + return this.delta + } + getElapsed() { + return this.elapsed + } + handleEvent(e) { + document.hidden || (this.currentTime = performance.now() - this.startTime) + } + dispose() { + this.autoReset = !1 + } + }, this.autoRenderToScreen = !0, this.setRenderer(e) + } + get multisampling() { + return this.inputBuffer.samples || 0 + } + set multisampling(e) { + const t = this.inputBuffer, + i = this.multisampling; + i > 0 && e > 0 ? (this.inputBuffer.samples = e, this.outputBuffer.samples = e, this.inputBuffer.dispose(), this.outputBuffer.dispose()) : i !== e && (this.inputBuffer.dispose(), this.outputBuffer.dispose(), this.inputBuffer = this.createBuffer(t.depthBuffer, t.stencilBuffer, t.texture.type, e), this.inputBuffer.depthTexture = this.depthTexture, this.outputBuffer = this.inputBuffer.clone()) + } + getTimer() { + return this.timer + } + getRenderer() { + return this.renderer + } + setRenderer(e) { + if (this.renderer = e, null !== e) { + const t = e.getSize(new r.Vector2), + i = e.getContext().getContextAttributes().alpha, + n = this.inputBuffer.texture.type; + n === r.UnsignedByteType && e.outputColorSpace === r.SRGBColorSpace && (this.inputBuffer.texture.colorSpace = r.SRGBColorSpace, this.outputBuffer.texture.colorSpace = r.SRGBColorSpace, this.inputBuffer.dispose(), this.outputBuffer.dispose()), e.autoClear = !1, this.setSize(t.width, t.height); + for (const t of this.passes) t.initialize(e, i, n) + } + } + replaceRenderer(e, t = !0) { + const i = this.renderer, + r = i.domElement.parentNode; + return this.setRenderer(e), t && null !== r && (r.removeChild(i.domElement), r.appendChild(e.domElement)), i + } + createDepthTexture() { + const e = this.depthTexture = new r.DepthTexture; + return this.inputBuffer.depthTexture = e, this.inputBuffer.dispose(), this.inputBuffer.stencilBuffer ? (e.format = r.DepthStencilFormat, e.type = r.UnsignedInt248Type) : e.type = r.UnsignedIntType, e + } + deleteDepthTexture() { + if (null !== this.depthTexture) { + this.depthTexture.dispose(), this.depthTexture = null, this.inputBuffer.depthTexture = null, this.inputBuffer.dispose(); + for (const e of this.passes) e.setDepthTexture(null) + } + } + createBuffer(e, t, i, n) { + const s = this.renderer, + a = null === s ? new r.Vector2 : s.getDrawingBufferSize(new r.Vector2), + o = { + minFilter: r.LinearFilter, + magFilter: r.LinearFilter, + stencilBuffer: t, + depthBuffer: e, + type: i + }, + l = new r.WebGLRenderTarget(a.width, a.height, o); + return n > 0 && (l.ignoreDepthForMultisampleCopy = !1, l.samples = n), i === r.UnsignedByteType && null !== s && s.outputColorSpace === r.SRGBColorSpace && (l.texture.colorSpace = r.SRGBColorSpace), l.texture.name = "EffectComposer.Buffer", l.texture.generateMipmaps = !1, l + } + setMainScene(e) { + for (const t of this.passes) t.mainScene = e + } + setMainCamera(e) { + for (const t of this.passes) t.mainCamera = e + } + addPass(e, t) { + const i = this.passes, + n = this.renderer, + s = n.getDrawingBufferSize(new r.Vector2), + a = n.getContext().getContextAttributes().alpha, + o = this.inputBuffer.texture.type; + if (e.setRenderer(n), e.setSize(s.width, s.height), e.initialize(n, a, o), this.autoRenderToScreen && (i.length > 0 && (i[i.length - 1].renderToScreen = !1), e.renderToScreen && (this.autoRenderToScreen = !1)), void 0 !== t ? i.splice(t, 0, e) : i.push(e), this.autoRenderToScreen && (i[i.length - 1].renderToScreen = !0), e.needsDepthTexture || null !== this.depthTexture) + if (null === this.depthTexture) { + const t = this.createDepthTexture(); + for (e of i) e.setDepthTexture(t) + } else e.setDepthTexture(this.depthTexture) + } + removePass(e) { + const t = this.passes, + i = t.indexOf(e); + if (-1 !== i && t.splice(i, 1).length > 0) { + if (null !== this.depthTexture) { + const i = (e, t) => e || t.needsDepthTexture; + t.reduce(i, !1) || (e.getDepthTexture() === this.depthTexture && e.setDepthTexture(null), this.deleteDepthTexture()) + } + this.autoRenderToScreen && i === t.length && (e.renderToScreen = !1, t.length > 0 && (t[t.length - 1].renderToScreen = !0)) + } + } + removeAllPasses() { + const e = this.passes; + this.deleteDepthTexture(), e.length > 0 && (this.autoRenderToScreen && (e[e.length - 1].renderToScreen = !1), this.passes = []) + } + render(e) { + const t = this.renderer, + i = this.copyPass; + let r, n, s, a = this.inputBuffer, + o = this.outputBuffer, + l = !1; + void 0 === e && (this.timer.update(), e = this.timer.getDelta()); + for (const h of this.passes) h.enabled && (h.render(t, a, o, e, l), h.needsSwap && (l && (i.renderToScreen = h.renderToScreen, r = t.getContext(), n = t.state.buffers.stencil, n.setFunc(r.NOTEQUAL, 1, 4294967295), i.render(t, a, o, e, l), n.setFunc(r.EQUAL, 1, 4294967295)), s = a, a = o, o = s), h instanceof g ? l = !0 : h instanceof u && (l = !1)) + } + setSize(e, t, i) { + const n = this.renderer, + s = n.getSize(new r.Vector2); + void 0 !== e && void 0 !== t || (e = s.width, t = s.height), s.width === e && s.height === t || n.setSize(e, t, i); + const a = n.getDrawingBufferSize(new r.Vector2); + this.inputBuffer.setSize(a.width, a.height), this.outputBuffer.setSize(a.width, a.height); + for (const e of this.passes) e.setSize(a.width, a.height) + } + reset() { + this.dispose(), this.autoRenderToScreen = !0 + } + dispose() { + for (const e of this.passes) e.dispose(); + this.passes = [], null !== this.inputBuffer && this.inputBuffer.dispose(), null !== this.outputBuffer && this.outputBuffer.dispose(), this.deleteDepthTexture(), this.copyPass.dispose(), this.timer.dispose() + } + }, + x = { + FRAGMENT_HEAD: "FRAGMENT_HEAD", + FRAGMENT_MAIN_UV: "FRAGMENT_MAIN_UV", + FRAGMENT_MAIN_IMAGE: "FRAGMENT_MAIN_IMAGE", + VERTEX_HEAD: "VERTEX_HEAD", + VERTEX_MAIN_SUPPORT: "VERTEX_MAIN_SUPPORT" + }, + y = !1, + T = class { + constructor(e = null) { + this.originalMaterials = new Map, this.material = null, this.materials = null, this.materialsBackSide = null, this.materialsDoubleSide = null, this.materialsFlatShaded = null, this.materialsFlatShadedBackSide = null, this.materialsFlatShadedDoubleSide = null, this.setMaterial(e), this.meshCount = 0, this.replaceMaterial = e => { + if (e.isMesh) { + let t; + if (e.material.flatShading) switch (e.material.side) { + case r.DoubleSide: + t = this.materialsFlatShadedDoubleSide; + break; + case r.BackSide: + t = this.materialsFlatShadedBackSide; + break; + default: + t = this.materialsFlatShaded + } else switch (e.material.side) { + case r.DoubleSide: + t = this.materialsDoubleSide; + break; + case r.BackSide: + t = this.materialsBackSide; + break; + default: + t = this.materials + } + this.originalMaterials.set(e, e.material), e.isSkinnedMesh ? e.material = t[2] : e.isInstancedMesh ? e.material = t[1] : e.material = t[0], ++this.meshCount + } + } + } + cloneMaterial(e) { + if (!(e instanceof r.ShaderMaterial)) return e.clone(); + const t = e.uniforms, + i = new Map; + for (const e in t) { + const r = t[e].value; + r.isRenderTargetTexture && (t[e].value = null, i.set(e, r)) + } + const n = e.clone(); + for (const e of i) t[e[0]].value = e[1], n.uniforms[e[0]].value = e[1]; + return n + } + setMaterial(e) { + if (this.disposeMaterials(), this.material = e, null !== e) { + const t = this.materials = [this.cloneMaterial(e), this.cloneMaterial(e), this.cloneMaterial(e)]; + for (const i of t) i.uniforms = Object.assign({}, e.uniforms), i.side = r.FrontSide; + t[2].skinning = !0, this.materialsBackSide = t.map((t => { + const i = this.cloneMaterial(t); + return i.uniforms = Object.assign({}, e.uniforms), i.side = r.BackSide, i + })), this.materialsDoubleSide = t.map((t => { + const i = this.cloneMaterial(t); + return i.uniforms = Object.assign({}, e.uniforms), i.side = r.DoubleSide, i + })), this.materialsFlatShaded = t.map((t => { + const i = this.cloneMaterial(t); + return i.uniforms = Object.assign({}, e.uniforms), i.flatShading = !0, i + })), this.materialsFlatShadedBackSide = t.map((t => { + const i = this.cloneMaterial(t); + return i.uniforms = Object.assign({}, e.uniforms), i.flatShading = !0, i.side = r.BackSide, i + })), this.materialsFlatShadedDoubleSide = t.map((t => { + const i = this.cloneMaterial(t); + return i.uniforms = Object.assign({}, e.uniforms), i.flatShading = !0, i.side = r.DoubleSide, i + })) + } + } + render(e, t, i) { + const r = e.shadowMap.enabled; + if (e.shadowMap.enabled = !1, y) { + const r = this.originalMaterials; + this.meshCount = 0, t.traverse(this.replaceMaterial), e.render(t, i); + for (const e of r) e[0].material = e[1]; + this.meshCount !== r.size && r.clear() + } else { + const r = t.overrideMaterial; + t.overrideMaterial = this.material, e.render(t, i), t.overrideMaterial = r + } + e.shadowMap.enabled = r + } + disposeMaterials() { + if (null !== this.material) { + const e = this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide); + for (const t of e) t.dispose() + } + } + dispose() { + this.originalMaterials.clear(), this.disposeMaterials() + } + static get workaroundEnabled() { + return y + } + static set workaroundEnabled(e) { + y = e + } + }, + U = -1, + w = class extends r.EventDispatcher { + constructor(e, t = -1, i = -1, n = 1) { + super(), this.resizable = e, this.baseSize = new r.Vector2(1, 1), this.preferredSize = new r.Vector2(t, i), this.target = this.preferredSize, this.s = n, this.effectiveSize = new r.Vector2, this.addEventListener("change", (() => this.updateEffectiveSize())), this.updateEffectiveSize() + } + updateEffectiveSize() { + const e = this.baseSize, + t = this.preferredSize, + i = this.effectiveSize, + r = this.scale; + t.width !== U ? i.width = t.width : t.height !== U ? i.width = Math.round(t.height * (e.width / Math.max(e.height, 1))) : i.width = Math.round(e.width * r), t.height !== U ? i.height = t.height : t.width !== U ? i.height = Math.round(t.width / Math.max(e.width / Math.max(e.height, 1), 1)) : i.height = Math.round(e.height * r) + } + get width() { + return this.effectiveSize.width + } + set width(e) { + this.preferredWidth = e + } + get height() { + return this.effectiveSize.height + } + set height(e) { + this.preferredHeight = e + } + getWidth() { + return this.width + } + getHeight() { + return this.height + } + get scale() { + return this.s + } + set scale(e) { + this.s !== e && (this.s = e, this.preferredSize.setScalar(U), this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + getScale() { + return this.scale + } + setScale(e) { + this.scale = e + } + get baseWidth() { + return this.baseSize.width + } + set baseWidth(e) { + this.baseSize.width !== e && (this.baseSize.width = e, this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + getBaseWidth() { + return this.baseWidth + } + setBaseWidth(e) { + this.baseWidth = e + } + get baseHeight() { + return this.baseSize.height + } + set baseHeight(e) { + this.baseSize.height !== e && (this.baseSize.height = e, this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + getBaseHeight() { + return this.baseHeight + } + setBaseHeight(e) { + this.baseHeight = e + } + setBaseSize(e, t) { + this.baseSize.width === e && this.baseSize.height === t || (this.baseSize.set(e, t), this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + get preferredWidth() { + return this.preferredSize.width + } + set preferredWidth(e) { + this.preferredSize.width !== e && (this.preferredSize.width = e, this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + getPreferredWidth() { + return this.preferredWidth + } + setPreferredWidth(e) { + this.preferredWidth = e + } + get preferredHeight() { + return this.preferredSize.height + } + set preferredHeight(e) { + this.preferredSize.height !== e && (this.preferredSize.height = e, this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + getPreferredHeight() { + return this.preferredHeight + } + setPreferredHeight(e) { + this.preferredHeight = e + } + setPreferredSize(e, t) { + this.preferredSize.width === e && this.preferredSize.height === t || (this.preferredSize.set(e, t), this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height)) + } + copy(e) { + this.s = e.scale, this.baseSize.set(e.baseWidth, e.baseHeight), this.preferredSize.set(e.preferredWidth, e.preferredHeight), this.dispatchEvent({ + type: "change" + }), this.resizable.setSize(this.baseSize.width, this.baseSize.height) + } + static get AUTO_SIZE() { + return U + } + }, + E = (Set, { + SKIP: 9, + SET: 30, + ADD: 0, + ALPHA: 1, + AVERAGE: 2, + COLOR: 3, + COLOR_BURN: 4, + COLOR_DODGE: 5, + DARKEN: 6, + DIFFERENCE: 7, + DIVIDE: 8, + DST: 9, + EXCLUSION: 10, + HARD_LIGHT: 11, + HARD_MIX: 12, + HUE: 13, + INVERT: 14, + INVERT_RGB: 15, + LIGHTEN: 16, + LINEAR_BURN: 17, + LINEAR_DODGE: 18, + LINEAR_LIGHT: 19, + LUMINOSITY: 20, + MULTIPLY: 21, + NEGATION: 22, + NORMAL: 23, + OVERLAY: 24, + PIN_LIGHT: 25, + REFLECT: 26, + SATURATION: 27, + SCREEN: 28, + SOFT_LIGHT: 29, + SRC: 30, + SUBTRACT: 31, + VIVID_LIGHT: 32 + }), + R = new Map([ + [E.ADD, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x+y,opacity);}"], + [E.ALPHA, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y,min(y.a,opacity));}"], + [E.AVERAGE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,(x+y)*0.5,opacity);}"], + [E.COLOR, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(yHSL.rg,xHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}"], + [E.COLOR_BURN, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(step(0.0,y)*(1.0-min(vec4(1.0),(1.0-x)/y)),vec4(1.0),step(1.0,x));return mix(x,z,opacity);}"], + [E.COLOR_DODGE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=step(0.0,x)*mix(min(vec4(1.0),x/max(1.0-y,1e-9)),vec4(1.0),step(1.0,y));return mix(x,z,opacity);}"], + [E.DARKEN, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,min(x,y),opacity);}"], + [E.DIFFERENCE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,abs(x-y),opacity);}"], + [E.DIVIDE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x/max(y,1e-12),opacity);}"], + [E.DST, null], + [E.EXCLUSION, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,(x+y-2.0*x*y),opacity);}"], + [E.HARD_LIGHT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 a=min(x,1.0),b=min(y,1.0);vec4 z=mix(2.0*a*b,1.0-2.0*(1.0-a)*(1.0-b),step(0.5,y));return mix(x,z,opacity);}"], + [E.HARD_MIX, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,step(1.0,x+y),opacity);}"], + [E.HUE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(yHSL.r,xHSL.gb));return vec4(mix(x.rgb,z,opacity),y.a);}"], + [E.INVERT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,1.0-y,opacity);}"], + [E.INVERT_RGB, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y*(1.0-x),opacity);}"], + [E.LIGHTEN, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,max(x,y),opacity);}"], + [E.LINEAR_BURN, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,clamp(y+x-1.0,0.0,1.0),opacity);}"], + [E.LINEAR_DODGE, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,min(x+y,1.0),opacity);}"], + [E.LINEAR_LIGHT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,clamp(2.0*y+x-1.0,0.0,1.0),opacity);}"], + [E.LUMINOSITY, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(xHSL.rg,yHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}"], + [E.MULTIPLY, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x*y,opacity);}"], + [E.NEGATION, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,1.0-abs(1.0-x-y),opacity);}"], + [E.NORMAL, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y,opacity);}"], + [E.OVERLAY, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(2.0*y*x,1.0-2.0*(1.0-y)*(1.0-x),step(0.5,x));return mix(x,z,opacity);}"], + [E.PIN_LIGHT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 y2=2.0*y;vec4 z=mix(mix(y2,x,step(0.5*x,y)),max(vec4(0.0),y2-1.0),step(x,(y2-1.0)));return mix(x,z,opacity);}"], + [E.REFLECT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(min(x*x/max(1.0-y,1e-12),1.0),y,step(1.0,y));return mix(x,z,opacity);}"], + [E.SATURATION, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(xHSL.r,yHSL.g,xHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}"], + [E.SCREEN, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x+y-min(x*y,1.0),opacity);}"], + [E.SOFT_LIGHT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 y2=2.0*y;vec4 w=step(0.5,y);vec4 z=mix(x-(1.0-y2)*x*(1.0-x),mix(x+(y2-1.0)*(sqrt(x)-x),x+(y2-1.0)*x*((16.0*x-12.0)*x+3.0),w*(1.0-step(0.25,x))),w);return mix(x,z,opacity);}"], + [E.SRC, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y;}"], + [E.SUBTRACT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,max(x+y-1.0,0.0),opacity);}"], + [E.VIVID_LIGHT, "vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(max(1.0-min((1.0-x)/(2.0*y),1.0),0.0),min(x/(2.0*(1.0-y)),1.0),step(0.5,y));return mix(x,z,opacity);}"] + ]), + M = class extends r.EventDispatcher { + constructor(e, t = 1) { + super(), this._blendFunction = e, this.opacity = new r.Uniform(t) + } + getOpacity() { + return this.opacity.value + } + setOpacity(e) { + this.opacity.value = e + } + get blendFunction() { + return this._blendFunction + } + set blendFunction(e) { + this._blendFunction = e, this.dispatchEvent({ + type: "change" + }) + } + getBlendFunction() { + return this.blendFunction + } + setBlendFunction(e) { + this.blendFunction = e + } + getShaderCode() { + return R.get(this.blendFunction) + } + }, + A = [new Float32Array([0, 0]), new Float32Array([0, 1, 1]), new Float32Array([0, 1, 1, 2]), new Float32Array([0, 1, 2, 2, 3]), new Float32Array([0, 1, 2, 3, 4, 4, 5]), new Float32Array([0, 1, 2, 3, 4, 5, 7, 8, 9, 10])], + B = class extends r.ShaderMaterial { + constructor(e = new r.Vector4) { + super({ + name: "KawaseBlurMaterial", + uniforms: { + inputBuffer: new r.Uniform(null), + texelSize: new r.Uniform(new r.Vector4), + scale: new r.Uniform(1), + kernel: new r.Uniform(0) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + fragmentShader: "#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;\n#else\nuniform lowp sampler2D inputBuffer;\n#endif\nvarying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25;\n#include \n}", + vertexShader: "uniform vec4 texelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize.xy*vec2(kernel)+texelSize.zw)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}" + }), this.fragmentShader = c(this.fragmentShader), this.setTexelSize(e.x, e.y), this.kernelSize = 2 + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + setInputBuffer(e) { + this.inputBuffer = e + } + get kernelSequence() { + return A[this.kernelSize] + } + get scale() { + return this.uniforms.scale.value + } + set scale(e) { + this.uniforms.scale.value = e + } + getScale() { + return this.uniforms.scale.value + } + setScale(e) { + this.uniforms.scale.value = e + } + getKernel() { + return null + } + get kernel() { + return this.uniforms.kernel.value + } + set kernel(e) { + this.uniforms.kernel.value = e + } + setKernel(e) { + this.kernel = e + } + setTexelSize(e, t) { + this.uniforms.texelSize.value.set(e, t, .5 * e, .5 * t) + } + setSize(e, t) { + const i = 1 / e, + r = 1 / t; + this.uniforms.texelSize.value.set(i, r, .5 * i, .5 * r) + } + }, + D = class extends l { + constructor({ + kernelSize: e = 2, + resolutionScale: t = .5, + width: i = w.AUTO_SIZE, + height: n = w.AUTO_SIZE, + resolutionX: s = i, + resolutionY: a = n + } = {}) { + super("KawaseBlurPass"), this.renderTargetA = new r.WebGLRenderTarget(1, 1, { + depthBuffer: !1 + }), this.renderTargetA.texture.name = "Blur.Target.A", this.renderTargetB = this.renderTargetA.clone(), this.renderTargetB.texture.name = "Blur.Target.B"; + const o = this.resolution = new w(this, s, a, t); + o.addEventListener("change", (e => this.setSize(o.baseWidth, o.baseHeight))), this._blurMaterial = new B, this._blurMaterial.kernelSize = e, this.copyMaterial = new d + } + getResolution() { + return this.resolution + } + get blurMaterial() { + return this._blurMaterial + } + set blurMaterial(e) { + this._blurMaterial = e + } + get dithering() { + return this.copyMaterial.dithering + } + set dithering(e) { + this.copyMaterial.dithering = e + } + get kernelSize() { + return this.blurMaterial.kernelSize + } + set kernelSize(e) { + this.blurMaterial.kernelSize = e + } + get width() { + return this.resolution.width + } + set width(e) { + this.resolution.preferredWidth = e + } + get height() { + return this.resolution.height + } + set height(e) { + this.resolution.preferredHeight = e + } + get scale() { + return this.blurMaterial.scale + } + set scale(e) { + this.blurMaterial.scale = e + } + getScale() { + return this.blurMaterial.scale + } + setScale(e) { + this.blurMaterial.scale = e + } + getKernelSize() { + return this.kernelSize + } + setKernelSize(e) { + this.kernelSize = e + } + getResolutionScale() { + return this.resolution.scale + } + setResolutionScale(e) { + this.resolution.scale = e + } + render(e, t, i, r, n) { + const s = this.scene, + a = this.camera, + o = this.renderTargetA, + l = this.renderTargetB, + u = this.blurMaterial, + h = u.kernelSequence; + let c = t; + this.fullscreenMaterial = u; + for (let t = 0, i = h.length; t < i; ++t) { + const i = 0 == (1 & t) ? o : l; + u.kernel = h[t], u.inputBuffer = c.texture, e.setRenderTarget(i), e.render(s, a), c = i + } + this.fullscreenMaterial = this.copyMaterial, this.copyMaterial.inputBuffer = c.texture, e.setRenderTarget(this.renderToScreen ? null : i), e.render(s, a) + } + setSize(e, t) { + const i = this.resolution; + i.setBaseSize(e, t); + const r = i.width, + n = i.height; + this.renderTargetA.setSize(r, n), this.renderTargetB.setSize(r, n), this.blurMaterial.setSize(e, t) + } + initialize(e, t, i) { + void 0 !== i && (this.renderTargetA.texture.type = i, this.renderTargetB.texture.type = i, i !== r.UnsignedByteType ? (this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1", this.copyMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1") : null !== e && e.outputColorSpace === r.SRGBColorSpace && (this.renderTargetA.texture.colorSpace = r.SRGBColorSpace, this.renderTargetB.texture.colorSpace = r.SRGBColorSpace)) + } + static get AUTO_SIZE() { + return w.AUTO_SIZE + } + }, + b = class extends r.ShaderMaterial { + constructor(e = !1, t = null) { + super({ + name: "LuminanceMaterial", + defines: { + THREE_REVISION: r.REVISION.replace(/\D+/g, "") + }, + uniforms: { + inputBuffer: new r.Uniform(null), + threshold: new r.Uniform(0), + smoothing: new r.Uniform(1), + range: new r.Uniform(null) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + fragmentShader: "#include \n#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;\n#else\nuniform lowp sampler2D inputBuffer;\n#endif\n#ifdef RANGE\nuniform vec2 range;\n#elif defined(THRESHOLD)\nuniform float threshold;uniform float smoothing;\n#endif\nvarying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb);\n#ifdef RANGE\nfloat low=step(range.x,l);float high=step(l,range.y);l*=low*high;\n#elif defined(THRESHOLD)\nl=smoothstep(threshold,threshold+smoothing,l)*l;\n#endif\n#ifdef COLOR\ngl_FragColor=vec4(texel.rgb*clamp(l,0.0,1.0),l);\n#else\ngl_FragColor=vec4(l);\n#endif\n}", + vertexShader: f + }), this.colorOutput = e, this.luminanceRange = t + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + setInputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + get threshold() { + return this.uniforms.threshold.value + } + set threshold(e) { + this.smoothing > 0 || e > 0 ? this.defines.THRESHOLD = "1" : delete this.defines.THRESHOLD, this.uniforms.threshold.value = e + } + getThreshold() { + return this.threshold + } + setThreshold(e) { + this.threshold = e + } + get smoothing() { + return this.uniforms.smoothing.value + } + set smoothing(e) { + this.threshold > 0 || e > 0 ? this.defines.THRESHOLD = "1" : delete this.defines.THRESHOLD, this.uniforms.smoothing.value = e + } + getSmoothingFactor() { + return this.smoothing + } + setSmoothingFactor(e) { + this.smoothing = e + } + get useThreshold() { + return this.threshold > 0 || this.smoothing > 0 + } + set useThreshold(e) {} + get colorOutput() { + return void 0 !== this.defines.COLOR + } + set colorOutput(e) { + e ? this.defines.COLOR = "1" : delete this.defines.COLOR, this.needsUpdate = !0 + } + isColorOutputEnabled(e) { + return this.colorOutput + } + setColorOutputEnabled(e) { + this.colorOutput = e + } + get useRange() { + return null !== this.luminanceRange + } + set useRange(e) { + this.luminanceRange = null + } + get luminanceRange() { + return this.uniforms.range.value + } + set luminanceRange(e) { + null !== e ? this.defines.RANGE = "1" : delete this.defines.RANGE, this.uniforms.range.value = e, this.needsUpdate = !0 + } + getLuminanceRange() { + return this.luminanceRange + } + setLuminanceRange(e) { + this.luminanceRange = e + } + }, + C = class extends l { + constructor({ + renderTarget: e, + luminanceRange: t, + colorOutput: i, + resolutionScale: n = 1, + width: s = w.AUTO_SIZE, + height: a = w.AUTO_SIZE, + resolutionX: o = s, + resolutionY: l = a + } = {}) { + super("LuminancePass"), this.fullscreenMaterial = new b(i, t), this.needsSwap = !1, this.renderTarget = e, void 0 === this.renderTarget && (this.renderTarget = new r.WebGLRenderTarget(1, 1, { + depthBuffer: !1 + }), this.renderTarget.texture.name = "LuminancePass.Target"); + const u = this.resolution = new w(this, o, l, n); + u.addEventListener("change", (e => this.setSize(u.baseWidth, u.baseHeight))) + } + get texture() { + return this.renderTarget.texture + } + getTexture() { + return this.renderTarget.texture + } + getResolution() { + return this.resolution + } + render(e, t, i, r, n) { + this.fullscreenMaterial.inputBuffer = t.texture, e.setRenderTarget(this.renderToScreen ? null : this.renderTarget), e.render(this.scene, this.camera) + } + setSize(e, t) { + const i = this.resolution; + i.setBaseSize(e, t), this.renderTarget.setSize(i.width, i.height) + } + initialize(e, t, i) { + void 0 !== i && i !== r.UnsignedByteType && (this.renderTarget.texture.type = i, this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1") + } + }, + _ = class extends r.ShaderMaterial { + constructor() { + super({ + name: "DownsamplingMaterial", + uniforms: { + inputBuffer: new r.Uniform(null), + texelSize: new r.Uniform(new r.Vector2) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + fragmentShader: "#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;\n#else\nuniform lowp sampler2D inputBuffer;\n#endif\n#define WEIGHT_INNER 0.125\n#define WEIGHT_OUTER 0.0555555\nvarying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;float clampToBorder(const in vec2 uv){return float(uv.s>=0.0&&uv.s<=1.0&&uv.t>=0.0&&uv.t<=1.0);}void main(){vec4 c=vec4(0.0);vec4 w=WEIGHT_INNER*vec4(clampToBorder(vUv00),clampToBorder(vUv01),clampToBorder(vUv02),clampToBorder(vUv03));c+=w.x*texture2D(inputBuffer,vUv00);c+=w.y*texture2D(inputBuffer,vUv01);c+=w.z*texture2D(inputBuffer,vUv02);c+=w.w*texture2D(inputBuffer,vUv03);w=WEIGHT_OUTER*vec4(clampToBorder(vUv04),clampToBorder(vUv05),clampToBorder(vUv06),clampToBorder(vUv07));c+=w.x*texture2D(inputBuffer,vUv04);c+=w.y*texture2D(inputBuffer,vUv05);c+=w.z*texture2D(inputBuffer,vUv06);c+=w.w*texture2D(inputBuffer,vUv07);w=WEIGHT_OUTER*vec4(clampToBorder(vUv08),clampToBorder(vUv09),clampToBorder(vUv10),clampToBorder(vUv11));c+=w.x*texture2D(inputBuffer,vUv08);c+=w.y*texture2D(inputBuffer,vUv09);c+=w.z*texture2D(inputBuffer,vUv10);c+=w.w*texture2D(inputBuffer,vUv11);c+=WEIGHT_OUTER*texture2D(inputBuffer,vUv);gl_FragColor=c;\n#include \n}", + vertexShader: "uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;void main(){vUv=position.xy*0.5+0.5;vUv00=vUv+texelSize*vec2(-1.0,1.0);vUv01=vUv+texelSize*vec2(1.0,1.0);vUv02=vUv+texelSize*vec2(-1.0,-1.0);vUv03=vUv+texelSize*vec2(1.0,-1.0);vUv04=vUv+texelSize*vec2(-2.0,2.0);vUv05=vUv+texelSize*vec2(0.0,2.0);vUv06=vUv+texelSize*vec2(2.0,2.0);vUv07=vUv+texelSize*vec2(-2.0,0.0);vUv08=vUv+texelSize*vec2(2.0,0.0);vUv09=vUv+texelSize*vec2(-2.0,-2.0);vUv10=vUv+texelSize*vec2(0.0,-2.0);vUv11=vUv+texelSize*vec2(2.0,-2.0);gl_Position=vec4(position.xy,1.0,1.0);}" + }), this.fragmentShader = c(this.fragmentShader) + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + setSize(e, t) { + this.uniforms.texelSize.value.set(1 / e, 1 / t) + } + }, + P = class extends r.ShaderMaterial { + constructor() { + super({ + name: "UpsamplingMaterial", + uniforms: { + inputBuffer: new r.Uniform(null), + supportBuffer: new r.Uniform(null), + texelSize: new r.Uniform(new r.Vector2), + radius: new r.Uniform(.85) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + fragmentShader: "#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;uniform mediump sampler2D supportBuffer;\n#else\nuniform lowp sampler2D inputBuffer;uniform lowp sampler2D supportBuffer;\n#endif\nuniform float radius;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vec4 c=vec4(0.0);c+=texture2D(inputBuffer,vUv0)*0.0625;c+=texture2D(inputBuffer,vUv1)*0.125;c+=texture2D(inputBuffer,vUv2)*0.0625;c+=texture2D(inputBuffer,vUv3)*0.125;c+=texture2D(inputBuffer,vUv)*0.25;c+=texture2D(inputBuffer,vUv4)*0.125;c+=texture2D(inputBuffer,vUv5)*0.0625;c+=texture2D(inputBuffer,vUv6)*0.125;c+=texture2D(inputBuffer,vUv7)*0.0625;vec4 baseColor=texture2D(supportBuffer,vUv);gl_FragColor=mix(baseColor,c,radius);\n#include \n}", + vertexShader: "uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,1.0);vUv1=vUv+texelSize*vec2(0.0,1.0);vUv2=vUv+texelSize*vec2(1.0,1.0);vUv3=vUv+texelSize*vec2(-1.0,0.0);vUv4=vUv+texelSize*vec2(1.0,0.0);vUv5=vUv+texelSize*vec2(-1.0,-1.0);vUv6=vUv+texelSize*vec2(0.0,-1.0);vUv7=vUv+texelSize*vec2(1.0,-1.0);gl_Position=vec4(position.xy,1.0,1.0);}" + }), this.fragmentShader = c(this.fragmentShader) + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + set supportBuffer(e) { + this.uniforms.supportBuffer.value = e + } + get radius() { + return this.uniforms.radius.value + } + set radius(e) { + this.uniforms.radius.value = e + } + setSize(e, t) { + this.uniforms.texelSize.value.set(1 / e, 1 / t) + } + }, + I = class extends l { + constructor() { + super("MipmapBlurPass"), this.needsSwap = !1, this.renderTarget = new r.WebGLRenderTarget(1, 1, { + depthBuffer: !1 + }), this.renderTarget.texture.name = "Upsampling.Mipmap0", this.downsamplingMipmaps = [], this.upsamplingMipmaps = [], this.downsamplingMaterial = new _, this.upsamplingMaterial = new P, this.resolution = new r.Vector2 + } + get texture() { + return this.renderTarget.texture + } + get levels() { + return this.downsamplingMipmaps.length + } + set levels(e) { + if (this.levels !== e) { + const t = this.renderTarget; + this.dispose(), this.downsamplingMipmaps = [], this.upsamplingMipmaps = []; + for (let i = 0; i < e; ++i) { + const e = t.clone(); + e.texture.name = "Downsampling.Mipmap" + i, this.downsamplingMipmaps.push(e) + } + this.upsamplingMipmaps.push(t); + for (let i = 1, r = e - 1; i < r; ++i) { + const e = t.clone(); + e.texture.name = "Upsampling.Mipmap" + i, this.upsamplingMipmaps.push(e) + } + this.setSize(this.resolution.x, this.resolution.y) + } + } + get radius() { + return this.upsamplingMaterial.radius + } + set radius(e) { + this.upsamplingMaterial.radius = e + } + render(e, t, i, r, n) { + const { + scene: s, + camera: a + } = this, { + downsamplingMaterial: o, + upsamplingMaterial: l + } = this, { + downsamplingMipmaps: u, + upsamplingMipmaps: h + } = this; + let c = t; + this.fullscreenMaterial = o; + for (let t = 0, i = u.length; t < i; ++t) { + const i = u[t]; + o.setSize(c.width, c.height), o.inputBuffer = c.texture, e.setRenderTarget(i), e.render(s, a), c = i + } + this.fullscreenMaterial = l; + for (let t = h.length - 1; t >= 0; --t) { + const i = h[t]; + l.setSize(c.width, c.height), l.inputBuffer = c.texture, l.supportBuffer = u[t].texture, e.setRenderTarget(i), e.render(s, a), c = i + } + } + setSize(e, t) { + const i = this.resolution; + i.set(e, t); + let r = i.width, + n = i.height; + for (let e = 0, t = this.downsamplingMipmaps.length; e < t; ++e) r = Math.round(.5 * r), n = Math.round(.5 * n), this.downsamplingMipmaps[e].setSize(r, n), e < this.upsamplingMipmaps.length && this.upsamplingMipmaps[e].setSize(r, n) + } + initialize(e, t, i) { + if (void 0 !== i) { + const t = this.downsamplingMipmaps.concat(this.upsamplingMipmaps); + for (const e of t) e.texture.type = i; + if (i !== r.UnsignedByteType) this.downsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1", this.upsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; + else if (null !== e && e.outputColorSpace === r.SRGBColorSpace) + for (const e of t) e.texture.colorSpace = r.SRGBColorSpace + } + } + dispose() { + super.dispose(); + for (const e of this.downsamplingMipmaps.concat(this.upsamplingMipmaps)) e.dispose() + } + }, + F = class extends r.EventDispatcher { + constructor(e, t, { + attributes: i = 0, + blendFunction: n = E.NORMAL, + defines: s = new Map, + uniforms: a = new Map, + extensions: o = null, + vertexShader: l = null + } = {}) { + super(), this.name = e, this.renderer = null, this.attributes = i, this.fragmentShader = t, this.vertexShader = l, this.defines = s, this.uniforms = a, this.extensions = o, this.blendMode = new M(n), this.blendMode.addEventListener("change", (e => this.setChanged())), this._inputColorSpace = r.LinearSRGBColorSpace, this._outputColorSpace = r.NoColorSpace + } + get inputColorSpace() { + return this._inputColorSpace + } + set inputColorSpace(e) { + this._inputColorSpace = e, this.setChanged() + } + get outputColorSpace() { + return this._outputColorSpace + } + set outputColorSpace(e) { + this._outputColorSpace = e, this.setChanged() + } + set mainScene(e) {} + set mainCamera(e) {} + getName() { + return this.name + } + setRenderer(e) { + this.renderer = e + } + getDefines() { + return this.defines + } + getUniforms() { + return this.uniforms + } + getExtensions() { + return this.extensions + } + getBlendMode() { + return this.blendMode + } + getAttributes() { + return this.attributes + } + setAttributes(e) { + this.attributes = e, this.setChanged() + } + getFragmentShader() { + return this.fragmentShader + } + setFragmentShader(e) { + this.fragmentShader = e, this.setChanged() + } + getVertexShader() { + return this.vertexShader + } + setVertexShader(e) { + this.vertexShader = e, this.setChanged() + } + setChanged() { + this.dispatchEvent({ + type: "change" + }) + } + setDepthTexture(e, t = r.BasicDepthPacking) {} + update(e, t, i) {} + setSize(e, t) {} + initialize(e, t, i) {} + dispose() { + for (const e of Object.keys(this)) { + const t = this[e]; + (t instanceof r.WebGLRenderTarget || t instanceof r.Material || t instanceof r.Texture || t instanceof l) && this[e].dispose() + } + } + }, + L = class extends F { + constructor({ + blendFunction: e = E.SCREEN, + luminanceThreshold: t = .9, + luminanceSmoothing: i = .025, + mipmapBlur: n = !1, + intensity: s = 1, + radius: a = .85, + levels: o = 8, + kernelSize: l = 3, + resolutionScale: u = .5, + width: h = w.AUTO_SIZE, + height: c = w.AUTO_SIZE, + resolutionX: f = h, + resolutionY: d = c + } = {}) { + super("BloomEffect", "#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D map;\n#else\nuniform lowp sampler2D map;\n#endif\nuniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 texel=texture2D(map,uv);outputColor=vec4(texel.rgb*intensity,texel.a);}", { + blendFunction: e, + uniforms: new Map([ + ["map", new r.Uniform(null)], + ["intensity", new r.Uniform(s)] + ]) + }), this.renderTarget = new r.WebGLRenderTarget(1, 1, { + depthBuffer: !1 + }), this.renderTarget.texture.name = "Bloom.Target", this.blurPass = new D({ + kernelSize: l + }), this.luminancePass = new C({ + colorOutput: !0 + }), this.luminanceMaterial.threshold = t, this.luminanceMaterial.smoothing = i, this.mipmapBlurPass = new I, this.mipmapBlurPass.enabled = n, this.mipmapBlurPass.radius = a, this.mipmapBlurPass.levels = o, this.uniforms.get("map").value = n ? this.mipmapBlurPass.texture : this.renderTarget.texture; + const p = this.resolution = new w(this, f, d, u); + p.addEventListener("change", (e => this.setSize(p.baseWidth, p.baseHeight))) + } + get texture() { + return this.mipmapBlurPass.enabled ? this.mipmapBlurPass.texture : this.renderTarget.texture + } + getTexture() { + return this.texture + } + getResolution() { + return this.resolution + } + getBlurPass() { + return this.blurPass + } + getLuminancePass() { + return this.luminancePass + } + get luminanceMaterial() { + return this.luminancePass.fullscreenMaterial + } + getLuminanceMaterial() { + return this.luminancePass.fullscreenMaterial + } + get width() { + return this.resolution.width + } + set width(e) { + this.resolution.preferredWidth = e + } + get height() { + return this.resolution.height + } + set height(e) { + this.resolution.preferredHeight = e + } + get dithering() { + return this.blurPass.dithering + } + set dithering(e) { + this.blurPass.dithering = e + } + get kernelSize() { + return this.blurPass.kernelSize + } + set kernelSize(e) { + this.blurPass.kernelSize = e + } + get distinction() { + return n.warn(this.name, "distinction was removed"), 1 + } + set distinction(e) { + n.warn(this.name, "distinction was removed") + } + get intensity() { + return this.uniforms.get("intensity").value + } + set intensity(e) { + this.uniforms.get("intensity").value = e + } + getIntensity() { + return this.intensity + } + setIntensity(e) { + this.intensity = e + } + getResolutionScale() { + return this.resolution.scale + } + setResolutionScale(e) { + this.resolution.scale = e + } + update(e, t, i) { + const r = this.renderTarget, + n = this.luminancePass; + n.enabled ? (n.render(e, t), this.mipmapBlurPass.enabled ? this.mipmapBlurPass.render(e, n.renderTarget) : this.blurPass.render(e, n.renderTarget, r)) : this.mipmapBlurPass.enabled ? this.mipmapBlurPass.render(e, t) : this.blurPass.render(e, t, r) + } + setSize(e, t) { + const i = this.resolution; + i.setBaseSize(e, t), this.renderTarget.setSize(i.width, i.height), this.blurPass.resolution.copy(i), this.luminancePass.setSize(e, t), this.mipmapBlurPass.setSize(e, t) + } + initialize(e, t, i) { + this.blurPass.initialize(e, t, i), this.luminancePass.initialize(e, t, i), this.mipmapBlurPass.initialize(e, t, i), void 0 !== i && (this.renderTarget.texture.type = i, null !== e && e.outputColorSpace === r.SRGBColorSpace && (this.renderTarget.texture.colorSpace = r.SRGBColorSpace)) + } + }; + + function z(e, t, i) { + return e * (t - i) - t + } + + function N(e, t, i) { + return Math.min(Math.max((e + t) / (t - i), 0), 1) + } + var H = class extends l { + constructor(e, t = "inputBuffer") { + super("ShaderPass"), this.fullscreenMaterial = e, this.input = t + } + setInput(e) { + this.input = e + } + render(e, t, i, r, n) { + const s = this.fullscreenMaterial.uniforms; + null !== t && void 0 !== s && void 0 !== s[this.input] && (s[this.input].value = t.texture), e.setRenderTarget(this.renderToScreen ? null : i), e.render(this.scene, this.camera) + } + initialize(e, t, i) { + void 0 !== i && i !== r.UnsignedByteType && (this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1") + } + }, + O = class extends F { + constructor({ + blendFunction: e = E.SRC + } = {}) { + super("FXAAEffect", "#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5))\n#define ONE_OVER_TWELVE 0.08333333333333333\nvarying vec2 vUvDown;varying vec2 vUvUp;varying vec2 vUvLeft;varying vec2 vUvRight;varying vec2 vUvDownLeft;varying vec2 vUvUpRight;varying vec2 vUvUpLeft;varying vec2 vUvDownRight;vec4 fxaa(const in vec4 inputColor,const in vec2 uv){float lumaCenter=luminance(inputColor.rgb);float lumaDown=luminance(texture2D(inputBuffer,vUvDown).rgb);float lumaUp=luminance(texture2D(inputBuffer,vUvUp).rgb);float lumaLeft=luminance(texture2D(inputBuffer,vUvLeft).rgb);float lumaRight=luminance(texture2D(inputBuffer,vUvRight).rgb);float lumaMin=min(lumaCenter,min(min(lumaDown,lumaUp),min(lumaLeft,lumaRight)));float lumaMax=max(lumaCenter,max(max(lumaDown,lumaUp),max(lumaLeft,lumaRight)));float lumaRange=lumaMax-lumaMin;if(lumaRange=edgeVertical);float stepLength=isHorizontal?texelSize.y:texelSize.x;float luma1=isHorizontal?lumaDown:lumaLeft;float luma2=isHorizontal?lumaUp:lumaRight;float gradient1=abs(luma1-lumaCenter);float gradient2=abs(luma2-lumaCenter);bool is1Steepest=gradient1>=gradient2;float gradientScaled=0.25*max(gradient1,gradient2);float lumaLocalAverage=0.0;if(is1Steepest){stepLength=-stepLength;lumaLocalAverage=0.5*(luma1+lumaCenter);}else{lumaLocalAverage=0.5*(luma2+lumaCenter);}vec2 currentUv=uv;if(isHorizontal){currentUv.y+=stepLength*0.5;}else{currentUv.x+=stepLength*0.5;}vec2 offset=isHorizontal?vec2(texelSize.x,0.0):vec2(0.0,texelSize.y);vec2 uv1=currentUv-offset*QUALITY(0);vec2 uv2=currentUv+offset*QUALITY(0);float lumaEnd1=luminance(texture2D(inputBuffer,uv1).rgb);float lumaEnd2=luminance(texture2D(inputBuffer,uv2).rgb);lumaEnd1-=lumaLocalAverage;lumaEnd2-=lumaLocalAverage;bool reached1=abs(lumaEnd1)>=gradientScaled;bool reached2=abs(lumaEnd2)>=gradientScaled;bool reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(1);}if(!reached2){uv2+=offset*QUALITY(1);}if(!reachedBoth){for(int i=2;i=gradientScaled;reached2=abs(lumaEnd2)>=gradientScaled;reachedBoth=reached1&&reached2;if(!reached1){uv1-=offset*QUALITY(i);}if(!reached2){uv2+=offset*QUALITY(i);}if(reachedBoth){break;}}}float distance1=isHorizontal?(uv.x-uv1.x):(uv.y-uv1.y);float distance2=isHorizontal?(uv2.x-uv.x):(uv2.y-uv.y);bool isDirection1=distance1\n#include \n#ifdef NORMAL_DEPTH\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nuniform highp sampler2D normalDepthBuffer;\n#else\nuniform mediump sampler2D normalDepthBuffer;\n#endif\nfloat readDepth(const in vec2 uv){return texture2D(normalDepthBuffer,uv).a;}\n#else\nuniform lowp sampler2D normalBuffer;\n#if DEPTH_PACKING == 3201\nuniform lowp sampler2D depthBuffer;\n#elif defined(GL_FRAGMENT_PRECISION_HIGH)\nuniform highp sampler2D depthBuffer;\n#else\nuniform mediump sampler2D depthBuffer;\n#endif\nfloat readDepth(const in vec2 uv){\n#if DEPTH_PACKING == 3201\nreturn unpackRGBAToDepth(texture2D(depthBuffer,uv));\n#else\nreturn texture2D(depthBuffer,uv).r;\n#endif\n}\n#endif\nuniform lowp sampler2D noiseTexture;uniform mat4 inverseProjectionMatrix;uniform mat4 projectionMatrix;uniform vec2 texelSize;uniform vec2 cameraNearFar;uniform float intensity;uniform float minRadiusScale;uniform float fade;uniform float bias;uniform vec2 distanceCutoff;uniform vec2 proximityCutoff;varying vec2 vUv;varying vec2 vUv2;float getViewZ(const in float depth){\n#ifdef PERSPECTIVE_CAMERA\nreturn perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y);\n#else\nreturn orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y);\n#endif\n}vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(inverseProjectionMatrix*clipPosition).xyz;}float getAmbientOcclusion(const in vec3 p,const in vec3 n,const in float depth,const in vec2 uv){float radiusScale=1.0-smoothstep(0.0,distanceCutoff.y,depth);radiusScale=radiusScale*(1.0-minRadiusScale)+minRadiusScale;float radius=RADIUS*radiusScale;float noise=texture2D(noiseTexture,vUv2).r;float baseAngle=noise*PI2;float rings=SPIRAL_TURNS*PI2;float occlusion=0.0;int taps=0;for(int i=0;i1.0||coords.t<0.0||coords.t>1.0){continue;}float sampleDepth=readDepth(coords);float viewZ=getViewZ(sampleDepth);\n#ifdef PERSPECTIVE_CAMERA\nfloat linearSampleDepth=viewZToOrthographicDepth(viewZ,cameraNearFar.x,cameraNearFar.y);\n#else\nfloat linearSampleDepth=sampleDepth;\n#endif\nfloat proximity=abs(depth-linearSampleDepth);if(proximity\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nuniform highp sampler2D depthBuffer;\n#else\nuniform mediump sampler2D depthBuffer;\n#endif\n#ifdef DOWNSAMPLE_NORMALS\nuniform lowp sampler2D normalBuffer;\n#endif\nvarying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;float readDepth(const in vec2 uv){\n#if DEPTH_PACKING == 3201\nreturn unpackRGBAToDepth(texture2D(depthBuffer,uv));\n#else\nreturn texture2D(depthBuffer,uv).r;\n#endif\n}int findBestDepth(const in float samples[4]){float c=(samples[0]+samples[1]+samples[2]+samples[3])*0.25;float distances[4];distances[0]=abs(c-samples[0]);distances[1]=abs(c-samples[1]);distances[2]=abs(c-samples[2]);distances[3]=abs(c-samples[3]);float maxDistance=max(max(distances[0],distances[1]),max(distances[2],distances[3]));int remaining[3];int rejected[3];int i,j,k;for(i=0,j=0,k=0;i<4;++i){if(distances[i] this.setSize(l.baseWidth, l.baseHeight))) + } + get texture() { + return this.renderTarget.texture + } + getTexture() { + return this.renderTarget.texture + } + getResolution() { + return this.resolution + } + setDepthTexture(e, t = r.BasicDepthPacking) { + this.fullscreenMaterial.depthBuffer = e, this.fullscreenMaterial.depthPacking = t + } + render(e, t, i, r, n) { + e.setRenderTarget(this.renderToScreen ? null : this.renderTarget), e.render(this.scene, this.camera) + } + setSize(e, t) { + const i = this.resolution; + i.setBaseSize(e, t), this.renderTarget.setSize(i.width, i.height), this.fullscreenMaterial.setSize(e, t) + } + initialize(e, t, i) { + const r = e.getContext(); + if (!r.getExtension("EXT_color_buffer_float") && !r.getExtension("EXT_color_buffer_half_float")) throw new Error("Rendering to float texture is not supported.") + } + }, + X = class extends F { + constructor(e, t, { + blendFunction: i = E.MULTIPLY, + samples: n = 9, + rings: s = 7, + normalDepthBuffer: a = null, + depthAwareUpsampling: o = !0, + worldDistanceThreshold: l, + worldDistanceFalloff: u, + worldProximityThreshold: h, + worldProximityFalloff: c, + distanceThreshold: f = .97, + distanceFalloff: d = .03, + rangeThreshold: p = 5e-4, + rangeFalloff: v = .001, + minRadiusScale: m = .1, + luminanceInfluence: g = .7, + radius: S = .1825, + intensity: x = 1, + bias: y = .025, + fade: T = .01, + color: U = null, + resolutionScale: R = 1, + width: M = w.AUTO_SIZE, + height: A = w.AUTO_SIZE, + resolutionX: B = M, + resolutionY: D = A + } = {}) { + super("SSAOEffect", "uniform lowp sampler2D aoBuffer;uniform float luminanceInfluence;uniform float intensity;\n#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH)\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nuniform highp sampler2D normalDepthBuffer;\n#else\nuniform mediump sampler2D normalDepthBuffer;\n#endif\n#endif\n#ifdef COLORIZE\nuniform vec3 color;\n#endif\nvoid mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){float aoLinear=texture2D(aoBuffer,uv).r;\n#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) && __VERSION__ == 300\nvec4 normalDepth[4];normalDepth[0]=textureOffset(normalDepthBuffer,uv,ivec2(0,0));normalDepth[1]=textureOffset(normalDepthBuffer,uv,ivec2(0,1));normalDepth[2]=textureOffset(normalDepthBuffer,uv,ivec2(1,0));normalDepth[3]=textureOffset(normalDepthBuffer,uv,ivec2(1,1));float dot01=dot(normalDepth[0].rgb,normalDepth[1].rgb);float dot02=dot(normalDepth[0].rgb,normalDepth[2].rgb);float dot03=dot(normalDepth[0].rgb,normalDepth[3].rgb);float minDot=min(dot01,min(dot02,dot03));float s=step(THRESHOLD,minDot);float smallestDistance=1.0;int index;for(int i=0;i<4;++i){float distance=abs(depth-normalDepth[i].a);if(distance this.setSize(b.baseWidth, b.baseHeight))), this.camera = e, this.depthDownsamplingPass = new Z({ + normalBuffer: t, + resolutionScale: R + }), this.depthDownsamplingPass.enabled = null === a, this.ssaoPass = new H(new V(e)); + const C = new G(64, 64, r.RGBAFormat); + C.wrapS = C.wrapT = r.RepeatWrapping; + const _ = this.ssaoMaterial; + _.normalBuffer = t, _.noiseTexture = C, _.minRadiusScale = m, _.samples = n, _.radius = S, _.rings = s, _.fade = T, _.bias = y, _.distanceThreshold = f, _.distanceFalloff = d, _.proximityThreshold = p, _.proximityFalloff = v, void 0 !== l && (_.worldDistanceThreshold = l), void 0 !== u && (_.worldDistanceFalloff = u), void 0 !== h && (_.worldProximityThreshold = h), void 0 !== c && (_.worldProximityFalloff = c), null !== a && (this.ssaoMaterial.normalDepthBuffer = a, this.defines.set("NORMAL_DEPTH", "1")), this.depthAwareUpsampling = o, this.color = U + } + set mainCamera(e) { + this.camera = e, this.ssaoMaterial.copyCameraSettings(e) + } + get normalBuffer() { + return this.ssaoMaterial.normalBuffer + } + set normalBuffer(e) { + this.ssaoMaterial.normalBuffer = e, this.depthDownsamplingPass.fullscreenMaterial.normalBuffer = e + } + getResolution() { + return this.resolution + } + get ssaoMaterial() { + return this.ssaoPass.fullscreenMaterial + } + getSSAOMaterial() { + return this.ssaoMaterial + } + get samples() { + return this.ssaoMaterial.samples + } + set samples(e) { + this.ssaoMaterial.samples = e + } + get rings() { + return this.ssaoMaterial.rings + } + set rings(e) { + this.ssaoMaterial.rings = e + } + get radius() { + return this.ssaoMaterial.radius + } + set radius(e) { + this.ssaoMaterial.radius = e + } + get depthAwareUpsampling() { + return this.defines.has("DEPTH_AWARE_UPSAMPLING") + } + set depthAwareUpsampling(e) { + this.depthAwareUpsampling !== e && (e ? this.defines.set("DEPTH_AWARE_UPSAMPLING", "1") : this.defines.delete("DEPTH_AWARE_UPSAMPLING"), this.setChanged()) + } + isDepthAwareUpsamplingEnabled() { + return this.depthAwareUpsampling + } + setDepthAwareUpsamplingEnabled(e) { + this.depthAwareUpsampling = e + } + get distanceScaling() { + return !0 + } + set distanceScaling(e) {} + get color() { + return this.uniforms.get("color").value + } + set color(e) { + const t = this.uniforms, + i = this.defines; + null !== e ? i.has("COLORIZE") ? t.get("color").value.set(e) : (i.set("COLORIZE", "1"), t.get("color").value = new r.Color(e), this.setChanged()) : i.has("COLORIZE") && (i.delete("COLORIZE"), t.get("color").value = null, this.setChanged()) + } + get luminanceInfluence() { + return this.uniforms.get("luminanceInfluence").value + } + set luminanceInfluence(e) { + this.uniforms.get("luminanceInfluence").value = e + } + get intensity() { + return this.uniforms.get("intensity").value + } + set intensity(e) { + this.uniforms.get("intensity").value = e + } + getColor() { + return this.color + } + setColor(e) { + this.color = e + } + setDistanceCutoff(e, t) { + this.ssaoMaterial.distanceThreshold = e, this.ssaoMaterial.distanceFalloff = t + } + setProximityCutoff(e, t) { + this.ssaoMaterial.proximityThreshold = e, this.ssaoMaterial.proximityFalloff = t + } + setDepthTexture(e, t = r.BasicDepthPacking) { + this.depthDownsamplingPass.setDepthTexture(e, t), this.ssaoMaterial.depthBuffer = e, this.ssaoMaterial.depthPacking = t + } + update(e, t, i) { + const r = this.renderTarget; + this.depthDownsamplingPass.enabled && this.depthDownsamplingPass.render(e), this.ssaoPass.render(e, null, r) + } + setSize(e, t) { + const i = this.resolution; + i.setBaseSize(e, t); + const r = i.width, + n = i.height; + this.ssaoMaterial.copyCameraSettings(this.camera), this.ssaoMaterial.setSize(r, n), this.renderTarget.setSize(r, n), this.depthDownsamplingPass.resolution.scale = i.scale, this.depthDownsamplingPass.setSize(e, t) + } + initialize(e, t, i) { + try { + let r = this.uniforms.get("normalDepthBuffer").value; + null === r && (this.depthDownsamplingPass.initialize(e, t, i), r = this.depthDownsamplingPass.texture, this.uniforms.get("normalDepthBuffer").value = r, this.ssaoMaterial.normalDepthBuffer = r, this.defines.set("NORMAL_DEPTH", "1")) + } catch (e) { + this.depthDownsamplingPass.enabled = !1 + } + } + }, + Y = class extends r.ShaderMaterial { + constructor(e, t, i, n, s = !1) { + super({ + name: "EffectMaterial", + defines: { + THREE_REVISION: r.REVISION.replace(/\D+/g, ""), + DEPTH_PACKING: "0", + ENCODE_OUTPUT: "1" + }, + uniforms: { + inputBuffer: new r.Uniform(null), + depthBuffer: new r.Uniform(null), + resolution: new r.Uniform(new r.Vector2), + texelSize: new r.Uniform(new r.Vector2), + cameraNear: new r.Uniform(.3), + cameraFar: new r.Uniform(1e3), + aspect: new r.Uniform(1), + time: new r.Uniform(0) + }, + blending: r.NoBlending, + toneMapped: !1, + depthWrite: !1, + depthTest: !1, + dithering: s + }), e && this.setShaderParts(e), t && this.setDefines(t), i && this.setUniforms(i), this.copyCameraSettings(n) + } + set inputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + setInputBuffer(e) { + this.uniforms.inputBuffer.value = e + } + get depthBuffer() { + return this.uniforms.depthBuffer.value + } + set depthBuffer(e) { + this.uniforms.depthBuffer.value = e + } + get depthPacking() { + return Number(this.defines.DEPTH_PACKING) + } + set depthPacking(e) { + this.defines.DEPTH_PACKING = e.toFixed(0), this.needsUpdate = !0 + } + setDepthBuffer(e, t = r.BasicDepthPacking) { + this.depthBuffer = e, this.depthPacking = t + } + setShaderData(e) { + this.setShaderParts(e.shaderParts), this.setDefines(e.defines), this.setUniforms(e.uniforms), this.setExtensions(e.extensions) + } + setShaderParts(e) { + return this.fragmentShader = "#include \n#include \n#include \n#define packFloatToRGBA(v) packDepthToRGBA(v)\n#define unpackRGBAToFloat(v) unpackRGBAToDepth(v)\n#ifdef FRAMEBUFFER_PRECISION_HIGH\nuniform mediump sampler2D inputBuffer;\n#else\nuniform lowp sampler2D inputBuffer;\n#endif\n#if DEPTH_PACKING == 3201\nuniform lowp sampler2D depthBuffer;\n#elif defined(GL_FRAGMENT_PRECISION_HIGH)\nuniform highp sampler2D depthBuffer;\n#else\nuniform mediump sampler2D depthBuffer;\n#endif\nuniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;\n#if THREE_REVISION < 143\n#define luminance(v) linearToRelativeLuminance(v)\n#endif\n#if THREE_REVISION >= 137\nvec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);}\n#endif\nfloat readDepth(const in vec2 uv){\n#if DEPTH_PACKING == 3201\nreturn unpackRGBAToDepth(texture2D(depthBuffer,uv));\n#else\nreturn texture2D(depthBuffer,uv).r;\n#endif\n}float getViewZ(const in float depth){\n#ifdef PERSPECTIVE_CAMERA\nreturn perspectiveDepthToViewZ(depth,cameraNear,cameraFar);\n#else\nreturn orthographicDepthToViewZ(depth,cameraNear,cameraFar);\n#endif\n}vec3 RGBToHCV(const in vec3 RGB){vec4 P=mix(vec4(RGB.bg,-1.0,2.0/3.0),vec4(RGB.gb,0.0,-1.0/3.0),step(RGB.b,RGB.g));vec4 Q=mix(vec4(P.xyw,RGB.r),vec4(RGB.r,P.yzx),step(P.x,RGB.r));float C=Q.x-min(Q.w,Q.y);float H=abs((Q.w-Q.y)/(6.0*C+EPSILON)+Q.z);return vec3(H,C,Q.x);}vec3 RGBToHSL(const in vec3 RGB){vec3 HCV=RGBToHCV(RGB);float L=HCV.z-HCV.y*0.5;float S=HCV.y/(1.0-abs(L*2.0-1.0)+EPSILON);return vec3(HCV.x,S,L);}vec3 HueToRGB(const in float H){float R=abs(H*6.0-3.0)-1.0;float G=2.0-abs(H*6.0-2.0);float B=2.0-abs(H*6.0-4.0);return clamp(vec3(R,G,B),0.0,1.0);}vec3 HSLToRGB(const in vec3 HSL){vec3 RGB=HueToRGB(HSL.x);float C=(1.0-abs(2.0*HSL.z-1.0))*HSL.y;return(RGB-0.5)*C+HSL.z;}FRAGMENT_HEAD void main(){FRAGMENT_MAIN_UV vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGE color0.a=clamp(color0.a,0.0,1.0);gl_FragColor=color0;\n#ifdef ENCODE_OUTPUT\n#include \n#endif\n#include \n}".replace(x.FRAGMENT_HEAD, e.get(x.FRAGMENT_HEAD) || "").replace(x.FRAGMENT_MAIN_UV, e.get(x.FRAGMENT_MAIN_UV) || "").replace(x.FRAGMENT_MAIN_IMAGE, e.get(x.FRAGMENT_MAIN_IMAGE) || ""), this.vertexShader = "uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEAD void main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORT gl_Position=vec4(position.xy,1.0,1.0);}".replace(x.VERTEX_HEAD, e.get(x.VERTEX_HEAD) || "").replace(x.VERTEX_MAIN_SUPPORT, e.get(x.VERTEX_MAIN_SUPPORT) || ""), this.fragmentShader = c(this.fragmentShader), this.needsUpdate = !0, this + } + setDefines(e) { + for (const t of e.entries()) this.defines[t[0]] = t[1]; + return this.needsUpdate = !0, this + } + setUniforms(e) { + for (const t of e.entries()) this.uniforms[t[0]] = t[1]; + return this + } + setExtensions(e) { + this.extensions = {}; + for (const t of e) this.extensions[t] = !0; + return this + } + get encodeOutput() { + return void 0 !== this.defines.ENCODE_OUTPUT + } + set encodeOutput(e) { + this.encodeOutput !== e && (e ? this.defines.ENCODE_OUTPUT = "1" : delete this.defines.ENCODE_OUTPUT, this.needsUpdate = !0) + } + isOutputEncodingEnabled(e) { + return this.encodeOutput + } + setOutputEncodingEnabled(e) { + this.encodeOutput = e + } + get time() { + return this.uniforms.time.value + } + set time(e) { + this.uniforms.time.value = e + } + setDeltaTime(e) { + this.uniforms.time.value += e + } + adoptCameraSettings(e) { + this.copyCameraSettings(e) + } + copyCameraSettings(e) { + e && (this.uniforms.cameraNear.value = e.near, this.uniforms.cameraFar.value = e.far, e instanceof r.PerspectiveCamera ? this.defines.PERSPECTIVE_CAMERA = "1" : delete this.defines.PERSPECTIVE_CAMERA, this.needsUpdate = !0) + } + setSize(e, t) { + const i = this.uniforms; + i.resolution.value.set(e, t), i.texelSize.value.set(1 / e, 1 / t), i.aspect.value = e / t + } + static get Section() { + return x + } + }; + + function Q(e, t, i) { + for (const r of t) { + const t = "$1" + e + r.charAt(0).toUpperCase() + r.slice(1), + n = new RegExp("([^\\.])(\\b" + r + "\\b)", "g"); + for (const e of i.entries()) null !== e[1] && i.set(e[0], e[1].replace(n, t)) + } + } + + function j(e, t, i) { + let n = t.getFragmentShader(), + s = t.getVertexShader(); + const a = void 0 !== n && /mainImage/.test(n), + o = void 0 !== n && /mainUv/.test(n); + if (i.attributes |= t.getAttributes(), void 0 === n) throw new Error(`Missing fragment shader (${t.name})`); + if (o && 0 != (2 & i.attributes)) throw new Error(`Effects that transform UVs are incompatible with convolution effects (${t.name})`); + if (!a && !o) throw new Error(`Could not find mainImage or mainUv function (${t.name})`); + { + const l = /\w+\s+(\w+)\([\w\s,]*\)\s*{/g, + u = i.shaderParts; + let h = u.get(x.FRAGMENT_HEAD) || "", + c = u.get(x.FRAGMENT_MAIN_UV) || "", + f = u.get(x.FRAGMENT_MAIN_IMAGE) || "", + d = u.get(x.VERTEX_HEAD) || "", + p = u.get(x.VERTEX_MAIN_SUPPORT) || ""; + const v = new Set, + m = new Set; + if (o && (c += `\t${e}MainUv(UV);\n`, i.uvTransformation = !0), null !== s && /mainSupport/.test(s)) { + const t = /mainSupport *\([\w\s]*?uv\s*?\)/.test(s); + p += `\t${e}MainSupport(`, p += t ? "vUv);\n" : ");\n"; + for (const e of s.matchAll(/(?:varying\s+\w+\s+([\S\s]*?);)/g)) + for (const t of e[1].split(/\s*,\s*/)) i.varyings.add(t), v.add(t), m.add(t); + for (const e of s.matchAll(l)) m.add(e[1]) + } + for (const e of n.matchAll(l)) m.add(e[1]); + for (const e of t.defines.keys()) m.add(e.replace(/\([\w\s,]*\)/g, "")); + for (const e of t.uniforms.keys()) m.add(e); + m.delete("while"), m.delete("for"), m.delete("if"), t.uniforms.forEach(((t, r) => i.uniforms.set(e + r.charAt(0).toUpperCase() + r.slice(1), t))), t.defines.forEach(((t, r) => i.defines.set(e + r.charAt(0).toUpperCase() + r.slice(1), t))); + const g = new Map([ + ["fragment", n], + ["vertex", s] + ]); + Q(e, m, i.defines), Q(e, m, g), n = g.get("fragment"), s = g.get("vertex"); + const S = t.blendMode; + if (i.blendModes.set(S.blendFunction, S), a) { + null !== t.inputColorSpace && t.inputColorSpace !== i.colorSpace && (f += t.inputColorSpace === r.SRGBColorSpace ? "color0 = LinearTosRGB(color0);\n\t" : "color0 = sRGBToLinear(color0);\n\t"), t.outputColorSpace !== r.NoColorSpace ? i.colorSpace = t.outputColorSpace : null !== t.inputColorSpace && (i.colorSpace = t.inputColorSpace); + const s = /MainImage *\([\w\s,]*?depth[\w\s,]*?\)/; + f += `${e}MainImage(color0, UV, `, 0 != (1 & i.attributes) && s.test(n) && (f += "depth, ", i.readDepth = !0), f += "color1);\n\t"; + const a = e + "BlendOpacity"; + i.uniforms.set(a, S.opacity), f += `color0 = blend${S.blendFunction}(color0, color1, ${a});\n\n\t`, h += `uniform float ${a};\n\n` + } + if (h += n + "\n", null !== s && (d += s + "\n"), u.set(x.FRAGMENT_HEAD, h), u.set(x.FRAGMENT_MAIN_UV, c), u.set(x.FRAGMENT_MAIN_IMAGE, f), u.set(x.VERTEX_HEAD, d), u.set(x.VERTEX_MAIN_SUPPORT, p), null !== t.extensions) + for (const e of t.extensions) i.extensions.add(e) + } + } + new Float32Array([255 / 256 / 256 ** 3, 255 / 256 / 65536, 255 / 256 / 256, 255 / 256]); + var K = class extends l { + constructor(e, ...t) { + super("EffectPass"), this.fullscreenMaterial = new Y(null, null, null, e), this.listener = e => this.handleEvent(e), this.effects = [], this.setEffects(t), this.skipRendering = !1, this.minTime = 1, this.maxTime = Number.POSITIVE_INFINITY, this.timeScale = 1 + } + set mainScene(e) { + for (const t of this.effects) t.mainScene = e + } + set mainCamera(e) { + this.fullscreenMaterial.copyCameraSettings(e); + for (const t of this.effects) t.mainCamera = e + } + get encodeOutput() { + return this.fullscreenMaterial.encodeOutput + } + set encodeOutput(e) { + this.fullscreenMaterial.encodeOutput = e + } + get dithering() { + return this.fullscreenMaterial.dithering + } + set dithering(e) { + const t = this.fullscreenMaterial; + t.dithering = e, t.needsUpdate = !0 + } + setEffects(e) { + for (const e of this.effects) e.removeEventListener("change", this.listener); + this.effects = e.sort(((e, t) => t.attributes - e.attributes)); + for (const e of this.effects) e.addEventListener("change", this.listener) + } + updateMaterial() { + const e = new class { + constructor() { + this.shaderParts = new Map([ + [x.FRAGMENT_HEAD, null], + [x.FRAGMENT_MAIN_UV, null], + [x.FRAGMENT_MAIN_IMAGE, null], + [x.VERTEX_HEAD, null], + [x.VERTEX_MAIN_SUPPORT, null] + ]), this.defines = new Map, this.uniforms = new Map, this.blendModes = new Map, this.extensions = new Set, this.attributes = 0, this.varyings = new Set, this.uvTransformation = !1, this.readDepth = !1, this.colorSpace = r.LinearSRGBColorSpace + } + }; + let t = 0; + for (const i of this.effects) + if (i.blendMode.blendFunction === E.DST) e.attributes |= 1 & i.getAttributes(); + else { + if (0 != (e.attributes & i.getAttributes() & 2)) throw new Error(`Convolution effects cannot be merged (${i.name})`); + j("e" + t++, i, e) + } let i = e.shaderParts.get(x.FRAGMENT_HEAD), + n = e.shaderParts.get(x.FRAGMENT_MAIN_IMAGE), + s = e.shaderParts.get(x.FRAGMENT_MAIN_UV); + const a = /\bblend\b/g; + for (const t of e.blendModes.values()) i += t.getShaderCode().replace(a, `blend${t.blendFunction}`) + "\n"; + 0 != (1 & e.attributes) ? (e.readDepth && (n = "float depth = readDepth(UV);\n\n\t" + n), this.needsDepthTexture = null === this.getDepthTexture()) : this.needsDepthTexture = !1, e.colorSpace === r.SRGBColorSpace && (n += "color0 = sRGBToLinear(color0);\n\t"), e.uvTransformation ? (s = "vec2 transformedUv = vUv;\n" + s, e.defines.set("UV", "transformedUv")) : e.defines.set("UV", "vUv"), e.shaderParts.set(x.FRAGMENT_HEAD, i), e.shaderParts.set(x.FRAGMENT_MAIN_IMAGE, n), e.shaderParts.set(x.FRAGMENT_MAIN_UV, s); + for (const [t, i] of e.shaderParts) null !== i && e.shaderParts.set(t, i.trim().replace(/^#/, "\n#")); + this.skipRendering = 0 === t, this.needsSwap = !this.skipRendering, this.fullscreenMaterial.setShaderData(e) + } + recompile() { + this.updateMaterial() + } + getDepthTexture() { + return this.fullscreenMaterial.depthBuffer + } + setDepthTexture(e, t = r.BasicDepthPacking) { + this.fullscreenMaterial.depthBuffer = e, this.fullscreenMaterial.depthPacking = t; + for (const i of this.effects) i.setDepthTexture(e, t) + } + render(e, t, i, r, n) { + for (const i of this.effects) i.update(e, t, r); + if (!this.skipRendering || this.renderToScreen) { + const n = this.fullscreenMaterial; + n.inputBuffer = t.texture, n.time += r * this.timeScale, e.setRenderTarget(this.renderToScreen ? null : i), e.render(this.scene, this.camera) + } + } + setSize(e, t) { + this.fullscreenMaterial.setSize(e, t); + for (const i of this.effects) i.setSize(e, t) + } + initialize(e, t, i) { + this.renderer = e; + for (const r of this.effects) r.initialize(e, t, i); + this.updateMaterial(), void 0 !== i && i !== r.UnsignedByteType && (this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1") + } + dispose() { + super.dispose(); + for (const e of this.effects) e.removeEventListener("change", this.listener), e.dispose() + } + handleEvent(e) { + "change" === e.type && this.recompile() + } + }; + + function $(e, t, i) { + return e + (t - e) * i + } + + function q(e, t, i, r) { + const n = $(e, t, .75), + s = $(i, r, .75); + return $(n, s, .875) + } + new Float32Array(3), new Float32Array(3), new Float32Array(3), new Float32Array(3), new Float32Array(3), new Float32Array(3), new Float32Array([0, 0, 0]), new Float32Array([1, 0, 0]), new Float32Array([1, 1, 0]), new Float32Array([1, 1, 1]), new Float32Array([0, 0, 0]), new Float32Array([1, 0, 0]), new Float32Array([1, 0, 1]), new Float32Array([1, 1, 1]), new Float32Array([0, 0, 0]), new Float32Array([0, 0, 1]), new Float32Array([1, 0, 1]), new Float32Array([1, 1, 1]), new Float32Array([0, 0, 0]), new Float32Array([0, 1, 0]), new Float32Array([1, 1, 0]), new Float32Array([1, 1, 1]), new Float32Array([0, 0, 0]), new Float32Array([0, 1, 0]), new Float32Array([0, 1, 1]), new Float32Array([1, 1, 1]), new Float32Array([0, 0, 0]), new Float32Array([0, 0, 1]), new Float32Array([0, 1, 1]), new Float32Array([1, 1, 1]), new Float32Array(2), new Float32Array(2), new Float32Array([0, -.25, .25, -.125, .125, -.375, .375]), new Float32Array([0, 0]), new Float32Array([.25, -.25]), new Float32Array([-.25, .25]), new Float32Array([.125, -.125]), new Float32Array([-.125, .125]), new Uint8Array([0, 0]), new Uint8Array([3, 0]), new Uint8Array([0, 3]), new Uint8Array([3, 3]), new Uint8Array([1, 0]), new Uint8Array([4, 0]), new Uint8Array([1, 3]), new Uint8Array([4, 3]), new Uint8Array([0, 1]), new Uint8Array([3, 1]), new Uint8Array([0, 4]), new Uint8Array([3, 4]), new Uint8Array([1, 1]), new Uint8Array([4, 1]), new Uint8Array([1, 4]), new Uint8Array([4, 4]), new Uint8Array([0, 0]), new Uint8Array([1, 0]), new Uint8Array([0, 2]), new Uint8Array([1, 2]), new Uint8Array([2, 0]), new Uint8Array([3, 0]), new Uint8Array([2, 2]), new Uint8Array([3, 2]), new Uint8Array([0, 1]), new Uint8Array([1, 1]), new Uint8Array([0, 3]), new Uint8Array([1, 3]), new Uint8Array([2, 1]), new Uint8Array([3, 1]), new Uint8Array([2, 3]), new Uint8Array([3, 3]), q(0, 0, 0, 0), new Float32Array([0, 0, 0, 0]), q(0, 0, 0, 1), new Float32Array([0, 0, 0, 1]), q(0, 0, 1, 0), new Float32Array([0, 0, 1, 0]), q(0, 0, 1, 1), new Float32Array([0, 0, 1, 1]), q(0, 1, 0, 0), new Float32Array([0, 1, 0, 0]), q(0, 1, 0, 1), new Float32Array([0, 1, 0, 1]), q(0, 1, 1, 0), new Float32Array([0, 1, 1, 0]), q(0, 1, 1, 1), new Float32Array([0, 1, 1, 1]), q(1, 0, 0, 0), new Float32Array([1, 0, 0, 0]), q(1, 0, 0, 1), new Float32Array([1, 0, 0, 1]), q(1, 0, 1, 0), new Float32Array([1, 0, 1, 0]), q(1, 0, 1, 1), new Float32Array([1, 0, 1, 1]), q(1, 1, 0, 0), new Float32Array([1, 1, 0, 0]), q(1, 1, 0, 1), new Float32Array([1, 1, 0, 1]), q(1, 1, 1, 0), new Float32Array([1, 1, 1, 0]), q(1, 1, 1, 1), new Float32Array([1, 1, 1, 1]) + } + } +]); \ No newline at end of file diff --git a/mp-core/242.53320f1d872026e28294.bundle.js b/mp-core/242.53320f1d872026e28294.bundle.js new file mode 100644 index 0000000..8106276 --- /dev/null +++ b/mp-core/242.53320f1d872026e28294.bundle.js @@ -0,0 +1,39 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [242], { + 242: (e, i, t) => { + t.r(i), t.d(i, { + default: () => s + }); + class s { + id = "core.compatibility.mixamo"; + name = "Mixamo Compatibility"; + description = "This plugin handles converting models and animations from Mixamo.com."; + version = "1.0.0"; + prefixes = ["mixamorig1:", "mixamorig:", "mixamorig1", "mixamorig"]; + $onEntityRendererLoad(e) { + if (!e.object?.isObject3D) return; + let i = !1; + e.object.traverse((e => { + if (e.isBone && e.name) + for (let t of this.prefixes) + if (e.name.startsWith(t)) { + e.name = e.name.substring(t.length), i = !0; + break + } + })); + for (let t of e.animationClips || []) + for (let s of t.tracks) + if (s.name) { + for (let e of this.prefixes) + if (s.name.startsWith(e)) { + s.name = s.name.substring(e.length), i = !0; + break + } if (i && !s.name.startsWith("Hips.") && (s.name.endsWith(".position") || s.name.endsWith(".scale")) && (t.tracks = t.tracks.filter((e => e != s))), i && e.modelInfo?.isFBX && "Hips.position" == s.name) + for (let e = 0; e < s.values.length; e++) s.values[e] *= .01 + } + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/2589.84d4ff16b40231e994a8.bundle.js b/mp-core/2589.84d4ff16b40231e994a8.bundle.js new file mode 100644 index 0000000..4cb13db --- /dev/null +++ b/mp-core/2589.84d4ff16b40231e994a8.bundle.js @@ -0,0 +1,737 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2589], { + 32589: (e, t, l) => { + l.d(t, { + N7: () => y, + zx: () => u, + ji: () => m, + zH: () => k, + j9: () => h, + f: () => v, + f4: () => b, + Um: () => w, + mg: () => E, + aW: () => g, + ek: () => x, + eo: () => p, + nv: () => s, + tC: () => f + }); + var n = l(67294), + a = l(99477), + o = l(55651), + r = l(25108); + + function i() { + return i = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var l = arguments[t]; + for (var n in l) Object.prototype.hasOwnProperty.call(l, n) && (e[n] = l[n]) + } + return e + }, i.apply(this, arguments) + } + const c = e => n.createElement("div", { + style: { + display: "flex", + alignItems: "flex-start", + margin: "1.5% 0.5%" + } + }, e.hideTitle ? null : n.createElement("div", { + title: e.tooltip, + style: { + width: "37%", + flex: "0 0 auto", + opacity: .75, + fontSize: 13, + padding: "2px 0px 0px 22px", + overflow: "hidden", + whiteSpace: "nowrap", + textOverflow: "ellipsis" + } + }, e.name), n.createElement("div", { + style: { + flex: "1 1 1px", + display: "flex", + minHeight: 20, + overflow: "hidden", + margin: "0px 20px 0px 0px" + } + }, e.children)), + d = e => n.createElement(c, { + name: e.name, + tooltip: e.tooltip, + hideTitle: e.hideTitle + }, n.createElement("div", { + style: { + flex: "1 1 1px", + display: "flex", + alignItems: "center", + minHeight: 26, + margin: 0, + border: "1px solid rgba(255, 255, 255, 0.1)", + borderRadius: 5, + overflow: "hidden", + boxSizing: "border-box", + cursor: e.onClick ? "pointer" : "default" + }, + onClick: e.onClick + }, n.createElement("div", { + style: { + flex: "0 0 auto", + width: 24, + alignSelf: "stretch", + backgroundColor: "rgba(255, 255, 255, 0.2)", + backgroundPosition: "center", + backgroundSize: "14px 14px", + backgroundRepeat: "no-repeat", + backgroundImage: "url(" + e.icon + ")", + opacity: .5 + } + }), e.children)), + s = e => !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(37877) + }, n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + color: e.disabled ? "rgba(255, 255, 255, 0.75)" : "white", + background: "none", + border: "none", + outline: "none", + padding: "5px 8px", + fontSize: 12 + }, + value: e.value, + autoComplete: "off", + onChange: t => function(t) { + let l = t.currentTarget.value; + "number" === e.type && (l = parseFloat(l) || 0), e.onChange && "function" == typeof e.onChange && e.onChange({ + target: { + value: l + }, + currentTarget: { + value: l + } + }) + }(t), + disabled: e.disabled, + placeholder: e.placeholder, + type: "number" == e.type ? "number" : "text" + })), + p = e => !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(37877) + }, n.createElement("textarea", { + style: { + flex: "1 1 1px", + width: 1, + color: e.disabled ? "rgba(255, 255, 255, 0.75)" : "white", + background: "none", + border: "none", + outline: "none", + padding: "5px 8px", + fontSize: 12 + }, + value: e.value, + autoComplete: "off", + onChange: t => function(t) { + let l = t.currentTarget.value; + "number" === e.type && (l = parseFloat(l) || 0), e.onChange && "function" == typeof e.onChange && e.onChange({ + target: { + value: l + }, + currentTarget: { + value: l + } + }) + }(t), + disabled: e.disabled, + placeholder: e.placeholder, + type: "number" == e.type ? "number" : "text" + })), + u = e => n.createElement("div", { + style: { + display: "flex", + margin: "10px 20px", + padding: 10, + color: "white", + backgroundColor: e.style?.backgroundColor ? e.style.backgroundColor : "rgba(255, 255, 255, 0.1)", + cursor: "pointer", + borderRadius: 5, + fontSize: 13, + flex: "1 1 1px", + justifyContent: "center", + alignItems: "center" + }, + onClick: e.onClick + }, e.icon ? n.createElement("img", { + draggable: "false", + src: e.icon, + style: { + width: 16, + height: 16, + marginRight: 10 + } + }) : null, e.title), + g = e => n.createElement("div", { + style: { + display: "flex", + margin: "10px 20px", + gap: 10 + } + }, e.children), + x = e => n.createElement("div", { + style: { + margin: 0, + textAlign: "center", + padding: 10, + color: "white", + backgroundColor: "rgba(255, 255, 255, 0.1)", + cursor: "pointer", + borderRadius: 5, + fontSize: 13, + flex: "1 1 1px", + opacity: e.disabled ? .5 : 1 + }, + onClick: e.disabled ? null : e.onClick + }, e.title), + m = e => !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(c, { + name: e.name, + tooltip: e.tooltip + }, n.createElement("div", { + style: { + flex: "0 0 auto", + width: 1, + margin: "0px 10px 0px 0px", + color: "white", + borderRadius: 5, + width: 25, + height: 25, + cursor: "pointer", + backgroundColor: "rgba(255, 255, 255, 0.1)", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + backgroundSize: "14px 14px", + backgroundImage: e.value ? `url(${l(50110)})` : `url(${l(57233)})`, + border: "1px solid rgba(255, 255, 255, 0.025)", + boxSizing: "border-box" + }, + onClick: () => e.onChange(!e.value) + }), n.createElement("div", { + style: { + flex: "1 1 1px" + } + })), + h = e => { + let t = e.value; + try { + if (t) { + let l = new URL(t, location.href); + t = l.pathname.split("/").pop() || l.hostname || e.value + } + } catch (e) {} + const a = async t => { + if (e.disabled) return; + let l = ""; + try { + let t = (await C())[0]; + if (!t) return; + let n = e.toastText || "Uploading $FILENAME..."; + n = n.replaceAll("$FILENAME", t.name), l = metapress.menubar.toasts.show({ + sticky: !0, + text: n + }), await e.onSelect(t) + } catch (e) { + r.warn(`[MetaPress] Unable to process file: ${e.message}`), metapress.menubar.toasts.show({ + text: `Failed: ${e.message}` + }) + } + metapress.menubar.toasts.close(l) + }; + if (!1 === e.visible) return n.createElement(n.Fragment, null); + const o = e.value && e.onClear && "function" == typeof e.onClear; + return n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(21434), + onClick: o ? null : a + }, n.createElement("div", { + onClick: o ? a : null, + style: { + flex: "1 1 1px", + margin: "0px 8px", + overflow: "hidden", + textOverflow: "ellipsis", + fontSize: 12, + cursor: o ? "pointer" : null + } + }, t), o ? n.createElement("div", { + title: "Remove", + onClick: e.onClear, + style: { + display: "flex", + flexShrink: 0, + width: 14, + height: 14, + marginRight: 7, + cursor: "pointer" + } + }, n.createElement("img", { + src: l(42728), + style: { + width: "100%", + height: "100%" + } + })) : null) + }, + f = e => { + let t = (0).toFixed(3), + a = parseFloat(e.default) || 0; + const o = e => (parseFloat(e) || a).toFixed(3); + let [r, i] = n.useState(!1), [c, s] = n.useState(o(e.value?.x)), [p, u] = n.useState(o(e.value?.y)), [g, x] = n.useState(o(e.value?.z)), m = c === t && p === t && g === t; + n.useEffect((() => { + r ? i(!1) : (s(o(e.value.x)), u(o(e.value.y)), x(o(e.value.z)), m = c === t && p === t && g === t) + }), [e.value.x, e.value.y, e.value.z]); + const h = (t, l, n) => { + e.onChange?.({ + x: t, + y: l, + z: n + }), i(!0) + }, + f = () => { + let t = (parseFloat(e.value.x) || a).toFixed(3), + l = (parseFloat(e.value.y) || a).toFixed(3), + n = (parseFloat(e.value.z) || a).toFixed(3); + e.onChange?.({ + x: parseFloat(t), + y: parseFloat(l), + z: parseFloat(n) + }), s(t), u(l), x(n) + }, + b = e => { + "Enter" === e.key && e.currentTarget.blur() + }; + return !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(31423) + }, n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "X", + value: m ? "" : c, + onChange: t => { + h(parseFloat(t.currentTarget.value) || a, e.value?.y, e.value?.z), s(t.currentTarget.value) + }, + onBlur: f, + onKeyDown: b, + disabled: e.disabled + }), n.createElement("div", { + style: { + width: 1, + height: 16, + backgroundColor: "rgba(255, 255, 255, 0.1)", + flex: "0 0 auto" + } + }), n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "Y", + value: m ? "" : p, + onChange: t => { + h(e.value?.x, parseFloat(t.currentTarget.value) || a, e.value?.z), u(t.currentTarget.value) + }, + onBlur: f, + onKeyDown: b, + disabled: e.disabled + }), n.createElement("div", { + style: { + width: 1, + height: 16, + backgroundColor: "rgba(255, 255, 255, 0.1)", + flex: "0 0 auto" + } + }), n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "Z", + value: m ? "" : g, + onChange: t => { + h(e.value?.x, e.value?.y, parseFloat(t.currentTarget.value) || a), x(t.currentTarget.value) + }, + onBlur: f, + onKeyDown: b, + disabled: e.disabled + })) + }, + b = e => n.createElement(f, i({ + default: 1, + fieldIcon: l(37099) + }, e)), + v = e => { + let t = parseFloat(e.value?.x) || 0, + o = parseFloat(e.value?.y) || 0, + r = parseFloat(e.value?.z) || 0, + i = parseFloat(e.value?.w) || 0; + t || o || r || i || (i = 1); + let c = new a.Quaternion(t, o, r, i), + s = (new a.Euler).setFromQuaternion(c), + p = (0).toFixed(0), + [u, g] = n.useState((s.x * (180 / Math.PI)).toFixed(0)), + [x, m] = n.useState((s.y * (180 / Math.PI)).toFixed(0)), + [h, f] = n.useState((s.z * (180 / Math.PI)).toFixed(0)), + b = u === p && x === p && h === p; + n.useEffect((() => { + t = parseFloat(e.value?.x) || 0, o = parseFloat(e.value?.y) || 0, r = parseFloat(e.value?.z) || 0, i = parseFloat(e.value?.w) || 0, t || o || r || i || (i = 1), c = new a.Quaternion(t, o, r, i), s = (new a.Euler).setFromQuaternion(c), g((s.x * (180 / Math.PI)).toFixed(0)), m((s.y * (180 / Math.PI)).toFixed(0)), f((s.z * (180 / Math.PI)).toFixed(0)), b = u === p && x === p && h === p + }), [e.value.x, e.value.y, e.value.z, e.value.w]); + const v = (t, l, n) => { + let a = (parseFloat(t) || 0) * (Math.PI / 180), + o = (parseFloat(l) || 0) * (Math.PI / 180), + r = (parseFloat(n) || 0) * (Math.PI / 180); + s.set(a, o, r), c.setFromEuler(s), e.onChange?.(c) + }; + return !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(79143) + }, n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "X", + value: b ? "" : u, + onChange: t => { + if (e.disabled) return; + let l = t.currentTarget.value; + v(l, x, h), g(l) + }, + disabled: e.disabled + }), n.createElement("div", { + style: { + width: 1, + height: 16, + backgroundColor: "rgba(255, 255, 255, 0.1)", + flex: "0 0 auto" + } + }), n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "Y", + value: b ? "" : x, + onChange: t => { + if (e.disabled) return; + let l = t.currentTarget.value; + v(u, l, h), m(l) + }, + disabled: e.disabled + }), n.createElement("div", { + style: { + width: 1, + height: 16, + backgroundColor: "rgba(255, 255, 255, 0.1)", + flex: "0 0 auto" + } + }), n.createElement("input", { + style: { + flex: "1 1 1px", + width: 1, + background: "none", + border: "none", + outline: "none", + padding: "5px 5px", + fontSize: 12, + color: "white", + textAlign: "center" + }, + placeholder: "Z", + value: b ? "" : h, + onChange: t => { + if (e.disabled) return; + let l = t.currentTarget.value; + v(u, x, l), f(l) + }, + disabled: e.disabled + })) + }, + y = e => !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(88761), + onClick: e.onClick + }, n.createElement("div", { + className: "fake-input", + style: { + flex: "1 1 1px", + margin: "0px 8px", + overflow: "hidden", + textOverflow: "ellipsis", + fontSize: 12 + } + }, e.value)), + E = e => !1 === e.visible ? n.createElement(n.Fragment, null) : n.createElement(d, { + name: e.name, + tooltip: e.tooltip, + icon: e.fieldIcon || l(96454) + }, n.createElement("select", { + style: { + flex: "1 1 1px", + margin: "0 6px 0 4px", + overflow: "hidden", + textOverflow: "ellipsis", + fontSize: 12, + color: "white", + border: "none", + background: "none", + outline: "none", + padding: 0, + lineHeight: "12px" + }, + onChange: e.onChange, + value: e.value + }, e.values?.map(((t, l) => n.createElement("option", { + style: { + color: "black" + }, + key: t + l, + value: t + }, e.labels?.[l] || t))))), + w = e => { + const [t, a] = (0, n.useState)(""); + return ((l, a, o) => { + let r = (0, n.useRef)(null); + (0, n.useEffect)((() => { + r.current && clearTimeout(r.current), r.current = setTimeout((() => { + e.onSearch?.(t) + }), 500) + }), o) + })(0, 0, [t]), n.createElement("div", { + style: Object.assign({ + margin: "10px 20px", + textAlign: "center", + padding: 0, + color: "white", + backgroundColor: "rgba(255, 255, 255, 0.1)", + borderRadius: 5, + fontSize: 13, + flex: "1 1 1px", + display: "flex", + flexDirection: "row", + alignItems: "center" + }, e.style) + }, n.createElement("img", { + draggable: "false", + src: l(54351), + style: { + width: 18, + margin: "0px 10px", + opacity: .3 + } + }), n.createElement("input", { + style: { + border: "none", + background: "none", + outline: "none", + color: "white", + fontSize: 13, + flex: "1 1 1px", + padding: "10px 0px" + }, + placeholder: "Pesquisar...", + value: t, + autoComplete: "off", + autoCorrect: "off", + onChange: e => a(e.currentTarget.value) + }), e.allowClear && t ? n.createElement("img", { + draggable: "false", + src: l(42728), + style: { + width: 18, + margin: "0px 10px", + opacity: .3, + cursor: "pointer" + }, + onClick: () => a("") + }) : null) + }, + C = () => new Promise((e => { + const t = (() => { + const e = document.createElement("input"); + return e.type = "file", e + })(); + t.addEventListener("change", (() => e(t.files || null))), setTimeout((() => { + const e = new MouseEvent("click"); + t.dispatchEvent(e) + }), 0) + })), + k = e => { + let [t, l] = (0, n.useState)(!1); + const r = e.value?.startsWith?.("#") ? e.value : "#" + new a.Color(e.value).getHexString(); + return n.createElement(c, { + name: e.name, + tooltip: e.tooltip + }, n.createElement("div", { + style: { + display: "flex", + position: "absolute", + paddingTop: 4, + height: 18 + } + }, n.createElement("div", { + onClick: () => { + l(!t) + }, + style: { + display: "inline-block", + backgroundColor: "#2e2e2e", + borderRadius: 6, + cursor: "pointer" + } + }, n.createElement("div", { + style: { + width: 36, + height: 16, + backgroundColor: r, + borderRadius: 4 + } + })), t ? n.createElement(n.Fragment, null, n.createElement("div", { + style: { + position: "absolute", + paddingTop: 20, + borderRadius: 8, + zIndex: 2 + } + }, n.createElement("div", { + onClick: e => { + var t; + "hex-color-picker" !== (t = e).target.id && "hex-color-input" !== t.target.id && l(!1) + }, + style: { + position: "fixed", + top: 0, + left: 0, + width: "100%", + height: "100%" + } + }), n.createElement(o.gW, { + id: "hex-color-picker", + color: r, + onChange: e.onChange, + style: { + width: 170, + height: 160 + } + }), n.createElement("div", { + id: "hex-color-input", + style: { + display: "flex", + position: "relative", + width: 170, + height: 40, + backgroundColor: "#2e2e2e", + borderRadius: "0 0 8px 8px", + justifyContent: "center", + alignItems: "center" + } + }, n.createElement(o.ZE, { + color: r, + prefixed: !0, + onChange: e.onChange, + style: { + fontSize: 13, + color: "#FFFFFF", + padding: "3px 0", + backgroundColor: "transparent", + width: 80, + border: "none", + outline: "none", + textAlign: "center", + zIndex: 12 + } + })))) : null)) + } + }, + 42728: (e, t, l) => { + e.exports = l.p + "mp-core/close.9b4e57a8512d18bd5a68.svg" + }, + 88761: (e, t, l) => { + e.exports = l.p + "mp-core/field-action.02fae8a3a5e804b4910a.svg" + }, + 21434: (e, t, l) => { + e.exports = l.p + "mp-core/field-file.459ee024840dcc9ca95f.svg" + }, + 79143: (e, t, l) => { + e.exports = l.p + "mp-core/field-quaternion.3689f33eb816749b54e5.svg" + }, + 37099: (e, t, l) => { + e.exports = l.p + "mp-core/field-scale.5dbdde69061f7df0c33c.svg" + }, + 96454: (e, t, l) => { + e.exports = l.p + "mp-core/field-select.f7d07d7e71c99a51f176.svg" + }, + 37877: (e, t, l) => { + e.exports = l.p + "mp-core/field-text.fe2b157e51bd13e0f2f4.svg" + }, + 31423: (e, t, l) => { + e.exports = l.p + "mp-core/field-vector3.b5753cf96b5c5d384c8d.svg" + }, + 50110: (e, t, l) => { + e.exports = l.p + "mp-core/icon-checked.c2c8a3ee43149d3f5549.svg" + }, + 54351: (e, t, l) => { + e.exports = l.p + "mp-core/icon-search.c1a02236f95e4bc7f82b.svg" + }, + 57233: (e, t, l) => { + e.exports = l.p + "mp-core/icon-unchecked.89eb9ec1abf5c71dacb9.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/2973.26cea1d94d325a74bd27.bundle.js b/mp-core/2973.26cea1d94d325a74bd27.bundle.js new file mode 100644 index 0000000..5600f6e --- /dev/null +++ b/mp-core/2973.26cea1d94d325a74bd27.bundle.js @@ -0,0 +1,42 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [2973], { + 42973: (e, r, s) => { + s.r(r), s.d(r, { + default: () => i + }); + class i { + id = "core.notifier"; + name = "Notifier Plugin"; + description = "Notifies the admin user that a user entered their world."; + version = "1.0.0"; + requires = ["profile"]; + provides = []; + onLoad() { + this.sendEmail() + } + async sendEmail() { + if ("1" != metapress.config?.["core.notification.address"]?.enabled || !metapress.config?.["core.notification.address"]?.address) return; + let e = metapress.config?.["core.notification.address"]?.address, + r = metapress.profile?.currentProfile?.fields?.name || "Guest", + s = window.location.href; + await this.sendAPI("https://get.metapress.dev/api/communication/send-entry-notification", { + email: e, + world: s, + user: r, + nonce: this.nonce + }) + } + async sendAPI(e, r) { + let s = await fetch(e, { + method: "POST", + body: JSON.stringify(r) + }), + i = await s.json(); + if (i.errorText) throw new Error(i.errorText); + return i + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3041.f0562e3445339520e4e2.bundle.js b/mp-core/3041.f0562e3445339520e4e2.bundle.js new file mode 100644 index 0000000..6445912 --- /dev/null +++ b/mp-core/3041.f0562e3445339520e4e2.bundle.js @@ -0,0 +1,14891 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3041], { + 93041: (t, e, s) => { + s.r(e), s.d(e, { + AbrController: () => Ts, + AttrList: () => I, + AudioStreamController: () => ur, + AudioTrackController: () => fr, + BasePlaylistController: () => ls, + BaseSegment: () => F, + BaseStreamController: () => ii, + BufferController: () => Er, + CMCDController: () => Hn, + CapLevelController: () => pn, + ChunkMetadata: () => _s, + ContentSteeringController: () => Vn, + DateRange: () => w, + EMEController: () => En, + ErrorActionFlags: () => as, + ErrorController: () => os, + ErrorDetails: () => S, + ErrorTypes: () => T, + Events: () => E, + FPSController: () => yn, + Fragment: () => O, + Hls: () => ca, + HlsSkip: () => Ue, + HlsUrlParameters: () => $e, + KeySystemFormats: () => H, + KeySystems: () => K, + Level: () => Ge, + LevelDetails: () => U, + LevelKey: () => Bt, + LoadStats: () => _, + MetadataSchema: () => Ce, + NetworkErrorAction: () => ns, + Part: () => N, + PlaylistLevelType: () => Te, + SubtitleStreamController: () => gr, + SubtitleTrackController: () => pr, + TimelineController: () => fn, + default: () => ca, + getMediaSource: () => Wt, + isMSESupported: () => oa, + isSupported: () => la + }); + var i = s(25108); + + function r(t) { + return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t + } + var n, a, o, l, h, d = { + exports: {} + }; + n = /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/, a = /^(?=([^\/?#]*))\1([^]*)$/, o = /(?:\/|^)\.(?=\/)/g, l = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g, d.exports = h = { + buildAbsoluteURL: function(t, e, s) { + if (s = s || {}, t = t.trim(), !(e = e.trim())) { + if (!s.alwaysNormalize) return t; + var i = h.parseURL(t); + if (!i) throw new Error("Error trying to parse base URL."); + return i.path = h.normalizePath(i.path), h.buildURLFromParts(i) + } + var r = h.parseURL(e); + if (!r) throw new Error("Error trying to parse relative URL."); + if (r.scheme) return s.alwaysNormalize ? (r.path = h.normalizePath(r.path), h.buildURLFromParts(r)) : e; + var n = h.parseURL(t); + if (!n) throw new Error("Error trying to parse base URL."); + if (!n.netLoc && n.path && "/" !== n.path[0]) { + var o = a.exec(n.path); + n.netLoc = o[1], n.path = o[2] + } + n.netLoc && !n.path && (n.path = "/"); + var l = { + scheme: n.scheme, + netLoc: r.netLoc, + path: null, + params: r.params, + query: r.query, + fragment: r.fragment + }; + if (!r.netLoc && (l.netLoc = n.netLoc, "/" !== r.path[0])) + if (r.path) { + var d = n.path, + c = d.substring(0, d.lastIndexOf("/") + 1) + r.path; + l.path = h.normalizePath(c) + } else l.path = n.path, r.params || (l.params = n.params, r.query || (l.query = n.query)); + return null === l.path && (l.path = s.alwaysNormalize ? h.normalizePath(r.path) : r.path), h.buildURLFromParts(l) + }, + parseURL: function(t) { + var e = n.exec(t); + return e ? { + scheme: e[1] || "", + netLoc: e[2] || "", + path: e[3] || "", + params: e[4] || "", + query: e[5] || "", + fragment: e[6] || "" + } : null + }, + normalizePath: function(t) { + for (t = t.split("").reverse().join("").replace(o, ""); t.length !== (t = t.replace(l, "")).length;); + return t.split("").reverse().join("") + }, + buildURLFromParts: function(t) { + return t.scheme + t.netLoc + t.path + t.params + t.query + t.fragment + } + }; + var c = d.exports; + + function u(t, e) { + var s = Object.keys(t); + if (Object.getOwnPropertySymbols) { + var i = Object.getOwnPropertySymbols(t); + e && (i = i.filter((function(e) { + return Object.getOwnPropertyDescriptor(t, e).enumerable + }))), s.push.apply(s, i) + } + return s + } + + function f(t) { + for (var e = 1; e < arguments.length; e++) { + var s = null != arguments[e] ? arguments[e] : {}; + e % 2 ? u(Object(s), !0).forEach((function(e) { + g(t, e, s[e]) + })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(s)) : u(Object(s)).forEach((function(e) { + Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(s, e)) + })) + } + return t + } + + function g(t, e, s) { + return (e = "symbol" == typeof(i = function(t, e) { + if ("object" != typeof t || !t) return t; + var s = t[Symbol.toPrimitive]; + if (void 0 !== s) { + var i = s.call(t, e); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value.") + } + return String(t) + }(e, "string")) ? i : String(i)) in t ? Object.defineProperty(t, e, { + value: s, + enumerable: !0, + configurable: !0, + writable: !0 + }) : t[e] = s, t; + var i + } + + function m() { + return m = Object.assign ? Object.assign.bind() : function(t) { + for (var e = 1; e < arguments.length; e++) { + var s = arguments[e]; + for (var i in s) Object.prototype.hasOwnProperty.call(s, i) && (t[i] = s[i]) + } + return t + }, m.apply(this, arguments) + } + const p = Number.isFinite || function(t) { + return "number" == typeof t && isFinite(t) + }, + y = Number.isSafeInteger || function(t) { + return "number" == typeof t && Math.abs(t) <= v + }, + v = Number.MAX_SAFE_INTEGER || 9007199254740991; + let E = function(t) { + return t.MEDIA_ATTACHING = "hlsMediaAttaching", t.MEDIA_ATTACHED = "hlsMediaAttached", t.MEDIA_DETACHING = "hlsMediaDetaching", t.MEDIA_DETACHED = "hlsMediaDetached", t.BUFFER_RESET = "hlsBufferReset", t.BUFFER_CODECS = "hlsBufferCodecs", t.BUFFER_CREATED = "hlsBufferCreated", t.BUFFER_APPENDING = "hlsBufferAppending", t.BUFFER_APPENDED = "hlsBufferAppended", t.BUFFER_EOS = "hlsBufferEos", t.BUFFER_FLUSHING = "hlsBufferFlushing", t.BUFFER_FLUSHED = "hlsBufferFlushed", t.MANIFEST_LOADING = "hlsManifestLoading", t.MANIFEST_LOADED = "hlsManifestLoaded", t.MANIFEST_PARSED = "hlsManifestParsed", t.LEVEL_SWITCHING = "hlsLevelSwitching", t.LEVEL_SWITCHED = "hlsLevelSwitched", t.LEVEL_LOADING = "hlsLevelLoading", t.LEVEL_LOADED = "hlsLevelLoaded", t.LEVEL_UPDATED = "hlsLevelUpdated", t.LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated", t.LEVELS_UPDATED = "hlsLevelsUpdated", t.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", t.AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching", t.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", t.AUDIO_TRACK_LOADING = "hlsAudioTrackLoading", t.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", t.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", t.SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared", t.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", t.SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading", t.SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded", t.SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed", t.CUES_PARSED = "hlsCuesParsed", t.NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound", t.INIT_PTS_FOUND = "hlsInitPtsFound", t.FRAG_LOADING = "hlsFragLoading", t.FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted", t.FRAG_LOADED = "hlsFragLoaded", t.FRAG_DECRYPTED = "hlsFragDecrypted", t.FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", t.FRAG_PARSING_USERDATA = "hlsFragParsingUserdata", t.FRAG_PARSING_METADATA = "hlsFragParsingMetadata", t.FRAG_PARSED = "hlsFragParsed", t.FRAG_BUFFERED = "hlsFragBuffered", t.FRAG_CHANGED = "hlsFragChanged", t.FPS_DROP = "hlsFpsDrop", t.FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping", t.MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated", t.ERROR = "hlsError", t.DESTROYING = "hlsDestroying", t.KEY_LOADING = "hlsKeyLoading", t.KEY_LOADED = "hlsKeyLoaded", t.LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached", t.BACK_BUFFER_REACHED = "hlsBackBufferReached", t.STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded", t + }({}), + T = function(t) { + return t.NETWORK_ERROR = "networkError", t.MEDIA_ERROR = "mediaError", t.KEY_SYSTEM_ERROR = "keySystemError", t.MUX_ERROR = "muxError", t.OTHER_ERROR = "otherError", t + }({}), + S = function(t) { + return t.KEY_SYSTEM_NO_KEYS = "keySystemNoKeys", t.KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess", t.KEY_SYSTEM_NO_SESSION = "keySystemNoSession", t.KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense", t.KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed", t.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed", t.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed", t.KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed", t.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted", t.KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError", t.MANIFEST_LOAD_ERROR = "manifestLoadError", t.MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut", t.MANIFEST_PARSING_ERROR = "manifestParsingError", t.MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError", t.LEVEL_EMPTY_ERROR = "levelEmptyError", t.LEVEL_LOAD_ERROR = "levelLoadError", t.LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut", t.LEVEL_PARSING_ERROR = "levelParsingError", t.LEVEL_SWITCH_ERROR = "levelSwitchError", t.AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError", t.AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut", t.SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError", t.SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut", t.FRAG_LOAD_ERROR = "fragLoadError", t.FRAG_LOAD_TIMEOUT = "fragLoadTimeOut", t.FRAG_DECRYPT_ERROR = "fragDecryptError", t.FRAG_PARSING_ERROR = "fragParsingError", t.FRAG_GAP = "fragGap", t.REMUX_ALLOC_ERROR = "remuxAllocError", t.KEY_LOAD_ERROR = "keyLoadError", t.KEY_LOAD_TIMEOUT = "keyLoadTimeOut", t.BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError", t.BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError", t.BUFFER_APPEND_ERROR = "bufferAppendError", t.BUFFER_APPENDING_ERROR = "bufferAppendingError", t.BUFFER_STALLED_ERROR = "bufferStalledError", t.BUFFER_FULL_ERROR = "bufferFullError", t.BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole", t.BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall", t.INTERNAL_EXCEPTION = "internalException", t.INTERNAL_ABORTED = "aborted", t.UNKNOWN = "unknown", t + }({}); + const L = function() {}, + A = { + trace: L, + debug: L, + log: L, + warn: L, + info: L, + error: L + }; + let R = A; + const b = R, + D = /^(\d+)x(\d+)$/, + k = /(.+?)=(".*?"|.*?)(?:,|$)/g; + class I { + constructor(t) { + "string" == typeof t && (t = I.parseAttrList(t)), m(this, t) + } + get clientAttrs() { + return Object.keys(this).filter((t => "X-" === t.substring(0, 2))) + } + decimalInteger(t) { + const e = parseInt(this[t], 10); + return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e + } + hexadecimalInteger(t) { + if (this[t]) { + let e = (this[t] || "0x").slice(2); + e = (1 & e.length ? "0" : "") + e; + const s = new Uint8Array(e.length / 2); + for (let t = 0; t < e.length / 2; t++) s[t] = parseInt(e.slice(2 * t, 2 * t + 2), 16); + return s + } + return null + } + hexadecimalIntegerAsNumber(t) { + const e = parseInt(this[t], 16); + return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e + } + decimalFloatingPoint(t) { + return parseFloat(this[t]) + } + optionalFloat(t, e) { + const s = this[t]; + return s ? parseFloat(s) : e + } + enumeratedString(t) { + return this[t] + } + bool(t) { + return "YES" === this[t] + } + decimalResolution(t) { + const e = D.exec(this[t]); + if (null !== e) return { + width: parseInt(e[1], 10), + height: parseInt(e[2], 10) + } + } + static parseAttrList(t) { + let e; + const s = {}; + for (k.lastIndex = 0; null !== (e = k.exec(t));) { + let t = e[2]; + 0 === t.indexOf('"') && t.lastIndexOf('"') === t.length - 1 && (t = t.slice(1, -1)), s[e[1].trim()] = t + } + return s + } + } + + function C(t) { + return "SCTE35-OUT" === t || "SCTE35-IN" === t + } + class w { + constructor(t, e) { + if (this.attr = void 0, this._startDate = void 0, this._endDate = void 0, this._badValueForSameId = void 0, e) { + const s = e.attr; + for (const e in s) + if (Object.prototype.hasOwnProperty.call(t, e) && t[e] !== s[e]) { + b.warn(`DATERANGE tag attribute: "${e}" does not match for tags with ID: "${t.ID}"`), this._badValueForSameId = e; + break + } t = m(new I({}), s, t) + } + if (this.attr = t, this._startDate = new Date(t["START-DATE"]), "END-DATE" in this.attr) { + const t = new Date(this.attr["END-DATE"]); + p(t.getTime()) && (this._endDate = t) + } + } + get id() { + return this.attr.ID + } + get class() { + return this.attr.CLASS + } + get startDate() { + return this._startDate + } + get endDate() { + if (this._endDate) return this._endDate; + const t = this.duration; + return null !== t ? new Date(this._startDate.getTime() + 1e3 * t) : null + } + get duration() { + if ("DURATION" in this.attr) { + const t = this.attr.decimalFloatingPoint("DURATION"); + if (p(t)) return t + } else if (this._endDate) return (this._endDate.getTime() - this._startDate.getTime()) / 1e3; + return null + } + get plannedDuration() { + return "PLANNED-DURATION" in this.attr ? this.attr.decimalFloatingPoint("PLANNED-DURATION") : null + } + get endOnNext() { + return this.attr.bool("END-ON-NEXT") + } + get isValid() { + return !!this.id && !this._badValueForSameId && p(this.startDate.getTime()) && (null === this.duration || this.duration >= 0) && (!this.endOnNext || !!this.class) + } + } + class _ { + constructor() { + this.aborted = !1, this.loaded = 0, this.retry = 0, this.total = 0, this.chunkCount = 0, this.bwEstimate = 0, this.loading = { + start: 0, + first: 0, + end: 0 + }, this.parsing = { + start: 0, + end: 0 + }, this.buffering = { + start: 0, + first: 0, + end: 0 + } + } + } + var x = "audio", + P = "video", + M = "audiovideo"; + class F { + constructor(t) { + this._byteRange = null, this._url = null, this.baseurl = void 0, this.relurl = void 0, this.elementaryStreams = { + [x]: null, + [P]: null, + [M]: null + }, this.baseurl = t + } + setByteRange(t, e) { + const s = t.split("@", 2); + let i; + i = 1 === s.length ? (null == e ? void 0 : e.byteRangeEndOffset) || 0 : parseInt(s[1]), this._byteRange = [i, parseInt(s[0]) + i] + } + get byteRange() { + return this._byteRange ? this._byteRange : [] + } + get byteRangeStartOffset() { + return this.byteRange[0] + } + get byteRangeEndOffset() { + return this.byteRange[1] + } + get url() { + return !this._url && this.baseurl && this.relurl && (this._url = c.buildAbsoluteURL(this.baseurl, this.relurl, { + alwaysNormalize: !0 + })), this._url || "" + } + set url(t) { + this._url = t + } + } + class O extends F { + constructor(t, e) { + super(e), this._decryptdata = null, this.rawProgramDateTime = null, this.programDateTime = null, this.tagList = [], this.duration = 0, this.sn = 0, this.levelkeys = void 0, this.type = void 0, this.loader = null, this.keyLoader = null, this.level = -1, this.cc = 0, this.startPTS = void 0, this.endPTS = void 0, this.startDTS = void 0, this.endDTS = void 0, this.start = 0, this.deltaPTS = void 0, this.maxStartPTS = void 0, this.minEndPTS = void 0, this.stats = new _, this.data = void 0, this.bitrateTest = !1, this.title = null, this.initSegment = null, this.endList = void 0, this.gap = void 0, this.urlId = 0, this.type = t + } + get decryptdata() { + const { + levelkeys: t + } = this; + if (!t && !this._decryptdata) return null; + if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) { + const t = this.levelkeys.identity; + if (t) this._decryptdata = t.getDecryptData(this.sn); + else { + const t = Object.keys(this.levelkeys); + if (1 === t.length) return this._decryptdata = this.levelkeys[t[0]].getDecryptData(this.sn) + } + } + return this._decryptdata + } + get end() { + return this.start + this.duration + } + get endProgramDateTime() { + if (null === this.programDateTime) return null; + if (!p(this.programDateTime)) return null; + const t = p(this.duration) ? this.duration : 0; + return this.programDateTime + 1e3 * t + } + get encrypted() { + var t; + if (null != (t = this._decryptdata) && t.encrypted) return !0; + if (this.levelkeys) { + const t = Object.keys(this.levelkeys), + e = t.length; + if (e > 1 || 1 === e && this.levelkeys[t[0]].encrypted) return !0 + } + return !1 + } + setKeyFormat(t) { + if (this.levelkeys) { + const e = this.levelkeys[t]; + e && !this._decryptdata && (this._decryptdata = e.getDecryptData(this.sn)) + } + } + abortRequests() { + var t, e; + null == (t = this.loader) || t.abort(), null == (e = this.keyLoader) || e.abort() + } + setElementaryStreamInfo(t, e, s, i, r, n = !1) { + const { + elementaryStreams: a + } = this, o = a[t]; + o ? (o.startPTS = Math.min(o.startPTS, e), o.endPTS = Math.max(o.endPTS, s), o.startDTS = Math.min(o.startDTS, i), o.endDTS = Math.max(o.endDTS, r)) : a[t] = { + startPTS: e, + endPTS: s, + startDTS: i, + endDTS: r, + partial: n + } + } + clearElementaryStreamInfo() { + const { + elementaryStreams: t + } = this; + t.audio = null, t.video = null, t.audiovideo = null + } + } + class N extends F { + constructor(t, e, s, i, r) { + super(s), this.fragOffset = 0, this.duration = 0, this.gap = !1, this.independent = !1, this.relurl = void 0, this.fragment = void 0, this.index = void 0, this.stats = new _, this.duration = t.decimalFloatingPoint("DURATION"), this.gap = t.bool("GAP"), this.independent = t.bool("INDEPENDENT"), this.relurl = t.enumeratedString("URI"), this.fragment = e, this.index = i; + const n = t.enumeratedString("BYTERANGE"); + n && this.setByteRange(n, r), r && (this.fragOffset = r.fragOffset + r.duration) + } + get start() { + return this.fragment.start + this.fragOffset + } + get end() { + return this.start + this.duration + } + get loaded() { + const { + elementaryStreams: t + } = this; + return !!(t.audio || t.video || t.audiovideo) + } + } + class U { + constructor(t) { + this.PTSKnown = !1, this.alignedSliding = !1, this.averagetargetduration = void 0, this.endCC = 0, this.endSN = 0, this.fragments = void 0, this.fragmentHint = void 0, this.partList = null, this.dateRanges = void 0, this.live = !0, this.ageHeader = 0, this.advancedDateTime = void 0, this.updated = !0, this.advanced = !0, this.availabilityDelay = void 0, this.misses = 0, this.startCC = 0, this.startSN = 0, this.startTimeOffset = null, this.targetduration = 0, this.totalduration = 0, this.type = null, this.url = void 0, this.m3u8 = "", this.version = null, this.canBlockReload = !1, this.canSkipUntil = 0, this.canSkipDateRanges = !1, this.skippedSegments = 0, this.recentlyRemovedDateranges = void 0, this.partHoldBack = 0, this.holdBack = 0, this.partTarget = 0, this.preloadHint = void 0, this.renditionReports = void 0, this.tuneInGoal = 0, this.deltaUpdateFailed = void 0, this.driftStartTime = 0, this.driftEndTime = 0, this.driftStart = 0, this.driftEnd = 0, this.encryptedFragments = void 0, this.playlistParsingError = null, this.variableList = null, this.hasVariableRefs = !1, this.fragments = [], this.encryptedFragments = [], this.dateRanges = {}, this.url = t + } + reloaded(t) { + if (!t) return this.advanced = !0, void(this.updated = !0); + const e = this.lastPartSn - t.lastPartSn, + s = this.lastPartIndex - t.lastPartIndex; + this.updated = this.endSN !== t.endSN || !!s || !!e || !this.live, this.advanced = this.endSN > t.endSN || e > 0 || 0 === e && s > 0, this.updated || this.advanced ? this.misses = Math.floor(.6 * t.misses) : this.misses = t.misses + 1, this.availabilityDelay = t.availabilityDelay + } + get hasProgramDateTime() { + return !!this.fragments.length && p(this.fragments[this.fragments.length - 1].programDateTime) + } + get levelTargetDuration() { + return this.averagetargetduration || this.targetduration || 10 + } + get drift() { + const t = this.driftEndTime - this.driftStartTime; + return t > 0 ? 1e3 * (this.driftEnd - this.driftStart) / t : 1 + } + get edge() { + return this.partEnd || this.fragmentEnd + } + get partEnd() { + var t; + return null != (t = this.partList) && t.length ? this.partList[this.partList.length - 1].end : this.fragmentEnd + } + get fragmentEnd() { + var t; + return null != (t = this.fragments) && t.length ? this.fragments[this.fragments.length - 1].end : 0 + } + get age() { + return this.advancedDateTime ? Math.max(Date.now() - this.advancedDateTime, 0) / 1e3 : 0 + } + get lastPartIndex() { + var t; + return null != (t = this.partList) && t.length ? this.partList[this.partList.length - 1].index : -1 + } + get lastPartSn() { + var t; + return null != (t = this.partList) && t.length ? this.partList[this.partList.length - 1].fragment.sn : this.endSN + } + } + + function B(t) { + return Uint8Array.from(atob(t), (t => t.charCodeAt(0))) + } + + function $(t) { + return Uint8Array.from(unescape(encodeURIComponent(t)), (t => t.charCodeAt(0))) + } + const G = "undefined" != typeof self ? self : void 0; + var K = { + CLEARKEY: "org.w3.clearkey", + FAIRPLAY: "com.apple.fps", + PLAYREADY: "com.microsoft.playready", + WIDEVINE: "com.widevine.alpha" + }, + H = { + CLEARKEY: "org.w3.clearkey", + FAIRPLAY: "com.apple.streamingkeydelivery", + PLAYREADY: "com.microsoft.playready", + WIDEVINE: "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" + }; + + function V(t) { + switch (t) { + case H.FAIRPLAY: + return K.FAIRPLAY; + case H.PLAYREADY: + return K.PLAYREADY; + case H.WIDEVINE: + return K.WIDEVINE; + case H.CLEARKEY: + return K.CLEARKEY + } + } + var Y = "edef8ba979d64acea3c827dcd51d21ed"; + + function W(t) { + switch (t) { + case K.FAIRPLAY: + return H.FAIRPLAY; + case K.PLAYREADY: + return H.PLAYREADY; + case K.WIDEVINE: + return H.WIDEVINE; + case K.CLEARKEY: + return H.CLEARKEY + } + } + + function j(t) { + const { + drmSystems: e, + widevineLicenseUrl: s + } = t, i = e ? [K.FAIRPLAY, K.WIDEVINE, K.PLAYREADY, K.CLEARKEY].filter((t => !!e[t])) : []; + return !i[K.WIDEVINE] && s && i.push(K.WIDEVINE), i + } + const q = null != G && null != (X = G.navigator) && X.requestMediaKeySystemAccess ? self.navigator.requestMediaKeySystemAccess.bind(self.navigator) : null; + var X; + + function z(t, e, s) { + return Uint8Array.prototype.slice ? t.slice(e, s) : new Uint8Array(Array.prototype.slice.call(t, e, s)) + } + const Q = (t, e) => e + 10 <= t.length && 73 === t[e] && 68 === t[e + 1] && 51 === t[e + 2] && t[e + 3] < 255 && t[e + 4] < 255 && t[e + 6] < 128 && t[e + 7] < 128 && t[e + 8] < 128 && t[e + 9] < 128, + J = (t, e) => e + 10 <= t.length && 51 === t[e] && 68 === t[e + 1] && 73 === t[e + 2] && t[e + 3] < 255 && t[e + 4] < 255 && t[e + 6] < 128 && t[e + 7] < 128 && t[e + 8] < 128 && t[e + 9] < 128, + Z = (t, e) => { + const s = e; + let i = 0; + for (; Q(t, e);) i += 10, i += tt(t, e + 6), J(t, e + 10) && (i += 10), e += i; + if (i > 0) return t.subarray(s, s + i) + }, + tt = (t, e) => { + let s = 0; + return s = (127 & t[e]) << 21, s |= (127 & t[e + 1]) << 14, s |= (127 & t[e + 2]) << 7, s |= 127 & t[e + 3], s + }, + et = (t, e) => Q(t, e) && tt(t, e + 6) + 10 <= t.length - e, + st = t => { + const e = nt(t); + for (let t = 0; t < e.length; t++) { + const s = e[t]; + if (it(s)) return dt(s) + } + }, + it = t => t && "PRIV" === t.key && "com.apple.streaming.transportStreamTimestamp" === t.info, + rt = t => { + const e = String.fromCharCode(t[0], t[1], t[2], t[3]), + s = tt(t, 4); + return { + type: e, + size: s, + data: t.subarray(10, 10 + s) + } + }, + nt = t => { + let e = 0; + const s = []; + for (; Q(t, e);) { + const i = tt(t, e + 6); + e += 10; + const r = e + i; + for (; e + 8 < r;) { + const i = rt(t.subarray(e)), + r = at(i); + r && s.push(r), e += i.size + 10 + } + J(t, e) && (e += 10) + } + return s + }, + at = t => "PRIV" === t.type ? ot(t) : "W" === t.type[0] ? ht(t) : lt(t), + ot = t => { + if (t.size < 2) return; + const e = ct(t.data, !0), + s = new Uint8Array(t.data.subarray(e.length + 1)); + return { + key: t.type, + info: e, + data: s.buffer + } + }, + lt = t => { + if (t.size < 2) return; + if ("TXXX" === t.type) { + let e = 1; + const s = ct(t.data.subarray(e), !0); + e += s.length + 1; + const i = ct(t.data.subarray(e)); + return { + key: t.type, + info: s, + data: i + } + } + const e = ct(t.data.subarray(1)); + return { + key: t.type, + data: e + } + }, + ht = t => { + if ("WXXX" === t.type) { + if (t.size < 2) return; + let e = 1; + const s = ct(t.data.subarray(e), !0); + e += s.length + 1; + const i = ct(t.data.subarray(e)); + return { + key: t.type, + info: s, + data: i + } + } + const e = ct(t.data); + return { + key: t.type, + data: e + } + }, + dt = t => { + if (8 === t.data.byteLength) { + const e = new Uint8Array(t.data), + s = 1 & e[3]; + let i = (e[4] << 23) + (e[5] << 15) + (e[6] << 7) + e[7]; + return i /= 45, s && (i += 47721858.84), Math.round(i) + } + }, + ct = (t, e = !1) => { + const s = ft(); + if (s) { + const i = s.decode(t); + if (e) { + const t = i.indexOf("\0"); + return -1 !== t ? i.substring(0, t) : i + } + return i.replace(/\0/g, "") + } + const i = t.length; + let r, n, a, o = "", + l = 0; + for (; l < i;) { + if (r = t[l++], 0 === r && e) return o; + if (0 !== r && 3 !== r) switch (r >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + o += String.fromCharCode(r); + break; + case 12: + case 13: + n = t[l++], o += String.fromCharCode((31 & r) << 6 | 63 & n); + break; + case 14: + n = t[l++], a = t[l++], o += String.fromCharCode((15 & r) << 12 | (63 & n) << 6 | (63 & a) << 0) + } + } + return o + }; + let ut; + + function ft() { + if (!navigator.userAgent.includes("PlayStation 4")) return ut || void 0 === self.TextDecoder || (ut = new self.TextDecoder("utf-8")), ut + } + const gt = function(t) { + let e = ""; + for (let s = 0; s < t.length; s++) { + let i = t[s].toString(16); + i.length < 2 && (i = "0" + i), e += i + } + return e + }, + mt = Math.pow(2, 32) - 1, + pt = [].push, + yt = { + video: 1, + audio: 2, + id3: 3, + text: 4 + }; + + function vt(t) { + return String.fromCharCode.apply(null, t) + } + + function Et(t, e) { + const s = t[e] << 8 | t[e + 1]; + return s < 0 ? 65536 + s : s + } + + function Tt(t, e) { + const s = Lt(t, e); + return s < 0 ? 4294967296 + s : s + } + + function St(t, e) { + let s = Tt(t, e); + return s *= Math.pow(2, 32), s += Tt(t, e + 4), s + } + + function Lt(t, e) { + return t[e] << 24 | t[e + 1] << 16 | t[e + 2] << 8 | t[e + 3] + } + + function At(t, e, s) { + t[e] = s >> 24, t[e + 1] = s >> 16 & 255, t[e + 2] = s >> 8 & 255, t[e + 3] = 255 & s + } + + function Rt(t, e) { + const s = []; + if (!e.length) return s; + const i = t.byteLength; + for (let r = 0; r < i;) { + const n = Tt(t, r), + a = n > 1 ? r + n : i; + if (vt(t.subarray(r + 4, r + 8)) === e[0]) + if (1 === e.length) s.push(t.subarray(r + 8, a)); + else { + const i = Rt(t.subarray(r + 8, a), e.slice(1)); + i.length && pt.apply(s, i) + } r = a + } + return s + } + + function bt(t) { + const e = [], + s = t[0]; + let i = 8; + const r = Tt(t, i); + i += 4; + let n = 0, + a = 0; + 0 === s ? (n = Tt(t, i), a = Tt(t, i + 4), i += 8) : (n = St(t, i), a = St(t, i + 8), i += 16), i += 2; + let o = t.length + a; + const l = Et(t, i); + i += 2; + for (let s = 0; s < l; s++) { + let s = i; + const n = Tt(t, s); + s += 4; + const a = 2147483647 & n; + if (1 == (2147483648 & n) >>> 31) return b.warn("SIDX has hierarchical references (not supported)"), null; + const l = Tt(t, s); + s += 4, e.push({ + referenceSize: a, + subsegmentDuration: l, + info: { + duration: l / r, + start: o, + end: o + a - 1 + } + }), o += a, s += 4, i = s + } + return { + earliestPresentationTime: n, + timescale: r, + version: s, + referencesCount: l, + references: e + } + } + + function Dt(t) { + const e = [], + s = Rt(t, ["moov", "trak"]); + for (let t = 0; t < s.length; t++) { + const i = s[t], + r = Rt(i, ["tkhd"])[0]; + if (r) { + let t = r[0]; + const s = Tt(r, 0 === t ? 12 : 20), + n = Rt(i, ["mdia", "mdhd"])[0]; + if (n) { + t = n[0]; + const r = Tt(n, 0 === t ? 12 : 20), + a = Rt(i, ["mdia", "hdlr"])[0]; + if (a) { + const t = vt(a.subarray(8, 12)), + n = { + soun: x, + vide: P + } [t]; + if (n) { + const t = kt(Rt(i, ["mdia", "minf", "stbl", "stsd"])[0]); + e[s] = { + timescale: r, + type: n + }, e[n] = f({ + timescale: r, + id: s + }, t) + } + } + } + } + } + return Rt(t, ["moov", "mvex", "trex"]).forEach((t => { + const s = Tt(t, 4), + i = e[s]; + i && (i.default = { + duration: Tt(t, 12), + flags: Tt(t, 20) + }) + })), e + } + + function kt(t) { + const e = t.subarray(8), + s = e.subarray(86), + i = vt(e.subarray(4, 8)); + let r = i; + const n = "enca" === i || "encv" === i; + if (n) { + const t = Rt(e, [i])[0]; + Rt(t.subarray("enca" === i ? 28 : 78), ["sinf"]).forEach((t => { + const e = Rt(t, ["schm"])[0]; + if (e) { + const s = vt(e.subarray(4, 8)); + if ("cbcs" === s || "cenc" === s) { + const e = Rt(t, ["frma"])[0]; + e && (r = vt(e)) + } + } + })) + } + switch (r) { + case "avc1": + case "avc2": + case "avc3": + case "avc4": { + const t = Rt(s, ["avcC"])[0]; + r += "." + Ct(t[1]) + Ct(t[2]) + Ct(t[3]); + break + } + case "mp4a": { + const t = Rt(e, [i])[0], + s = Rt(t.subarray(28), ["esds"])[0]; + if (s && s.length > 12) { + let t = 4; + if (3 !== s[t++]) break; + t = It(s, t), t += 2; + const e = s[t++]; + if (128 & e && (t += 2), 64 & e && (t += s[t++]), 4 !== s[t++]) break; + t = It(s, t); + const i = s[t++]; + if (64 !== i) break; + if (r += "." + Ct(i), t += 12, 5 !== s[t++]) break; + t = It(s, t); + const n = s[t++]; + let a = (248 & n) >> 3; + 31 === a && (a += 1 + ((7 & n) << 3) + ((224 & s[t]) >> 5)), r += "." + a + } + break + } + case "hvc1": + case "hev1": { + const t = Rt(s, ["hvcC"])[0], + e = t[1], + i = ["", "A", "B", "C"][e >> 6], + n = 31 & e, + a = Tt(t, 2), + o = (32 & e) >> 5 ? "H" : "L", + l = t[12], + h = t.subarray(6, 12); + r += "." + i + n, r += "." + a.toString(16).toUpperCase(), r += "." + o + l; + let d = ""; + for (let t = h.length; t--;) { + const e = h[t]; + (e || d) && (d = "." + e.toString(16).toUpperCase() + d) + } + r += d; + break + } + case "dvh1": + case "dvhe": { + const t = Rt(s, ["dvcC"])[0], + e = t[2] >> 1 & 127, + i = t[2] << 5 & 32 | t[3] >> 3 & 31; + r += "." + wt(e) + "." + wt(i); + break + } + case "vp09": { + const t = Rt(s, ["vpcC"])[0], + e = t[4], + i = t[5], + n = t[6] >> 4 & 15; + r += "." + wt(e) + "." + wt(i) + "." + wt(n); + break + } + case "av01": { + const t = Rt(s, ["av1C"])[0], + e = t[1] >>> 5, + i = 31 & t[1], + n = t[2] >>> 7 ? "H" : "M", + a = (64 & t[2]) >> 6, + o = (32 & t[2]) >> 5, + l = 2 === e && a ? o ? 12 : 10 : a ? 10 : 8, + h = (16 & t[2]) >> 4, + d = (8 & t[2]) >> 3, + c = (4 & t[2]) >> 2, + u = 3 & t[2], + f = 1, + g = 1, + m = 1, + p = 0; + r += "." + e + "." + wt(i) + n + "." + wt(l) + "." + h + "." + d + c + u + "." + wt(f) + "." + wt(g) + "." + wt(m) + "." + p; + break + } + } + return { + codec: r, + encrypted: n + } + } + + function It(t, e) { + const s = e + 5; + for (; 128 & t[e++] && e < s;); + return e + } + + function Ct(t) { + return ("0" + t.toString(16).toUpperCase()).slice(-2) + } + + function wt(t) { + return (t < 10 ? "0" : "") + t + } + + function _t(t) { + const e = Rt(t, ["schm"])[0]; + if (e) { + const s = vt(e.subarray(4, 8)); + if ("cbcs" === s || "cenc" === s) return Rt(t, ["schi", "tenc"])[0] + } + return b.error("[eme] missing 'schm' box"), null + } + + function xt(t) { + const e = Tt(t, 0); + let s = 8; + 1 & e && (s += 4), 4 & e && (s += 4); + let i = 0; + const r = Tt(t, 4); + for (let n = 0; n < r; n++) 256 & e && (i += Tt(t, s), s += 4), 512 & e && (s += 4), 1024 & e && (s += 4), 2048 & e && (s += 4); + return i + } + + function Pt(t, e) { + const s = new Uint8Array(t.length + e.length); + return s.set(t), s.set(e, t.length), s + } + + function Mt(t, e) { + const s = [], + i = e.samples, + r = e.timescale, + n = e.id; + let a = !1; + return Rt(i, ["moof"]).map((o => { + const l = o.byteOffset - 8; + Rt(o, ["traf"]).map((o => { + const h = Rt(o, ["tfdt"]).map((t => { + const e = t[0]; + let s = Tt(t, 4); + return 1 === e && (s *= Math.pow(2, 32), s += Tt(t, 8)), s / r + }))[0]; + return void 0 !== h && (t = h), Rt(o, ["tfhd"]).map((h => { + const d = Tt(h, 4), + c = 16777215 & Tt(h, 0); + let u = 0; + const f = 0 != (16 & c); + let g = 0; + const m = 0 != (32 & c); + let p = 8; + d === n && (0 != (1 & c) && (p += 8), 0 != (2 & c) && (p += 4), 0 != (8 & c) && (u = Tt(h, p), p += 4), f && (g = Tt(h, p), p += 4), m && (p += 4), "video" === e.type && (a = function(t) { + if (!t) return !1; + const e = t.indexOf("."), + s = e < 0 ? t : t.substring(0, e); + return "hvc1" === s || "hev1" === s || "dvh1" === s || "dvhe" === s + }(e.codec)), Rt(o, ["trun"]).map((n => { + const o = n[0], + h = 16777215 & Tt(n, 0), + d = 0 != (1 & h); + let c = 0; + const f = 0 != (4 & h), + m = 0 != (256 & h); + let p = 0; + const y = 0 != (512 & h); + let v = 0; + const E = 0 != (1024 & h), + T = 0 != (2048 & h); + let S = 0; + const L = Tt(n, 4); + let A = 8; + d && (c = Tt(n, A), A += 4), f && (A += 4); + let R = c + l; + for (let l = 0; l < L; l++) { + if (m ? (p = Tt(n, A), A += 4) : p = u, y ? (v = Tt(n, A), A += 4) : v = g, E && (A += 4), T && (S = 0 === o ? Tt(n, A) : Lt(n, A), A += 4), e.type === P) { + let e = 0; + for (; e < v;) { + const n = Tt(i, R); + R += 4, Ft(a, i[R]) && Ot(i.subarray(R, R + n), a ? 2 : 1, t + S / r, s), R += n, e += n + 4 + } + } + t += p / r + } + }))) + })) + })) + })), s + } + + function Ft(t, e) { + if (t) { + const t = e >> 1 & 63; + return 39 === t || 40 === t + } + return 6 == (31 & e) + } + + function Ot(t, e, s, i) { + const r = Nt(t); + let n = 0; + n += e; + let a = 0, + o = 0, + l = 0; + for (; n < r.length;) { + a = 0; + do { + if (n >= r.length) break; + l = r[n++], a += l + } while (255 === l); + o = 0; + do { + if (n >= r.length) break; + l = r[n++], o += l + } while (255 === l); + const t = r.length - n; + let e = n; + if (o < t) n += o; + else if (o > t) { + b.error(`Malformed SEI payload. ${o} is too small, only ${t} bytes left to parse.`); + break + } + if (4 === a) { + if (181 === r[e++]) { + const t = Et(r, e); + if (e += 2, 49 === t) { + const t = Tt(r, e); + if (e += 4, 1195456820 === t) { + const t = r[e++]; + if (3 === t) { + const n = r[e++], + o = 31 & n, + l = 64 & n, + h = l ? 2 + 3 * o : 0, + d = new Uint8Array(h); + if (l) { + d[0] = n; + for (let t = 1; t < h; t++) d[t] = r[e++] + } + i.push({ + type: t, + payloadType: a, + pts: s, + bytes: d + }) + } + } + } + } + } else if (5 === a && o > 16) { + const t = []; + for (let s = 0; s < 16; s++) { + const i = r[e++].toString(16); + t.push(1 == i.length ? "0" + i : i), 3 !== s && 5 !== s && 7 !== s && 9 !== s || t.push("-") + } + const n = o - 16, + l = new Uint8Array(n); + for (let t = 0; t < n; t++) l[t] = r[e++]; + i.push({ + payloadType: a, + pts: s, + uuid: t.join(""), + userData: ct(l), + userDataBytes: l + }) + } + } + } + + function Nt(t) { + const e = t.byteLength, + s = []; + let i = 1; + for (; i < e - 2;) 0 === t[i] && 0 === t[i + 1] && 3 === t[i + 2] ? (s.push(i + 2), i += 2) : i++; + if (0 === s.length) return t; + const r = e - s.length, + n = new Uint8Array(r); + let a = 0; + for (i = 0; i < r; a++, i++) a === s[0] && (a++, s.shift()), n[i] = t[a]; + return n + } + let Ut = {}; + class Bt { + static clearKeyUriToKeyIdMap() { + Ut = {} + } + constructor(t, e, s, i = [1], r = null) { + this.uri = void 0, this.method = void 0, this.keyFormat = void 0, this.keyFormatVersions = void 0, this.encrypted = void 0, this.isCommonEncryption = void 0, this.iv = null, this.key = null, this.keyId = null, this.pssh = null, this.method = t, this.uri = e, this.keyFormat = s, this.keyFormatVersions = i, this.iv = r, this.encrypted = !!t && "NONE" !== t, this.isCommonEncryption = this.encrypted && "AES-128" !== t + } + isSupported() { + if (this.method) { + if ("AES-128" === this.method || "NONE" === this.method) return !0; + if ("identity" === this.keyFormat) return "SAMPLE-AES" === this.method; + switch (this.keyFormat) { + case H.FAIRPLAY: + case H.WIDEVINE: + case H.PLAYREADY: + case H.CLEARKEY: + return -1 !== ["ISO-23001-7", "SAMPLE-AES", "SAMPLE-AES-CENC", "SAMPLE-AES-CTR"].indexOf(this.method) + } + } + return !1 + } + getDecryptData(t) { + if (!this.encrypted || !this.uri) return null; + if ("AES-128" === this.method && this.uri && !this.iv) { + "number" != typeof t && ("AES-128" !== this.method || this.iv || b.warn(`missing IV for initialization segment with method="${this.method}" - compliance issue`), t = 0); + const e = function(t) { + const e = new Uint8Array(16); + for (let s = 12; s < 16; s++) e[s] = t >> 8 * (15 - s) & 255; + return e + }(t); + return new Bt(this.method, this.uri, "identity", this.keyFormatVersions, e) + } + const e = function(t) { + const e = t.split(":"); + let s = null; + if ("data" === e[0] && 2 === e.length) { + const t = e[1].split(";"), + i = t[t.length - 1].split(","); + if (2 === i.length) { + const e = "base64" === i[0], + r = i[1]; + e ? (t.splice(-1, 1), s = B(r)) : s = function(t) { + const e = $(t).subarray(0, 16), + s = new Uint8Array(16); + return s.set(e, 16 - e.length), s + }(r) + } + } + return s + }(this.uri); + if (e) switch (this.keyFormat) { + case H.WIDEVINE: + this.pssh = e, e.length >= 22 && (this.keyId = e.subarray(e.length - 22, e.length - 6)); + break; + case H.PLAYREADY: { + const t = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]); + this.pssh = function(t, e, s) { + if (16 !== t.byteLength) throw new RangeError("Invalid system id"); + let i, r, n; + if (e) { + i = 1, r = new Uint8Array(16 * e.length); + for (let t = 0; t < e.length; t++) { + const s = e[t]; + if (16 !== s.byteLength) throw new RangeError("Invalid key"); + r.set(s, 16 * t) + } + } else i = 0, r = new Uint8Array; + i > 0 ? (n = new Uint8Array(4), e.length > 0 && new DataView(n.buffer).setUint32(0, e.length, !1)) : n = new Uint8Array; + const a = new Uint8Array(4); + return s && s.byteLength > 0 && new DataView(a.buffer).setUint32(0, s.byteLength, !1), + function(t, ...e) { + const s = e.length; + let i = 8, + r = s; + for (; r--;) i += e[r].byteLength; + const n = new Uint8Array(i); + for (n[0] = i >> 24 & 255, n[1] = i >> 16 & 255, n[2] = i >> 8 & 255, n[3] = 255 & i, n.set(t, 4), r = 0, i = 8; r < s; r++) n.set(e[r], i), i += e[r].byteLength; + return n + }([112, 115, 115, 104], new Uint8Array([i, 0, 0, 0]), t, n, r, a, s || new Uint8Array) + }(t, null, e); + const s = new Uint16Array(e.buffer, e.byteOffset, e.byteLength / 2), + i = String.fromCharCode.apply(null, Array.from(s)), + r = i.substring(i.indexOf("<"), i.length), + n = (new DOMParser).parseFromString(r, "text/xml").getElementsByTagName("KID")[0]; + if (n) { + const t = n.childNodes[0] ? n.childNodes[0].nodeValue : n.getAttribute("VALUE"); + if (t) { + const e = B(t).subarray(0, 16); + ! function(t) { + const e = function(t, e, s) { + const i = t[e]; + t[e] = t[s], t[s] = i + }; + e(t, 0, 3), e(t, 1, 2), e(t, 4, 5), e(t, 6, 7) + }(e), this.keyId = e + } + } + break + } + default: { + let t = e.subarray(0, 16); + if (16 !== t.length) { + const e = new Uint8Array(16); + e.set(t, 16 - t.length), t = e + } + this.keyId = t; + break + } + } + if (!this.keyId || 16 !== this.keyId.byteLength) { + let t = Ut[this.uri]; + if (!t) { + const e = Object.keys(Ut).length % Number.MAX_SAFE_INTEGER; + t = new Uint8Array(16), new DataView(t.buffer, 12, 4).setUint32(0, e), Ut[this.uri] = t + } + this.keyId = t + } + return this + } + } + const $t = /\{\$([a-zA-Z0-9-_]+)\}/g; + + function Gt(t) { + return $t.test(t) + } + + function Kt(t, e, s) { + if (null !== t.variableList || t.hasVariableRefs) + for (let i = s.length; i--;) { + const r = s[i], + n = e[r]; + n && (e[r] = Ht(t, n)) + } + } + + function Ht(t, e) { + if (null !== t.variableList || t.hasVariableRefs) { + const s = t.variableList; + return e.replace($t, (e => { + const i = e.substring(2, e.length - 1), + r = null == s ? void 0 : s[i]; + return void 0 === r ? (t.playlistParsingError || (t.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: "${i}"`)), e) : r + })) + } + return e + } + + function Vt(t, e, s) { + let i, r, n = t.variableList; + if (n || (t.variableList = n = {}), "QUERYPARAM" in e) { + i = e.QUERYPARAM; + try { + const t = new self.URL(s).searchParams; + if (!t.has(i)) throw new Error(`"${i}" does not match any query parameter in URI: "${s}"`); + r = t.get(i) + } catch (e) { + t.playlistParsingError || (t.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${e.message}`)) + } + } else i = e.NAME, r = e.VALUE; + i in n ? t.playlistParsingError || (t.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: "${i}"`)) : n[i] = r || "" + } + + function Yt(t, e, s) { + const i = e.IMPORT; + if (s && i in s) { + let e = t.variableList; + e || (t.variableList = e = {}), e[i] = s[i] + } else t.playlistParsingError || (t.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "${i}"`)) + } + + function Wt(t = !0) { + if ("undefined" != typeof self) return (t || !self.MediaSource) && self.ManagedMediaSource || self.MediaSource || self.WebKitMediaSource + } + const jt = { + audio: { + a3ds: 1, + "ac-3": .95, + "ac-4": 1, + alac: .9, + alaw: 1, + dra1: 1, + "dts+": 1, + "dts-": 1, + dtsc: 1, + dtse: 1, + dtsh: 1, + "ec-3": .9, + enca: 1, + fLaC: .9, + flac: .9, + FLAC: .9, + g719: 1, + g726: 1, + m4ae: 1, + mha1: 1, + mha2: 1, + mhm1: 1, + mhm2: 1, + mlpa: 1, + mp4a: 1, + "raw ": 1, + Opus: 1, + opus: 1, + samr: 1, + sawb: 1, + sawp: 1, + sevc: 1, + sqcp: 1, + ssmv: 1, + twos: 1, + ulaw: 1 + }, + video: { + avc1: 1, + avc2: 1, + avc3: 1, + avc4: 1, + avcp: 1, + av01: .8, + drac: 1, + dva1: 1, + dvav: 1, + dvh1: .7, + dvhe: .7, + encv: 1, + hev1: .75, + hvc1: .75, + mjp2: 1, + mp4v: 1, + mvc1: 1, + mvc2: 1, + mvc3: 1, + mvc4: 1, + resv: 1, + rv60: 1, + s263: 1, + svc1: 1, + svc2: 1, + "vc-1": 1, + vp08: 1, + vp09: .9 + }, + text: { + stpp: 1, + wvtt: 1 + } + }; + + function qt(t, e, s = !0) { + return !t.split(",").some((t => !Xt(t, e, s))) + } + + function Xt(t, e, s = !0) { + var i; + const r = Wt(s); + return null != (i = null == r ? void 0 : r.isTypeSupported(zt(t, e))) && i + } + + function zt(t, e) { + return `${e}/mp4;codecs="${t}"` + } + + function Qt(t) { + if (t) { + const e = t.substring(0, 4); + return jt.video[e] + } + return 2 + } + + function Jt(t) { + return t.split(",").reduce(((t, e) => { + const s = jt.video[e]; + return s ? (2 * s + t) / (t ? 3 : 2) : (jt.audio[e] + t) / (t ? 2 : 1) + }), 0) + } + const Zt = {}, + te = /flac|opus/i; + + function ee(t, e = !0) { + return t.replace(te, (t => function(t, e = !0) { + if (Zt[t]) return Zt[t]; + const s = { + flac: ["flac", "fLaC", "FLAC"], + opus: ["opus", "Opus"] + } [t]; + for (let i = 0; i < s.length; i++) + if (Xt(s[i], "audio", e)) return Zt[t] = s[i], s[i]; + return t + }(t.toLowerCase(), e))) + } + + function se(t, e) { + return t && "mp4a" !== t ? t : e ? e.split(",")[0] : e + } + const ie = /#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g, + re = /#EXT-X-MEDIA:(.*)/g, + ne = /^#EXT(?:INF|-X-TARGETDURATION):/m, + ae = new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, /(?!#) *(\S[\S ]*)/.source, /#EXT-X-BYTERANGE:*(.+)/.source, /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, /#.*/.source].join("|"), "g"), + oe = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\r?\n?/.source].join("|")); + class le { + static findGroup(t, e) { + for (let s = 0; s < t.length; s++) { + const i = t[s]; + if (i.id === e) return i + } + } + static resolve(t, e) { + return c.buildAbsoluteURL(e, t, { + alwaysNormalize: !0 + }) + } + static isMediaPlaylist(t) { + return ne.test(t) + } + static parseMasterPlaylist(t, e) { + const s = { + contentSteering: null, + levels: [], + playlistParsingError: null, + sessionData: null, + sessionKeys: null, + startTimeOffset: null, + variableList: null, + hasVariableRefs: Gt(t) + }, + i = []; + let r; + for (ie.lastIndex = 0; null != (r = ie.exec(t));) + if (r[1]) { + var n; + const t = new I(r[1]); + Kt(s, t, ["CODECS", "SUPPLEMENTAL-CODECS", "ALLOWED-CPC", "PATHWAY-ID", "STABLE-VARIANT-ID", "AUDIO", "VIDEO", "SUBTITLES", "CLOSED-CAPTIONS", "NAME"]); + const a = Ht(s, r[2]), + o = { + attrs: t, + bitrate: t.decimalInteger("BANDWIDTH") || t.decimalInteger("AVERAGE-BANDWIDTH"), + name: t.NAME, + url: le.resolve(a, e) + }, + l = t.decimalResolution("RESOLUTION"); + l && (o.width = l.width, o.height = l.height), ce(t.CODECS, o), null != (n = o.unknownCodecs) && n.length || i.push(o), s.levels.push(o) + } else if (r[3]) { + const t = r[3], + i = r[4]; + switch (t) { + case "SESSION-DATA": { + const t = new I(i); + Kt(s, t, ["DATA-ID", "LANGUAGE", "VALUE", "URI"]); + const e = t["DATA-ID"]; + e && (null === s.sessionData && (s.sessionData = {}), s.sessionData[e] = t); + break + } + case "SESSION-KEY": { + const t = he(i, e, s); + t.encrypted && t.isSupported() ? (null === s.sessionKeys && (s.sessionKeys = []), s.sessionKeys.push(t)) : b.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "${i}"`); + break + } + case "DEFINE": { + const t = new I(i); + Kt(s, t, ["NAME", "VALUE", "QUERYPARAM"]), Vt(s, t, e) + } + break; + case "CONTENT-STEERING": { + const t = new I(i); + Kt(s, t, ["SERVER-URI", "PATHWAY-ID"]), s.contentSteering = { + uri: le.resolve(t["SERVER-URI"], e), + pathwayId: t["PATHWAY-ID"] || "." + }; + break + } + case "START": + s.startTimeOffset = de(i) + } + } + const a = i.length > 0 && i.length < s.levels.length; + return s.levels = a ? i : s.levels, 0 === s.levels.length && (s.playlistParsingError = new Error("no levels found in manifest")), s + } + static parseMasterPlaylistMedia(t, e, s) { + let i; + const r = {}, + n = s.levels, + a = { + AUDIO: n.map((t => ({ + id: t.attrs.AUDIO, + audioCodec: t.audioCodec + }))), + SUBTITLES: n.map((t => ({ + id: t.attrs.SUBTITLES, + textCodec: t.textCodec + }))), + "CLOSED-CAPTIONS": [] + }; + let o = 0; + for (re.lastIndex = 0; null !== (i = re.exec(t));) { + const t = new I(i[1]), + n = t.TYPE; + if (n) { + const i = a[n], + l = r[n] || []; + r[n] = l, Kt(s, t, ["URI", "GROUP-ID", "LANGUAGE", "ASSOC-LANGUAGE", "STABLE-RENDITION-ID", "NAME", "INSTREAM-ID", "CHARACTERISTICS", "CHANNELS"]); + const h = t.LANGUAGE, + d = t["ASSOC-LANGUAGE"], + c = t.CHANNELS, + u = t.CHARACTERISTICS, + f = t["INSTREAM-ID"], + g = { + attrs: t, + bitrate: 0, + id: o++, + groupId: t["GROUP-ID"] || "", + name: t.NAME || h || "", + type: n, + default: t.bool("DEFAULT"), + autoselect: t.bool("AUTOSELECT"), + forced: t.bool("FORCED"), + lang: h, + url: t.URI ? le.resolve(t.URI, e) : "" + }; + if (d && (g.assocLang = d), c && (g.channels = c), u && (g.characteristics = u), f && (g.instreamId = f), null != i && i.length) { + const t = le.findGroup(i, g.groupId) || i[0]; + ue(g, t, "audioCodec"), ue(g, t, "textCodec") + } + l.push(g) + } + } + return r + } + static parseLevelPlaylist(t, e, s, i, r, n) { + const a = new U(e), + o = a.fragments; + let l, h, d, c = null, + u = 0, + f = 0, + g = 0, + y = 0, + v = null, + E = new O(i, e), + T = -1, + S = !1, + L = null; + for (ae.lastIndex = 0, a.m3u8 = t, a.hasVariableRefs = Gt(t); null !== (l = ae.exec(t));) { + S && (S = !1, E = new O(i, e), E.start = g, E.sn = u, E.cc = y, E.level = s, c && (E.initSegment = c, E.rawProgramDateTime = c.rawProgramDateTime, c.rawProgramDateTime = null, L && (E.setByteRange(L), L = null))); + const t = l[1]; + if (t) { + E.duration = parseFloat(t); + const e = (" " + l[2]).slice(1); + E.title = e || null, E.tagList.push(e ? ["INF", t, e] : ["INF", t]) + } else if (l[3]) { + if (p(E.duration)) { + E.start = g, d && me(E, d, a), E.sn = u, E.level = s, E.cc = y, o.push(E); + const t = (" " + l[3]).slice(1); + E.relurl = Ht(a, t), fe(E, v), v = E, g += E.duration, u++, f = 0, S = !0 + } + } else if (l[4]) { + const t = (" " + l[4]).slice(1); + v ? E.setByteRange(t, v) : E.setByteRange(t) + } else if (l[5]) E.rawProgramDateTime = (" " + l[5]).slice(1), E.tagList.push(["PROGRAM-DATE-TIME", E.rawProgramDateTime]), -1 === T && (T = o.length); + else { + if (l = l[0].match(oe), !l) { + b.warn("No matches on slow regex match for level playlist!"); + continue + } + for (h = 1; h < l.length && void 0 === l[h]; h++); + const t = (" " + l[h]).slice(1), + r = (" " + l[h + 1]).slice(1), + g = l[h + 2] ? (" " + l[h + 2]).slice(1) : ""; + switch (t) { + case "PLAYLIST-TYPE": + a.type = r.toUpperCase(); + break; + case "MEDIA-SEQUENCE": + u = a.startSN = parseInt(r); + break; + case "SKIP": { + const t = new I(r); + Kt(a, t, ["RECENTLY-REMOVED-DATERANGES"]); + const e = t.decimalInteger("SKIPPED-SEGMENTS"); + if (p(e)) { + a.skippedSegments = e; + for (let t = e; t--;) o.unshift(null); + u += e + } + const s = t.enumeratedString("RECENTLY-REMOVED-DATERANGES"); + s && (a.recentlyRemovedDateranges = s.split("\t")); + break + } + case "TARGETDURATION": + a.targetduration = Math.max(parseInt(r), 1); + break; + case "VERSION": + a.version = parseInt(r); + break; + case "INDEPENDENT-SEGMENTS": + case "EXTM3U": + break; + case "ENDLIST": + a.live = !1; + break; + case "#": + (r || g) && E.tagList.push(g ? [r, g] : [r]); + break; + case "DISCONTINUITY": + y++, E.tagList.push(["DIS"]); + break; + case "GAP": + E.gap = !0, E.tagList.push([t]); + break; + case "BITRATE": + E.tagList.push([t, r]); + break; + case "DATERANGE": { + const t = new I(r); + Kt(a, t, ["ID", "CLASS", "START-DATE", "END-DATE", "SCTE35-CMD", "SCTE35-OUT", "SCTE35-IN"]), Kt(a, t, t.clientAttrs); + const e = new w(t, a.dateRanges[t.ID]); + e.isValid || a.skippedSegments ? a.dateRanges[e.id] = e : b.warn(`Ignoring invalid DATERANGE tag: "${r}"`), E.tagList.push(["EXT-X-DATERANGE", r]); + break + } + case "DEFINE": { + const t = new I(r); + Kt(a, t, ["NAME", "VALUE", "IMPORT", "QUERYPARAM"]), "IMPORT" in t ? Yt(a, t, n) : Vt(a, t, e) + } + break; + case "DISCONTINUITY-SEQUENCE": + y = parseInt(r); + break; + case "KEY": { + const t = he(r, e, a); + if (t.isSupported()) { + if ("NONE" === t.method) { + d = void 0; + break + } + d || (d = {}), d[t.keyFormat] && (d = m({}, d)), d[t.keyFormat] = t + } else b.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: "${r}"`); + break + } + case "START": + a.startTimeOffset = de(r); + break; + case "MAP": { + const t = new I(r); + if (Kt(a, t, ["BYTERANGE", "URI"]), E.duration) { + const r = new O(i, e); + ge(r, t, s, d), c = r, E.initSegment = c, c.rawProgramDateTime && !E.rawProgramDateTime && (E.rawProgramDateTime = c.rawProgramDateTime) + } else { + const e = E.byteRangeEndOffset; + if (e) { + const t = E.byteRangeStartOffset; + L = `${e-t}@${t}` + } else L = null; + ge(E, t, s, d), c = E, S = !0 + } + break + } + case "SERVER-CONTROL": { + const t = new I(r); + a.canBlockReload = t.bool("CAN-BLOCK-RELOAD"), a.canSkipUntil = t.optionalFloat("CAN-SKIP-UNTIL", 0), a.canSkipDateRanges = a.canSkipUntil > 0 && t.bool("CAN-SKIP-DATERANGES"), a.partHoldBack = t.optionalFloat("PART-HOLD-BACK", 0), a.holdBack = t.optionalFloat("HOLD-BACK", 0); + break + } + case "PART-INF": { + const t = new I(r); + a.partTarget = t.decimalFloatingPoint("PART-TARGET"); + break + } + case "PART": { + let t = a.partList; + t || (t = a.partList = []); + const s = f > 0 ? t[t.length - 1] : void 0, + i = f++, + n = new I(r); + Kt(a, n, ["BYTERANGE", "URI"]); + const o = new N(n, E, e, i, s); + t.push(o), E.duration += o.duration; + break + } + case "PRELOAD-HINT": { + const t = new I(r); + Kt(a, t, ["URI"]), a.preloadHint = t; + break + } + case "RENDITION-REPORT": { + const t = new I(r); + Kt(a, t, ["URI"]), a.renditionReports = a.renditionReports || [], a.renditionReports.push(t); + break + } + default: + b.warn(`line parsed but not handled: ${l}`) + } + } + } + v && !v.relurl ? (o.pop(), g -= v.duration, a.partList && (a.fragmentHint = v)) : a.partList && (fe(E, v), E.cc = y, a.fragmentHint = E, d && me(E, d, a)); + const A = o.length, + R = o[0], + D = o[A - 1]; + if (g += a.skippedSegments * a.targetduration, g > 0 && A && D) { + a.averagetargetduration = g / A; + const t = D.sn; + a.endSN = "initSegment" !== t ? t : 0, a.live || (D.endList = !0), R && (a.startCC = R.cc) + } else a.endSN = 0, a.startCC = 0; + return a.fragmentHint && (g += a.fragmentHint.duration), a.totalduration = g, a.endCC = y, T > 0 && function(t, e) { + let s = t[e]; + for (let i = e; i--;) { + const e = t[i]; + if (!e) return; + e.programDateTime = s.programDateTime - 1e3 * e.duration, s = e + } + }(o, T), a + } + } + + function he(t, e, s) { + var i, r; + const n = new I(t); + Kt(s, n, ["KEYFORMAT", "KEYFORMATVERSIONS", "URI", "IV", "URI"]); + const a = null != (i = n.METHOD) ? i : "", + o = n.URI, + l = n.hexadecimalInteger("IV"), + h = n.KEYFORMATVERSIONS, + d = null != (r = n.KEYFORMAT) ? r : "identity"; + o && n.IV && !l && b.error(`Invalid IV: ${n.IV}`); + const c = o ? le.resolve(o, e) : "", + u = (h || "1").split("/").map(Number).filter(Number.isFinite); + return new Bt(a, c, d, u, l) + } + + function de(t) { + const e = new I(t).decimalFloatingPoint("TIME-OFFSET"); + return p(e) ? e : null + } + + function ce(t, e) { + let s = (t || "").split(/[ ,]+/).filter((t => t)); + ["video", "audio", "text"].forEach((t => { + const i = s.filter((e => function(t, e) { + const s = jt[e]; + return !!s && !!s[t.slice(0, 4)] + }(e, t))); + i.length && (e[`${t}Codec`] = i.join(","), s = s.filter((t => -1 === i.indexOf(t)))) + })), e.unknownCodecs = s + } + + function ue(t, e, s) { + const i = e[s]; + i && (t[s] = i) + } + + function fe(t, e) { + t.rawProgramDateTime ? t.programDateTime = Date.parse(t.rawProgramDateTime) : null != e && e.programDateTime && (t.programDateTime = e.endProgramDateTime), p(t.programDateTime) || (t.programDateTime = null, t.rawProgramDateTime = null) + } + + function ge(t, e, s, i) { + t.relurl = e.URI, e.BYTERANGE && t.setByteRange(e.BYTERANGE), t.level = s, t.sn = "initSegment", i && (t.levelkeys = i), t.initSegment = null + } + + function me(t, e, s) { + t.levelkeys = e; + const { + encryptedFragments: i + } = s; + i.length && i[i.length - 1].levelkeys === e || !Object.keys(e).some((t => e[t].isCommonEncryption)) || i.push(t) + } + var pe = "manifest", + ye = "level", + ve = "audioTrack", + Ee = "subtitleTrack", + Te = { + MAIN: "main", + AUDIO: "audio", + SUBTITLE: "subtitle" + }; + + function Se(t) { + const { + type: e + } = t; + switch (e) { + case ve: + return Te.AUDIO; + case Ee: + return Te.SUBTITLE; + default: + return Te.MAIN + } + } + + function Le(t, e) { + let s = t.url; + return void 0 !== s && 0 !== s.indexOf("data:") || (s = e.url), s + } + class Ae { + constructor(t) { + this.hls = void 0, this.loaders = Object.create(null), this.variableList = null, this.hls = t, this.registerListeners() + } + startLoad(t) {} + stopLoad() { + this.destroyInternalLoaders() + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.LEVEL_LOADING, this.onLevelLoading, this), t.on(E.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), t.on(E.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this) + } + unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.LEVEL_LOADING, this.onLevelLoading, this), t.off(E.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), t.off(E.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this) + } + createInternalLoader(t) { + const e = this.hls.config, + s = e.pLoader, + i = e.loader, + r = new(s || i)(e); + return this.loaders[t.type] = r, r + } + getInternalLoader(t) { + return this.loaders[t.type] + } + resetInternalLoader(t) { + this.loaders[t] && delete this.loaders[t] + } + destroyInternalLoaders() { + for (const t in this.loaders) { + const e = this.loaders[t]; + e && e.destroy(), this.resetInternalLoader(t) + } + } + destroy() { + this.variableList = null, this.unregisterListeners(), this.destroyInternalLoaders() + } + onManifestLoading(t, e) { + const { + url: s + } = e; + this.variableList = null, this.load({ + id: null, + level: 0, + responseType: "text", + type: pe, + url: s, + deliveryDirectives: null + }) + } + onLevelLoading(t, e) { + const { + id: s, + level: i, + pathwayId: r, + url: n, + deliveryDirectives: a + } = e; + this.load({ + id: s, + level: i, + pathwayId: r, + responseType: "text", + type: ye, + url: n, + deliveryDirectives: a + }) + } + onAudioTrackLoading(t, e) { + const { + id: s, + groupId: i, + url: r, + deliveryDirectives: n + } = e; + this.load({ + id: s, + groupId: i, + level: null, + responseType: "text", + type: ve, + url: r, + deliveryDirectives: n + }) + } + onSubtitleTrackLoading(t, e) { + const { + id: s, + groupId: i, + url: r, + deliveryDirectives: n + } = e; + this.load({ + id: s, + groupId: i, + level: null, + responseType: "text", + type: Ee, + url: r, + deliveryDirectives: n + }) + } + load(t) { + var e; + const s = this.hls.config; + let i, r = this.getInternalLoader(t); + if (r) { + const e = r.context; + if (e && e.url === t.url && e.level === t.level) return void b.trace("[playlist-loader]: playlist request ongoing"); + b.log(`[playlist-loader]: aborting previous loader for type: ${t.type}`), r.abort() + } + if (i = t.type === pe ? s.manifestLoadPolicy.default : m({}, s.playlistLoadPolicy.default, { + timeoutRetry: null, + errorRetry: null + }), r = this.createInternalLoader(t), p(null == (e = t.deliveryDirectives) ? void 0 : e.part)) { + let e; + if (t.type === ye && null !== t.level ? e = this.hls.levels[t.level].details : t.type === ve && null !== t.id ? e = this.hls.audioTracks[t.id].details : t.type === Ee && null !== t.id && (e = this.hls.subtitleTracks[t.id].details), e) { + const t = e.partTarget, + s = e.targetduration; + if (t && s) { + const e = 1e3 * Math.max(3 * t, .8 * s); + i = m({}, i, { + maxTimeToFirstByteMs: Math.min(e, i.maxTimeToFirstByteMs), + maxLoadTimeMs: Math.min(e, i.maxTimeToFirstByteMs) + }) + } + } + } + const n = i.errorRetry || i.timeoutRetry || {}, + a = { + loadPolicy: i, + timeout: i.maxLoadTimeMs, + maxRetry: n.maxNumRetry || 0, + retryDelay: n.retryDelayMs || 0, + maxRetryDelay: n.maxRetryDelayMs || 0 + }, + o = { + onSuccess: (t, e, s, i) => { + const r = this.getInternalLoader(s); + this.resetInternalLoader(s.type); + const n = t.data; + 0 === n.indexOf("#EXTM3U") ? (e.parsing.start = performance.now(), le.isMediaPlaylist(n) ? this.handleTrackOrLevelPlaylist(t, e, s, i || null, r) : this.handleMasterPlaylist(t, e, s, i)) : this.handleManifestParsingError(t, s, new Error("no EXTM3U delimiter"), i || null, e) + }, + onError: (t, e, s, i) => { + this.handleNetworkError(e, s, !1, t, i) + }, + onTimeout: (t, e, s) => { + this.handleNetworkError(e, s, !0, void 0, t) + } + }; + r.load(t, a, o) + } + handleMasterPlaylist(t, e, s, i) { + const r = this.hls, + n = t.data, + a = Le(t, s), + o = le.parseMasterPlaylist(n, a); + if (o.playlistParsingError) return void this.handleManifestParsingError(t, s, o.playlistParsingError, i, e); + const { + contentSteering: l, + levels: h, + sessionData: d, + sessionKeys: c, + startTimeOffset: u, + variableList: f + } = o; + this.variableList = f; + const { + AUDIO: g = [], + SUBTITLES: m, + "CLOSED-CAPTIONS": p + } = le.parseMasterPlaylistMedia(n, a, o); + g.length && (g.some((t => !t.url)) || !h[0].audioCodec || h[0].attrs.AUDIO || (b.log("[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one"), g.unshift({ + type: "main", + name: "main", + groupId: "main", + default: !1, + autoselect: !1, + forced: !1, + id: -1, + attrs: new I({}), + bitrate: 0, + url: "" + }))), r.trigger(E.MANIFEST_LOADED, { + levels: h, + audioTracks: g, + subtitles: m, + captions: p, + contentSteering: l, + url: a, + stats: e, + networkDetails: i, + sessionData: d, + sessionKeys: c, + startTimeOffset: u, + variableList: f + }) + } + handleTrackOrLevelPlaylist(t, e, s, i, r) { + const n = this.hls, + { + id: a, + level: o, + type: l + } = s, + h = Le(t, s), + d = p(o) ? o : p(a) ? a : 0, + c = Se(s), + u = le.parseLevelPlaylist(t.data, h, d, c, 0, this.variableList); + if (l === pe) { + const t = { + attrs: new I({}), + bitrate: 0, + details: u, + name: "", + url: h + }; + n.trigger(E.MANIFEST_LOADED, { + levels: [t], + audioTracks: [], + url: h, + stats: e, + networkDetails: i, + sessionData: null, + sessionKeys: null, + contentSteering: null, + startTimeOffset: null, + variableList: null + }) + } + e.parsing.end = performance.now(), s.levelDetails = u, this.handlePlaylistLoaded(u, t, e, s, i, r) + } + handleManifestParsingError(t, e, s, i, r) { + this.hls.trigger(E.ERROR, { + type: T.NETWORK_ERROR, + details: S.MANIFEST_PARSING_ERROR, + fatal: e.type === pe, + url: t.url, + err: s, + error: s, + reason: s.message, + response: t, + context: e, + networkDetails: i, + stats: r + }) + } + handleNetworkError(t, e, s = !1, i, r) { + let n = `A network ${s?"timeout":"error"+(i?" (status "+i.code+")":"")} occurred while loading ${t.type}`; + t.type === ye ? n += `: ${t.level} id: ${t.id}` : t.type !== ve && t.type !== Ee || (n += ` id: ${t.id} group-id: "${t.groupId}"`); + const a = new Error(n); + b.warn(`[playlist-loader]: ${n}`); + let o = S.UNKNOWN, + l = !1; + const h = this.getInternalLoader(t); + switch (t.type) { + case pe: + o = s ? S.MANIFEST_LOAD_TIMEOUT : S.MANIFEST_LOAD_ERROR, l = !0; + break; + case ye: + o = s ? S.LEVEL_LOAD_TIMEOUT : S.LEVEL_LOAD_ERROR, l = !1; + break; + case ve: + o = s ? S.AUDIO_TRACK_LOAD_TIMEOUT : S.AUDIO_TRACK_LOAD_ERROR, l = !1; + break; + case Ee: + o = s ? S.SUBTITLE_TRACK_LOAD_TIMEOUT : S.SUBTITLE_LOAD_ERROR, l = !1 + } + h && this.resetInternalLoader(t.type); + const d = { + type: T.NETWORK_ERROR, + details: o, + fatal: l, + url: t.url, + loader: h, + context: t, + error: a, + networkDetails: e, + stats: r + }; + if (i) { + const s = (null == e ? void 0 : e.url) || t.url; + d.response = f({ + url: s, + data: void 0 + }, i) + } + this.hls.trigger(E.ERROR, d) + } + handlePlaylistLoaded(t, e, s, i, r, n) { + const a = this.hls, + { + type: o, + level: l, + id: h, + groupId: d, + deliveryDirectives: c + } = i, + u = Le(e, i), + f = Se(i), + g = "number" == typeof i.level && f === Te.MAIN ? l : void 0; + if (!t.fragments.length) { + const t = new Error("No Segments found in Playlist"); + return void a.trigger(E.ERROR, { + type: T.NETWORK_ERROR, + details: S.LEVEL_EMPTY_ERROR, + fatal: !1, + url: u, + error: t, + reason: t.message, + response: e, + context: i, + level: g, + parent: f, + networkDetails: r, + stats: s + }) + } + t.targetduration || (t.playlistParsingError = new Error("Missing Target Duration")); + const m = t.playlistParsingError; + if (m) a.trigger(E.ERROR, { + type: T.NETWORK_ERROR, + details: S.LEVEL_PARSING_ERROR, + fatal: !1, + url: u, + error: m, + reason: m.message, + response: e, + context: i, + level: g, + parent: f, + networkDetails: r, + stats: s + }); + else switch (t.live && n && (n.getCacheAge && (t.ageHeader = n.getCacheAge() || 0), n.getCacheAge && !isNaN(t.ageHeader) || (t.ageHeader = 0)), o) { + case pe: + case ye: + a.trigger(E.LEVEL_LOADED, { + details: t, + level: g || 0, + id: h || 0, + stats: s, + networkDetails: r, + deliveryDirectives: c + }); + break; + case ve: + a.trigger(E.AUDIO_TRACK_LOADED, { + details: t, + id: h || 0, + groupId: d || "", + stats: s, + networkDetails: r, + deliveryDirectives: c + }); + break; + case Ee: + a.trigger(E.SUBTITLE_TRACK_LOADED, { + details: t, + id: h || 0, + groupId: d || "", + stats: s, + networkDetails: r, + deliveryDirectives: c + }) + } + } + } + + function Re(t, e) { + let s; + try { + s = new Event("addtrack") + } catch (t) { + s = document.createEvent("Event"), s.initEvent("addtrack", !1, !1) + } + s.track = t, e.dispatchEvent(s) + } + + function be(t, e) { + const s = t.mode; + if ("disabled" === s && (t.mode = "hidden"), t.cues && !t.cues.getCueById(e.id)) try { + if (t.addCue(e), !t.cues.getCueById(e.id)) throw new Error(`addCue is failed for: ${e}`) + } catch (s) { + b.debug(`[texttrack-utils]: ${s}`); + try { + const s = new self.TextTrackCue(e.startTime, e.endTime, e.text); + s.id = e.id, t.addCue(s) + } catch (t) { + b.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${t}`) + } + } + "disabled" === s && (t.mode = s) + } + + function De(t) { + const e = t.mode; + if ("disabled" === e && (t.mode = "hidden"), t.cues) + for (let e = t.cues.length; e--;) t.removeCue(t.cues[e]); + "disabled" === e && (t.mode = e) + } + + function ke(t, e, s, i) { + const r = t.mode; + if ("disabled" === r && (t.mode = "hidden"), t.cues && t.cues.length > 0) { + const r = function(t, e, s) { + const i = [], + r = function(t, e) { + if (e < t[0].startTime) return 0; + const s = t.length - 1; + if (e > t[s].endTime) return -1; + let i = 0, + r = s; + for (; i <= r;) { + const n = Math.floor((r + i) / 2); + if (e < t[n].startTime) r = n - 1; + else { + if (!(e > t[n].startTime && i < s)) return n; + i = n + 1 + } + } + return t[i].startTime - e < e - t[r].startTime ? i : r + }(t, e); + if (r > -1) + for (let n = r, a = t.length; n < a; n++) { + const r = t[n]; + if (r.startTime >= e && r.endTime <= s) i.push(r); + else if (r.startTime > s) return i + } + return i + }(t.cues, e, s); + for (let e = 0; e < r.length; e++) i && !i(r[e]) || t.removeCue(r[e]) + } + "disabled" === r && (t.mode = r) + } + + function Ie(t) { + const e = []; + for (let s = 0; s < t.length; s++) { + const i = t[s]; + "subtitles" !== i.kind && "captions" !== i.kind || !i.label || e.push(t[s]) + } + return e + } + var Ce = { + audioId3: "org.id3", + dateRange: "com.apple.quicktime.HLS", + emsg: "https://aomedia.org/emsg/ID3" + }; + + function we() { + if ("undefined" != typeof self) return self.VTTCue || self.TextTrackCue + } + + function _e(t, e, s, i, r) { + let n = new t(e, s, ""); + try { + n.value = i, r && (n.type = r) + } catch (a) { + n = new t(e, s, JSON.stringify(r ? f({ + type: r + }, i) : i)) + } + return n + } + const xe = (() => { + const t = we(); + try { + t && new t(0, Number.POSITIVE_INFINITY, "") + } catch (t) { + return Number.MAX_VALUE + } + return Number.POSITIVE_INFINITY + })(); + + function Pe(t, e) { + return t.getTime() / 1e3 - e + } + class Me { + constructor(t) { + this.hls = void 0, this.id3Track = null, this.media = null, this.dateRangeCuesAppended = {}, this.hls = t, this._registerListeners() + } + destroy() { + this._unregisterListeners(), this.id3Track = null, this.media = null, this.dateRangeCuesAppended = {}, this.hls = null + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), t.on(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.on(E.LEVEL_UPDATED, this.onLevelUpdated, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), t.off(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.off(E.LEVEL_UPDATED, this.onLevelUpdated, this) + } + onMediaAttached(t, e) { + this.media = e.media + } + onMediaDetaching() { + this.id3Track && (De(this.id3Track), this.id3Track = null, this.media = null, this.dateRangeCuesAppended = {}) + } + onManifestLoading() { + this.dateRangeCuesAppended = {} + } + createTrack(t) { + const e = this.getID3Track(t.textTracks); + return e.mode = "hidden", e + } + getID3Track(t) { + if (this.media) { + for (let e = 0; e < t.length; e++) { + const s = t[e]; + if ("metadata" === s.kind && "id3" === s.label) return Re(s, this.media), s + } + return this.media.addTextTrack("metadata", "id3") + } + } + onFragParsingMetadata(t, e) { + if (!this.media) return; + const { + hls: { + config: { + enableEmsgMetadataCues: s, + enableID3MetadataCues: i + } + } + } = this; + if (!s && !i) return; + const { + samples: r + } = e; + this.id3Track || (this.id3Track = this.createTrack(this.media)); + const n = we(); + if (n) + for (let t = 0; t < r.length; t++) { + const e = r[t].type; + if (e === Ce.emsg && !s || !i) continue; + const a = nt(r[t].data); + if (a) { + const s = r[t].pts; + let i = s + r[t].duration; + i > xe && (i = xe), i - s <= 0 && (i = s + .25); + for (let t = 0; t < a.length; t++) { + const r = a[t]; + if (!it(r)) { + this.updateId3CueEnds(s, e); + const t = _e(n, s, i, r, e); + t && this.id3Track.addCue(t) + } + } + } + } + } + updateId3CueEnds(t, e) { + var s; + const i = null == (s = this.id3Track) ? void 0 : s.cues; + if (i) + for (let s = i.length; s--;) { + const r = i[s]; + r.type === e && r.startTime < t && r.endTime === xe && (r.endTime = t) + } + } + onBufferFlushing(t, { + startOffset: e, + endOffset: s, + type: i + }) { + const { + id3Track: r, + hls: n + } = this; + if (!n) return; + const { + config: { + enableEmsgMetadataCues: a, + enableID3MetadataCues: o + } + } = n; + if (r && (a || o)) { + let t; + t = "audio" === i ? t => t.type === Ce.audioId3 && o : "video" === i ? t => t.type === Ce.emsg && a : t => t.type === Ce.audioId3 && o || t.type === Ce.emsg && a, ke(r, e, s, t) + } + } + onLevelUpdated(t, { + details: e + }) { + if (!this.media || !e.hasProgramDateTime || !this.hls.config.enableDateRangeMetadataCues) return; + const { + dateRangeCuesAppended: s, + id3Track: i + } = this, { + dateRanges: r + } = e, n = Object.keys(r); + if (i) { + const t = Object.keys(s).filter((t => !n.includes(t))); + for (let e = t.length; e--;) { + const r = t[e]; + Object.keys(s[r].cues).forEach((t => { + i.removeCue(s[r].cues[t]) + })), delete s[r] + } + } + const a = e.fragments[e.fragments.length - 1]; + if (0 === n.length || !p(null == a ? void 0 : a.programDateTime)) return; + this.id3Track || (this.id3Track = this.createTrack(this.media)); + const o = a.programDateTime / 1e3 - a.start, + l = we(); + for (let t = 0; t < n.length; t++) { + const e = n[t], + i = r[e], + a = Pe(i.startDate, o), + c = s[e], + u = (null == c ? void 0 : c.cues) || {}; + let f = (null == c ? void 0 : c.durationKnown) || !1, + g = xe; + const m = i.endDate; + if (m) g = Pe(m, o), f = !0; + else if (i.endOnNext && !f) { + const t = n.reduce(((t, e) => { + if (e !== i.id) { + const s = r[e]; + if (s.class === i.class && s.startDate > i.startDate && (!t || i.startDate < t.startDate)) return s + } + return t + }), null); + t && (g = Pe(t.startDate, o), f = !0) + } + const p = Object.keys(i.attr); + for (let t = 0; t < p.length; t++) { + const s = p[t]; + if ("ID" === (d = s) || "CLASS" === d || "START-DATE" === d || "DURATION" === d || "END-DATE" === d || "END-ON-NEXT" === d) continue; + const r = u[s]; + if (r) f && !c.durationKnown && (r.endTime = g); + else if (l) { + let t = i.attr[s]; + C(s) && (h = t, t = Uint8Array.from(h.replace(/^0x/, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")).buffer); + const r = _e(l, a, g, { + key: s, + data: t + }, Ce.dateRange); + r && (r.id = e, this.id3Track.addCue(r), u[s] = r) + } + } + s[e] = { + cues: u, + dateRange: i, + durationKnown: f + } + } + var h, d + } + } + class Fe { + constructor(t) { + this.hls = void 0, this.config = void 0, this.media = null, this.levelDetails = null, this.currentTime = 0, this.stallCount = 0, this._latency = null, this.timeupdateHandler = () => this.timeupdate(), this.hls = t, this.config = t.config, this.registerListeners() + } + get latency() { + return this._latency || 0 + } + get maxLatency() { + const { + config: t, + levelDetails: e + } = this; + return void 0 !== t.liveMaxLatencyDuration ? t.liveMaxLatencyDuration : e ? t.liveMaxLatencyDurationCount * e.targetduration : 0 + } + get targetLatency() { + const { + levelDetails: t + } = this; + if (null === t) return null; + const { + holdBack: e, + partHoldBack: s, + targetduration: i + } = t, { + liveSyncDuration: r, + liveSyncDurationCount: n, + lowLatencyMode: a + } = this.config, o = this.hls.userConfig; + let l = a && s || e; + (o.liveSyncDuration || o.liveSyncDurationCount || 0 === l) && (l = void 0 !== r ? r : n * i); + const h = i; + return l + Math.min(1 * this.stallCount, h) + } + get liveSyncPosition() { + const t = this.estimateLiveEdge(), + e = this.targetLatency, + s = this.levelDetails; + if (null === t || null === e || null === s) return null; + const i = s.edge, + r = t - e - this.edgeStalled, + n = i - s.totalduration, + a = i - (this.config.lowLatencyMode && s.partTarget || s.targetduration); + return Math.min(Math.max(n, r), a) + } + get drift() { + const { + levelDetails: t + } = this; + return null === t ? 1 : t.drift + } + get edgeStalled() { + const { + levelDetails: t + } = this; + if (null === t) return 0; + const e = 3 * (this.config.lowLatencyMode && t.partTarget || t.targetduration); + return Math.max(t.age - e, 0) + } + get forwardBufferLength() { + const { + media: t, + levelDetails: e + } = this; + if (!t || !e) return 0; + const s = t.buffered.length; + return (s ? t.buffered.end(s - 1) : e.edge) - this.currentTime + } + destroy() { + this.unregisterListeners(), this.onMediaDetaching(), this.levelDetails = null, this.hls = this.timeupdateHandler = null + } + registerListeners() { + this.hls.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), this.hls.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), this.hls.on(E.MANIFEST_LOADING, this.onManifestLoading, this), this.hls.on(E.LEVEL_UPDATED, this.onLevelUpdated, this), this.hls.on(E.ERROR, this.onError, this) + } + unregisterListeners() { + this.hls.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), this.hls.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), this.hls.off(E.MANIFEST_LOADING, this.onManifestLoading, this), this.hls.off(E.LEVEL_UPDATED, this.onLevelUpdated, this), this.hls.off(E.ERROR, this.onError, this) + } + onMediaAttached(t, e) { + this.media = e.media, this.media.addEventListener("timeupdate", this.timeupdateHandler) + } + onMediaDetaching() { + this.media && (this.media.removeEventListener("timeupdate", this.timeupdateHandler), this.media = null) + } + onManifestLoading() { + this.levelDetails = null, this._latency = null, this.stallCount = 0 + } + onLevelUpdated(t, { + details: e + }) { + this.levelDetails = e, e.advanced && this.timeupdate(), !e.live && this.media && this.media.removeEventListener("timeupdate", this.timeupdateHandler) + } + onError(t, e) { + var s; + e.details === S.BUFFER_STALLED_ERROR && (this.stallCount++, null != (s = this.levelDetails) && s.live && b.warn("[playback-rate-controller]: Stall detected, adjusting target latency")) + } + timeupdate() { + const { + media: t, + levelDetails: e + } = this; + if (!t || !e) return; + this.currentTime = t.currentTime; + const s = this.computeLatency(); + if (null === s) return; + this._latency = s; + const { + lowLatencyMode: i, + maxLiveSyncPlaybackRate: r + } = this.config; + if (!i || 1 === r || !e.live) return; + const n = this.targetLatency; + if (null === n) return; + const a = s - n; + if (a < Math.min(this.maxLatency, n + e.targetduration) && a > .05 && this.forwardBufferLength > 1) { + const e = Math.min(2, Math.max(1, r)), + s = Math.round(2 / (1 + Math.exp(-.75 * a - this.edgeStalled)) * 20) / 20; + t.playbackRate = Math.min(e, Math.max(1, s)) + } else 1 !== t.playbackRate && 0 !== t.playbackRate && (t.playbackRate = 1) + } + estimateLiveEdge() { + const { + levelDetails: t + } = this; + return null === t ? null : t.edge + t.age + } + computeLatency() { + const t = this.estimateLiveEdge(); + return null === t ? null : t - this.currentTime + } + } + const Oe = ["NONE", "TYPE-0", "TYPE-1", null], + Ne = ["SDR", "PQ", "HLG"]; + var Ue = { + No: "", + Yes: "YES", + v2: "v2" + }; + + function Be(t) { + const { + canSkipUntil: e, + canSkipDateRanges: s, + age: i + } = t; + return e && i < e / 2 ? s ? Ue.v2 : Ue.Yes : Ue.No + } + class $e { + constructor(t, e, s) { + this.msn = void 0, this.part = void 0, this.skip = void 0, this.msn = t, this.part = e, this.skip = s + } + addDirectives(t) { + const e = new self.URL(t); + return void 0 !== this.msn && e.searchParams.set("_HLS_msn", this.msn.toString()), void 0 !== this.part && e.searchParams.set("_HLS_part", this.part.toString()), this.skip && e.searchParams.set("_HLS_skip", this.skip), e.href + } + } + class Ge { + constructor(t) { + this._attrs = void 0, this.audioCodec = void 0, this.bitrate = void 0, this.codecSet = void 0, this.url = void 0, this.frameRate = void 0, this.height = void 0, this.id = void 0, this.name = void 0, this.videoCodec = void 0, this.width = void 0, this.details = void 0, this.fragmentError = 0, this.loadError = 0, this.loaded = void 0, this.realBitrate = 0, this.supportedPromise = void 0, this.supportedResult = void 0, this._avgBitrate = 0, this._audioGroups = void 0, this._subtitleGroups = void 0, this._urlId = 0, this.url = [t.url], this._attrs = [t.attrs], this.bitrate = t.bitrate, t.details && (this.details = t.details), this.id = t.id || 0, this.name = t.name, this.width = t.width || 0, this.height = t.height || 0, this.frameRate = t.attrs.optionalFloat("FRAME-RATE", 0), this._avgBitrate = t.attrs.decimalInteger("AVERAGE-BANDWIDTH"), this.audioCodec = t.audioCodec, this.videoCodec = t.videoCodec, this.codecSet = [t.videoCodec, t.audioCodec].filter((t => !!t)).map((t => t.substring(0, 4))).join(","), this.addGroupId("audio", t.attrs.AUDIO), this.addGroupId("text", t.attrs.SUBTITLES) + } + get maxBitrate() { + return Math.max(this.realBitrate, this.bitrate) + } + get averageBitrate() { + return this._avgBitrate || this.realBitrate || this.bitrate + } + get attrs() { + return this._attrs[0] + } + get codecs() { + return this.attrs.CODECS || "" + } + get pathwayId() { + return this.attrs["PATHWAY-ID"] || "." + } + get videoRange() { + return this.attrs["VIDEO-RANGE"] || "SDR" + } + get score() { + return this.attrs.optionalFloat("SCORE", 0) + } + get uri() { + return this.url[0] || "" + } + hasAudioGroup(t) { + return Ke(this._audioGroups, t) + } + hasSubtitleGroup(t) { + return Ke(this._subtitleGroups, t) + } + get audioGroups() { + return this._audioGroups + } + get subtitleGroups() { + return this._subtitleGroups + } + addGroupId(t, e) { + if (e) + if ("audio" === t) { + let t = this._audioGroups; + t || (t = this._audioGroups = []), -1 === t.indexOf(e) && t.push(e) + } else if ("text" === t) { + let t = this._subtitleGroups; + t || (t = this._subtitleGroups = []), -1 === t.indexOf(e) && t.push(e) + } + } + get urlId() { + return 0 + } + set urlId(t) {} + get audioGroupIds() { + return this.audioGroups ? [this.audioGroupId] : void 0 + } + get textGroupIds() { + return this.subtitleGroups ? [this.textGroupId] : void 0 + } + get audioGroupId() { + var t; + return null == (t = this.audioGroups) ? void 0 : t[0] + } + get textGroupId() { + var t; + return null == (t = this.subtitleGroups) ? void 0 : t[0] + } + addFallback() {} + } + + function Ke(t, e) { + return !(!e || !t) && -1 !== t.indexOf(e) + } + + function He(t, e) { + const s = e.startPTS; + if (p(s)) { + let i, r = 0; + e.sn > t.sn ? (r = s - t.start, i = t) : (r = t.start - s, i = e), i.duration !== r && (i.duration = r) + } else e.sn > t.sn ? t.cc === e.cc && t.minEndPTS ? e.start = t.start + (t.minEndPTS - t.start) : e.start = t.start + t.duration : e.start = Math.max(t.start - e.duration, 0) + } + + function Ve(t, e, s, i, r, n) { + i - s <= 0 && (b.warn("Fragment should have a positive duration", e), i = s + e.duration, n = r + e.duration); + let a = s, + o = i; + const l = e.startPTS, + h = e.endPTS; + if (p(l)) { + const t = Math.abs(l - s); + p(e.deltaPTS) ? e.deltaPTS = Math.max(t, e.deltaPTS) : e.deltaPTS = t, a = Math.max(s, l), s = Math.min(s, l), r = Math.min(r, e.startDTS), o = Math.min(i, h), i = Math.max(i, h), n = Math.max(n, e.endDTS) + } + const d = s - e.start; + 0 !== e.start && (e.start = s), e.duration = i - e.start, e.startPTS = s, e.maxStartPTS = a, e.startDTS = r, e.endPTS = i, e.minEndPTS = o, e.endDTS = n; + const c = e.sn; + if (!t || c < t.startSN || c > t.endSN) return 0; + let u; + const f = c - t.startSN, + g = t.fragments; + for (g[f] = e, u = f; u > 0; u--) He(g[u], g[u - 1]); + for (u = f; u < g.length - 1; u++) He(g[u], g[u + 1]); + return t.fragmentHint && He(g[g.length - 1], t.fragmentHint), t.PTSKnown = t.alignedSliding = !0, d + } + + function Ye(t, e) { + const s = e.startSN + e.skippedSegments - t.startSN, + i = t.fragments; + s < 0 || s >= i.length || We(e, i[s].start) + } + + function We(t, e) { + if (e) { + const s = t.fragments; + for (let i = t.skippedSegments; i < s.length; i++) s[i].start += e; + t.fragmentHint && (t.fragmentHint.start += e) + } + } + + function je(t, e, s) { + var i; + return null != t && t.details ? qe(null == (i = t.details) ? void 0 : i.partList, e, s) : null + } + + function qe(t, e, s) { + if (t) + for (let i = t.length; i--;) { + const r = t[i]; + if (r.index === s && r.fragment.sn === e) return r + } + return null + } + + function Xe(t) { + t.forEach(((t, e) => { + const { + details: s + } = t; + null != s && s.fragments && s.fragments.forEach((t => { + t.level = e + })) + })) + } + + function ze(t) { + switch (t.details) { + case S.FRAG_LOAD_TIMEOUT: + case S.KEY_LOAD_TIMEOUT: + case S.LEVEL_LOAD_TIMEOUT: + case S.MANIFEST_LOAD_TIMEOUT: + return !0 + } + return !1 + } + + function Qe(t, e) { + const s = ze(e); + return t.default[(s ? "timeout" : "error") + "Retry"] + } + + function Je(t, e) { + const s = "linear" === t.backoff ? 1 : Math.pow(2, e); + return Math.min(s * t.retryDelayMs, t.maxRetryDelayMs) + } + + function Ze(t) { + return f(f({}, t), { + errorRetry: null, + timeoutRetry: null + }) + } + + function ts(t, e, s, i) { + if (!t) return !1; + const r = null == i ? void 0 : i.code, + n = e < t.maxNumRetry && (function(t) { + return 0 === t && !1 === navigator.onLine || !!t && (t < 400 || t > 499) + }(r) || !!s); + return t.shouldRetry ? t.shouldRetry(t, e, s, i, n) : n + } + const es = function(t, e) { + let s = 0, + i = t.length - 1, + r = null, + n = null; + for (; s <= i;) { + r = (s + i) / 2 | 0, n = t[r]; + const a = e(n); + if (a > 0) s = r + 1; + else { + if (!(a < 0)) return n; + i = r - 1 + } + } + return null + }; + + function ss(t, e, s = 0, i = 0) { + let r = null; + if (t) { + r = e[t.sn - e[0].sn + 1] || null; + const i = t.endDTS - s; + i > 0 && i < 15e-7 && (s += 15e-7) + } else 0 === s && 0 === e[0].start && (r = e[0]); + if (r && (!t || t.level === r.level) && 0 === is(s, i, r)) return r; + const n = es(e, is.bind(null, s, i)); + return !n || n === t && r ? r : n + } + + function is(t = 0, e = 0, s) { + if (s.start <= t && s.start + s.duration > t) return 0; + const i = Math.min(e, s.duration + (s.deltaPTS ? s.deltaPTS : 0)); + return s.start + s.duration - i <= t ? 1 : s.start - i > t && s.start ? -1 : 0 + } + + function rs(t, e, s) { + const i = 1e3 * Math.min(e, s.duration + (s.deltaPTS ? s.deltaPTS : 0)); + return (s.endProgramDateTime || 0) - i > t + } + var ns = { + DoNothing: 0, + SendEndCallback: 1, + SendAlternateToPenaltyBox: 2, + RemoveAlternatePermanently: 3, + InsertDiscontinuity: 4, + RetryRequest: 5 + }, + as = { + None: 0, + MoveAllAlternatesMatchingHost: 1, + MoveAllAlternatesMatchingHDCP: 2, + SwitchToSDR: 4 + }; + class os { + constructor(t) { + this.hls = void 0, this.playlistError = 0, this.penalizedRenditions = {}, this.log = void 0, this.warn = void 0, this.error = void 0, this.hls = t, this.log = b.log.bind(b, "[info]:"), this.warn = b.warn.bind(b, "[warning]:"), this.error = b.error.bind(b, "[error]:"), this.registerListeners() + } + registerListeners() { + const t = this.hls; + t.on(E.ERROR, this.onError, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.LEVEL_UPDATED, this.onLevelUpdated, this) + } + unregisterListeners() { + const t = this.hls; + t && (t.off(E.ERROR, this.onError, this), t.off(E.ERROR, this.onErrorOut, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.LEVEL_UPDATED, this.onLevelUpdated, this)) + } + destroy() { + this.unregisterListeners(), this.hls = null, this.penalizedRenditions = {} + } + startLoad(t) {} + stopLoad() { + this.playlistError = 0 + } + getVariantLevelIndex(t) { + return (null == t ? void 0 : t.type) === Te.MAIN ? t.level : this.hls.loadLevel + } + onManifestLoading() { + this.playlistError = 0, this.penalizedRenditions = {} + } + onLevelUpdated() { + this.playlistError = 0 + } + onError(t, e) { + var s, i; + if (e.fatal) return; + const r = this.hls, + n = e.context; + switch (e.details) { + case S.FRAG_LOAD_ERROR: + case S.FRAG_LOAD_TIMEOUT: + case S.KEY_LOAD_ERROR: + case S.KEY_LOAD_TIMEOUT: + return void(e.errorAction = this.getFragRetryOrSwitchAction(e)); + case S.FRAG_PARSING_ERROR: + if (null != (s = e.frag) && s.gap) return void(e.errorAction = { + action: ns.DoNothing, + flags: as.None + }); + case S.FRAG_GAP: + case S.FRAG_DECRYPT_ERROR: + return e.errorAction = this.getFragRetryOrSwitchAction(e), void(e.errorAction.action = ns.SendAlternateToPenaltyBox); + case S.LEVEL_EMPTY_ERROR: + case S.LEVEL_PARSING_ERROR: { + var a, o; + const t = e.parent === Te.MAIN ? e.level : r.loadLevel; + e.details === S.LEVEL_EMPTY_ERROR && null != (a = e.context) && null != (o = a.levelDetails) && o.live ? e.errorAction = this.getPlaylistRetryOrSwitchAction(e, t) : (e.levelRetry = !1, e.errorAction = this.getLevelSwitchAction(e, t)) + } + return; + case S.LEVEL_LOAD_ERROR: + case S.LEVEL_LOAD_TIMEOUT: + return void("number" == typeof(null == n ? void 0 : n.level) && (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, n.level))); + case S.AUDIO_TRACK_LOAD_ERROR: + case S.AUDIO_TRACK_LOAD_TIMEOUT: + case S.SUBTITLE_LOAD_ERROR: + case S.SUBTITLE_TRACK_LOAD_TIMEOUT: + if (n) { + const t = r.levels[r.loadLevel]; + if (t && (n.type === ve && t.hasAudioGroup(n.groupId) || n.type === Ee && t.hasSubtitleGroup(n.groupId))) return e.errorAction = this.getPlaylistRetryOrSwitchAction(e, r.loadLevel), e.errorAction.action = ns.SendAlternateToPenaltyBox, void(e.errorAction.flags = as.MoveAllAlternatesMatchingHost) + } + return; + case S.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED: { + const t = r.levels[r.loadLevel], + s = null == t ? void 0 : t.attrs["HDCP-LEVEL"]; + s ? e.errorAction = { + action: ns.SendAlternateToPenaltyBox, + flags: as.MoveAllAlternatesMatchingHDCP, + hdcpLevel: s + } : this.keySystemError(e) + } + return; + case S.BUFFER_ADD_CODEC_ERROR: + case S.REMUX_ALLOC_ERROR: + case S.BUFFER_APPEND_ERROR: + return void(e.errorAction = this.getLevelSwitchAction(e, null != (i = e.level) ? i : r.loadLevel)); + case S.INTERNAL_EXCEPTION: + case S.BUFFER_APPENDING_ERROR: + case S.BUFFER_FULL_ERROR: + case S.LEVEL_SWITCH_ERROR: + case S.BUFFER_STALLED_ERROR: + case S.BUFFER_SEEK_OVER_HOLE: + case S.BUFFER_NUDGE_ON_STALL: + return void(e.errorAction = { + action: ns.DoNothing, + flags: as.None + }) + } + e.type === T.KEY_SYSTEM_ERROR && this.keySystemError(e) + } + keySystemError(t) { + const e = this.getVariantLevelIndex(t.frag); + t.levelRetry = !1, t.errorAction = this.getLevelSwitchAction(t, e) + } + getPlaylistRetryOrSwitchAction(t, e) { + const s = Qe(this.hls.config.playlistLoadPolicy, t), + i = this.playlistError++; + if (ts(s, i, ze(t), t.response)) return { + action: ns.RetryRequest, + flags: as.None, + retryConfig: s, + retryCount: i + }; + const r = this.getLevelSwitchAction(t, e); + return s && (r.retryConfig = s, r.retryCount = i), r + } + getFragRetryOrSwitchAction(t) { + const e = this.hls, + s = this.getVariantLevelIndex(t.frag), + i = e.levels[s], + { + fragLoadPolicy: r, + keyLoadPolicy: n + } = e.config, + a = Qe(t.details.startsWith("key") ? n : r, t), + o = e.levels.reduce(((t, e) => t + e.fragmentError), 0); + if (i && (t.details !== S.FRAG_GAP && i.fragmentError++, ts(a, o, ze(t), t.response))) return { + action: ns.RetryRequest, + flags: as.None, + retryConfig: a, + retryCount: o + }; + const l = this.getLevelSwitchAction(t, s); + return a && (l.retryConfig = a, l.retryCount = o), l + } + getLevelSwitchAction(t, e) { + const s = this.hls; + null == e && (e = s.loadLevel); + const i = this.hls.levels[e]; + if (i) { + var r, n; + const e = t.details; + i.loadError++, e === S.BUFFER_APPEND_ERROR && i.fragmentError++; + let l = -1; + const { + levels: h, + loadLevel: d, + minAutoLevel: c, + maxAutoLevel: u + } = s; + s.autoLevelEnabled || (s.loadLevel = -1); + const f = null == (r = t.frag) ? void 0 : r.type, + g = (f === Te.AUDIO && e === S.FRAG_PARSING_ERROR || "audio" === t.sourceBufferName && (e === S.BUFFER_ADD_CODEC_ERROR || e === S.BUFFER_APPEND_ERROR)) && h.some((({ + audioCodec: t + }) => i.audioCodec !== t)), + m = "video" === t.sourceBufferName && (e === S.BUFFER_ADD_CODEC_ERROR || e === S.BUFFER_APPEND_ERROR) && h.some((({ + codecSet: t, + audioCodec: e + }) => i.codecSet !== t && i.audioCodec === e)), + { + type: p, + groupId: y + } = null != (n = t.context) ? n : {}; + for (let s = h.length; s--;) { + const r = (s + d) % h.length; + if (r !== d && r >= c && r <= u && 0 === h[r].loadError) { + var a, o; + const s = h[r]; + if (e === S.FRAG_GAP && t.frag) { + const e = h[r].details; + if (e) { + const s = ss(t.frag, e.fragments, t.frag.start); + if (null != s && s.gap) continue + } + } else { + if (p === ve && s.hasAudioGroup(y) || p === Ee && s.hasSubtitleGroup(y)) continue; + if (f === Te.AUDIO && null != (a = i.audioGroups) && a.some((t => s.hasAudioGroup(t))) || f === Te.SUBTITLE && null != (o = i.subtitleGroups) && o.some((t => s.hasSubtitleGroup(t))) || g && i.audioCodec === s.audioCodec || !g && i.audioCodec !== s.audioCodec || m && i.codecSet === s.codecSet) continue + } + l = r; + break + } + } + if (l > -1 && s.loadLevel !== l) return t.levelRetry = !0, this.playlistError = 0, { + action: ns.SendAlternateToPenaltyBox, + flags: as.None, + nextAutoLevel: l + } + } + return { + action: ns.SendAlternateToPenaltyBox, + flags: as.MoveAllAlternatesMatchingHost + } + } + onErrorOut(t, e) { + var s; + switch (null == (s = e.errorAction) ? void 0 : s.action) { + case ns.DoNothing: + break; + case ns.SendAlternateToPenaltyBox: + this.sendAlternateToPenaltyBox(e), e.errorAction.resolved || e.details === S.FRAG_GAP ? /MediaSource readyState: ended/.test(e.error.message) && (this.warn(`MediaSource ended after "${e.sourceBufferName}" sourceBuffer append error. Attempting to recover from media error.`), this.hls.recoverMediaError()) : e.fatal = !0; + case ns.RetryRequest: + } + e.fatal && this.hls.stopLoad() + } + sendAlternateToPenaltyBox(t) { + const e = this.hls, + s = t.errorAction; + if (!s) return; + const { + flags: i, + hdcpLevel: r, + nextAutoLevel: n + } = s; + switch (i) { + case as.None: + this.switchLevel(t, n); + break; + case as.MoveAllAlternatesMatchingHDCP: + r && (e.maxHdcpLevel = Oe[Oe.indexOf(r) - 1], s.resolved = !0), this.warn(`Restricting playback to HDCP-LEVEL of "${e.maxHdcpLevel}" or lower`) + } + s.resolved || this.switchLevel(t, n) + } + switchLevel(t, e) { + void 0 !== e && t.errorAction && (this.warn(`switching to level ${e} after ${t.details}`), this.hls.nextAutoLevel = e, t.errorAction.resolved = !0, this.hls.nextLoadLevel = this.hls.nextAutoLevel) + } + } + class ls { + constructor(t, e) { + this.hls = void 0, this.timer = -1, this.requestScheduled = -1, this.canLoad = !1, this.log = void 0, this.warn = void 0, this.log = b.log.bind(b, `${e}:`), this.warn = b.warn.bind(b, `${e}:`), this.hls = t + } + destroy() { + this.clearTimer(), this.hls = this.log = this.warn = null + } + clearTimer() { + -1 !== this.timer && (self.clearTimeout(this.timer), this.timer = -1) + } + startLoad() { + this.canLoad = !0, this.requestScheduled = -1, this.loadPlaylist() + } + stopLoad() { + this.canLoad = !1, this.clearTimer() + } + switchParams(t, e, s) { + const i = null == e ? void 0 : e.renditionReports; + if (i) { + let r = -1; + for (let s = 0; s < i.length; s++) { + const n = i[s]; + let a; + try { + a = new self.URL(n.URI, e.url).href + } catch (t) { + b.warn(`Could not construct new URL for Rendition Report: ${t}`), a = n.URI || "" + } + if (a === t) { + r = s; + break + } + a === t.substring(0, a.length) && (r = s) + } + if (-1 !== r) { + const t = i[r], + n = parseInt(t["LAST-MSN"]) || (null == e ? void 0 : e.lastPartSn); + let a = parseInt(t["LAST-PART"]) || (null == e ? void 0 : e.lastPartIndex); + if (this.hls.config.lowLatencyMode) { + const t = Math.min(e.age - e.partTarget, e.targetduration); + a >= 0 && t > e.partTarget && (a += 1) + } + const o = s && Be(s); + return new $e(n, a >= 0 ? a : void 0, o) + } + } + } + loadPlaylist(t) { + -1 === this.requestScheduled && (this.requestScheduled = self.performance.now()) + } + shouldLoadPlaylist(t) { + return this.canLoad && !!t && !!t.url && (!t.details || t.details.live) + } + shouldReloadPlaylist(t) { + return -1 === this.timer && -1 === this.requestScheduled && this.shouldLoadPlaylist(t) + } + playlistLoaded(t, e, s) { + const { + details: i, + stats: r + } = e, n = self.performance.now(), a = r.loading.first ? Math.max(0, n - r.loading.first) : 0; + if (i.advancedDateTime = Date.now() - a, i.live || null != s && s.live) { + if (i.reloaded(s), s && this.log(`live playlist ${t} ${i.advanced?"REFRESHED "+i.lastPartSn+"-"+i.lastPartIndex:i.updated?"UPDATED":"MISSED"}`), s && i.fragments.length > 0 && function(t, e) { + let s = null; + const i = t.fragments; + for (let t = i.length - 1; t >= 0; t--) { + const e = i[t].initSegment; + if (e) { + s = e; + break + } + } + t.fragmentHint && delete t.fragmentHint.endPTS; + let r, n = 0; + if (function(t, e, s) { + const i = e.skippedSegments, + r = Math.max(t.startSN, e.startSN) - e.startSN, + n = (t.fragmentHint ? 1 : 0) + (i ? e.endSN : Math.min(t.endSN, e.endSN)) - e.startSN, + a = e.startSN - t.startSN, + o = e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments, + l = t.fragmentHint ? t.fragments.concat(t.fragmentHint) : t.fragments; + for (let t = r; t <= n; t++) { + const r = l[a + t]; + let n = o[t]; + i && !n && t < i && (n = e.fragments[t] = r), r && n && s(r, n) + } + }(t, e, ((t, i) => { + t.relurl && (n = t.cc - i.cc), p(t.startPTS) && p(t.endPTS) && (i.start = i.startPTS = t.startPTS, i.startDTS = t.startDTS, i.maxStartPTS = t.maxStartPTS, i.endPTS = t.endPTS, i.endDTS = t.endDTS, i.minEndPTS = t.minEndPTS, i.duration = t.endPTS - t.startPTS, i.duration && (r = i), e.PTSKnown = e.alignedSliding = !0), i.elementaryStreams = t.elementaryStreams, i.loader = t.loader, i.stats = t.stats, t.initSegment && (i.initSegment = t.initSegment, s = t.initSegment) + })), s && (e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments).forEach((t => { + var e; + !t || t.initSegment && t.initSegment.relurl !== (null == (e = s) ? void 0 : e.relurl) || (t.initSegment = s) + })), e.skippedSegments) + if (e.deltaUpdateFailed = e.fragments.some((t => !t)), e.deltaUpdateFailed) { + b.warn("[level-helper] Previous playlist missing segments skipped in delta playlist"); + for (let t = e.skippedSegments; t--;) e.fragments.shift(); + e.startSN = e.fragments[0].sn, e.startCC = e.fragments[0].cc + } else e.canSkipDateRanges && (e.dateRanges = function(t, e, s) { + const i = m({}, t); + return s && s.forEach((t => { + delete i[t] + })), Object.keys(e).forEach((t => { + const s = new w(e[t].attr, i[t]); + s.isValid ? i[t] = s : b.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: "${JSON.stringify(e[t].attr)}"`) + })), i + }(t.dateRanges, e.dateRanges, e.recentlyRemovedDateranges)); + const a = e.fragments; + if (n) { + b.warn("discontinuity sliding from playlist, take drift into account"); + for (let t = 0; t < a.length; t++) a[t].cc += n + } + e.skippedSegments && (e.startCC = e.fragments[0].cc), + function(t, e, s) { + if (t && e) { + let i = 0; + for (let r = 0, n = t.length; r <= n; r++) { + const n = t[r], + a = e[r + i]; + n && a && n.index === a.index && n.fragment.sn === a.fragment.sn ? s(n, a) : i-- + } + } + }(t.partList, e.partList, ((t, e) => { + e.elementaryStreams = t.elementaryStreams, e.stats = t.stats + })), r ? Ve(e, r, r.startPTS, r.endPTS, r.startDTS, r.endDTS) : Ye(t, e), a.length && (e.totalduration = e.edge - a[0].start), e.driftStartTime = t.driftStartTime, e.driftStart = t.driftStart; + const o = e.advancedDateTime; + if (e.advanced && o) { + const t = e.edge; + e.driftStart || (e.driftStartTime = o, e.driftStart = t), e.driftEndTime = o, e.driftEnd = t + } else e.driftEndTime = t.driftEndTime, e.driftEnd = t.driftEnd, e.advancedDateTime = t.advancedDateTime + }(s, i), !this.canLoad || !i.live) return; + let a, o, l; + if (i.canBlockReload && i.endSN && i.advanced) { + const t = this.hls.config.lowLatencyMode, + r = i.lastPartSn, + n = i.endSN, + h = i.lastPartIndex, + d = r === n, + c = t ? 0 : h; - 1 !== h ? (o = d ? n + 1 : r, l = d ? c : h + 1) : o = n + 1; + const u = i.age, + f = u + i.ageHeader; + let g = Math.min(f - i.partTarget, 1.5 * i.targetduration); + if (g > 0) { + if (s && g > s.tuneInGoal) this.warn(`CDN Tune-in goal increased from: ${s.tuneInGoal} to: ${g} with playlist age: ${i.age}`), g = 0; + else { + const t = Math.floor(g / i.targetduration); + o += t, void 0 !== l && (l += Math.round(g % i.targetduration / i.partTarget)), this.log(`CDN Tune-in age: ${i.ageHeader}s last advanced ${u.toFixed(2)}s goal: ${g} skip sn ${t} to part ${l}`) + } + i.tuneInGoal = g + } + if (a = this.getDeliveryDirectives(i, e.deliveryDirectives, o, l), t || !d) return void this.loadPlaylist(a) + } else(i.canBlockReload || i.canSkipUntil) && (a = this.getDeliveryDirectives(i, e.deliveryDirectives, o, l)); + const h = this.hls.mainForwardBufferInfo, + d = h ? h.end - h.len : 0, + c = function(t, e = 1 / 0) { + let s = 1e3 * t.targetduration; + if (t.updated) { + const i = t.fragments, + r = 4; + if (i.length && s * r > e) { + const t = 1e3 * i[i.length - 1].duration; + t < s && (s = t) + } + } else s /= 2; + return Math.round(s) + }(i, 1e3 * (i.edge - d)); + i.updated && n > this.requestScheduled + c && (this.requestScheduled = r.loading.start), void 0 !== o && i.canBlockReload ? this.requestScheduled = r.loading.first + c - (1e3 * i.partTarget || 1e3) : -1 === this.requestScheduled || this.requestScheduled + c < n ? this.requestScheduled = n : this.requestScheduled - n <= 0 && (this.requestScheduled += c); + let u = this.requestScheduled - n; + u = Math.max(0, u), this.log(`reload live playlist ${t} in ${Math.round(u)} ms`), this.timer = self.setTimeout((() => this.loadPlaylist(a)), u) + } else this.clearTimer() + } + getDeliveryDirectives(t, e, s, i) { + let r = Be(t); + return null != e && e.skip && t.deltaUpdateFailed && (s = e.msn, i = e.part, r = Ue.No), new $e(s, i, r) + } + checkRetry(t) { + const e = t.details, + s = ze(t), + i = t.errorAction, + { + action: r, + retryCount: n = 0, + retryConfig: a + } = i || {}, + o = !!i && !!a && (r === ns.RetryRequest || !i.resolved && r === ns.SendAlternateToPenaltyBox); + if (o) { + var l; + if (this.requestScheduled = -1, n >= a.maxNumRetry) return !1; + if (s && null != (l = t.context) && l.deliveryDirectives) this.warn(`Retrying playlist loading ${n+1}/${a.maxNumRetry} after "${e}" without delivery-directives`), this.loadPlaylist(); + else { + const t = Je(a, n); + this.timer = self.setTimeout((() => this.loadPlaylist()), t), this.warn(`Retrying playlist loading ${n+1}/${a.maxNumRetry} after "${e}" in ${t}ms`) + } + t.levelRetry = !0, i.resolved = !0 + } + return o + } + } + class hs { + constructor(t, e = 0, s = 0) { + this.halfLife = void 0, this.alpha_ = void 0, this.estimate_ = void 0, this.totalWeight_ = void 0, this.halfLife = t, this.alpha_ = t ? Math.exp(Math.log(.5) / t) : 0, this.estimate_ = e, this.totalWeight_ = s + } + sample(t, e) { + const s = Math.pow(this.alpha_, t); + this.estimate_ = e * (1 - s) + s * this.estimate_, this.totalWeight_ += t + } + getTotalWeight() { + return this.totalWeight_ + } + getEstimate() { + if (this.alpha_) { + const t = 1 - Math.pow(this.alpha_, this.totalWeight_); + if (t) return this.estimate_ / t + } + return this.estimate_ + } + } + class ds { + constructor(t, e, s, i = 100) { + this.defaultEstimate_ = void 0, this.minWeight_ = void 0, this.minDelayMs_ = void 0, this.slow_ = void 0, this.fast_ = void 0, this.defaultTTFB_ = void 0, this.ttfb_ = void 0, this.defaultEstimate_ = s, this.minWeight_ = .001, this.minDelayMs_ = 50, this.slow_ = new hs(t), this.fast_ = new hs(e), this.defaultTTFB_ = i, this.ttfb_ = new hs(t) + } + update(t, e) { + const { + slow_: s, + fast_: i, + ttfb_: r + } = this; + s.halfLife !== t && (this.slow_ = new hs(t, s.getEstimate(), s.getTotalWeight())), i.halfLife !== e && (this.fast_ = new hs(e, i.getEstimate(), i.getTotalWeight())), r.halfLife !== t && (this.ttfb_ = new hs(t, r.getEstimate(), r.getTotalWeight())) + } + sample(t, e) { + const s = (t = Math.max(t, this.minDelayMs_)) / 1e3, + i = 8 * e / s; + this.fast_.sample(s, i), this.slow_.sample(s, i) + } + sampleTTFB(t) { + const e = t / 1e3, + s = Math.sqrt(2) * Math.exp(-Math.pow(e, 2) / 2); + this.ttfb_.sample(s, Math.max(t, 5)) + } + canEstimate() { + return this.fast_.getTotalWeight() >= this.minWeight_ + } + getEstimate() { + return this.canEstimate() ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) : this.defaultEstimate_ + } + getEstimateTTFB() { + return this.ttfb_.getTotalWeight() >= this.minWeight_ ? this.ttfb_.getEstimate() : this.defaultTTFB_ + } + destroy() {} + } + const cs = { + supported: !0, + configurations: [], + decodingInfoResults: [{ + supported: !0, + powerEfficient: !0, + smooth: !0 + }] + }, + us = {}; + + function fs(t, e, s, i, r, n) { + const a = t.audioCodec ? t.audioGroups : null, + o = null == n ? void 0 : n.audioCodec, + l = null == n ? void 0 : n.channels, + h = l ? parseInt(l) : o ? 1 / 0 : 2; + let d = null; + if (null != a && a.length) try { + d = 1 === a.length && a[0] ? e.groups[a[0]].channels : a.reduce(((t, s) => { + if (s) { + const i = e.groups[s]; + if (!i) throw new Error(`Audio track group ${s} not found`); + Object.keys(i.channels).forEach((e => { + t[e] = (t[e] || 0) + i.channels[e] + })) + } + return t + }), { + 2: 0 + }) + } catch (t) { + return !0 + } + return void 0 !== t.videoCodec && (t.width > 1920 && t.height > 1088 || t.height > 1920 && t.width > 1088 || t.frameRate > Math.max(i, 30) || "SDR" !== t.videoRange && t.videoRange !== s || t.bitrate > Math.max(r, 8e6)) || !!d && p(h) && Object.keys(d).some((t => parseInt(t) > h)) + } + + function gs(t, e, s) { + const i = t.videoCodec, + r = t.audioCodec; + if (!i || !r || !s) return Promise.resolve(cs); + const n = { + width: t.width, + height: t.height, + bitrate: Math.ceil(Math.max(.9 * t.bitrate, t.averageBitrate)), + framerate: t.frameRate || 30 + }, + a = t.videoRange; + "SDR" !== a && (n.transferFunction = a.toLowerCase()); + const o = i.split(",").map((t => ({ + type: "media-source", + video: f(f({}, n), {}, { + contentType: zt(t, "video") + }) + }))); + return r && t.audioGroups && t.audioGroups.forEach((t => { + var s; + t && (null == (s = e.groups[t]) || s.tracks.forEach((e => { + if (e.groupId === t) { + const t = e.channels || "", + s = parseFloat(t); + p(s) && s > 2 && o.push.apply(o, r.split(",").map((t => ({ + type: "media-source", + audio: { + contentType: zt(t, "audio"), + channels: "" + s + } + })))) + } + }))) + })), Promise.all(o.map((t => { + const e = function(t) { + const { + audio: e, + video: s + } = t, i = s || e; + if (i) { + const t = i.contentType.split('"')[1]; + if (s) return `r${s.height}x${s.width}f${Math.ceil(s.framerate)}${s.transferFunction||"sd"}_${t}_${Math.ceil(s.bitrate/1e5)}`; + if (e) return `c${e.channels}${e.spatialRendering?"s":"n"}_${t}` + } + return "" + }(t); + return us[e] || (us[e] = s.decodingInfo(t)) + }))).then((t => ({ + supported: !t.some((t => !t.supported)), + configurations: o, + decodingInfoResults: t + }))).catch((t => ({ + supported: !1, + configurations: o, + decodingInfoResults: [], + error: t + }))) + } + + function ms(t, e) { + b.log(`[abr] start candidates with "${t}" ignored because ${e}`) + } + + function ps(t, e, s) { + if ("attrs" in t) { + const s = e.indexOf(t); + if (-1 !== s) return s + } + for (let i = 0; i < e.length; i++) + if (ys(t, e[i], s)) return i; + return -1 + } + + function ys(t, e, s) { + const { + groupId: i, + name: r, + lang: n, + assocLang: a, + characteristics: o, + default: l + } = t, h = t.forced; + return (void 0 === i || e.groupId === i) && (void 0 === r || e.name === r) && (void 0 === n || e.lang === n) && (void 0 === n || e.assocLang === a) && (void 0 === l || e.default === l) && (void 0 === h || e.forced === h) && (void 0 === o || function(t, e = "") { + const s = t.split(","), + i = e.split(","); + return s.length === i.length && !s.some((t => -1 === i.indexOf(t))) + }(o, e.characteristics)) && (void 0 === s || s(t, e)) + } + + function vs(t, e) { + const { + audioCodec: s, + channels: i + } = t; + return !(void 0 !== s && (e.audioCodec || "").substring(0, 4) !== s.substring(0, 4) || void 0 !== i && i !== (e.channels || "2")) + } + + function Es(t, e, s) { + for (let i = e; i; i--) + if (s(t[i])) return i; + for (let i = e + 1; i < t.length; i++) + if (s(t[i])) return i; + return -1 + } + class Ts { + constructor(t) { + this.hls = void 0, this.lastLevelLoadSec = 0, this.lastLoadedFragLevel = -1, this.firstSelection = -1, this._nextAutoLevel = -1, this.nextAutoLevelKey = "", this.audioTracksByGroup = null, this.codecTiers = null, this.timer = -1, this.fragCurrent = null, this.partCurrent = null, this.bitrateTestDelay = 0, this.bwEstimator = void 0, this._abandonRulesCheck = () => { + const { + fragCurrent: t, + partCurrent: e, + hls: s + } = this, { + autoLevelEnabled: i, + media: r + } = s; + if (!t || !r) return; + const n = performance.now(), + a = e ? e.stats : t.stats, + o = e ? e.duration : t.duration, + l = n - a.loading.start, + h = s.minAutoLevel; + if (a.aborted || a.loaded && a.loaded === a.total || t.level <= h) return this.clearTimer(), void(this._nextAutoLevel = -1); + if (!i || r.paused || !r.playbackRate || !r.readyState) return; + const d = s.mainForwardBufferInfo; + if (null === d) return; + const c = this.bwEstimator.getEstimateTTFB(), + u = Math.abs(r.playbackRate); + if (l <= Math.max(c, o / (2 * u) * 1e3)) return; + const f = d.len / u, + g = a.loading.first ? a.loading.first - a.loading.start : -1, + m = a.loaded && g > -1, + y = this.getBwEstimate(), + v = s.levels, + T = v[t.level], + S = a.total || Math.max(a.loaded, Math.round(o * T.averageBitrate / 8)); + let L = m ? l - g : l; + L < 1 && m && (L = Math.min(l, 8 * a.loaded / y)); + const A = m ? 1e3 * a.loaded / L : 0, + R = A ? (S - a.loaded) / A : 8 * S / y + c / 1e3; + if (R <= f) return; + const D = A ? 8 * A : y; + let k, I = Number.POSITIVE_INFINITY; + for (k = t.level - 1; k > h; k--) { + const t = v[k].maxBitrate; + if (I = this.getTimeToLoadFrag(c / 1e3, D, o * t, !v[k].details), I < f) break + } + if (I >= R) return; + if (I > 10 * o) return; + s.nextLoadLevel = s.nextAutoLevel = k, m ? this.bwEstimator.sample(l - Math.min(c, g), a.loaded) : this.bwEstimator.sampleTTFB(l); + const C = v[k].maxBitrate; + this.getBwEstimate() * this.hls.config.abrBandWidthUpFactor > C && this.resetEstimator(C), this.clearTimer(), b.warn(`[abr] Fragment ${t.sn}${e?" part "+e.index:""} of level ${t.level} is loading too slowly;\n Time to underbuffer: ${f.toFixed(3)} s\n Estimated load time for current fragment: ${R.toFixed(3)} s\n Estimated load time for down switch fragment: ${I.toFixed(3)} s\n TTFB estimate: ${0|g} ms\n Current BW estimate: ${p(y)?0|y:"Unknown"} bps\n New BW estimate: ${0|this.getBwEstimate()} bps\n Switching to level ${k} @ ${0|C} bps`), s.trigger(E.FRAG_LOAD_EMERGENCY_ABORTED, { + frag: t, + part: e, + stats: a + }) + }, this.hls = t, this.bwEstimator = this.initEstimator(), this.registerListeners() + } + resetEstimator(t) { + t && (b.log(`setting initial bwe to ${t}`), this.hls.config.abrEwmaDefaultEstimate = t), this.firstSelection = -1, this.bwEstimator = this.initEstimator() + } + initEstimator() { + const t = this.hls.config; + return new ds(t.abrEwmaSlowVoD, t.abrEwmaFastVoD, t.abrEwmaDefaultEstimate) + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.FRAG_LOADING, this.onFragLoading, this), t.on(E.FRAG_LOADED, this.onFragLoaded, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this), t.on(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.on(E.LEVEL_LOADED, this.onLevelLoaded, this), t.on(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.on(E.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this), t.on(E.ERROR, this.onError, this) + } + unregisterListeners() { + const { + hls: t + } = this; + t && (t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.FRAG_LOADING, this.onFragLoading, this), t.off(E.FRAG_LOADED, this.onFragLoaded, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this), t.off(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.off(E.LEVEL_LOADED, this.onLevelLoaded, this), t.off(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.off(E.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this), t.off(E.ERROR, this.onError, this)) + } + destroy() { + this.unregisterListeners(), this.clearTimer(), this.hls = this._abandonRulesCheck = null, this.fragCurrent = this.partCurrent = null + } + onManifestLoading(t, e) { + this.lastLoadedFragLevel = -1, this.firstSelection = -1, this.lastLevelLoadSec = 0, this.fragCurrent = this.partCurrent = null, this.onLevelsUpdated(), this.clearTimer() + } + onLevelsUpdated() { + this.lastLoadedFragLevel > -1 && this.fragCurrent && (this.lastLoadedFragLevel = this.fragCurrent.level), this._nextAutoLevel = -1, this.onMaxAutoLevelUpdated(), this.codecTiers = null, this.audioTracksByGroup = null + } + onMaxAutoLevelUpdated() { + this.firstSelection = -1, this.nextAutoLevelKey = "" + } + onFragLoading(t, e) { + const s = e.frag; + var i; + this.ignoreFragment(s) || (s.bitrateTest || (this.fragCurrent = s, this.partCurrent = null != (i = e.part) ? i : null), this.clearTimer(), this.timer = self.setInterval(this._abandonRulesCheck, 100)) + } + onLevelSwitching(t, e) { + this.clearTimer() + } + onError(t, e) { + if (!e.fatal) switch (e.details) { + case S.BUFFER_ADD_CODEC_ERROR: + case S.BUFFER_APPEND_ERROR: + this.lastLoadedFragLevel = -1, this.firstSelection = -1; + break; + case S.FRAG_LOAD_TIMEOUT: { + const t = e.frag, + { + fragCurrent: s, + partCurrent: i + } = this; + if (t && s && t.sn === s.sn && t.level === s.level) { + const e = performance.now(), + s = i ? i.stats : t.stats, + r = e - s.loading.start, + n = s.loading.first ? s.loading.first - s.loading.start : -1; + if (s.loaded && n > -1) { + const t = this.bwEstimator.getEstimateTTFB(); + this.bwEstimator.sample(r - Math.min(t, n), s.loaded) + } else this.bwEstimator.sampleTTFB(r) + } + break + } + } + } + getTimeToLoadFrag(t, e, s, i) { + return t + s / e + (i ? this.lastLevelLoadSec : 0) + } + onLevelLoaded(t, e) { + const s = this.hls.config, + { + loading: i + } = e.stats, + r = i.end - i.start; + p(r) && (this.lastLevelLoadSec = r / 1e3), e.details.live ? this.bwEstimator.update(s.abrEwmaSlowLive, s.abrEwmaFastLive) : this.bwEstimator.update(s.abrEwmaSlowVoD, s.abrEwmaFastVoD) + } + onFragLoaded(t, { + frag: e, + part: s + }) { + const i = s ? s.stats : e.stats; + if (e.type === Te.MAIN && this.bwEstimator.sampleTTFB(i.loading.first - i.loading.start), !this.ignoreFragment(e)) { + if (this.clearTimer(), e.level === this._nextAutoLevel && (this._nextAutoLevel = -1), this.firstSelection = -1, this.hls.config.abrMaxWithRealBitrate) { + const t = s ? s.duration : e.duration, + r = this.hls.levels[e.level], + n = (r.loaded ? r.loaded.bytes : 0) + i.loaded, + a = (r.loaded ? r.loaded.duration : 0) + t; + r.loaded = { + bytes: n, + duration: a + }, r.realBitrate = Math.round(8 * n / a) + } + if (e.bitrateTest) { + const t = { + stats: i, + frag: e, + part: s, + id: e.type + }; + this.onFragBuffered(E.FRAG_BUFFERED, t), e.bitrateTest = !1 + } else this.lastLoadedFragLevel = e.level + } + } + onFragBuffered(t, e) { + const { + frag: s, + part: i + } = e, r = null != i && i.stats.loaded ? i.stats : s.stats; + if (r.aborted) return; + if (this.ignoreFragment(s)) return; + const n = r.parsing.end - r.loading.start - Math.min(r.loading.first - r.loading.start, this.bwEstimator.getEstimateTTFB()); + this.bwEstimator.sample(n, r.loaded), r.bwEstimate = this.getBwEstimate(), s.bitrateTest ? this.bitrateTestDelay = n / 1e3 : this.bitrateTestDelay = 0 + } + ignoreFragment(t) { + return t.type !== Te.MAIN || "initSegment" === t.sn + } + clearTimer() { + this.timer > -1 && (self.clearInterval(this.timer), this.timer = -1) + } + get firstAutoLevel() { + const { + maxAutoLevel: t, + minAutoLevel: e + } = this.hls, s = this.getBwEstimate(), i = this.hls.config.maxStarvationDelay, r = this.findBestLevel(s, e, t, 0, i, 1, 1); + if (r > -1) return r; + const n = this.hls.firstLevel, + a = Math.min(Math.max(n, e), t); + return b.warn(`[abr] Could not find best starting auto level. Defaulting to first in playlist ${n} clamped to ${a}`), a + } + get forcedAutoLevel() { + return this.nextAutoLevelKey ? -1 : this._nextAutoLevel + } + get nextAutoLevel() { + const t = this.forcedAutoLevel, + e = this.bwEstimator.canEstimate(), + s = this.lastLoadedFragLevel > -1; + if (!(-1 === t || e && s && this.nextAutoLevelKey !== this.getAutoLevelKey())) return t; + const i = e && s ? this.getNextABRAutoLevel() : this.firstAutoLevel; + if (-1 !== t) { + const e = this.hls.levels; + if (e.length > Math.max(t, i) && e[t].loadError <= e[i].loadError) return t + } + return this._nextAutoLevel = i, this.nextAutoLevelKey = this.getAutoLevelKey(), i + } + getAutoLevelKey() { + return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}` + } + getNextABRAutoLevel() { + const { + fragCurrent: t, + partCurrent: e, + hls: s + } = this, { + maxAutoLevel: i, + config: r, + minAutoLevel: n + } = s, a = e ? e.duration : t ? t.duration : 0, o = this.getBwEstimate(), l = this.getStarvationDelay(); + let h = r.abrBandWidthFactor, + d = r.abrBandWidthUpFactor; + if (l) { + const t = this.findBestLevel(o, n, i, l, 0, h, d); + if (t >= 0) return t + } + let c = a ? Math.min(a, r.maxStarvationDelay) : r.maxStarvationDelay; + if (!l) { + const t = this.bitrateTestDelay; + t && (c = (a ? Math.min(a, r.maxLoadingDelay) : r.maxLoadingDelay) - t, b.info(`[abr] bitrate test took ${Math.round(1e3*t)}ms, set first fragment max fetchDuration to ${Math.round(1e3*c)} ms`), h = d = 1) + } + const u = this.findBestLevel(o, n, i, l, c, h, d); + if (b.info(`[abr] ${l?"rebuffering expected":"buffer is empty"}, optimal quality level ${u}`), u > -1) return u; + const f = s.levels[n], + g = s.levels[s.loadLevel]; + return (null == f ? void 0 : f.bitrate) < (null == g ? void 0 : g.bitrate) ? n : s.loadLevel + } + getStarvationDelay() { + const t = this.hls, + e = t.media; + if (!e) return 1 / 0; + const s = e && 0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1, + i = t.mainForwardBufferInfo; + return (i ? i.len : 0) / s + } + getBwEstimate() { + return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate + } + findBestLevel(t, e, s, i, r, n, a) { + var o; + const l = i + r, + h = this.lastLoadedFragLevel, + d = -1 === h ? this.hls.firstLevel : h, + { + fragCurrent: c, + partCurrent: u + } = this, + { + levels: f, + allAudioTracks: g, + loadLevel: m, + config: y + } = this.hls; + if (1 === f.length) return 0; + const v = f[d], + E = !(null == v || null == (o = v.details) || !o.live), + T = -1 === m || -1 === h; + let S, L = "SDR", + A = (null == v ? void 0 : v.frameRate) || 0; + const { + audioPreference: R, + videoPreference: D + } = y, k = this.audioTracksByGroup || (this.audioTracksByGroup = function(t) { + return t.reduce(((t, e) => { + let s = t.groups[e.groupId]; + s || (s = t.groups[e.groupId] = { + tracks: [], + channels: { + 2: 0 + }, + hasDefault: !1, + hasAutoSelect: !1 + }), s.tracks.push(e); + const i = e.channels || "2"; + return s.channels[i] = (s.channels[i] || 0) + 1, s.hasDefault = s.hasDefault || e.default, s.hasAutoSelect = s.hasAutoSelect || e.autoselect, s.hasDefault && (t.hasDefaultAudio = !0), s.hasAutoSelect && (t.hasAutoSelectAudio = !0), t + }), { + hasDefaultAudio: !1, + hasAutoSelectAudio: !1, + groups: {} + }) + }(g)); + if (T) { + if (-1 !== this.firstSelection) return this.firstSelection; + const i = this.codecTiers || (this.codecTiers = function(t, e, s, i) { + return t.slice(s, i + 1).reduce(((t, s) => { + if (!s.codecSet) return t; + const i = s.audioGroups; + let r = t[s.codecSet]; + r || (t[s.codecSet] = r = { + minBitrate: 1 / 0, + minHeight: 1 / 0, + minFramerate: 1 / 0, + maxScore: 0, + videoRanges: { + SDR: 0 + }, + channels: { + 2: 0 + }, + hasDefaultAudio: !i, + fragmentError: 0 + }), r.minBitrate = Math.min(r.minBitrate, s.bitrate); + const n = Math.min(s.height, s.width); + return r.minHeight = Math.min(r.minHeight, n), r.minFramerate = Math.min(r.minFramerate, s.frameRate), r.maxScore = Math.max(r.maxScore, s.score), r.fragmentError += s.fragmentError, r.videoRanges[s.videoRange] = (r.videoRanges[s.videoRange] || 0) + 1, i && i.forEach((t => { + if (!t) return; + const s = e.groups[t]; + s && (r.hasDefaultAudio = r.hasDefaultAudio || e.hasDefaultAudio ? s.hasDefault : s.hasAutoSelect || !e.hasDefaultAudio && !e.hasAutoSelectAudio, Object.keys(s.channels).forEach((t => { + r.channels[t] = (r.channels[t] || 0) + s.channels[t] + }))) + })), t + }), {}) + }(f, k, e, s)), + r = function(t, e, s, i, r) { + const n = Object.keys(t), + a = null == i ? void 0 : i.channels, + o = null == i ? void 0 : i.audioCodec, + l = a && 2 === parseInt(a); + let h = !0, + d = !1, + c = 1 / 0, + u = 1 / 0, + f = 1 / 0, + g = 0, + m = []; + const { + preferHDR: y, + allowedVideoRanges: v + } = function(t, e) { + let s = !1, + i = []; + return t && (s = "SDR" !== t, i = [t]), e && (i = e.allowedVideoRanges || Ne.slice(0), s = void 0 !== e.preferHDR ? e.preferHDR : function() { + if ("function" == typeof matchMedia) { + const t = matchMedia("(dynamic-range: high)"), + e = matchMedia("bad query"); + if (t.media !== e.media) return !0 === t.matches + } + return !1 + }(), i = s ? i.filter((t => "SDR" !== t)) : ["SDR"]), { + preferHDR: s, + allowedVideoRanges: i + } + }(e, r); + for (let e = n.length; e--;) { + const s = t[n[e]]; + h = s.channels[2] > 0, c = Math.min(c, s.minHeight), u = Math.min(u, s.minFramerate), f = Math.min(f, s.minBitrate); + const i = v.filter((t => s.videoRanges[t] > 0)); + i.length > 0 && (d = !0, m = i) + } + c = p(c) ? c : 0, u = p(u) ? u : 0; + const E = Math.max(1080, c), + T = Math.max(30, u); + return f = p(f) ? f : s, s = Math.max(f, s), d || (e = void 0, m = []), { + codecSet: n.reduce(((e, i) => { + const r = t[i]; + if (i === e) return e; + if (r.minBitrate > s) return ms(i, `min bitrate of ${r.minBitrate} > current estimate of ${s}`), e; + if (!r.hasDefaultAudio) return ms(i, "no renditions with default or auto-select sound found"), e; + if (o && i.indexOf(o.substring(0, 4)) % 5 != 0) return ms(i, `audio codec preference "${o}" not found`), e; + if (a && !l) { + if (!r.channels[a]) return ms(i, `no renditions with ${a} channel sound found (channels options: ${Object.keys(r.channels)})`), e + } else if ((!o || l) && h && 0 === r.channels[2]) return ms(i, "no renditions with stereo sound found"), e; + return r.minHeight > E ? (ms(i, `min resolution of ${r.minHeight} > maximum of ${E}`), e) : r.minFramerate > T ? (ms(i, `min framerate of ${r.minFramerate} > maximum of ${T}`), e) : m.some((t => r.videoRanges[t] > 0)) ? r.maxScore < g ? (ms(i, `max score of ${r.maxScore} < selected max of ${g}`), e) : e && (Jt(i) >= Jt(e) || r.fragmentError > t[e].fragmentError) ? e : (g = r.maxScore, i) : (ms(i, `no variants with VIDEO-RANGE of ${JSON.stringify(m)} found`), e) + }), void 0), + videoRanges: m, + preferHDR: y, + minFramerate: u, + minBitrate: f + } + }(i, L, t, R, D), + { + codecSet: n, + videoRanges: a, + minFramerate: o, + minBitrate: l, + preferHDR: h + } = r; + S = n, L = h ? a[a.length - 1] : a[0], A = o, t = Math.max(t, l), b.log(`[abr] picked start tier ${JSON.stringify(r)}`) + } else S = null == v ? void 0 : v.codecSet, L = null == v ? void 0 : v.videoRange; + const I = u ? u.duration : c ? c.duration : 0, + C = this.bwEstimator.getEstimateTTFB() / 1e3, + w = []; + for (let o = s; o >= e; o--) { + var _; + const e = f[o], + c = o > d; + if (!e) continue; + if (y.useMediaCapabilities && !e.supportedResult && !e.supportedPromise) { + const s = navigator.mediaCapabilities; + "function" == typeof(null == s ? void 0 : s.decodingInfo) && fs(e, k, L, A, t, R) ? (e.supportedPromise = gs(e, k, s), e.supportedPromise.then((t => { + if (!this.hls) return; + e.supportedResult = t; + const s = this.hls.levels, + i = s.indexOf(e); + t.error ? b.warn(`[abr] MediaCapabilities decodingInfo error: "${t.error}" for level ${i} ${JSON.stringify(t)}`) : t.supported || (b.warn(`[abr] Unsupported MediaCapabilities decodingInfo result for level ${i} ${JSON.stringify(t)}`), i > -1 && s.length > 1 && (b.log(`[abr] Removing unsupported level ${i}`), this.hls.removeLevel(i))) + }))) : e.supportedResult = cs + } + if (S && e.codecSet !== S || L && e.videoRange !== L || c && A > e.frameRate || !c && A > 0 && A < e.frameRate || e.supportedResult && (null == (_ = e.supportedResult.decodingInfoResults) || !_[0].smooth)) { + w.push(o); + continue + } + const g = e.details, + D = (u ? null == g ? void 0 : g.partTarget : null == g ? void 0 : g.averagetargetduration) || I; + let x; + x = c ? a * t : n * t; + const P = I && i >= 2 * I && 0 === r ? f[o].averageBitrate : f[o].maxBitrate, + M = this.getTimeToLoadFrag(C, x, P * D, void 0 === g); + if (x >= P && (o === h || 0 === e.loadError && 0 === e.fragmentError) && (M <= C || !p(M) || E && !this.bitrateTestDelay || M < l)) { + const t = this.forcedAutoLevel; + return o === m || -1 !== t && t === m || (w.length && b.trace(`[abr] Skipped level(s) ${w.join(",")} of ${s} max with CODECS and VIDEO-RANGE:"${f[w[0]].codecs}" ${f[w[0]].videoRange}; not compatible with "${v.codecs}" ${L}`), b.info(`[abr] switch candidate:${d}->${o} adjustedbw(${Math.round(x)})-bitrate=${Math.round(x-P)} ttfb:${C.toFixed(1)} avgDuration:${D.toFixed(1)} maxFetchDuration:${l.toFixed(1)} fetchDuration:${M.toFixed(1)} firstSelection:${T} codecSet:${S} videoRange:${L} hls.loadLevel:${m}`)), T && (this.firstSelection = o), o + } + } + return -1 + } + set nextAutoLevel(t) { + const { + maxAutoLevel: e, + minAutoLevel: s + } = this.hls, i = Math.min(Math.max(t, s), e); + this._nextAutoLevel !== i && (this.nextAutoLevelKey = "", this._nextAutoLevel = i) + } + } + class Ss { + constructor() { + this._boundTick = void 0, this._tickTimer = null, this._tickInterval = null, this._tickCallCount = 0, this._boundTick = this.tick.bind(this) + } + destroy() { + this.onHandlerDestroying(), this.onHandlerDestroyed() + } + onHandlerDestroying() { + this.clearNextTick(), this.clearInterval() + } + onHandlerDestroyed() {} + hasInterval() { + return !!this._tickInterval + } + hasNextTick() { + return !!this._tickTimer + } + setInterval(t) { + return !this._tickInterval && (this._tickCallCount = 0, this._tickInterval = self.setInterval(this._boundTick, t), !0) + } + clearInterval() { + return !!this._tickInterval && (self.clearInterval(this._tickInterval), this._tickInterval = null, !0) + } + clearNextTick() { + return !!this._tickTimer && (self.clearTimeout(this._tickTimer), this._tickTimer = null, !0) + } + tick() { + this._tickCallCount++, 1 === this._tickCallCount && (this.doTick(), this._tickCallCount > 1 && this.tickImmediate(), this._tickCallCount = 0) + } + tickImmediate() { + this.clearNextTick(), this._tickTimer = self.setTimeout(this._boundTick, 0) + } + doTick() {} + } + var Ls = "NOT_LOADED", + As = "APPENDING", + Rs = "PARTIAL", + bs = "OK"; + class Ds { + constructor(t) { + this.activePartLists = Object.create(null), this.endListFragments = Object.create(null), this.fragments = Object.create(null), this.timeRanges = Object.create(null), this.bufferPadding = .2, this.hls = void 0, this.hasGaps = !1, this.hls = t, this._registerListeners() + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.BUFFER_APPENDED, this.onBufferAppended, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this), t.on(E.FRAG_LOADED, this.onFragLoaded, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.BUFFER_APPENDED, this.onBufferAppended, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this), t.off(E.FRAG_LOADED, this.onFragLoaded, this) + } + destroy() { + this._unregisterListeners(), this.fragments = this.activePartLists = this.endListFragments = this.timeRanges = null + } + getAppendedFrag(t, e) { + const s = this.activePartLists[e]; + if (s) + for (let e = s.length; e--;) { + const i = s[e]; + if (!i) break; + const r = i.end; + if (i.start <= t && null !== r && t <= r) return i + } + return this.getBufferedFrag(t, e) + } + getBufferedFrag(t, e) { + const { + fragments: s + } = this, i = Object.keys(s); + for (let r = i.length; r--;) { + const n = s[i[r]]; + if ((null == n ? void 0 : n.body.type) === e && n.buffered) { + const e = n.body; + if (e.start <= t && t <= e.end) return e + } + } + return null + } + detectEvictedFragments(t, e, s, i) { + this.timeRanges && (this.timeRanges[t] = e); + const r = (null == i ? void 0 : i.fragment.sn) || -1; + Object.keys(this.fragments).forEach((i => { + const n = this.fragments[i]; + if (!n) return; + if (r >= n.body.sn) return; + if (!n.buffered && !n.loaded) return void(n.body.type === s && this.removeFragment(n.body)); + const a = n.range[t]; + a && a.time.some((t => { + const s = !this.isTimeBuffered(t.startPTS, t.endPTS, e); + return s && this.removeFragment(n.body), s + })) + })) + } + detectPartialFragments(t) { + const e = this.timeRanges, + { + frag: s, + part: i + } = t; + if (!e || "initSegment" === s.sn) return; + const r = Is(s), + n = this.fragments[r]; + if (!n || n.buffered && s.gap) return; + const a = !s.relurl; + Object.keys(e).forEach((t => { + const r = s.elementaryStreams[t]; + if (!r) return; + const o = e[t], + l = a || !0 === r.partial; + n.range[t] = this.getBufferedTimes(s, i, l, o) + })), n.loaded = null, Object.keys(n.range).length ? (n.buffered = !0, (n.body.endList = s.endList || n.body.endList) && (this.endListFragments[n.body.type] = n), ks(n) || this.removeParts(s.sn - 1, s.type)) : this.removeFragment(n.body) + } + removeParts(t, e) { + const s = this.activePartLists[e]; + s && (this.activePartLists[e] = s.filter((e => e.fragment.sn >= t))) + } + fragBuffered(t, e) { + const s = Is(t); + let i = this.fragments[s]; + !i && e && (i = this.fragments[s] = { + body: t, + appendedPTS: null, + loaded: null, + buffered: !1, + range: Object.create(null) + }, t.gap && (this.hasGaps = !0)), i && (i.loaded = null, i.buffered = !0) + } + getBufferedTimes(t, e, s, i) { + const r = { + time: [], + partial: s + }, + n = t.start, + a = t.end, + o = t.minEndPTS || a, + l = t.maxStartPTS || n; + for (let t = 0; t < i.length; t++) { + const e = i.start(t) - this.bufferPadding, + s = i.end(t) + this.bufferPadding; + if (l >= e && o <= s) { + r.time.push({ + startPTS: Math.max(n, i.start(t)), + endPTS: Math.min(a, i.end(t)) + }); + break + } + if (n < s && a > e) { + const e = Math.max(n, i.start(t)), + s = Math.min(a, i.end(t)); + s > e && (r.partial = !0, r.time.push({ + startPTS: e, + endPTS: s + })) + } else if (a <= e) break + } + return r + } + getPartialFragment(t) { + let e, s, i, r = null, + n = 0; + const { + bufferPadding: a, + fragments: o + } = this; + return Object.keys(o).forEach((l => { + const h = o[l]; + h && ks(h) && (s = h.body.start - a, i = h.body.end + a, t >= s && t <= i && (e = Math.min(t - s, i - t), n <= e && (r = h.body, n = e))) + })), r + } + isEndListAppended(t) { + const e = this.endListFragments[t]; + return void 0 !== e && (e.buffered || ks(e)) + } + getState(t) { + const e = Is(t), + s = this.fragments[e]; + return s ? s.buffered ? ks(s) ? Rs : bs : As : Ls + } + isTimeBuffered(t, e, s) { + let i, r; + for (let n = 0; n < s.length; n++) { + if (i = s.start(n) - this.bufferPadding, r = s.end(n) + this.bufferPadding, t >= i && e <= r) return !0; + if (e <= i) return !1 + } + return !1 + } + onFragLoaded(t, e) { + const { + frag: s, + part: i + } = e; + if ("initSegment" === s.sn || s.bitrateTest) return; + const r = i ? null : e, + n = Is(s); + this.fragments[n] = { + body: s, + appendedPTS: null, + loaded: r, + buffered: !1, + range: Object.create(null) + } + } + onBufferAppended(t, e) { + const { + frag: s, + part: i, + timeRanges: r + } = e; + if ("initSegment" === s.sn) return; + const n = s.type; + if (i) { + let t = this.activePartLists[n]; + t || (this.activePartLists[n] = t = []), t.push(i) + } + this.timeRanges = r, Object.keys(r).forEach((t => { + const e = r[t]; + this.detectEvictedFragments(t, e, n, i) + })) + } + onFragBuffered(t, e) { + this.detectPartialFragments(e) + } + hasFragment(t) { + const e = Is(t); + return !!this.fragments[e] + } + hasParts(t) { + var e; + return !(null == (e = this.activePartLists[t]) || !e.length) + } + removeFragmentsInRange(t, e, s, i, r) { + i && !this.hasGaps || Object.keys(this.fragments).forEach((n => { + const a = this.fragments[n]; + if (!a) return; + const o = a.body; + o.type !== s || i && !o.gap || o.start < e && o.end > t && (a.buffered || r) && this.removeFragment(o) + })) + } + removeFragment(t) { + const e = Is(t); + t.stats.loaded = 0, t.clearElementaryStreamInfo(); + const s = this.activePartLists[t.type]; + if (s) { + const e = t.sn; + this.activePartLists[t.type] = s.filter((t => t.fragment.sn !== e)) + } + delete this.fragments[e], t.endList && delete this.endListFragments[t.type] + } + removeAllFragments() { + this.fragments = Object.create(null), this.endListFragments = Object.create(null), this.activePartLists = Object.create(null), this.hasGaps = !1 + } + } + + function ks(t) { + var e, s, i; + return t.buffered && (t.body.gap || (null == (e = t.range.video) ? void 0 : e.partial) || (null == (s = t.range.audio) ? void 0 : s.partial) || (null == (i = t.range.audiovideo) ? void 0 : i.partial)) + } + + function Is(t) { + return `${t.type}_${t.level}_${t.sn}` + } + const Cs = { + length: 0, + start: () => 0, + end: () => 0 + }; + class ws { + static isBuffered(t, e) { + try { + if (t) { + const s = ws.getBuffered(t); + for (let t = 0; t < s.length; t++) + if (e >= s.start(t) && e <= s.end(t)) return !0 + } + } catch (t) {} + return !1 + } + static bufferInfo(t, e, s) { + try { + if (t) { + const i = ws.getBuffered(t), + r = []; + let n; + for (n = 0; n < i.length; n++) r.push({ + start: i.start(n), + end: i.end(n) + }); + return this.bufferedInfo(r, e, s) + } + } catch (t) {} + return { + len: 0, + start: e, + end: e, + nextStart: void 0 + } + } + static bufferedInfo(t, e, s) { + e = Math.max(0, e), t.sort((function(t, e) { + return t.start - e.start || e.end - t.end + })); + let i = []; + if (s) + for (let e = 0; e < t.length; e++) { + const r = i.length; + if (r) { + const n = i[r - 1].end; + t[e].start - n < s ? t[e].end > n && (i[r - 1].end = t[e].end) : i.push(t[e]) + } else i.push(t[e]) + } else i = t; + let r, n = 0, + a = e, + o = e; + for (let t = 0; t < i.length; t++) { + const l = i[t].start, + h = i[t].end; + if (e + s >= l && e < h) a = l, o = h, n = o - e; + else if (e + s < l) { + r = l; + break + } + } + return { + len: n, + start: a || 0, + end: o || 0, + nextStart: r + } + } + static getBuffered(t) { + try { + return t.buffered + } catch (t) { + return b.log("failed to get media.buffered", t), Cs + } + } + } + class _s { + constructor(t, e, s, i = 0, r = -1, n = !1) { + this.level = void 0, this.sn = void 0, this.part = void 0, this.id = void 0, this.size = void 0, this.partial = void 0, this.transmuxing = { + start: 0, + executeStart: 0, + executeEnd: 0, + end: 0 + }, this.buffering = { + audio: { + start: 0, + executeStart: 0, + executeEnd: 0, + end: 0 + }, + video: { + start: 0, + executeStart: 0, + executeEnd: 0, + end: 0 + }, + audiovideo: { + start: 0, + executeStart: 0, + executeEnd: 0, + end: 0 + } + }, this.level = t, this.sn = e, this.id = s, this.size = i, this.part = r, this.partial = n + } + } + + function xs(t, e) { + for (let i = 0, r = t.length; i < r; i++) { + var s; + if ((null == (s = t[i]) ? void 0 : s.cc) === e) return t[i] + } + return null + } + + function Ps(t, e) { + if (t) { + const s = t.start + e; + t.start = t.startPTS = s, t.endPTS = s + t.duration + } + } + + function Ms(t, e) { + const s = e.fragments; + for (let e = 0, i = s.length; e < i; e++) Ps(s[e], t); + e.fragmentHint && Ps(e.fragmentHint, t), e.alignedSliding = !0 + } + + function Fs(t, e) { + if (!t.hasProgramDateTime || !e.hasProgramDateTime) return; + const s = t.fragments, + i = e.fragments; + if (!s.length || !i.length) return; + let r, n; + const a = Math.min(e.endCC, t.endCC); + e.startCC < a && t.startCC < a && (r = xs(i, a), n = xs(s, a)), r && n || (r = i[Math.floor(i.length / 2)], n = xs(s, r.cc) || s[Math.floor(s.length / 2)]); + const o = r.programDateTime, + l = n.programDateTime; + o && l && Ms((l - o) / 1e3 - (n.start - r.start), t) + } + const Os = Math.pow(2, 17); + class Ns { + constructor(t) { + this.config = void 0, this.loader = null, this.partLoadTimeout = -1, this.config = t + } + destroy() { + this.loader && (this.loader.destroy(), this.loader = null) + } + abort() { + this.loader && this.loader.abort() + } + load(t, e) { + const s = t.url; + if (!s) return Promise.reject(new $s({ + type: T.NETWORK_ERROR, + details: S.FRAG_LOAD_ERROR, + fatal: !1, + frag: t, + error: new Error("Fragment does not have a " + (s ? "part list" : "url")), + networkDetails: null + })); + this.abort(); + const i = this.config, + r = i.fLoader, + n = i.loader; + return new Promise(((a, o) => { + if (this.loader && this.loader.destroy(), t.gap) { + if (t.tagList.some((t => "GAP" === t[0]))) return void o(Bs(t)); + t.gap = !1 + } + const l = this.loader = t.loader = r ? new r(i) : new n(i), + h = Us(t), + d = Ze(i.fragLoadPolicy.default), + c = { + loadPolicy: d, + timeout: d.maxLoadTimeMs, + maxRetry: 0, + retryDelay: 0, + maxRetryDelay: 0, + highWaterMark: "initSegment" === t.sn ? 1 / 0 : Os + }; + t.stats = l.stats, l.load(h, c, { + onSuccess: (e, s, i, r) => { + this.resetLoader(t, l); + let n = e.data; + i.resetIV && t.decryptdata && (t.decryptdata.iv = new Uint8Array(n.slice(0, 16)), n = n.slice(16)), a({ + frag: t, + part: null, + payload: n, + networkDetails: r + }) + }, + onError: (e, i, r, n) => { + this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.FRAG_LOAD_ERROR, + fatal: !1, + frag: t, + response: f({ + url: s, + data: void 0 + }, e), + error: new Error(`HTTP Error ${e.code} ${e.text}`), + networkDetails: r, + stats: n + })) + }, + onAbort: (e, s, i) => { + this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.INTERNAL_ABORTED, + fatal: !1, + frag: t, + error: new Error("Aborted"), + networkDetails: i, + stats: e + })) + }, + onTimeout: (e, s, i) => { + this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.FRAG_LOAD_TIMEOUT, + fatal: !1, + frag: t, + error: new Error(`Timeout after ${c.timeout}ms`), + networkDetails: i, + stats: e + })) + }, + onProgress: (s, i, r, n) => { + e && e({ + frag: t, + part: null, + payload: r, + networkDetails: n + }) + } + }) + })) + } + loadPart(t, e, s) { + this.abort(); + const i = this.config, + r = i.fLoader, + n = i.loader; + return new Promise(((a, o) => { + if (this.loader && this.loader.destroy(), t.gap || e.gap) return void o(Bs(t, e)); + const l = this.loader = t.loader = r ? new r(i) : new n(i), + h = Us(t, e), + d = Ze(i.fragLoadPolicy.default), + c = { + loadPolicy: d, + timeout: d.maxLoadTimeMs, + maxRetry: 0, + retryDelay: 0, + maxRetryDelay: 0, + highWaterMark: Os + }; + e.stats = l.stats, l.load(h, c, { + onSuccess: (i, r, n, o) => { + this.resetLoader(t, l), this.updateStatsFromPart(t, e); + const h = { + frag: t, + part: e, + payload: i.data, + networkDetails: o + }; + s(h), a(h) + }, + onError: (s, i, r, n) => { + this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.FRAG_LOAD_ERROR, + fatal: !1, + frag: t, + part: e, + response: f({ + url: h.url, + data: void 0 + }, s), + error: new Error(`HTTP Error ${s.code} ${s.text}`), + networkDetails: r, + stats: n + })) + }, + onAbort: (s, i, r) => { + t.stats.aborted = e.stats.aborted, this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.INTERNAL_ABORTED, + fatal: !1, + frag: t, + part: e, + error: new Error("Aborted"), + networkDetails: r, + stats: s + })) + }, + onTimeout: (s, i, r) => { + this.resetLoader(t, l), o(new $s({ + type: T.NETWORK_ERROR, + details: S.FRAG_LOAD_TIMEOUT, + fatal: !1, + frag: t, + part: e, + error: new Error(`Timeout after ${c.timeout}ms`), + networkDetails: r, + stats: s + })) + } + }) + })) + } + updateStatsFromPart(t, e) { + const s = t.stats, + i = e.stats, + r = i.total; + if (s.loaded += i.loaded, r) { + const i = Math.round(t.duration / e.duration), + n = Math.min(Math.round(s.loaded / r), i), + a = (i - n) * Math.round(s.loaded / n); + s.total = s.loaded + a + } else s.total = Math.max(s.loaded, s.total); + const n = s.loading, + a = i.loading; + n.start ? n.first += a.first - a.start : (n.start = a.start, n.first = a.first), n.end = a.end + } + resetLoader(t, e) { + t.loader = null, this.loader === e && (self.clearTimeout(this.partLoadTimeout), this.loader = null), e.destroy() + } + } + + function Us(t, e = null) { + const s = e || t, + i = { + frag: t, + part: e, + responseType: "arraybuffer", + url: s.url, + headers: {}, + rangeStart: 0, + rangeEnd: 0 + }, + r = s.byteRangeStartOffset, + n = s.byteRangeEndOffset; + if (p(r) && p(n)) { + var a; + let e = r, + s = n; + if ("initSegment" === t.sn && "AES-128" === (null == (a = t.decryptdata) ? void 0 : a.method)) { + const t = n - r; + t % 16 && (s = n + (16 - t % 16)), 0 !== r && (i.resetIV = !0, e = r - 16) + } + i.rangeStart = e, i.rangeEnd = s + } + return i + } + + function Bs(t, e) { + const s = new Error(`GAP ${t.gap?"tag":"attribute"} found`), + i = { + type: T.MEDIA_ERROR, + details: S.FRAG_GAP, + fatal: !1, + frag: t, + error: s, + networkDetails: null + }; + return e && (i.part = e), (e || t).stats.aborted = !0, new $s(i) + } + class $s extends Error { + constructor(t) { + super(t.error.message), this.data = void 0, this.data = t + } + } + class Gs { + constructor(t, e) { + this.subtle = void 0, this.aesIV = void 0, this.subtle = t, this.aesIV = e + } + decrypt(t, e) { + return this.subtle.decrypt({ + name: "AES-CBC", + iv: this.aesIV + }, e, t) + } + } + class Ks { + constructor(t, e) { + this.subtle = void 0, this.key = void 0, this.subtle = t, this.key = e + } + expandKey() { + return this.subtle.importKey("raw", this.key, { + name: "AES-CBC" + }, !1, ["encrypt", "decrypt"]) + } + } + class Hs { + constructor() { + this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.sBox = new Uint32Array(256), this.invSBox = new Uint32Array(256), this.key = new Uint32Array(0), this.ksRows = 0, this.keySize = 0, this.keySchedule = void 0, this.invKeySchedule = void 0, this.initTable() + } + uint8ArrayToUint32Array_(t) { + const e = new DataView(t), + s = new Uint32Array(4); + for (let t = 0; t < 4; t++) s[t] = e.getUint32(4 * t); + return s + } + initTable() { + const t = this.sBox, + e = this.invSBox, + s = this.subMix, + i = s[0], + r = s[1], + n = s[2], + a = s[3], + o = this.invSubMix, + l = o[0], + h = o[1], + d = o[2], + c = o[3], + u = new Uint32Array(256); + let f = 0, + g = 0, + m = 0; + for (m = 0; m < 256; m++) u[m] = m < 128 ? m << 1 : m << 1 ^ 283; + for (m = 0; m < 256; m++) { + let s = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4; + s = s >>> 8 ^ 255 & s ^ 99, t[f] = s, e[s] = f; + const o = u[f], + m = u[o], + p = u[m]; + let y = 257 * u[s] ^ 16843008 * s; + i[f] = y << 24 | y >>> 8, r[f] = y << 16 | y >>> 16, n[f] = y << 8 | y >>> 24, a[f] = y, y = 16843009 * p ^ 65537 * m ^ 257 * o ^ 16843008 * f, l[s] = y << 24 | y >>> 8, h[s] = y << 16 | y >>> 16, d[s] = y << 8 | y >>> 24, c[s] = y, f ? (f = o ^ u[u[u[p ^ o]]], g ^= u[u[g]]) : f = g = 1 + } + } + expandKey(t) { + const e = this.uint8ArrayToUint32Array_(t); + let s = !0, + i = 0; + for (; i < e.length && s;) s = e[i] === this.key[i], i++; + if (s) return; + this.key = e; + const r = this.keySize = e.length; + if (4 !== r && 6 !== r && 8 !== r) throw new Error("Invalid aes key size=" + r); + const n = this.ksRows = 4 * (r + 6 + 1); + let a, o; + const l = this.keySchedule = new Uint32Array(n), + h = this.invKeySchedule = new Uint32Array(n), + d = this.sBox, + c = this.rcon, + u = this.invSubMix, + f = u[0], + g = u[1], + m = u[2], + p = u[3]; + let y, v; + for (a = 0; a < n; a++) a < r ? y = l[a] = e[a] : (v = y, a % r == 0 ? (v = v << 8 | v >>> 24, v = d[v >>> 24] << 24 | d[v >>> 16 & 255] << 16 | d[v >>> 8 & 255] << 8 | d[255 & v], v ^= c[a / r | 0] << 24) : r > 6 && a % r == 4 && (v = d[v >>> 24] << 24 | d[v >>> 16 & 255] << 16 | d[v >>> 8 & 255] << 8 | d[255 & v]), l[a] = y = (l[a - r] ^ v) >>> 0); + for (o = 0; o < n; o++) a = n - o, v = 3 & o ? l[a] : l[a - 4], h[o] = o < 4 || a <= 4 ? v : f[d[v >>> 24]] ^ g[d[v >>> 16 & 255]] ^ m[d[v >>> 8 & 255]] ^ p[d[255 & v]], h[o] = h[o] >>> 0 + } + networkToHostOrderSwap(t) { + return t << 24 | (65280 & t) << 8 | (16711680 & t) >> 8 | t >>> 24 + } + decrypt(t, e, s) { + const i = this.keySize + 6, + r = this.invKeySchedule, + n = this.invSBox, + a = this.invSubMix, + o = a[0], + l = a[1], + h = a[2], + d = a[3], + c = this.uint8ArrayToUint32Array_(s); + let u = c[0], + f = c[1], + g = c[2], + m = c[3]; + const p = new Int32Array(t), + y = new Int32Array(p.length); + let v, E, T, S, L, A, R, b, D, k, I, C, w, _; + const x = this.networkToHostOrderSwap; + for (; e < p.length;) { + for (D = x(p[e]), k = x(p[e + 1]), I = x(p[e + 2]), C = x(p[e + 3]), L = D ^ r[0], A = C ^ r[1], R = I ^ r[2], b = k ^ r[3], w = 4, _ = 1; _ < i; _++) v = o[L >>> 24] ^ l[A >> 16 & 255] ^ h[R >> 8 & 255] ^ d[255 & b] ^ r[w], E = o[A >>> 24] ^ l[R >> 16 & 255] ^ h[b >> 8 & 255] ^ d[255 & L] ^ r[w + 1], T = o[R >>> 24] ^ l[b >> 16 & 255] ^ h[L >> 8 & 255] ^ d[255 & A] ^ r[w + 2], S = o[b >>> 24] ^ l[L >> 16 & 255] ^ h[A >> 8 & 255] ^ d[255 & R] ^ r[w + 3], L = v, A = E, R = T, b = S, w += 4; + v = n[L >>> 24] << 24 ^ n[A >> 16 & 255] << 16 ^ n[R >> 8 & 255] << 8 ^ n[255 & b] ^ r[w], E = n[A >>> 24] << 24 ^ n[R >> 16 & 255] << 16 ^ n[b >> 8 & 255] << 8 ^ n[255 & L] ^ r[w + 1], T = n[R >>> 24] << 24 ^ n[b >> 16 & 255] << 16 ^ n[L >> 8 & 255] << 8 ^ n[255 & A] ^ r[w + 2], S = n[b >>> 24] << 24 ^ n[L >> 16 & 255] << 16 ^ n[A >> 8 & 255] << 8 ^ n[255 & R] ^ r[w + 3], y[e] = x(v ^ u), y[e + 1] = x(S ^ f), y[e + 2] = x(T ^ g), y[e + 3] = x(E ^ m), u = D, f = k, g = I, m = C, e += 4 + } + return y.buffer + } + } + class Vs { + constructor(t, { + removePKCS7Padding: e = !0 + } = {}) { + if (this.logEnabled = !0, this.removePKCS7Padding = void 0, this.subtle = null, this.softwareDecrypter = null, this.key = null, this.fastAesKey = null, this.remainderData = null, this.currentIV = null, this.currentResult = null, this.useSoftware = void 0, this.useSoftware = t.enableSoftwareAES, this.removePKCS7Padding = e, e) try { + const t = self.crypto; + t && (this.subtle = t.subtle || t.webkitSubtle) + } catch (t) {} + null === this.subtle && (this.useSoftware = !0) + } + destroy() { + this.subtle = null, this.softwareDecrypter = null, this.key = null, this.fastAesKey = null, this.remainderData = null, this.currentIV = null, this.currentResult = null + } + isSync() { + return this.useSoftware + } + flush() { + const { + currentResult: t, + remainderData: e + } = this; + if (!t || e) return this.reset(), null; + const s = new Uint8Array(t); + return this.reset(), this.removePKCS7Padding ? function(t) { + const e = t.byteLength, + s = e && new DataView(t.buffer).getUint8(e - 1); + return s ? z(t, 0, e - s) : t + }(s) : s + } + reset() { + this.currentResult = null, this.currentIV = null, this.remainderData = null, this.softwareDecrypter && (this.softwareDecrypter = null) + } + decrypt(t, e, s) { + return this.useSoftware ? new Promise(((i, r) => { + this.softwareDecrypt(new Uint8Array(t), e, s); + const n = this.flush(); + n ? i(n.buffer) : r(new Error("[softwareDecrypt] Failed to decrypt data")) + })) : this.webCryptoDecrypt(new Uint8Array(t), e, s) + } + softwareDecrypt(t, e, s) { + const { + currentIV: i, + currentResult: r, + remainderData: n + } = this; + this.logOnce("JS AES decrypt"), n && (t = Pt(n, t), this.remainderData = null); + const a = this.getValidChunk(t); + if (!a.length) return null; + i && (s = i); + let o = this.softwareDecrypter; + o || (o = this.softwareDecrypter = new Hs), o.expandKey(e); + const l = r; + return this.currentResult = o.decrypt(a.buffer, 0, s), this.currentIV = z(a, -16).buffer, l || null + } + webCryptoDecrypt(t, e, s) { + const i = this.subtle; + return this.key === e && this.fastAesKey || (this.key = e, this.fastAesKey = new Ks(i, e)), this.fastAesKey.expandKey().then((e => i ? (this.logOnce("WebCrypto AES decrypt"), new Gs(i, new Uint8Array(s)).decrypt(t.buffer, e)) : Promise.reject(new Error("web crypto not initialized")))).catch((i => (b.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${i.name}: ${i.message}`), this.onWebCryptoError(t, e, s)))) + } + onWebCryptoError(t, e, s) { + this.useSoftware = !0, this.logEnabled = !0, this.softwareDecrypt(t, e, s); + const i = this.flush(); + if (i) return i.buffer; + throw new Error("WebCrypto and softwareDecrypt: failed to decrypt data") + } + getValidChunk(t) { + let e = t; + const s = t.length - t.length % 16; + return s !== t.length && (e = z(t, 0, s), this.remainderData = z(t, s)), e + } + logOnce(t) { + this.logEnabled && (b.log(`[decrypter]: ${t}`), this.logEnabled = !1) + } + } + const Ys = "STOPPED", + Ws = "IDLE", + js = "KEY_LOADING", + qs = "FRAG_LOADING", + Xs = "FRAG_LOADING_WAITING_RETRY", + zs = "WAITING_TRACK", + Qs = "PARSING", + Js = "PARSED", + Zs = "ENDED", + ti = "ERROR", + ei = "WAITING_INIT_PTS", + si = "WAITING_LEVEL"; + class ii extends Ss { + constructor(t, e, s, i, r) { + super(), this.hls = void 0, this.fragPrevious = null, this.fragCurrent = null, this.fragmentTracker = void 0, this.transmuxer = null, this._state = Ys, this.playlistType = void 0, this.media = null, this.mediaBuffer = null, this.config = void 0, this.bitrateTest = !1, this.lastCurrentTime = 0, this.nextLoadPosition = 0, this.startPosition = 0, this.startTimeOffset = null, this.loadedmetadata = !1, this.retryDate = 0, this.levels = null, this.fragmentLoader = void 0, this.keyLoader = void 0, this.levelLastLoaded = null, this.startFragRequested = !1, this.decrypter = void 0, this.initPTS = [], this.onvseeking = null, this.onvended = null, this.logPrefix = "", this.log = void 0, this.warn = void 0, this.playlistType = r, this.logPrefix = i, this.log = b.log.bind(b, `${i}:`), this.warn = b.warn.bind(b, `${i}:`), this.hls = t, this.fragmentLoader = new Ns(t.config), this.keyLoader = s, this.fragmentTracker = e, this.config = t.config, this.decrypter = new Vs(t.config), t.on(E.MANIFEST_LOADED, this.onManifestLoaded, this) + } + doTick() { + this.onTickEnd() + } + onTickEnd() {} + startLoad(t) {} + stopLoad() { + this.fragmentLoader.abort(), this.keyLoader.abort(this.playlistType); + const t = this.fragCurrent; + null != t && t.loader && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), this.resetTransmuxer(), this.fragCurrent = null, this.fragPrevious = null, this.clearInterval(), this.clearNextTick(), this.state = Ys + } + _streamEnded(t, e) { + if (e.live || t.nextStart || !t.end || !this.media) return !1; + const s = e.partList; + if (null != s && s.length) { + const t = s[s.length - 1]; + return ws.isBuffered(this.media, t.start + t.duration / 2) + } + const i = e.fragments[e.fragments.length - 1].type; + return this.fragmentTracker.isEndListAppended(i) + } + getLevelDetails() { + var t; + if (this.levels && null !== this.levelLastLoaded) return null == (t = this.levelLastLoaded) ? void 0 : t.details + } + onMediaAttached(t, e) { + const s = this.media = this.mediaBuffer = e.media; + this.onvseeking = this.onMediaSeeking.bind(this), this.onvended = this.onMediaEnded.bind(this), s.addEventListener("seeking", this.onvseeking), s.addEventListener("ended", this.onvended); + const i = this.config; + this.levels && i.autoStartLoad && this.state === Ys && this.startLoad(i.startPosition) + } + onMediaDetaching() { + const t = this.media; + null != t && t.ended && (this.log("MSE detaching and video ended, reset startPosition"), this.startPosition = this.lastCurrentTime = 0), t && this.onvseeking && this.onvended && (t.removeEventListener("seeking", this.onvseeking), t.removeEventListener("ended", this.onvended), this.onvseeking = this.onvended = null), this.keyLoader && this.keyLoader.detach(), this.media = this.mediaBuffer = null, this.loadedmetadata = !1, this.fragmentTracker.removeAllFragments(), this.stopLoad() + } + onMediaSeeking() { + const { + config: t, + fragCurrent: e, + media: s, + mediaBuffer: i, + state: r + } = this, n = s ? s.currentTime : 0, a = ws.bufferInfo(i || s, n, t.maxBufferHole); + if (this.log(`media seeking to ${p(n)?n.toFixed(3):n}, state: ${r}`), this.state === Zs) this.resetLoadingState(); + else if (e) { + const s = t.maxFragLookUpTolerance, + i = e.start - s, + r = e.start + e.duration + s; + if (!a.len || r < a.start || i > a.end) { + const t = n > r; + (n < i || t) && (t && e.loader && (this.log("seeking outside of buffer while fragment load in progress, cancel fragment load"), e.abortRequests(), this.resetLoadingState()), this.fragPrevious = null) + } + } + s && (this.fragmentTracker.removeFragmentsInRange(n, 1 / 0, this.playlistType, !0), this.lastCurrentTime = n), this.loadedmetadata || a.len || (this.nextLoadPosition = this.startPosition = n), this.tickImmediate() + } + onMediaEnded() { + this.startPosition = this.lastCurrentTime = 0 + } + onManifestLoaded(t, e) { + this.startTimeOffset = e.startTimeOffset, this.initPTS = [] + } + onHandlerDestroying() { + this.hls.off(E.MANIFEST_LOADED, this.onManifestLoaded, this), this.stopLoad(), super.onHandlerDestroying(), this.hls = null + } + onHandlerDestroyed() { + this.state = Ys, this.fragmentLoader && this.fragmentLoader.destroy(), this.keyLoader && this.keyLoader.destroy(), this.decrypter && this.decrypter.destroy(), this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null, super.onHandlerDestroyed() + } + loadFragment(t, e, s) { + this._loadFragForPlayback(t, e, s) + } + _loadFragForPlayback(t, e, s) { + this._doFragLoad(t, e, s, (e => { + if (this.fragContextChanged(t)) return this.warn(`Fragment ${t.sn}${e.part?" p: "+e.part.index:""} of level ${t.level} was dropped during download.`), void this.fragmentTracker.removeFragment(t); + t.stats.chunkCount++, this._handleFragmentLoadProgress(e) + })).then((e => { + if (!e) return; + const s = this.state; + this.fragContextChanged(t) ? (s === qs || !this.fragCurrent && s === Qs) && (this.fragmentTracker.removeFragment(t), this.state = Ws) : ("payload" in e && (this.log(`Loaded fragment ${t.sn} of level ${t.level}`), this.hls.trigger(E.FRAG_LOADED, e)), this._handleFragmentLoadComplete(e)) + })).catch((e => { + this.state !== Ys && this.state !== ti && (this.warn(e), this.resetFragmentLoading(t)) + })) + } + clearTrackerIfNeeded(t) { + var e; + const { + fragmentTracker: s + } = this; + if (s.getState(t) === As) { + const e = t.type, + i = this.getFwdBufferInfo(this.mediaBuffer, e), + r = Math.max(t.duration, i ? i.len : this.config.maxBufferLength); + this.reduceMaxBufferLength(r) && s.removeFragment(t) + } else 0 === (null == (e = this.mediaBuffer) ? void 0 : e.buffered.length) ? s.removeAllFragments() : s.hasParts(t.type) && (s.detectPartialFragments({ + frag: t, + part: null, + stats: t.stats, + id: t.type + }), s.getState(t) === Rs && s.removeFragment(t)) + } + checkLiveUpdate(t) { + if (t.updated && !t.live) { + const e = t.fragments[t.fragments.length - 1]; + this.fragmentTracker.detectPartialFragments({ + frag: e, + part: null, + stats: e.stats, + id: e.type + }) + } + t.fragments[0] || (t.deltaUpdateFailed = !0) + } + flushMainBuffer(t, e, s = null) { + if (!(t - e)) return; + const i = { + startOffset: t, + endOffset: e, + type: s + }; + this.hls.trigger(E.BUFFER_FLUSHING, i) + } + _loadInitSegment(t, e) { + this._doFragLoad(t, e).then((e => { + if (!e || this.fragContextChanged(t) || !this.levels) throw new Error("init load aborted"); + return e + })).then((e => { + const { + hls: s + } = this, { + payload: i + } = e, r = t.decryptdata; + if (i && i.byteLength > 0 && null != r && r.key && r.iv && "AES-128" === r.method) { + const n = self.performance.now(); + return this.decrypter.decrypt(new Uint8Array(i), r.key.buffer, r.iv.buffer).catch((e => { + throw s.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_DECRYPT_ERROR, + fatal: !1, + error: e, + reason: e.message, + frag: t + }), e + })).then((i => { + const r = self.performance.now(); + return s.trigger(E.FRAG_DECRYPTED, { + frag: t, + payload: i, + stats: { + tstart: n, + tdecrypt: r + } + }), e.payload = i, this.completeInitSegmentLoad(e) + })) + } + return this.completeInitSegmentLoad(e) + })).catch((e => { + this.state !== Ys && this.state !== ti && (this.warn(e), this.resetFragmentLoading(t)) + })) + } + completeInitSegmentLoad(t) { + const { + levels: e + } = this; + if (!e) throw new Error("init load aborted, missing levels"); + const s = t.frag.stats; + this.state = Ws, t.frag.data = new Uint8Array(t.payload), s.parsing.start = s.buffering.start = self.performance.now(), s.parsing.end = s.buffering.end = self.performance.now(), this.tick() + } + fragContextChanged(t) { + const { + fragCurrent: e + } = this; + return !t || !e || t.sn !== e.sn || t.level !== e.level + } + fragBufferedComplete(t, e) { + var s, i, r, n; + const a = this.mediaBuffer ? this.mediaBuffer : this.media; + if (this.log(`Buffered ${t.type} sn: ${t.sn}${e?" part: "+e.index:""} of ${this.playlistType===Te.MAIN?"level":"track"} ${t.level} (frag:[${(null!=(s=t.startPTS)?s:NaN).toFixed(3)}-${(null!=(i=t.endPTS)?i:NaN).toFixed(3)}] > buffer:${a?function(t){let e="";const s=t.length;for(let i=0;i !!e[t]))) return void(this.state = Ws) + } + const e = null == (o = this.levels) ? void 0 : o[t.level]; + null != e && e.fragmentError && (this.log(`Resetting level fragment error count of ${e.fragmentError} on frag buffered`), e.fragmentError = 0) + } + this.state = Ws, a && (!this.loadedmetadata && t.type == Te.MAIN && a.buffered.length && (null == (r = this.fragCurrent) ? void 0 : r.sn) === (null == (n = this.fragPrevious) ? void 0 : n.sn) && (this.loadedmetadata = !0, this.seekToStartPos()), this.tick()) + } + seekToStartPos() {} + _handleFragmentLoadComplete(t) { + const { + transmuxer: e + } = this; + if (!e) return; + const { + frag: s, + part: i, + partsLoaded: r + } = t, n = !r || 0 === r.length || r.some((t => !t)), a = new _s(s.level, s.sn, s.stats.chunkCount + 1, 0, i ? i.index : -1, !n); + e.flush(a) + } + _handleFragmentLoadProgress(t) {} + _doFragLoad(t, e, s = null, i) { + var r; + const n = null == e ? void 0 : e.details; + if (!this.levels || !n) throw new Error(`frag load aborted, missing level${n?"":" detail"}s`); + let a = null; + if (!t.encrypted || null != (r = t.decryptdata) && r.key ? !t.encrypted && n.encryptedFragments.length && this.keyLoader.loadClear(t, n.encryptedFragments) : (this.log(`Loading key for ${t.sn} of [${n.startSN}-${n.endSN}], ${"[stream-controller]"===this.logPrefix?"level":"track"} ${t.level}`), this.state = js, this.fragCurrent = t, a = this.keyLoader.load(t).then((t => { + if (!this.fragContextChanged(t.frag)) return this.hls.trigger(E.KEY_LOADED, t), this.state === js && (this.state = Ws), t + })), this.hls.trigger(E.KEY_LOADING, { + frag: t + }), null === this.fragCurrent && (a = Promise.reject(new Error("frag load aborted, context changed in KEY_LOADING")))), s = Math.max(t.start, s || 0), this.config.lowLatencyMode && "initSegment" !== t.sn) { + const r = n.partList; + if (r && i) { + s > t.end && n.fragmentHint && (t = n.fragmentHint); + const o = this.getNextPart(r, t, s); + if (o > -1) { + const l = r[o]; + let h; + return this.log(`Loading part sn: ${t.sn} p: ${l.index} cc: ${t.cc} of playlist [${n.startSN}-${n.endSN}] parts [0-${o}-${r.length-1}] ${"[stream-controller]"===this.logPrefix?"level":"track"}: ${t.level}, target: ${parseFloat(s.toFixed(3))}`), this.nextLoadPosition = l.start + l.duration, this.state = qs, h = a ? a.then((s => !s || this.fragContextChanged(s.frag) ? null : this.doFragPartsLoad(t, l, e, i))).catch((t => this.handleFragLoadError(t))) : this.doFragPartsLoad(t, l, e, i).catch((t => this.handleFragLoadError(t))), this.hls.trigger(E.FRAG_LOADING, { + frag: t, + part: l, + targetBufferTime: s + }), null === this.fragCurrent ? Promise.reject(new Error("frag load aborted, context changed in FRAG_LOADING parts")) : h + } + if (!t.url || this.loadedEndOfParts(r, s)) return Promise.resolve(null) + } + } + this.log(`Loading fragment ${t.sn} cc: ${t.cc} ${n?"of ["+n.startSN+"-"+n.endSN+"] ":""}${"[stream-controller]"===this.logPrefix?"level":"track"}: ${t.level}, target: ${parseFloat(s.toFixed(3))}`), p(t.sn) && !this.bitrateTest && (this.nextLoadPosition = t.start + t.duration), this.state = qs; + const o = this.config.progressive; + let l; + return l = o && a ? a.then((e => !e || this.fragContextChanged(null == e ? void 0 : e.frag) ? null : this.fragmentLoader.load(t, i))).catch((t => this.handleFragLoadError(t))) : Promise.all([this.fragmentLoader.load(t, o ? i : void 0), a]).then((([t]) => (!o && t && i && i(t), t))).catch((t => this.handleFragLoadError(t))), this.hls.trigger(E.FRAG_LOADING, { + frag: t, + targetBufferTime: s + }), null === this.fragCurrent ? Promise.reject(new Error("frag load aborted, context changed in FRAG_LOADING")) : l + } + doFragPartsLoad(t, e, s, i) { + return new Promise(((r, n) => { + var a; + const o = [], + l = null == (a = s.details) ? void 0 : a.partList, + h = e => { + this.fragmentLoader.loadPart(t, e, i).then((i => { + o[e.index] = i; + const n = i.part; + this.hls.trigger(E.FRAG_LOADED, i); + const a = je(s, t.sn, e.index + 1) || qe(l, t.sn, e.index + 1); + if (!a) return r({ + frag: t, + part: n, + partsLoaded: o + }); + h(a) + })).catch(n) + }; + h(e) + })) + } + handleFragLoadError(t) { + if ("data" in t) { + const e = t.data; + t.data && e.details === S.INTERNAL_ABORTED ? this.handleFragLoadAborted(e.frag, e.part) : this.hls.trigger(E.ERROR, e) + } else this.hls.trigger(E.ERROR, { + type: T.OTHER_ERROR, + details: S.INTERNAL_EXCEPTION, + err: t, + error: t, + fatal: !0 + }); + return null + } + _handleTransmuxerFlush(t) { + const e = this.getCurrentContext(t); + if (!e || this.state !== Qs) return void(this.fragCurrent || this.state === Ys || this.state === ti || (this.state = Ws)); + const { + frag: s, + part: i, + level: r + } = e, n = self.performance.now(); + s.stats.parsing.end = n, i && (i.stats.parsing.end = n), this.updateLevelTiming(s, i, r, t.partial) + } + getCurrentContext(t) { + const { + levels: e, + fragCurrent: s + } = this, { + level: i, + sn: r, + part: n + } = t; + if (null == e || !e[i]) return this.warn(`Levels object was unset while buffering fragment ${r} of level ${i}. The current chunk will not be buffered.`), null; + const a = e[i], + o = n > -1 ? je(a, r, n) : null, + l = o ? o.fragment : function(t, e, s) { + if (null == t || !t.details) return null; + const i = t.details; + let r = i.fragments[e - i.startSN]; + return r || (r = i.fragmentHint, r && r.sn === e ? r : e < i.startSN && s && s.sn === e ? s : null) + }(a, r, s); + return l ? (s && s !== l && (l.stats = s.stats), { + frag: l, + part: o, + level: a + }) : null + } + bufferFragmentData(t, e, s, i, r) { + var n; + if (!t || this.state !== Qs) return; + const { + data1: a, + data2: o + } = t; + let l = a; + if (a && o && (l = Pt(a, o)), null == (n = l) || !n.length) return; + const h = { + type: t.type, + frag: e, + part: s, + chunkMeta: i, + parent: e.type, + data: l + }; + if (this.hls.trigger(E.BUFFER_APPENDING, h), t.dropped && t.independent && !s) { + if (r) return; + this.flushBufferGap(e) + } + } + flushBufferGap(t) { + const e = this.media; + if (!e) return; + if (!ws.isBuffered(e, e.currentTime)) return void this.flushMainBuffer(0, t.start); + const s = e.currentTime, + i = ws.bufferInfo(e, s, 0), + r = t.duration, + n = Math.min(2 * this.config.maxFragLookUpTolerance, .25 * r), + a = Math.max(Math.min(t.start - n, i.end - n), s + n); + t.start - a > n && this.flushMainBuffer(a, t.start) + } + getFwdBufferInfo(t, e) { + const s = this.getLoadPosition(); + return p(s) ? this.getFwdBufferInfoAtPos(t, s, e) : null + } + getFwdBufferInfoAtPos(t, e, s) { + const { + config: { + maxBufferHole: i + } + } = this, r = ws.bufferInfo(t, e, i); + if (0 === r.len && void 0 !== r.nextStart) { + const n = this.fragmentTracker.getBufferedFrag(e, s); + if (n && r.nextStart < n.end) return ws.bufferInfo(t, e, Math.max(r.nextStart, i)) + } + return r + } + getMaxBufferLength(t) { + const { + config: e + } = this; + let s; + return s = t ? Math.max(8 * e.maxBufferSize / t, e.maxBufferLength) : e.maxBufferLength, Math.min(s, e.maxMaxBufferLength) + } + reduceMaxBufferLength(t) { + const e = this.config, + s = t || e.maxBufferLength; + return e.maxMaxBufferLength >= s && (e.maxMaxBufferLength /= 2, this.warn(`Reduce max buffer length to ${e.maxMaxBufferLength}s`), !0) + } + getAppendedFrag(t, e = Te.MAIN) { + const s = this.fragmentTracker.getAppendedFrag(t, Te.MAIN); + return s && "fragment" in s ? s.fragment : s + } + getNextFragment(t, e) { + const s = e.fragments, + i = s.length; + if (!i) return null; + const { + config: r + } = this, n = s[0].start; + let a; + if (e.live) { + const o = r.initialLiveManifestSize; + if (i < o) return this.warn(`Not enough fragments to start playback (have: ${i}, need: ${o})`), null; + (!e.PTSKnown && !this.startFragRequested && -1 === this.startPosition || t < n) && (a = this.getInitialLiveFragment(e, s), this.startPosition = this.nextLoadPosition = a ? this.hls.liveSyncPosition || a.start : t) + } else t <= n && (a = s[0]); + if (!a) { + const s = r.lowLatencyMode ? e.partEnd : e.fragmentEnd; + a = this.getFragmentAtPosition(t, s, e) + } + return this.mapToInitFragWhenRequired(a) + } + isLoopLoading(t, e) { + const s = this.fragmentTracker.getState(t); + return (s === bs || s === Rs && !!t.gap) && this.nextLoadPosition > e + } + getNextFragmentLoopLoading(t, e, s, i, r) { + const n = t.gap, + a = this.getNextFragment(this.nextLoadPosition, e); + if (null === a) return a; + if (t = a, n && t && !t.gap && s.nextStart) { + const e = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, s.nextStart, i); + if (null !== e && s.len + e.len >= r) return this.log(`buffer full after gaps in "${i}" playlist starting at sn: ${t.sn}`), null + } + return t + } + mapToInitFragWhenRequired(t) { + return null == t || !t.initSegment || null != t && t.initSegment.data || this.bitrateTest ? t : t.initSegment + } + getNextPart(t, e, s) { + let i = -1, + r = !1, + n = !0; + for (let a = 0, o = t.length; a < o; a++) { + const o = t[a]; + if (n = n && !o.independent, i > -1 && s < o.start) break; + const l = o.loaded; + l ? i = -1 : (r || o.independent || n) && o.fragment === e && (i = a), r = l + } + return i + } + loadedEndOfParts(t, e) { + const s = t[t.length - 1]; + return s && e > s.start && s.loaded + } + getInitialLiveFragment(t, e) { + const s = this.fragPrevious; + let i = null; + if (s) { + if (t.hasProgramDateTime && (this.log(`Live playlist, switching playlist, load frag with same PDT: ${s.programDateTime}`), i = function(t, e, s) { + if (null === e || !Array.isArray(t) || !t.length || !p(e)) return null; + if (e < (t[0].programDateTime || 0)) return null; + if (e >= (t[t.length - 1].endProgramDateTime || 0)) return null; + s = s || 0; + for (let i = 0; i < t.length; ++i) { + const r = t[i]; + if (rs(e, s, r)) return r + } + return null + }(e, s.endProgramDateTime, this.config.maxFragLookUpTolerance)), !i) { + const r = s.sn + 1; + if (r >= t.startSN && r <= t.endSN) { + const n = e[r - t.startSN]; + s.cc === n.cc && (i = n, this.log(`Live playlist, switching playlist, load frag with next SN: ${i.sn}`)) + } + i || (i = function(t, e) { + return es(t, (t => t.cc < e ? 1 : t.cc > e ? -1 : 0)) + }(e, s.cc), i && this.log(`Live playlist, switching playlist, load frag with same CC: ${i.sn}`)) + } + } else { + const e = this.hls.liveSyncPosition; + null !== e && (i = this.getFragmentAtPosition(e, this.bitrateTest ? t.fragmentEnd : t.edge, t)) + } + return i + } + getFragmentAtPosition(t, e, s) { + const { + config: i + } = this; + let { + fragPrevious: r + } = this, { + fragments: n, + endSN: a + } = s; + const { + fragmentHint: o + } = s, l = i.maxFragLookUpTolerance, h = s.partList, d = !!(i.lowLatencyMode && null != h && h.length && o); + let c; + if (d && o && !this.bitrateTest && (n = n.concat(o), a = o.sn), c = t < e ? ss(r, n, t, t > e - l ? 0 : l) : n[n.length - 1], c) { + const t = c.sn - s.startSN, + e = this.fragmentTracker.getState(c); + if ((e === bs || e === Rs && c.gap) && (r = c), r && c.sn === r.sn && (!d || h[0].fragment.sn > c.sn) && r && c.level === r.level) { + const e = n[t + 1]; + c = c.sn < a && this.fragmentTracker.getState(e) !== bs ? e : null + } + } + return c + } + synchronizeToLiveEdge(t) { + const { + config: e, + media: s + } = this; + if (!s) return; + const i = this.hls.liveSyncPosition, + r = s.currentTime, + n = t.fragments[0].start, + a = t.edge, + o = r >= n - e.maxFragLookUpTolerance && r <= a; + if (null !== i && s.duration > i && (r < i || !o)) { + const n = void 0 !== e.liveMaxLatencyDuration ? e.liveMaxLatencyDuration : e.liveMaxLatencyDurationCount * t.targetduration; + (!o && s.readyState < 4 || r < a - n) && (this.loadedmetadata || (this.nextLoadPosition = i), s.readyState && (this.warn(`Playback: ${r.toFixed(3)} is located too far from the end of live sliding playlist: ${a}, reset currentTime to : ${i.toFixed(3)}`), s.currentTime = i)) + } + } + alignPlaylists(t, e, s) { + const i = t.fragments.length; + if (!i) return this.warn("No fragments in live playlist"), 0; + const r = t.fragments[0].start, + n = !e, + a = t.alignedSliding && p(r); + if (n || !a && !r) { + const { + fragPrevious: r + } = this; + ! function(t, e, s) { + e && (function(t, e, s) { + if (function(t, e, s) { + return !(!e || !(s.endCC > s.startCC || t && t.cc < s.startCC)) + }(t, s, e)) { + const t = function(t, e) { + const s = t.fragments, + i = e.fragments; + if (!i.length || !s.length) return void b.log("No fragments to align"); + const r = xs(s, i[0].cc); + if (r && (!r || r.startPTS)) return r; + b.log("No frag in previous level to align on") + }(s, e); + t && p(t.start) && (b.log(`Adjusting PTS using last level due to CC increase within current level ${e.url}`), Ms(t.start, e)) + } + }(t, s, e), !s.alignedSliding && e && Fs(s, e), s.alignedSliding || !e || s.skippedSegments || Ye(e, s)) + }(r, s, t); + const n = t.fragments[0].start; + return this.log(`Live playlist sliding: ${n.toFixed(2)} start-sn: ${e?e.startSN:"na"}->${t.startSN} prev-sn: ${r?r.sn:"na"} fragments: ${i}`), n + } + return r + } + waitForCdnTuneIn(t) { + return t.live && t.canBlockReload && t.partTarget && t.tuneInGoal > Math.max(t.partHoldBack, 3 * t.partTarget) + } + setStartPosition(t, e) { + let s = this.startPosition; + if (s < e && (s = -1), -1 === s || -1 === this.lastCurrentTime) { + const i = null !== this.startTimeOffset, + r = i ? this.startTimeOffset : t.startTimeOffset; + null !== r && p(r) ? (s = e + r, r < 0 && (s += t.totalduration), s = Math.min(Math.max(e, s), e + t.totalduration), this.log(`Start time offset ${r} found in ${i?"multivariant":"media"} playlist, adjust startPosition to ${s}`), this.startPosition = s) : t.live ? s = this.hls.liveSyncPosition || e : this.startPosition = s = 0, this.lastCurrentTime = s + } + this.nextLoadPosition = s + } + getLoadPosition() { + const { + media: t + } = this; + let e = 0; + return this.loadedmetadata && t ? e = t.currentTime : this.nextLoadPosition && (e = this.nextLoadPosition), e + } + handleFragLoadAborted(t, e) { + this.transmuxer && "initSegment" !== t.sn && t.stats.aborted && (this.warn(`Fragment ${t.sn}${e?" part "+e.index:""} of level ${t.level} was aborted`), this.resetFragmentLoading(t)) + } + resetFragmentLoading(t) { + this.fragCurrent && (this.fragContextChanged(t) || this.state === Xs) || (this.state = Ws) + } + onFragmentOrKeyLoadError(t, e) { + if (e.chunkMeta && !e.frag) { + const t = this.getCurrentContext(e.chunkMeta); + t && (e.frag = t.frag) + } + const s = e.frag; + if (!s || s.type !== t || !this.levels) return; + var i; + if (this.fragContextChanged(s)) return void this.warn(`Frag load error must match current frag to retry ${s.url} > ${null==(i=this.fragCurrent)?void 0:i.url}`); + const r = e.details === S.FRAG_GAP; + r && this.fragmentTracker.fragBuffered(s, !0); + const n = e.errorAction, + { + action: a, + retryCount: o = 0, + retryConfig: l + } = n || {}; + if (n && a === ns.RetryRequest && l) { + this.resetStartWhenNotLoaded(this.levelLastLoaded); + const i = Je(l, o); + this.warn(`Fragment ${s.sn} of ${t} ${s.level} errored with ${e.details}, retrying loading ${o+1}/${l.maxNumRetry} in ${i}ms`), n.resolved = !0, this.retryDate = self.performance.now() + i, this.state = Xs + } else if (l && n) { + if (this.resetFragmentErrors(t), !(o < l.maxNumRetry)) return void b.warn(`${e.details} reached or exceeded max retry (${o})`); + r || a === ns.RemoveAlternatePermanently || (n.resolved = !0) + } else(null == n ? void 0 : n.action) === ns.SendAlternateToPenaltyBox ? this.state = si : this.state = ti; + this.tickImmediate() + } + reduceLengthAndFlushBuffer(t) { + if (this.state === Qs || this.state === Js) { + const e = t.parent, + s = this.getFwdBufferInfo(this.mediaBuffer, e), + i = s && s.len > .5; + i && this.reduceMaxBufferLength(s.len); + const r = !i; + return r && this.warn(`Buffer full error while media.currentTime is not buffered, flush ${e} buffer`), t.frag && (this.fragmentTracker.removeFragment(t.frag), this.nextLoadPosition = t.frag.start), this.resetLoadingState(), r + } + return !1 + } + resetFragmentErrors(t) { + t === Te.AUDIO && (this.fragCurrent = null), this.loadedmetadata || (this.startFragRequested = !1), this.state !== Ys && (this.state = Ws) + } + afterBufferFlushed(t, e, s) { + if (!t) return; + const i = ws.getBuffered(t); + this.fragmentTracker.detectEvictedFragments(e, i, s), this.state === Zs && this.resetLoadingState() + } + resetLoadingState() { + this.log("Reset loading state"), this.fragCurrent = null, this.fragPrevious = null, this.state = Ws + } + resetStartWhenNotLoaded(t) { + if (!this.loadedmetadata) { + this.startFragRequested = !1; + const e = t ? t.details : null; + null != e && e.live ? (this.startPosition = -1, this.setStartPosition(e, 0), this.resetLoadingState()) : this.nextLoadPosition = this.startPosition + } + } + resetWhenMissingContext(t) { + this.warn(`The loading context changed while buffering fragment ${t.sn} of level ${t.level}. This chunk will not be buffered.`), this.removeUnbufferedFrags(), this.resetStartWhenNotLoaded(this.levelLastLoaded), this.resetLoadingState() + } + removeUnbufferedFrags(t = 0) { + this.fragmentTracker.removeFragmentsInRange(t, 1 / 0, this.playlistType, !1, !0) + } + updateLevelTiming(t, e, s, i) { + var r; + const n = s.details; + if (n) { + if (!Object.keys(t.elementaryStreams).reduce(((e, r) => { + const a = t.elementaryStreams[r]; + if (a) { + const o = a.endPTS - a.startPTS; + if (o <= 0) return this.warn(`Could not parse fragment ${t.sn} ${r} duration reliably (${o})`), e || !1; + const l = i ? 0 : Ve(n, t, a.startPTS, a.endPTS, a.startDTS, a.endDTS); + return this.hls.trigger(E.LEVEL_PTS_UPDATED, { + details: n, + level: s, + drift: l, + type: r, + frag: t, + start: a.startPTS, + end: a.endPTS + }), !0 + } + return e + }), !1) && null === (null == (r = this.transmuxer) ? void 0 : r.error)) { + const e = new Error(`Found no media in fragment ${t.sn} of level ${t.level} resetting transmuxer to fallback to playlist timing`); + if (0 === s.fragmentError && (s.fragmentError++, t.gap = !0, this.fragmentTracker.removeFragment(t), this.fragmentTracker.fragBuffered(t, !0)), this.warn(e.message), this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + fatal: !1, + error: e, + frag: t, + reason: `Found no media in msn ${t.sn} of level "${s.url}"` + }), !this.hls) return; + this.resetTransmuxer() + } + this.state = Js, this.hls.trigger(E.FRAG_PARSED, { + frag: t, + part: e + }) + } else this.warn("level.details undefined") + } + resetTransmuxer() { + this.transmuxer && (this.transmuxer.destroy(), this.transmuxer = null) + } + recoverWorkerError(t) { + "demuxerWorker" === t.event && (this.fragmentTracker.removeAllFragments(), this.resetTransmuxer(), this.resetStartWhenNotLoaded(this.levelLastLoaded), this.resetLoadingState()) + } + set state(t) { + const e = this._state; + e !== t && (this._state = t, this.log(`${e}->${t}`)) + } + get state() { + return this._state + } + } + class ri { + constructor() { + this.chunks = [], this.dataLength = 0 + } + push(t) { + this.chunks.push(t), this.dataLength += t.length + } + flush() { + const { + chunks: t, + dataLength: e + } = this; + let s; + return t.length ? (s = 1 === t.length ? t[0] : function(t, e) { + const s = new Uint8Array(e); + let i = 0; + for (let e = 0; e < t.length; e++) { + const r = t[e]; + s.set(r, i), i += r.length + } + return s + }(t, e), this.reset(), s) : new Uint8Array(0) + } + reset() { + this.chunks.length = 0, this.dataLength = 0 + } + } + + function ni(t = "", e = 9e4) { + return { + type: t, + id: -1, + pid: -1, + inputTimeScale: e, + sequenceNumber: -1, + samples: [], + dropped: 0 + } + } + class ai { + constructor() { + this._audioTrack = void 0, this._id3Track = void 0, this.frameIndex = 0, this.cachedData = null, this.basePTS = null, this.initPTS = null, this.lastPTS = null + } + resetInitSegment(t, e, s, i) { + this._id3Track = { + type: "id3", + id: 3, + pid: -1, + inputTimeScale: 9e4, + sequenceNumber: 0, + samples: [], + dropped: 0 + } + } + resetTimeStamp(t) { + this.initPTS = t, this.resetContiguity() + } + resetContiguity() { + this.basePTS = null, this.lastPTS = null, this.frameIndex = 0 + } + canParse(t, e) { + return !1 + } + appendFrame(t, e, s) {} + demux(t, e) { + this.cachedData && (t = Pt(this.cachedData, t), this.cachedData = null); + let s, i = Z(t, 0), + r = i ? i.length : 0; + const n = this._audioTrack, + a = this._id3Track, + o = i ? st(i) : void 0, + l = t.length; + for ((null === this.basePTS || 0 === this.frameIndex && p(o)) && (this.basePTS = oi(o, e, this.initPTS), this.lastPTS = this.basePTS), null === this.lastPTS && (this.lastPTS = this.basePTS), i && i.length > 0 && a.samples.push({ + pts: this.lastPTS, + dts: this.lastPTS, + data: i, + type: Ce.audioId3, + duration: Number.POSITIVE_INFINITY + }); r < l;) { + if (this.canParse(t, r)) { + const e = this.appendFrame(n, t, r); + e ? (this.frameIndex++, this.lastPTS = e.sample.pts, r += e.length, s = r) : r = l + } else et(t, r) ? (i = Z(t, r), a.samples.push({ + pts: this.lastPTS, + dts: this.lastPTS, + data: i, + type: Ce.audioId3, + duration: Number.POSITIVE_INFINITY + }), r += i.length, s = r) : r++; + if (r === l && s !== l) { + const e = z(t, s); + this.cachedData ? this.cachedData = Pt(this.cachedData, e) : this.cachedData = e + } + } + return { + audioTrack: n, + videoTrack: ni(), + id3Track: a, + textTrack: ni() + } + } + demuxSampleAes(t, e, s) { + return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`)) + } + flush(t) { + const e = this.cachedData; + return e && (this.cachedData = null, this.demux(e, 0)), { + audioTrack: this._audioTrack, + videoTrack: ni(), + id3Track: this._id3Track, + textTrack: ni() + } + } + destroy() {} + } + const oi = (t, e, s) => p(t) ? 90 * t : 9e4 * e + (s ? 9e4 * s.baseTime / s.timescale : 0); + + function li(t, e) { + return 255 === t[e] && 240 == (246 & t[e + 1]) + } + + function hi(t, e) { + return 1 & t[e + 1] ? 7 : 9 + } + + function di(t, e) { + return (3 & t[e + 3]) << 11 | t[e + 4] << 3 | (224 & t[e + 5]) >>> 5 + } + + function ci(t, e) { + return e + 1 < t.length && li(t, e) + } + + function ui(t, e) { + if (ci(t, e)) { + const s = hi(t, e); + if (e + s >= t.length) return !1; + const i = di(t, e); + if (i <= s) return !1; + const r = e + i; + return r === t.length || ci(t, r) + } + return !1 + } + + function fi(t, e, s, i, r) { + if (!t.samplerate) { + const n = function(t, e, s, i) { + let r, n, a, o; + const l = navigator.userAgent.toLowerCase(), + h = i, + d = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; + r = 1 + ((192 & e[s + 2]) >>> 6); + const c = (60 & e[s + 2]) >>> 2; + if (!(c > d.length - 1)) return a = (1 & e[s + 2]) << 2, a |= (192 & e[s + 3]) >>> 6, b.log(`manifest codec:${i}, ADTS type:${r}, samplingIndex:${c}`), /firefox/i.test(l) ? c >= 6 ? (r = 5, o = new Array(4), n = c - 3) : (r = 2, o = new Array(2), n = c) : -1 !== l.indexOf("android") ? (r = 2, o = new Array(2), n = c) : (r = 5, o = new Array(4), i && (-1 !== i.indexOf("mp4a.40.29") || -1 !== i.indexOf("mp4a.40.5")) || !i && c >= 6 ? n = c - 3 : ((i && -1 !== i.indexOf("mp4a.40.2") && (c >= 6 && 1 === a || /vivaldi/i.test(l)) || !i && 1 === a) && (r = 2, o = new Array(2)), n = c)), o[0] = r << 3, o[0] |= (14 & c) >> 1, o[1] |= (1 & c) << 7, o[1] |= a << 3, 5 === r && (o[1] |= (14 & n) >> 1, o[2] = (1 & n) << 7, o[2] |= 8, o[3] = 0), { + config: o, + samplerate: d[c], + channelCount: a, + codec: "mp4a.40." + r, + manifestCodec: h + }; + { + const e = new Error(`invalid ADTS sampling index:${c}`); + t.emit(E.ERROR, E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + fatal: !0, + error: e, + reason: e.message + }) + } + }(e, s, i, r); + if (!n) return; + t.config = n.config, t.samplerate = n.samplerate, t.channelCount = n.channelCount, t.codec = n.codec, t.manifestCodec = n.manifestCodec, b.log(`parsed codec:${t.codec}, rate:${n.samplerate}, channels:${n.channelCount}`) + } + } + + function gi(t) { + return 9216e4 / t + } + + function mi(t, e, s, i, r) { + const n = i + r * gi(t.samplerate), + a = function(t, e) { + const s = hi(t, e); + if (e + s <= t.length) { + const i = di(t, e) - s; + if (i > 0) return { + headerLength: s, + frameLength: i + } + } + }(e, s); + let o; + if (a) { + const { + frameLength: i, + headerLength: r + } = a, l = r + i, h = Math.max(0, s + l - e.length); + h ? (o = new Uint8Array(l - r), o.set(e.subarray(s + r, e.length), 0)) : o = e.subarray(s + r, s + l); + const d = { + unit: o, + pts: n + }; + return h || t.samples.push(d), { + sample: d, + length: l, + missing: h + } + } + const l = e.length - s; + return o = new Uint8Array(l), o.set(e.subarray(s, e.length), 0), { + sample: { + unit: o, + pts: n + }, + length: l, + missing: -1 + } + } + let pi = null; + const yi = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160], + vi = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3], + Ei = [ + [0, 72, 144, 12], + [0, 0, 0, 0], + [0, 72, 144, 12], + [0, 144, 144, 12] + ], + Ti = [0, 1, 1, 4]; + + function Si(t, e, s, i, r) { + if (s + 24 > e.length) return; + const n = Li(e, s); + if (n && s + n.frameLength <= e.length) { + const a = i + r * (9e4 * n.samplesPerFrame / n.sampleRate), + o = { + unit: e.subarray(s, s + n.frameLength), + pts: a, + dts: a + }; + return t.config = [], t.channelCount = n.channelCount, t.samplerate = n.sampleRate, t.samples.push(o), { + sample: o, + length: n.frameLength, + missing: 0 + } + } + } + + function Li(t, e) { + const s = t[e + 1] >> 3 & 3, + i = t[e + 1] >> 1 & 3, + r = t[e + 2] >> 4 & 15, + n = t[e + 2] >> 2 & 3; + if (1 !== s && 0 !== r && 15 !== r && 3 !== n) { + const a = t[e + 2] >> 1 & 1, + o = t[e + 3] >> 6, + l = 1e3 * yi[14 * (3 === s ? 3 - i : 3 === i ? 3 : 4) + r - 1], + h = vi[3 * (3 === s ? 0 : 2 === s ? 1 : 2) + n], + d = 3 === o ? 1 : 2, + c = Ei[s][i], + u = Ti[i], + f = 8 * c * u, + g = Math.floor(c * l / h + a) * u; + if (null === pi) { + const t = (navigator.userAgent || "").match(/Chrome\/(\d+)/i); + pi = t ? parseInt(t[1]) : 0 + } + return !!pi && pi <= 87 && 2 === i && l >= 224e3 && 0 === o && (t[e + 3] = 128 | t[e + 3]), { + sampleRate: h, + channelCount: d, + frameLength: g, + samplesPerFrame: f + } + } + } + + function Ai(t, e) { + return 255 === t[e] && 224 == (224 & t[e + 1]) && 0 != (6 & t[e + 1]) + } + + function Ri(t, e) { + return e + 1 < t.length && Ai(t, e) + } + + function bi(t, e) { + if (e + 1 < t.length && Ai(t, e)) { + const s = 4, + i = Li(t, e); + let r = s; + null != i && i.frameLength && (r = i.frameLength); + const n = e + r; + return n === t.length || Ri(t, n) + } + return !1 + } + const Di = /\/emsg[-/]ID3/i, + ki = (t, e) => { + let s = 0, + i = 5; + e += i; + const r = new Uint32Array(1), + n = new Uint32Array(1), + a = new Uint8Array(1); + for (; i > 0;) { + a[0] = t[e]; + const o = Math.min(i, 8), + l = 8 - o; + n[0] = 4278190080 >>> 24 + l << l, r[0] = (a[0] & n[0]) >> l, s = s ? s << o | r[0] : r[0], e += 1, i -= o + } + return s + }; + + function Ii(t, e, s, i, r) { + if (s + 8 > e.length) return -1; + if (11 !== e[s] || 119 !== e[s + 1]) return -1; + const n = e[s + 4] >> 6; + if (n >= 3) return -1; + const a = [48e3, 44100, 32e3][n], + o = 63 & e[s + 4], + l = 2 * [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920][3 * o + n]; + if (s + l > e.length) return -1; + const h = e[s + 6] >> 5; + let d = 0; + 2 === h ? d += 2 : (1 & h && 1 !== h && (d += 2), 4 & h && (d += 2)); + const c = (e[s + 6] << 8 | e[s + 7]) >> 12 - d & 1, + u = [2, 1, 2, 3, 3, 4, 4, 5][h] + c, + f = e[s + 5] >> 3, + g = 7 & e[s + 5], + m = new Uint8Array([n << 6 | f << 1 | g >> 2, (3 & g) << 6 | h << 3 | c << 2 | o >> 4, o << 4 & 224]), + p = i + r * (1536 / a * 9e4), + y = e.subarray(s, s + l); + return t.config = m, t.channelCount = u, t.samplerate = a, t.samples.push({ + unit: y, + pts: p + }), l + } + class Ci { + constructor() { + this.VideoSample = null + } + createVideoSample(t, e, s, i) { + return { + key: t, + frame: !1, + pts: e, + dts: s, + units: [], + debug: i, + length: 0 + } + } + getLastNalUnit(t) { + var e; + let s, i = this.VideoSample; + if (i && 0 !== i.units.length || (i = t[t.length - 1]), null != (e = i) && e.units) { + const t = i.units; + s = t[t.length - 1] + } + return s + } + pushAccessUnit(t, e) { + if (t.units.length && t.frame) { + if (void 0 === t.pts) { + const s = e.samples, + i = s.length; + if (!i) return void e.dropped++; + { + const e = s[i - 1]; + t.pts = e.pts, t.dts = e.dts + } + } + e.samples.push(t) + } + t.debug.length && b.log(t.pts + "/" + t.dts + ":" + t.debug) + } + } + class wi { + constructor(t) { + this.data = void 0, this.bytesAvailable = void 0, this.word = void 0, this.bitsAvailable = void 0, this.data = t, this.bytesAvailable = t.byteLength, this.word = 0, this.bitsAvailable = 0 + } + loadWord() { + const t = this.data, + e = this.bytesAvailable, + s = t.byteLength - e, + i = new Uint8Array(4), + r = Math.min(4, e); + if (0 === r) throw new Error("no bytes available"); + i.set(t.subarray(s, s + r)), this.word = new DataView(i.buffer).getUint32(0), this.bitsAvailable = 8 * r, this.bytesAvailable -= r + } + skipBits(t) { + let e; + t = Math.min(t, 8 * this.bytesAvailable + this.bitsAvailable), this.bitsAvailable > t ? (this.word <<= t, this.bitsAvailable -= t) : (e = (t -= this.bitsAvailable) >> 3, t -= e << 3, this.bytesAvailable -= e, this.loadWord(), this.word <<= t, this.bitsAvailable -= t) + } + readBits(t) { + let e = Math.min(this.bitsAvailable, t); + const s = this.word >>> 32 - e; + if (t > 32 && b.error("Cannot read more than 32 bits at a time"), this.bitsAvailable -= e, this.bitsAvailable > 0) this.word <<= e; + else { + if (!(this.bytesAvailable > 0)) throw new Error("no bits available"); + this.loadWord() + } + return e = t - e, e > 0 && this.bitsAvailable ? s << e | this.readBits(e) : s + } + skipLZ() { + let t; + for (t = 0; t < this.bitsAvailable; ++t) + if (0 != (this.word & 2147483648 >>> t)) return this.word <<= t, this.bitsAvailable -= t, t; + return this.loadWord(), t + this.skipLZ() + } + skipUEG() { + this.skipBits(1 + this.skipLZ()) + } + skipEG() { + this.skipBits(1 + this.skipLZ()) + } + readUEG() { + const t = this.skipLZ(); + return this.readBits(t + 1) - 1 + } + readEG() { + const t = this.readUEG(); + return 1 & t ? 1 + t >>> 1 : -1 * (t >>> 1) + } + readBoolean() { + return 1 === this.readBits(1) + } + readUByte() { + return this.readBits(8) + } + readUShort() { + return this.readBits(16) + } + readUInt() { + return this.readBits(32) + } + skipScalingList(t) { + let e, s = 8, + i = 8; + for (let r = 0; r < t; r++) 0 !== i && (e = this.readEG(), i = (s + e + 256) % 256), s = 0 === i ? s : i + } + readSPS() { + let t, e, s, i = 0, + r = 0, + n = 0, + a = 0; + const o = this.readUByte.bind(this), + l = this.readBits.bind(this), + h = this.readUEG.bind(this), + d = this.readBoolean.bind(this), + c = this.skipBits.bind(this), + u = this.skipEG.bind(this), + f = this.skipUEG.bind(this), + g = this.skipScalingList.bind(this); + o(); + const m = o(); + if (l(5), c(3), o(), f(), 100 === m || 110 === m || 122 === m || 244 === m || 44 === m || 83 === m || 86 === m || 118 === m || 128 === m) { + const t = h(); + if (3 === t && c(1), f(), f(), c(1), d()) + for (e = 3 !== t ? 8 : 12, s = 0; s < e; s++) d() && g(s < 6 ? 16 : 64) + } + f(); + const p = h(); + if (0 === p) h(); + else if (1 === p) + for (c(1), u(), u(), t = h(), s = 0; s < t; s++) u(); + f(), c(1); + const y = h(), + v = h(), + E = l(1); + 0 === E && c(1), c(1), d() && (i = h(), r = h(), n = h(), a = h()); + let T = [1, 1]; + if (d() && d()) switch (o()) { + case 1: + T = [1, 1]; + break; + case 2: + T = [12, 11]; + break; + case 3: + T = [10, 11]; + break; + case 4: + T = [16, 11]; + break; + case 5: + T = [40, 33]; + break; + case 6: + T = [24, 11]; + break; + case 7: + T = [20, 11]; + break; + case 8: + T = [32, 11]; + break; + case 9: + T = [80, 33]; + break; + case 10: + T = [18, 11]; + break; + case 11: + T = [15, 11]; + break; + case 12: + T = [64, 33]; + break; + case 13: + T = [160, 99]; + break; + case 14: + T = [4, 3]; + break; + case 15: + T = [3, 2]; + break; + case 16: + T = [2, 1]; + break; + case 255: + T = [o() << 8 | o(), o() << 8 | o()] + } + return { + width: Math.ceil(16 * (y + 1) - 2 * i - 2 * r), + height: (2 - E) * (v + 1) * 16 - (E ? 2 : 4) * (n + a), + pixelRatio: T + } + } + readSliceType() { + return this.readUByte(), this.readUEG(), this.readUEG() + } + } + class _i extends Ci { + parseAVCPES(t, e, s, i, r) { + const n = this.parseAVCNALu(t, s.data); + let a, o = this.VideoSample, + l = !1; + s.data = null, o && n.length && !t.audFound && (this.pushAccessUnit(o, t), o = this.VideoSample = this.createVideoSample(!1, s.pts, s.dts, "")), n.forEach((i => { + var n; + switch (i.type) { + case 1: { + let e = !1; + a = !0; + const r = i.data; + if (l && r.length > 4) { + const t = new wi(r).readSliceType(); + 2 !== t && 4 !== t && 7 !== t && 9 !== t || (e = !0) + } + var h; + e && null != (h = o) && h.frame && !o.key && (this.pushAccessUnit(o, t), o = this.VideoSample = null), o || (o = this.VideoSample = this.createVideoSample(!0, s.pts, s.dts, "")), o.frame = !0, o.key = e; + break + } + case 5: + a = !0, null != (n = o) && n.frame && !o.key && (this.pushAccessUnit(o, t), o = this.VideoSample = null), o || (o = this.VideoSample = this.createVideoSample(!0, s.pts, s.dts, "")), o.key = !0, o.frame = !0; + break; + case 6: + a = !0, Ot(i.data, 1, s.pts, e.samples); + break; + case 7: { + var d, c; + a = !0, l = !0; + const e = i.data, + s = new wi(e).readSPS(); + if (!t.sps || t.width !== s.width || t.height !== s.height || (null == (d = t.pixelRatio) ? void 0 : d[0]) !== s.pixelRatio[0] || (null == (c = t.pixelRatio) ? void 0 : c[1]) !== s.pixelRatio[1]) { + t.width = s.width, t.height = s.height, t.pixelRatio = s.pixelRatio, t.sps = [e], t.duration = r; + const i = e.subarray(1, 4); + let n = "avc1."; + for (let t = 0; t < 3; t++) { + let e = i[t].toString(16); + e.length < 2 && (e = "0" + e), n += e + } + t.codec = n + } + break + } + case 8: + a = !0, t.pps = [i.data]; + break; + case 9: + a = !0, t.audFound = !0, o && this.pushAccessUnit(o, t), o = this.VideoSample = this.createVideoSample(!1, s.pts, s.dts, ""); + break; + case 12: + a = !0; + break; + default: + a = !1, o && (o.debug += "unknown NAL " + i.type + " ") + } + o && a && o.units.push(i) + })), i && o && (this.pushAccessUnit(o, t), this.VideoSample = null) + } + parseAVCNALu(t, e) { + const s = e.byteLength; + let i = t.naluState || 0; + const r = i, + n = []; + let a, o, l, h = 0, + d = -1, + c = 0; + for (-1 === i && (d = 0, c = 31 & e[0], i = 0, h = 1); h < s;) + if (a = e[h++], i) + if (1 !== i) + if (a) + if (1 === a) { + if (o = h - i - 1, d >= 0) { + const t = { + data: e.subarray(d, o), + type: c + }; + n.push(t) + } else { + const s = this.getLastNalUnit(t.samples); + s && (r && h <= 4 - r && s.state && (s.data = s.data.subarray(0, s.data.byteLength - r)), o > 0 && (s.data = Pt(s.data, e.subarray(0, o)), s.state = 0)) + } + h < s ? (l = 31 & e[h], d = h, c = l, i = 0) : i = -1 + } else i = 0; + else i = 3; + else i = a ? 0 : 2; + else i = a ? 0 : 1; + if (d >= 0 && i >= 0) { + const t = { + data: e.subarray(d, s), + type: c, + state: i + }; + n.push(t) + } + if (0 === n.length) { + const s = this.getLastNalUnit(t.samples); + s && (s.data = Pt(s.data, e)) + } + return t.naluState = i, n + } + } + class xi { + constructor(t, e, s) { + this.keyData = void 0, this.decrypter = void 0, this.keyData = s, this.decrypter = new Vs(e, { + removePKCS7Padding: !1 + }) + } + decryptBuffer(t) { + return this.decrypter.decrypt(t, this.keyData.key.buffer, this.keyData.iv.buffer) + } + decryptAacSample(t, e, s) { + const i = t[e].unit; + if (i.length <= 16) return; + const r = i.subarray(16, i.length - i.length % 16), + n = r.buffer.slice(r.byteOffset, r.byteOffset + r.length); + this.decryptBuffer(n).then((r => { + const n = new Uint8Array(r); + i.set(n, 16), this.decrypter.isSync() || this.decryptAacSamples(t, e + 1, s) + })) + } + decryptAacSamples(t, e, s) { + for (;; e++) { + if (e >= t.length) return void s(); + if (!(t[e].unit.length < 32 || (this.decryptAacSample(t, e, s), this.decrypter.isSync()))) return + } + } + getAvcEncryptedData(t) { + const e = 16 * Math.floor((t.length - 48) / 160) + 16, + s = new Int8Array(e); + let i = 0; + for (let e = 32; e < t.length - 16; e += 160, i += 16) s.set(t.subarray(e, e + 16), i); + return s + } + getAvcDecryptedUnit(t, e) { + const s = new Uint8Array(e); + let i = 0; + for (let e = 32; e < t.length - 16; e += 160, i += 16) t.set(s.subarray(i, i + 16), e); + return t + } + decryptAvcSample(t, e, s, i, r) { + const n = Nt(r.data), + a = this.getAvcEncryptedData(n); + this.decryptBuffer(a.buffer).then((a => { + r.data = this.getAvcDecryptedUnit(n, a), this.decrypter.isSync() || this.decryptAvcSamples(t, e, s + 1, i) + })) + } + decryptAvcSamples(t, e, s, i) { + if (t instanceof Uint8Array) throw new Error("Cannot decrypt samples of type Uint8Array"); + for (;; e++, s = 0) { + if (e >= t.length) return void i(); + const r = t[e].units; + for (; !(s >= r.length); s++) { + const n = r[s]; + if (!(n.data.length <= 48 || 1 !== n.type && 5 !== n.type || (this.decryptAvcSample(t, e, s, i, n), this.decrypter.isSync()))) return + } + } + } + } + const Pi = 188; + class Mi { + constructor(t, e, s) { + this.observer = void 0, this.config = void 0, this.typeSupported = void 0, this.sampleAes = null, this.pmtParsed = !1, this.audioCodec = void 0, this.videoCodec = void 0, this._duration = 0, this._pmtId = -1, this._videoTrack = void 0, this._audioTrack = void 0, this._id3Track = void 0, this._txtTrack = void 0, this.aacOverFlow = null, this.remainderData = null, this.videoParser = void 0, this.observer = t, this.config = e, this.typeSupported = s, this.videoParser = new _i + } + static probe(t) { + const e = Mi.syncOffset(t); + return e > 0 && b.warn(`MPEG2-TS detected but first sync word found @ offset ${e}`), -1 !== e + } + static syncOffset(t) { + const e = t.length; + let s = Math.min(940, e - Pi) + 1, + i = 0; + for (; i < s;) { + let r = !1, + n = -1, + a = 0; + for (let o = i; o < e; o += Pi) { + if (71 !== t[o] || e - o !== Pi && 71 !== t[o + Pi]) { + if (a) return -1; + break + } + if (a++, -1 === n && (n = o, 0 !== n && (s = Math.min(n + 18612, t.length - Pi) + 1)), r || (r = 0 === Fi(t, o)), r && a > 1 && (0 === n && a > 2 || o + Pi > s)) return n + } + i++ + } + return -1 + } + static createTrack(t, e) { + return { + container: "video" === t || "audio" === t ? "video/mp2t" : void 0, + type: t, + id: yt[t], + pid: -1, + inputTimeScale: 9e4, + sequenceNumber: 0, + samples: [], + dropped: 0, + duration: "audio" === t ? e : void 0 + } + } + resetInitSegment(t, e, s, i) { + this.pmtParsed = !1, this._pmtId = -1, this._videoTrack = Mi.createTrack("video"), this._audioTrack = Mi.createTrack("audio", i), this._id3Track = Mi.createTrack("id3"), this._txtTrack = Mi.createTrack("text"), this._audioTrack.segmentCodec = "aac", this.aacOverFlow = null, this.remainderData = null, this.audioCodec = e, this.videoCodec = s, this._duration = i + } + resetTimeStamp() {} + resetContiguity() { + const { + _audioTrack: t, + _videoTrack: e, + _id3Track: s + } = this; + t && (t.pesData = null), e && (e.pesData = null), s && (s.pesData = null), this.aacOverFlow = null, this.remainderData = null + } + demux(t, e, s = !1, i = !1) { + let r; + s || (this.sampleAes = null); + const n = this._videoTrack, + a = this._audioTrack, + o = this._id3Track, + l = this._txtTrack; + let h = n.pid, + d = n.pesData, + c = a.pid, + u = o.pid, + f = a.pesData, + g = o.pesData, + m = null, + p = this.pmtParsed, + y = this._pmtId, + v = t.length; + if (this.remainderData && (v = (t = Pt(this.remainderData, t)).length, this.remainderData = null), v < Pi && !i) return this.remainderData = t, { + audioTrack: a, + videoTrack: n, + id3Track: o, + textTrack: l + }; + const L = Math.max(0, Mi.syncOffset(t)); + v -= (v - L) % Pi, v < t.byteLength && !i && (this.remainderData = new Uint8Array(t.buffer, v, t.buffer.byteLength - v)); + let A = 0; + for (let e = L; e < v; e += Pi) + if (71 === t[e]) { + const i = !!(64 & t[e + 1]), + v = Fi(t, e); + let E; + if ((48 & t[e + 3]) >> 4 > 1) { + if (E = e + 5 + t[e + 4], E === e + Pi) continue + } else E = e + 4; + switch (v) { + case h: + i && (d && (r = Bi(d)) && this.videoParser.parseAVCPES(n, l, r, !1, this._duration), d = { + data: [], + size: 0 + }), d && (d.data.push(t.subarray(E, e + Pi)), d.size += e + Pi - E); + break; + case c: + if (i) { + if (f && (r = Bi(f))) switch (a.segmentCodec) { + case "aac": + this.parseAACPES(a, r); + break; + case "mp3": + this.parseMPEGPES(a, r); + break; + case "ac3": + this.parseAC3PES(a, r) + } + f = { + data: [], + size: 0 + } + } + f && (f.data.push(t.subarray(E, e + Pi)), f.size += e + Pi - E); + break; + case u: + i && (g && (r = Bi(g)) && this.parseID3PES(o, r), g = { + data: [], + size: 0 + }), g && (g.data.push(t.subarray(E, e + Pi)), g.size += e + Pi - E); + break; + case 0: + i && (E += t[E] + 1), y = this._pmtId = Oi(t, E); + break; + case y: { + i && (E += t[E] + 1); + const r = Ni(t, E, this.typeSupported, s); + h = r.videoPid, h > 0 && (n.pid = h, n.segmentCodec = r.segmentVideoCodec), c = r.audioPid, c > 0 && (a.pid = c, a.segmentCodec = r.segmentAudioCodec), u = r.id3Pid, u > 0 && (o.pid = u), null === m || p || (b.warn(`MPEG-TS PMT found at ${e} after unknown PID '${m}'. Backtracking to sync byte @${L} to parse all TS packets.`), m = null, e = L - 188), p = this.pmtParsed = !0; + break + } + case 17: + case 8191: + break; + default: + m = v + } + } else A++; + if (A > 0) { + const t = new Error(`Found ${A} TS packet/s that do not start with 0x47`); + this.observer.emit(E.ERROR, E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + fatal: !1, + error: t, + reason: t.message + }) + } + n.pesData = d, a.pesData = f, o.pesData = g; + const R = { + audioTrack: a, + videoTrack: n, + id3Track: o, + textTrack: l + }; + return i && this.extractRemainingSamples(R), R + } + flush() { + const { + remainderData: t + } = this; + let e; + return this.remainderData = null, e = t ? this.demux(t, -1, !1, !0) : { + videoTrack: this._videoTrack, + audioTrack: this._audioTrack, + id3Track: this._id3Track, + textTrack: this._txtTrack + }, this.extractRemainingSamples(e), this.sampleAes ? this.decrypt(e, this.sampleAes) : e + } + extractRemainingSamples(t) { + const { + audioTrack: e, + videoTrack: s, + id3Track: i, + textTrack: r + } = t, n = s.pesData, a = e.pesData, o = i.pesData; + let l; + if (n && (l = Bi(n)) ? (this.videoParser.parseAVCPES(s, r, l, !0, this._duration), s.pesData = null) : s.pesData = n, a && (l = Bi(a))) { + switch (e.segmentCodec) { + case "aac": + this.parseAACPES(e, l); + break; + case "mp3": + this.parseMPEGPES(e, l); + break; + case "ac3": + this.parseAC3PES(e, l) + } + e.pesData = null + } else null != a && a.size && b.log("last AAC PES packet truncated,might overlap between fragments"), e.pesData = a; + o && (l = Bi(o)) ? (this.parseID3PES(i, l), i.pesData = null) : i.pesData = o + } + demuxSampleAes(t, e, s) { + const i = this.demux(t, s, !0, !this.config.progressive), + r = this.sampleAes = new xi(this.observer, this.config, e); + return this.decrypt(i, r) + } + decrypt(t, e) { + return new Promise((s => { + const { + audioTrack: i, + videoTrack: r + } = t; + i.samples && "aac" === i.segmentCodec ? e.decryptAacSamples(i.samples, 0, (() => { + r.samples ? e.decryptAvcSamples(r.samples, 0, 0, (() => { + s(t) + })) : s(t) + })) : r.samples && e.decryptAvcSamples(r.samples, 0, 0, (() => { + s(t) + })) + })) + } + destroy() { + this._duration = 0 + } + parseAACPES(t, e) { + let s = 0; + const i = this.aacOverFlow; + let r, n, a, o = e.data; + if (i) { + this.aacOverFlow = null; + const e = i.missing, + r = i.sample.unit.byteLength; + if (-1 === e) o = Pt(i.sample.unit, o); + else { + const n = r - e; + i.sample.unit.set(o.subarray(0, e), n), t.samples.push(i.sample), s = i.missing + } + } + for (r = s, n = o.length; r < n - 1 && !ci(o, r); r++); + if (r !== s) { + let t; + const e = r < n - 1; + t = e ? `AAC PES did not start with ADTS header,offset:${r}` : "No ADTS header found in AAC PES"; + const s = new Error(t); + if (b.warn(`parsing error: ${t}`), this.observer.emit(E.ERROR, E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + fatal: !1, + levelRetry: e, + error: s, + reason: t + }), !e) return + } + if (fi(t, this.observer, o, r, this.audioCodec), void 0 !== e.pts) a = e.pts; + else { + if (!i) return void b.warn("[tsdemuxer]: AAC PES unknown PTS"); + { + const e = gi(t.samplerate); + a = i.sample.pts + e + } + } + let l, h = 0; + for (; r < n;) { + if (l = mi(t, o, r, a, h), r += l.length, l.missing) { + this.aacOverFlow = l; + break + } + for (h++; r < n - 1 && !ci(o, r); r++); + } + } + parseMPEGPES(t, e) { + const s = e.data, + i = s.length; + let r = 0, + n = 0; + const a = e.pts; + if (void 0 !== a) + for (; n < i;) + if (Ri(s, n)) { + const e = Si(t, s, n, a, r); + if (!e) break; + n += e.length, r++ + } else n++; + else b.warn("[tsdemuxer]: MPEG PES unknown PTS") + } + parseAC3PES(t, e) { + { + const s = e.data, + i = e.pts; + if (void 0 === i) return void b.warn("[tsdemuxer]: AC3 PES unknown PTS"); + const r = s.length; + let n, a = 0, + o = 0; + for (; o < r && (n = Ii(t, s, o, i, a++)) > 0;) o += n + } + } + parseID3PES(t, e) { + if (void 0 === e.pts) return void b.warn("[tsdemuxer]: ID3 PES unknown PTS"); + const s = m({}, e, { + type: this._videoTrack ? Ce.emsg : Ce.audioId3, + duration: Number.POSITIVE_INFINITY + }); + t.samples.push(s) + } + } + + function Fi(t, e) { + return ((31 & t[e + 1]) << 8) + t[e + 2] + } + + function Oi(t, e) { + return (31 & t[e + 10]) << 8 | t[e + 11] + } + + function Ni(t, e, s, i) { + const r = { + audioPid: -1, + videoPid: -1, + id3Pid: -1, + segmentVideoCodec: "avc", + segmentAudioCodec: "aac" + }, + n = e + 3 + ((15 & t[e + 1]) << 8 | t[e + 2]) - 4; + for (e += 12 + ((15 & t[e + 10]) << 8 | t[e + 11]); e < n;) { + const n = Fi(t, e), + a = (15 & t[e + 3]) << 8 | t[e + 4]; + switch (t[e]) { + case 207: + if (!i) { + Ui("ADTS AAC"); + break + } + case 15: + -1 === r.audioPid && (r.audioPid = n); + break; + case 21: + -1 === r.id3Pid && (r.id3Pid = n); + break; + case 219: + if (!i) { + Ui("H.264"); + break + } + case 27: + -1 === r.videoPid && (r.videoPid = n, r.segmentVideoCodec = "avc"); + break; + case 3: + case 4: + s.mpeg || s.mp3 ? -1 === r.audioPid && (r.audioPid = n, r.segmentAudioCodec = "mp3") : b.log("MPEG audio found, not supported in this browser"); + break; + case 193: + if (!i) { + Ui("AC-3"); + break + } + case 129: + s.ac3 ? -1 === r.audioPid && (r.audioPid = n, r.segmentAudioCodec = "ac3") : b.log("AC-3 audio found, not supported in this browser"); + break; + case 6: + if (-1 === r.audioPid && a > 0) { + let i = e + 5, + o = a; + for (; o > 2;) { + 106 === t[i] && (!0 !== s.ac3 ? b.log("AC-3 audio found, not supported in this browser for now") : (r.audioPid = n, r.segmentAudioCodec = "ac3")); + const e = t[i + 1] + 2; + i += e, o -= e + } + } + break; + case 194: + case 135: + b.warn("Unsupported EC-3 in M2TS found"); + break; + case 36: + b.warn("Unsupported HEVC in M2TS found") + } + e += a + 5 + } + return r + } + + function Ui(t) { + b.log(`${t} with AES-128-CBC encryption found in unencrypted stream`) + } + + function Bi(t) { + let e, s, i, r, n, a = 0; + const o = t.data; + if (!t || 0 === t.size) return null; + for (; o[0].length < 19 && o.length > 1;) o[0] = Pt(o[0], o[1]), o.splice(1, 1); + if (e = o[0], 1 === (e[0] << 16) + (e[1] << 8) + e[2]) { + if (s = (e[4] << 8) + e[5], s && s > t.size - 6) return null; + const l = e[7]; + 192 & l && (r = 536870912 * (14 & e[9]) + 4194304 * (255 & e[10]) + 16384 * (254 & e[11]) + 128 * (255 & e[12]) + (254 & e[13]) / 2, 64 & l ? (n = 536870912 * (14 & e[14]) + 4194304 * (255 & e[15]) + 16384 * (254 & e[16]) + 128 * (255 & e[17]) + (254 & e[18]) / 2, r - n > 54e5 && (b.warn(`${Math.round((r-n)/9e4)}s delta between PTS and DTS, align them`), r = n)) : n = r), i = e[8]; + let h = i + 9; + if (t.size <= h) return null; + t.size -= h; + const d = new Uint8Array(t.size); + for (let t = 0, s = o.length; t < s; t++) { + e = o[t]; + let s = e.byteLength; + if (h) { + if (h > s) { + h -= s; + continue + } + e = e.subarray(h), s -= h, h = 0 + } + d.set(e, a), a += s + } + return s && (s -= i + 3), { + data: d, + pts: r, + dts: n, + len: s + } + } + return null + } + class $i { + static getSilentFrame(t, e) { + if ("mp4a.40.2" === t) { + if (1 === e) return new Uint8Array([0, 200, 0, 128, 35, 128]); + if (2 === e) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); + if (3 === e) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); + if (4 === e) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); + if (5 === e) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]); + if (6 === e) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]) + } else { + if (1 === e) return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); + if (2 === e) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); + if (3 === e) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]) + } + } + } + const Gi = Math.pow(2, 32) - 1; + class Ki { + static init() { + let t; + for (t in Ki.types = { + avc1: [], + avcC: [], + btrt: [], + dinf: [], + dref: [], + esds: [], + ftyp: [], + hdlr: [], + mdat: [], + mdhd: [], + mdia: [], + mfhd: [], + minf: [], + moof: [], + moov: [], + mp4a: [], + ".mp3": [], + dac3: [], + "ac-3": [], + mvex: [], + mvhd: [], + pasp: [], + sdtp: [], + stbl: [], + stco: [], + stsc: [], + stsd: [], + stsz: [], + stts: [], + tfdt: [], + tfhd: [], + traf: [], + trak: [], + trun: [], + trex: [], + tkhd: [], + vmhd: [], + smhd: [] + }, Ki.types) Ki.types.hasOwnProperty(t) && (Ki.types[t] = [t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2), t.charCodeAt(3)]); + const e = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]), + s = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]); + Ki.HDLR_TYPES = { + video: e, + audio: s + }; + const i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), + r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]); + Ki.STTS = Ki.STSC = Ki.STCO = r, Ki.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), Ki.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), Ki.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), Ki.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]); + const n = new Uint8Array([105, 115, 111, 109]), + a = new Uint8Array([97, 118, 99, 49]), + o = new Uint8Array([0, 0, 0, 1]); + Ki.FTYP = Ki.box(Ki.types.ftyp, n, o, n, a), Ki.DINF = Ki.box(Ki.types.dinf, Ki.box(Ki.types.dref, i)) + } + static box(t, ...e) { + let s = 8, + i = e.length; + const r = i; + for (; i--;) s += e[i].byteLength; + const n = new Uint8Array(s); + for (n[0] = s >> 24 & 255, n[1] = s >> 16 & 255, n[2] = s >> 8 & 255, n[3] = 255 & s, n.set(t, 4), i = 0, s = 8; i < r; i++) n.set(e[i], s), s += e[i].byteLength; + return n + } + static hdlr(t) { + return Ki.box(Ki.types.hdlr, Ki.HDLR_TYPES[t]) + } + static mdat(t) { + return Ki.box(Ki.types.mdat, t) + } + static mdhd(t, e) { + e *= t; + const s = Math.floor(e / (Gi + 1)), + i = Math.floor(e % (Gi + 1)); + return Ki.box(Ki.types.mdhd, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, s >> 24, s >> 16 & 255, s >> 8 & 255, 255 & s, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 85, 196, 0, 0])) + } + static mdia(t) { + return Ki.box(Ki.types.mdia, Ki.mdhd(t.timescale, t.duration), Ki.hdlr(t.type), Ki.minf(t)) + } + static mfhd(t) { + return Ki.box(Ki.types.mfhd, new Uint8Array([0, 0, 0, 0, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t])) + } + static minf(t) { + return "audio" === t.type ? Ki.box(Ki.types.minf, Ki.box(Ki.types.smhd, Ki.SMHD), Ki.DINF, Ki.stbl(t)) : Ki.box(Ki.types.minf, Ki.box(Ki.types.vmhd, Ki.VMHD), Ki.DINF, Ki.stbl(t)) + } + static moof(t, e, s) { + return Ki.box(Ki.types.moof, Ki.mfhd(t), Ki.traf(s, e)) + } + static moov(t) { + let e = t.length; + const s = []; + for (; e--;) s[e] = Ki.trak(t[e]); + return Ki.box.apply(null, [Ki.types.moov, Ki.mvhd(t[0].timescale, t[0].duration)].concat(s).concat(Ki.mvex(t))) + } + static mvex(t) { + let e = t.length; + const s = []; + for (; e--;) s[e] = Ki.trex(t[e]); + return Ki.box.apply(null, [Ki.types.mvex, ...s]) + } + static mvhd(t, e) { + e *= t; + const s = Math.floor(e / (Gi + 1)), + i = Math.floor(e % (Gi + 1)), + r = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, s >> 24, s >> 16 & 255, s >> 8 & 255, 255 & s, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]); + return Ki.box(Ki.types.mvhd, r) + } + static sdtp(t) { + const e = t.samples || [], + s = new Uint8Array(4 + e.length); + let i, r; + for (i = 0; i < e.length; i++) r = e[i].flags, s[i + 4] = r.dependsOn << 4 | r.isDependedOn << 2 | r.hasRedundancy; + return Ki.box(Ki.types.sdtp, s) + } + static stbl(t) { + return Ki.box(Ki.types.stbl, Ki.stsd(t), Ki.box(Ki.types.stts, Ki.STTS), Ki.box(Ki.types.stsc, Ki.STSC), Ki.box(Ki.types.stsz, Ki.STSZ), Ki.box(Ki.types.stco, Ki.STCO)) + } + static avc1(t) { + let e, s, i, r = [], + n = []; + for (e = 0; e < t.sps.length; e++) s = t.sps[e], i = s.byteLength, r.push(i >>> 8 & 255), r.push(255 & i), r = r.concat(Array.prototype.slice.call(s)); + for (e = 0; e < t.pps.length; e++) s = t.pps[e], i = s.byteLength, n.push(i >>> 8 & 255), n.push(255 & i), n = n.concat(Array.prototype.slice.call(s)); + const a = Ki.box(Ki.types.avcC, new Uint8Array([1, r[3], r[4], r[5], 255, 224 | t.sps.length].concat(r).concat([t.pps.length]).concat(n))), + o = t.width, + l = t.height, + h = t.pixelRatio[0], + d = t.pixelRatio[1]; + return Ki.box(Ki.types.avc1, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, o >> 8 & 255, 255 & o, l >> 8 & 255, 255 & l, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 18, 100, 97, 105, 108, 121, 109, 111, 116, 105, 111, 110, 47, 104, 108, 115, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), a, Ki.box(Ki.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), Ki.box(Ki.types.pasp, new Uint8Array([h >> 24, h >> 16 & 255, h >> 8 & 255, 255 & h, d >> 24, d >> 16 & 255, d >> 8 & 255, 255 & d]))) + } + static esds(t) { + const e = t.config.length; + return new Uint8Array([0, 0, 0, 0, 3, 23 + e, 0, 1, 0, 4, 15 + e, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([e]).concat(t.config).concat([6, 1, 2])) + } + static audioStsd(t) { + const e = t.samplerate; + return new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, t.channelCount, 0, 16, 0, 0, 0, 0, e >> 8 & 255, 255 & e, 0, 0]) + } + static mp4a(t) { + return Ki.box(Ki.types.mp4a, Ki.audioStsd(t), Ki.box(Ki.types.esds, Ki.esds(t))) + } + static mp3(t) { + return Ki.box(Ki.types[".mp3"], Ki.audioStsd(t)) + } + static ac3(t) { + return Ki.box(Ki.types["ac-3"], Ki.audioStsd(t), Ki.box(Ki.types.dac3, t.config)) + } + static stsd(t) { + return "audio" === t.type ? "mp3" === t.segmentCodec && "mp3" === t.codec ? Ki.box(Ki.types.stsd, Ki.STSD, Ki.mp3(t)) : "ac3" === t.segmentCodec ? Ki.box(Ki.types.stsd, Ki.STSD, Ki.ac3(t)) : Ki.box(Ki.types.stsd, Ki.STSD, Ki.mp4a(t)) : Ki.box(Ki.types.stsd, Ki.STSD, Ki.avc1(t)) + } + static tkhd(t) { + const e = t.id, + s = t.duration * t.timescale, + i = t.width, + r = t.height, + n = Math.floor(s / (Gi + 1)), + a = Math.floor(s % (Gi + 1)); + return Ki.box(Ki.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 0, 0, 0, n >> 24, n >> 16 & 255, n >> 8 & 255, 255 & n, a >> 24, a >> 16 & 255, a >> 8 & 255, 255 & a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, i >> 8 & 255, 255 & i, 0, 0, r >> 8 & 255, 255 & r, 0, 0])) + } + static traf(t, e) { + const s = Ki.sdtp(t), + i = t.id, + r = Math.floor(e / (Gi + 1)), + n = Math.floor(e % (Gi + 1)); + return Ki.box(Ki.types.traf, Ki.box(Ki.types.tfhd, new Uint8Array([0, 0, 0, 0, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i])), Ki.box(Ki.types.tfdt, new Uint8Array([1, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, n >> 24, n >> 16 & 255, n >> 8 & 255, 255 & n])), Ki.trun(t, s.length + 16 + 20 + 8 + 16 + 8 + 8), s) + } + static trak(t) { + return t.duration = t.duration || 4294967295, Ki.box(Ki.types.trak, Ki.tkhd(t), Ki.mdia(t)) + } + static trex(t) { + const e = t.id; + return Ki.box(Ki.types.trex, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1])) + } + static trun(t, e) { + const s = t.samples || [], + i = s.length, + r = 12 + 16 * i, + n = new Uint8Array(r); + let a, o, l, h, d, c; + for (e += 8 + r, n.set(["video" === t.type ? 1 : 0, 0, 15, 1, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, e >>> 24 & 255, e >>> 16 & 255, e >>> 8 & 255, 255 & e], 0), a = 0; a < i; a++) o = s[a], l = o.duration, h = o.size, d = o.flags, c = o.cts, n.set([l >>> 24 & 255, l >>> 16 & 255, l >>> 8 & 255, 255 & l, h >>> 24 & 255, h >>> 16 & 255, h >>> 8 & 255, 255 & h, d.isLeading << 2 | d.dependsOn, d.isDependedOn << 6 | d.hasRedundancy << 4 | d.paddingValue << 1 | d.isNonSync, 61440 & d.degradPrio, 15 & d.degradPrio, c >>> 24 & 255, c >>> 16 & 255, c >>> 8 & 255, 255 & c], 12 + 16 * a); + return Ki.box(Ki.types.trun, n) + } + static initSegment(t) { + Ki.types || Ki.init(); + const e = Ki.moov(t); + return Pt(Ki.FTYP, e) + } + } + + function Hi(t, e, s = 1, i = !1) { + const r = t * e * s; + return i ? Math.round(r) : r + } + + function Vi(t, e = !1) { + return Hi(t, 1e3, 1 / 9e4, e) + } + Ki.types = void 0, Ki.HDLR_TYPES = void 0, Ki.STTS = void 0, Ki.STSC = void 0, Ki.STCO = void 0, Ki.STSZ = void 0, Ki.VMHD = void 0, Ki.SMHD = void 0, Ki.STSD = void 0, Ki.FTYP = void 0, Ki.DINF = void 0; + let Yi, Wi = null, + ji = null; + class qi { + constructor(t, e, s, i = "") { + if (this.observer = void 0, this.config = void 0, this.typeSupported = void 0, this.ISGenerated = !1, this._initPTS = null, this._initDTS = null, this.nextAvcDts = null, this.nextAudioPts = null, this.videoSampleDuration = null, this.isAudioContiguous = !1, this.isVideoContiguous = !1, this.videoTrackConfig = void 0, this.observer = t, this.config = e, this.typeSupported = s, this.ISGenerated = !1, null === Wi) { + const t = (navigator.userAgent || "").match(/Chrome\/(\d+)/i); + Wi = t ? parseInt(t[1]) : 0 + } + if (null === ji) { + const t = navigator.userAgent.match(/Safari\/(\d+)/i); + ji = t ? parseInt(t[1]) : 0 + } + } + destroy() { + this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null + } + resetTimeStamp(t) { + b.log("[mp4-remuxer]: initPTS & initDTS reset"), this._initPTS = this._initDTS = t + } + resetNextTimestamp() { + b.log("[mp4-remuxer]: reset next timestamp"), this.isVideoContiguous = !1, this.isAudioContiguous = !1 + } + resetInitSegment() { + b.log("[mp4-remuxer]: ISGenerated flag reset"), this.ISGenerated = !1, this.videoTrackConfig = void 0 + } + getVideoStartPts(t) { + let e = !1; + const s = t.reduce(((t, s) => { + const i = s.pts - t; + return i < -4294967296 ? (e = !0, Xi(t, s.pts)) : i > 0 ? t : s.pts + }), t[0].pts); + return e && b.debug("PTS rollover detected"), s + } + remux(t, e, s, i, r, n, a, o) { + let l, h, d, c, u, f, g = r, + m = r; + const p = t.pid > -1, + y = e.pid > -1, + v = e.samples.length, + E = t.samples.length > 0, + T = a && v > 0 || v > 1; + if ((!p || E) && (!y || T) || this.ISGenerated || a) { + if (this.ISGenerated) { + var S, L, A, R; + const t = this.videoTrackConfig; + !t || e.width === t.width && e.height === t.height && (null == (S = e.pixelRatio) ? void 0 : S[0]) === (null == (L = t.pixelRatio) ? void 0 : L[0]) && (null == (A = e.pixelRatio) ? void 0 : A[1]) === (null == (R = t.pixelRatio) ? void 0 : R[1]) || this.resetInitSegment() + } else d = this.generateIS(t, e, r, n); + const s = this.isVideoContiguous; + let i, a = -1; + if (T && (a = function(t) { + for (let e = 0; e < t.length; e++) + if (t[e].key) return e; + return -1 + }(e.samples), !s && this.config.forceKeyFrameOnDiscontinuity)) + if (f = !0, a > 0) { + b.warn(`[mp4-remuxer]: Dropped ${a} out of ${v} video samples due to a missing keyframe`); + const t = this.getVideoStartPts(e.samples); + e.samples = e.samples.slice(a), e.dropped += a, m += (e.samples[0].pts - t) / e.inputTimeScale, i = m + } else - 1 === a && (b.warn(`[mp4-remuxer]: No keyframe found out of ${v} video samples`), f = !1); + if (this.ISGenerated) { + if (E && T) { + const s = this.getVideoStartPts(e.samples), + i = (Xi(t.samples[0].pts, s) - s) / e.inputTimeScale; + g += Math.max(0, i), m += Math.max(0, -i) + } + if (E) { + if (t.samplerate || (b.warn("[mp4-remuxer]: regenerate InitSegment as audio detected"), d = this.generateIS(t, e, r, n)), h = this.remuxAudio(t, g, this.isAudioContiguous, n, y || T || o === Te.AUDIO ? m : void 0), T) { + const i = h ? h.endPTS - h.startPTS : 0; + e.inputTimeScale || (b.warn("[mp4-remuxer]: regenerate InitSegment as video detected"), d = this.generateIS(t, e, r, n)), l = this.remuxVideo(e, m, s, i) + } + } else T && (l = this.remuxVideo(e, m, s, 0)); + l && (l.firstKeyFrame = a, l.independent = -1 !== a, l.firstKeyFramePTS = i) + } + } + return this.ISGenerated && this._initPTS && this._initDTS && (s.samples.length && (u = zi(s, r, this._initPTS, this._initDTS)), i.samples.length && (c = Qi(i, r, this._initPTS))), { + audio: h, + video: l, + initSegment: d, + independent: f, + text: c, + id3: u + } + } + generateIS(t, e, s, i) { + const r = t.samples, + n = e.samples, + a = this.typeSupported, + o = {}, + l = this._initPTS; + let h, d, c, u = !l || i, + f = "audio/mp4"; + if (u && (h = d = 1 / 0), t.config && r.length) { + switch (t.timescale = t.samplerate, t.segmentCodec) { + case "mp3": + a.mpeg ? (f = "audio/mpeg", t.codec = "") : a.mp3 && (t.codec = "mp3"); + break; + case "ac3": + t.codec = "ac-3" + } + o.audio = { + id: "audio", + container: f, + codec: t.codec, + initSegment: "mp3" === t.segmentCodec && a.mpeg ? new Uint8Array(0) : Ki.initSegment([t]), + metadata: { + channelCount: t.channelCount + } + }, u && (c = t.inputTimeScale, l && c === l.timescale ? u = !1 : h = d = r[0].pts - Math.round(c * s)) + } + if (e.sps && e.pps && n.length) { + if (e.timescale = e.inputTimeScale, o.video = { + id: "main", + container: "video/mp4", + codec: e.codec, + initSegment: Ki.initSegment([e]), + metadata: { + width: e.width, + height: e.height + } + }, u) + if (c = e.inputTimeScale, l && c === l.timescale) u = !1; + else { + const t = this.getVideoStartPts(n), + e = Math.round(c * s); + d = Math.min(d, Xi(n[0].dts, t) - e), h = Math.min(h, t - e) + } this.videoTrackConfig = { + width: e.width, + height: e.height, + pixelRatio: e.pixelRatio + } + } + if (Object.keys(o).length) return this.ISGenerated = !0, u ? (this._initPTS = { + baseTime: h, + timescale: c + }, this._initDTS = { + baseTime: d, + timescale: c + }) : h = c = void 0, { + tracks: o, + initPTS: h, + timescale: c + } + } + remuxVideo(t, e, s, i) { + const r = t.inputTimeScale, + n = t.samples, + a = [], + o = n.length, + l = this._initPTS; + let h, d, c = this.nextAvcDts, + u = 8, + f = this.videoSampleDuration, + g = Number.POSITIVE_INFINITY, + p = Number.NEGATIVE_INFINITY, + y = !1; + if (!s || null === c) { + const t = e * r, + i = n[0].pts - Xi(n[0].dts, n[0].pts); + Wi && null !== c && Math.abs(t - i - c) < 15e3 ? s = !0 : c = t - i + } + const v = l.baseTime * r / l.timescale; + for (let t = 0; t < o; t++) { + const e = n[t]; + e.pts = Xi(e.pts - v, c), e.dts = Xi(e.dts - v, c), e.dts < n[t > 0 ? t - 1 : t].dts && (y = !0) + } + y && n.sort((function(t, e) { + const s = t.dts - e.dts, + i = t.pts - e.pts; + return s || i + })), h = n[0].dts, d = n[n.length - 1].dts; + const L = d - h, + A = L ? Math.round(L / (o - 1)) : f || t.inputTimeScale / 30; + if (s) { + const t = h - c, + s = t > A, + i = t < -1; + if ((s || i) && (s ? b.warn(`AVC: ${Vi(t,!0)} ms (${t}dts) hole between fragments detected at ${e.toFixed(3)}`) : b.warn(`AVC: ${Vi(-t,!0)} ms (${t}dts) overlapping between fragments detected at ${e.toFixed(3)}`), !i || c >= n[0].pts || Wi)) { + h = c; + const e = n[0].pts - t; + if (s) n[0].dts = h, n[0].pts = e; + else + for (let s = 0; s < n.length && !(n[s].dts > e); s++) n[s].dts -= t, n[s].pts -= t; + b.log(`Video: Initial PTS/DTS adjusted: ${Vi(e,!0)}/${Vi(h,!0)}, delta: ${Vi(t,!0)} ms`) + } + } + h = Math.max(0, h); + let R = 0, + D = 0, + k = h; + for (let t = 0; t < o; t++) { + const e = n[t], + s = e.units, + i = s.length; + let r = 0; + for (let t = 0; t < i; t++) r += s[t].data.length; + D += r, R += i, e.length = r, e.dts < k ? (e.dts = k, k += A / 4 | 0 || 1) : k = e.dts, g = Math.min(e.pts, g), p = Math.max(e.pts, p) + } + d = n[o - 1].dts; + const I = D + 4 * R + 8; + let C; + try { + C = new Uint8Array(I) + } catch (t) { + return void this.observer.emit(E.ERROR, E.ERROR, { + type: T.MUX_ERROR, + details: S.REMUX_ALLOC_ERROR, + fatal: !1, + error: t, + bytes: I, + reason: `fail allocating video mdat ${I}` + }) + } + const w = new DataView(C.buffer); + w.setUint32(0, I), C.set(Ki.types.mdat, 4); + let _ = !1, + x = Number.POSITIVE_INFINITY, + P = Number.POSITIVE_INFINITY, + M = Number.NEGATIVE_INFINITY, + F = Number.NEGATIVE_INFINITY; + for (let t = 0; t < o; t++) { + const e = n[t], + s = e.units; + let l, h = 0; + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t], + i = e.data, + r = e.data.byteLength; + w.setUint32(u, r), u += 4, C.set(i, u), u += r, h += 4 + r + } + if (t < o - 1) f = n[t + 1].dts - e.dts, l = n[t + 1].pts - e.pts; + else { + const s = this.config, + a = t > 0 ? e.dts - n[t - 1].dts : A; + if (l = t > 0 ? e.pts - n[t - 1].pts : A, s.stretchShortVideoTrack && null !== this.nextAudioPts) { + const t = Math.floor(s.maxBufferHole * r), + n = (i ? g + i * r : this.nextAudioPts) - e.pts; + n > t ? (f = n - a, f < 0 ? f = a : _ = !0, b.log(`[mp4-remuxer]: It is approximately ${n/90} ms to the next segment; using duration ${f/90} ms for the last video frame.`)) : f = a + } else f = a + } + const d = Math.round(e.pts - e.dts); + x = Math.min(x, f), M = Math.max(M, f), P = Math.min(P, l), F = Math.max(F, l), a.push(new Ji(e.key, f, h, d)) + } + if (a.length) + if (Wi) { + if (Wi < 70) { + const t = a[0].flags; + t.dependsOn = 2, t.isNonSync = 0 + } + } else if (ji && F - P < M - x && A / M < .025 && 0 === a[0].cts) { + b.warn("Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration."); + let t = h; + for (let e = 0, s = a.length; e < s; e++) { + const i = t + a[e].duration, + r = t + a[e].cts; + if (e < s - 1) { + const t = i + a[e + 1].cts; + a[e].duration = t - r + } else a[e].duration = e ? a[e - 1].duration : A; + a[e].cts = 0, t = i + } + } + f = _ || !f ? A : f, this.nextAvcDts = c = d + f, this.videoSampleDuration = f, this.isVideoContiguous = !0; + const O = { + data1: Ki.moof(t.sequenceNumber++, h, m({}, t, { + samples: a + })), + data2: C, + startPTS: g / r, + endPTS: (p + f) / r, + startDTS: h / r, + endDTS: c / r, + type: "video", + hasAudio: !1, + hasVideo: !0, + nb: a.length, + dropped: t.dropped + }; + return t.samples = [], t.dropped = 0, O + } + getSamplesPerFrame(t) { + switch (t.segmentCodec) { + case "mp3": + return 1152; + case "ac3": + return 1536; + default: + return 1024 + } + } + remuxAudio(t, e, s, i, r) { + const n = t.inputTimeScale, + a = n / (t.samplerate ? t.samplerate : n), + o = this.getSamplesPerFrame(t), + l = o * a, + h = this._initPTS, + d = "mp3" === t.segmentCodec && this.typeSupported.mpeg, + c = [], + u = void 0 !== r; + let f = t.samples, + g = d ? 0 : 8, + p = this.nextAudioPts || -1; + const y = e * n, + v = h.baseTime * n / h.timescale; + if (this.isAudioContiguous = s = s || f.length && p > 0 && (i && Math.abs(y - p) < 9e3 || Math.abs(Xi(f[0].pts - v, y) - p) < 20 * l), f.forEach((function(t) { + t.pts = Xi(t.pts - v, y) + })), !s || p < 0) { + if (f = f.filter((t => t.pts >= 0)), !f.length) return; + p = 0 === r ? 0 : i && !u ? Math.max(0, y) : f[0].pts + } + if ("aac" === t.segmentCodec) { + const e = this.config.maxAudioFramesDrift; + for (let s = 0, i = p; s < f.length; s++) { + const r = f[s], + a = r.pts, + o = a - i, + h = Math.abs(1e3 * o / n); + if (o <= -e * l && u) 0 === s && (b.warn(`Audio frame @ ${(a/n).toFixed(3)}s overlaps nextAudioPts by ${Math.round(1e3*o/n)} ms.`), this.nextAudioPts = p = i = a); + else if (o >= e * l && h < 1e4 && u) { + let e = Math.round(o / l); + i = a - e * l, i < 0 && (e--, i += l), 0 === s && (this.nextAudioPts = p = i), b.warn(`[mp4-remuxer]: Injecting ${e} audio frame @ ${(i/n).toFixed(3)}s due to ${Math.round(1e3*o/n)} ms gap.`); + for (let n = 0; n < e; n++) { + const e = Math.max(i, 0); + let n = $i.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); + n || (b.log("[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead."), n = r.unit.subarray()), f.splice(s, 0, { + unit: n, + pts: e + }), i += l, s++ + } + } + r.pts = i, i += l + } + } + let L, A = null, + R = null, + D = 0, + k = f.length; + for (; k--;) D += f[k].unit.byteLength; + for (let e = 0, i = f.length; e < i; e++) { + const i = f[e], + r = i.unit; + let n = i.pts; + if (null !== R) c[e - 1].duration = Math.round((n - R) / a); + else { + if (s && "aac" === t.segmentCodec && (n = p), A = n, !(D > 0)) return; + D += g; + try { + L = new Uint8Array(D) + } catch (t) { + return void this.observer.emit(E.ERROR, E.ERROR, { + type: T.MUX_ERROR, + details: S.REMUX_ALLOC_ERROR, + fatal: !1, + error: t, + bytes: D, + reason: `fail allocating audio mdat ${D}` + }) + } + d || (new DataView(L.buffer).setUint32(0, D), L.set(Ki.types.mdat, 4)) + } + L.set(r, g); + const l = r.byteLength; + g += l, c.push(new Ji(!0, o, l, 0)), R = n + } + const I = c.length; + if (!I) return; + const C = c[c.length - 1]; + this.nextAudioPts = p = R + a * C.duration; + const w = d ? new Uint8Array(0) : Ki.moof(t.sequenceNumber++, A / a, m({}, t, { + samples: c + })); + t.samples = []; + const _ = A / n, + x = p / n, + P = { + data1: w, + data2: L, + startPTS: _, + endPTS: x, + startDTS: _, + endDTS: x, + type: "audio", + hasAudio: !0, + hasVideo: !1, + nb: I + }; + return this.isAudioContiguous = !0, P + } + remuxEmptyAudio(t, e, s, i) { + const r = t.inputTimeScale, + n = r / (t.samplerate ? t.samplerate : r), + a = this.nextAudioPts, + o = this._initDTS, + l = 9e4 * o.baseTime / o.timescale, + h = (null !== a ? a : i.startDTS * r) + l, + d = i.endDTS * r + l, + c = 1024 * n, + u = Math.ceil((d - h) / c), + f = $i.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); + if (b.warn("[mp4-remuxer]: remux empty Audio"), !f) return void b.trace("[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec"); + const g = []; + for (let t = 0; t < u; t++) { + const e = h + t * c; + g.push({ + unit: f, + pts: e, + dts: e + }) + } + return t.samples = g, this.remuxAudio(t, e, s, !1) + } + } + + function Xi(t, e) { + let s; + if (null === e) return t; + for (s = e < t ? -8589934592 : 8589934592; Math.abs(t - e) > 4294967296;) t += s; + return t + } + + function zi(t, e, s, i) { + const r = t.samples.length; + if (!r) return; + const n = t.inputTimeScale; + for (let a = 0; a < r; a++) { + const r = t.samples[a]; + r.pts = Xi(r.pts - s.baseTime * n / s.timescale, e * n) / n, r.dts = Xi(r.dts - i.baseTime * n / i.timescale, e * n) / n + } + const a = t.samples; + return t.samples = [], { + samples: a + } + } + + function Qi(t, e, s) { + const i = t.samples.length; + if (!i) return; + const r = t.inputTimeScale; + for (let n = 0; n < i; n++) { + const i = t.samples[n]; + i.pts = Xi(i.pts - s.baseTime * r / s.timescale, e * r) / r + } + t.samples.sort(((t, e) => t.pts - e.pts)); + const n = t.samples; + return t.samples = [], { + samples: n + } + } + class Ji { + constructor(t, e, s, i) { + this.size = void 0, this.duration = void 0, this.cts = void 0, this.flags = void 0, this.duration = e, this.size = s, this.cts = i, this.flags = { + isLeading: 0, + isDependedOn: 0, + hasRedundancy: 0, + degradPrio: 0, + dependsOn: t ? 2 : 1, + isNonSync: t ? 0 : 1 + } + } + } + + function Zi(t, e) { + const s = null == t ? void 0 : t.codec; + if (s && s.length > 4) return s; + if (e === x) { + if ("ec-3" === s || "ac-3" === s || "alac" === s) return s; + if ("fLaC" === s || "Opus" === s) return ee(s, !1); + const t = "mp4a.40.5"; + return b.info(`Parsed audio codec "${s}" or audio object type not handled. Using "${t}"`), t + } + return b.warn(`Unhandled video codec "${s}"`), "hvc1" === s || "hev1" === s ? "hvc1.1.6.L120.90" : "av01" === s ? "av01.0.04M.08" : "avc1.42e01e" + } + try { + Yi = self.performance.now.bind(self.performance) + } catch (t) { + b.debug("Unable to use Performance API on this environment"), Yi = null == G ? void 0 : G.Date.now + } + const tr = [{ + demux: class { + constructor(t, e) { + this.remainderData = null, this.timeOffset = 0, this.config = void 0, this.videoTrack = void 0, this.audioTrack = void 0, this.id3Track = void 0, this.txtTrack = void 0, this.config = e + } + resetTimeStamp() {} + resetInitSegment(t, e, s, i) { + const r = this.videoTrack = ni("video", 1), + n = this.audioTrack = ni("audio", 1), + a = this.txtTrack = ni("text", 1); + if (this.id3Track = ni("id3", 1), this.timeOffset = 0, null == t || !t.byteLength) return; + const o = Dt(t); + if (o.video) { + const { + id: t, + timescale: e, + codec: s + } = o.video; + r.id = t, r.timescale = a.timescale = e, r.codec = s + } + if (o.audio) { + const { + id: t, + timescale: e, + codec: s + } = o.audio; + n.id = t, n.timescale = e, n.codec = s + } + a.id = yt.text, r.sampleDuration = 0, r.duration = n.duration = i + } + resetContiguity() { + this.remainderData = null + } + static probe(t) { + return function(t) { + const e = t.byteLength; + for (let s = 0; s < e;) { + const i = Tt(t, s); + if (i > 8 && 109 === t[s + 4] && 111 === t[s + 5] && 111 === t[s + 6] && 102 === t[s + 7]) return !0; + s = i > 1 ? s + i : e + } + return !1 + }(t) + } + demux(t, e) { + this.timeOffset = e; + let s = t; + const i = this.videoTrack, + r = this.txtTrack; + if (this.config.progressive) { + this.remainderData && (s = Pt(this.remainderData, t)); + const e = function(t) { + const e = { + valid: null, + remainder: null + }, + s = Rt(t, ["moof"]); + if (s.length < 2) return e.remainder = t, e; + const i = s[s.length - 1]; + return e.valid = z(t, 0, i.byteOffset - 8), e.remainder = z(t, i.byteOffset - 8), e + }(s); + this.remainderData = e.remainder, i.samples = e.valid || new Uint8Array + } else i.samples = s; + const n = this.extractID3Track(i, e); + return r.samples = Mt(e, i), { + videoTrack: i, + audioTrack: this.audioTrack, + id3Track: n, + textTrack: this.txtTrack + } + } + flush() { + const t = this.timeOffset, + e = this.videoTrack, + s = this.txtTrack; + e.samples = this.remainderData || new Uint8Array, this.remainderData = null; + const i = this.extractID3Track(e, this.timeOffset); + return s.samples = Mt(t, e), { + videoTrack: e, + audioTrack: ni(), + id3Track: i, + textTrack: ni() + } + } + extractID3Track(t, e) { + const s = this.id3Track; + if (t.samples.length) { + const i = Rt(t.samples, ["emsg"]); + i && i.forEach((t => { + const i = function(t) { + const e = t[0]; + let s = "", + i = "", + r = 0, + n = 0, + a = 0, + o = 0, + l = 0, + h = 0; + if (0 === e) { + for (; + "\0" !== vt(t.subarray(h, h + 1));) s += vt(t.subarray(h, h + 1)), h += 1; + for (s += vt(t.subarray(h, h + 1)), h += 1; + "\0" !== vt(t.subarray(h, h + 1));) i += vt(t.subarray(h, h + 1)), h += 1; + i += vt(t.subarray(h, h + 1)), h += 1, r = Tt(t, 12), n = Tt(t, 16), o = Tt(t, 20), l = Tt(t, 24), h = 28 + } else if (1 === e) { + h += 4, r = Tt(t, h), h += 4; + const e = Tt(t, h); + h += 4; + const n = Tt(t, h); + for (h += 4, a = 2 ** 32 * e + n, y(a) || (a = Number.MAX_SAFE_INTEGER, b.warn("Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), o = Tt(t, h), h += 4, l = Tt(t, h), h += 4; + "\0" !== vt(t.subarray(h, h + 1));) s += vt(t.subarray(h, h + 1)), h += 1; + for (s += vt(t.subarray(h, h + 1)), h += 1; + "\0" !== vt(t.subarray(h, h + 1));) i += vt(t.subarray(h, h + 1)), h += 1; + i += vt(t.subarray(h, h + 1)), h += 1 + } + return { + schemeIdUri: s, + value: i, + timeScale: r, + presentationTime: a, + presentationTimeDelta: n, + eventDuration: o, + id: l, + payload: t.subarray(h, t.byteLength) + } + }(t); + if (Di.test(i.schemeIdUri)) { + const t = p(i.presentationTime) ? i.presentationTime / i.timeScale : e + i.presentationTimeDelta / i.timeScale; + let r = 4294967295 === i.eventDuration ? Number.POSITIVE_INFINITY : i.eventDuration / i.timeScale; + r <= .001 && (r = Number.POSITIVE_INFINITY); + const n = i.payload; + s.samples.push({ + data: n, + len: n.byteLength, + dts: t, + pts: t, + type: Ce.emsg, + duration: r + }) + } + })) + } + return s + } + demuxSampleAes(t, e, s) { + return Promise.reject(new Error("The MP4 demuxer does not support SAMPLE-AES decryption")) + } + destroy() {} + }, + remux: class { + constructor() { + this.emitInitSegment = !1, this.audioCodec = void 0, this.videoCodec = void 0, this.initData = void 0, this.initPTS = null, this.initTracks = void 0, this.lastEndTime = null + } + destroy() {} + resetTimeStamp(t) { + this.initPTS = t, this.lastEndTime = null + } + resetNextTimestamp() { + this.lastEndTime = null + } + resetInitSegment(t, e, s, i) { + this.audioCodec = e, this.videoCodec = s, this.generateInitSegment(function(t, e) { + if (!t || !e) return t; + const s = e.keyId; + return s && e.isCommonEncryption && Rt(t, ["moov", "trak"]).forEach((t => { + const e = Rt(t, ["mdia", "minf", "stbl", "stsd"])[0].subarray(8); + let i = Rt(e, ["enca"]); + const r = i.length > 0; + r || (i = Rt(e, ["encv"])), i.forEach((t => { + Rt(r ? t.subarray(28) : t.subarray(78), ["sinf"]).forEach((t => { + const e = _t(t); + if (e) { + const t = e.subarray(8, 24); + t.some((t => 0 !== t)) || (b.log(`[eme] Patching keyId in 'enc${r?"a":"v"}>sinf>>tenc' box: ${gt(t)} -> ${gt(s)}`), e.set(s, 8)) + } + })) + })) + })), t + }(t, i)), this.emitInitSegment = !0 + } + generateInitSegment(t) { + let { + audioCodec: e, + videoCodec: s + } = this; + if (null == t || !t.byteLength) return this.initTracks = void 0, void(this.initData = void 0); + const i = this.initData = Dt(t); + i.audio && (e = Zi(i.audio, x)), i.video && (s = Zi(i.video, P)); + const r = {}; + i.audio && i.video ? r.audiovideo = { + container: "video/mp4", + codec: e + "," + s, + initSegment: t, + id: "main" + } : i.audio ? r.audio = { + container: "audio/mp4", + codec: e, + initSegment: t, + id: "audio" + } : i.video ? r.video = { + container: "video/mp4", + codec: s, + initSegment: t, + id: "main" + } : b.warn("[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes."), this.initTracks = r + } + remux(t, e, s, i, r, n) { + var a, o; + let { + initPTS: l, + lastEndTime: h + } = this; + const d = { + audio: void 0, + video: void 0, + text: i, + id3: s, + initSegment: void 0 + }; + p(h) || (h = this.lastEndTime = r || 0); + const c = e.samples; + if (null == c || !c.length) return d; + const u = { + initPTS: void 0, + timescale: 1 + }; + let f = this.initData; + if (null != (a = f) && a.length || (this.generateInitSegment(c), f = this.initData), null == (o = f) || !o.length) return b.warn("[passthrough-remuxer.ts]: Failed to generate initSegment."), d; + this.emitInitSegment && (u.tracks = this.initTracks, this.emitInitSegment = !1); + const g = function(t, e) { + let s = 0, + i = 0, + r = 0; + const n = Rt(t, ["moof", "traf"]); + for (let t = 0; t < n.length; t++) { + const a = n[t], + o = Rt(a, ["tfhd"])[0], + l = e[Tt(o, 4)]; + if (!l) continue; + const h = l.default, + d = Tt(o, 0) | (null == h ? void 0 : h.flags); + let c = null == h ? void 0 : h.duration; + 8 & d && (c = Tt(o, 2 & d ? 12 : 8)); + const u = l.timescale || 9e4, + f = Rt(a, ["trun"]); + for (let t = 0; t < f.length; t++) s = xt(f[t]), !s && c && (s = c * Tt(f[t], 4)), l.type === P ? i += s / u : l.type === x && (r += s / u) + } + if (0 === i && 0 === r) { + let e = 1 / 0, + s = 0, + i = 0; + const r = Rt(t, ["sidx"]); + for (let t = 0; t < r.length; t++) { + const n = bt(r[t]); + if (null != n && n.references) { + e = Math.min(e, n.earliestPresentationTime / n.timescale); + const t = n.references.reduce(((t, e) => t + e.info.duration || 0), 0); + s = Math.max(s, t + n.earliestPresentationTime / n.timescale), i = s - e + } + } + if (i && p(i)) return i + } + return i || r + }(c, f), + m = function(t, e) { + return Rt(e, ["moof", "traf"]).reduce(((e, s) => { + const i = Rt(s, ["tfdt"])[0], + r = i[0], + n = Rt(s, ["tfhd"]).reduce(((e, s) => { + const n = Tt(s, 4), + a = t[n]; + if (a) { + let t = Tt(i, 4); + if (1 === r) { + if (t === mt) return b.warn("[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time"), e; + t *= mt + 1, t += Tt(i, 8) + } + const s = t / (a.timescale || 9e4); + if (p(s) && (null === e || s < e)) return s + } + return e + }), null); + return null !== n && p(n) && (null === e || n < e) ? n : e + }), null) + }(f, c), + y = null === m ? r : m; + (function(t, e, s, i) { + if (null === t) return !0; + const r = Math.max(i, 1), + n = e - t.baseTime / t.timescale; + return Math.abs(n - s) > r + }(l, y, r, g) || u.timescale !== l.timescale && n) && (u.initPTS = y - r, l && 1 === l.timescale && b.warn("Adjusting initPTS by " + (u.initPTS - l.baseTime)), this.initPTS = l = { + baseTime: u.initPTS, + timescale: 1 + }); + const v = t ? y - l.baseTime / l.timescale : h, + E = v + g; + ! function(t, e, s) { + Rt(e, ["moof", "traf"]).forEach((e => { + Rt(e, ["tfhd"]).forEach((i => { + const r = Tt(i, 4), + n = t[r]; + if (!n) return; + const a = n.timescale || 9e4; + Rt(e, ["tfdt"]).forEach((t => { + const e = t[0], + i = s * a; + if (i) { + let s = Tt(t, 4); + if (0 === e) s -= i, s = Math.max(s, 0), At(t, 4, s); + else { + s *= Math.pow(2, 32), s += Tt(t, 8), s -= i, s = Math.max(s, 0); + const e = Math.floor(s / (mt + 1)), + r = Math.floor(s % (mt + 1)); + At(t, 4, e), At(t, 8, r) + } + } + })) + })) + })) + }(f, c, l.baseTime / l.timescale), g > 0 ? this.lastEndTime = E : (b.warn("Duration parsed from mp4 should be greater than zero"), this.resetNextTimestamp()); + const T = !!f.audio, + S = !!f.video; + let L = ""; + T && (L += "audio"), S && (L += "video"); + const A = { + data1: c, + startPTS: v, + startDTS: v, + endPTS: E, + endDTS: E, + type: L, + hasAudio: T, + hasVideo: S, + nb: 1, + dropped: 0 + }; + return d.audio = "audio" === A.type ? A : void 0, d.video = "audio" !== A.type ? A : void 0, d.initSegment = u, d.id3 = zi(s, r, l, l), i.samples.length && (d.text = Qi(i, r, l)), d + } + } + }, { + demux: Mi, + remux: qi + }, { + demux: class extends ai { + constructor(t, e) { + super(), this.observer = void 0, this.config = void 0, this.observer = t, this.config = e + } + resetInitSegment(t, e, s, i) { + super.resetInitSegment(t, e, s, i), this._audioTrack = { + container: "audio/adts", + type: "audio", + id: 2, + pid: -1, + sequenceNumber: 0, + segmentCodec: "aac", + samples: [], + manifestCodec: e, + duration: i, + inputTimeScale: 9e4, + dropped: 0 + } + } + static probe(t) { + if (!t) return !1; + const e = Z(t, 0); + let s = (null == e ? void 0 : e.length) || 0; + if (bi(t, s)) return !1; + for (let e = t.length; s < e; s++) + if (ui(t, s)) return b.log("ADTS sync word found !"), !0; + return !1 + } + canParse(t, e) { + return function(t, e) { + return function(t, e) { + return e + 5 < t.length + }(t, e) && li(t, e) && di(t, e) <= t.length - e + }(t, e) + } + appendFrame(t, e, s) { + fi(t, this.observer, e, s, t.manifestCodec); + const i = mi(t, e, s, this.basePTS, this.frameIndex); + if (i && 0 === i.missing) return i + } + }, + remux: qi + }, { + demux: class extends ai { + resetInitSegment(t, e, s, i) { + super.resetInitSegment(t, e, s, i), this._audioTrack = { + container: "audio/mpeg", + type: "audio", + id: 2, + pid: -1, + sequenceNumber: 0, + segmentCodec: "mp3", + samples: [], + manifestCodec: e, + duration: i, + inputTimeScale: 9e4, + dropped: 0 + } + } + static probe(t) { + if (!t) return !1; + const e = Z(t, 0); + let s = (null == e ? void 0 : e.length) || 0; + if (e && 11 === t[s] && 119 === t[s + 1] && void 0 !== st(e) && ki(t, s) <= 16) return !1; + for (let e = t.length; s < e; s++) + if (bi(t, s)) return b.log("MPEG Audio sync word found !"), !0; + return !1 + } + canParse(t, e) { + return function(t, e) { + return Ai(t, e) && 4 <= t.length - e + }(t, e) + } + appendFrame(t, e, s) { + if (null !== this.basePTS) return Si(t, e, s, this.basePTS, this.frameIndex) + } + }, + remux: qi + }]; + tr.splice(2, 0, { + demux: class extends ai { + constructor(t) { + super(), this.observer = void 0, this.observer = t + } + resetInitSegment(t, e, s, i) { + super.resetInitSegment(t, e, s, i), this._audioTrack = { + container: "audio/ac-3", + type: "audio", + id: 2, + pid: -1, + sequenceNumber: 0, + segmentCodec: "ac3", + samples: [], + manifestCodec: e, + duration: i, + inputTimeScale: 9e4, + dropped: 0 + } + } + canParse(t, e) { + return e + 64 < t.length + } + appendFrame(t, e, s) { + const i = Ii(t, e, s, this.basePTS, this.frameIndex); + if (-1 !== i) return { + sample: t.samples[t.samples.length - 1], + length: i, + missing: 0 + } + } + static probe(t) { + if (!t) return !1; + const e = Z(t, 0); + if (!e) return !1; + const s = e.length; + return 11 === t[s] && 119 === t[s + 1] && void 0 !== st(e) && ki(t, s) < 16 + } + }, + remux: qi + }); + class er { + constructor(t, e, s, i, r) { + this.async = !1, this.observer = void 0, this.typeSupported = void 0, this.config = void 0, this.vendor = void 0, this.id = void 0, this.demuxer = void 0, this.remuxer = void 0, this.decrypter = void 0, this.probe = void 0, this.decryptionPromise = null, this.transmuxConfig = void 0, this.currentTransmuxState = void 0, this.observer = t, this.typeSupported = e, this.config = s, this.vendor = i, this.id = r + } + configure(t) { + this.transmuxConfig = t, this.decrypter && this.decrypter.reset() + } + push(t, e, s, i) { + const r = s.transmuxing; + r.executeStart = Yi(); + let n = new Uint8Array(t); + const { + currentTransmuxState: a, + transmuxConfig: o + } = this; + i && (this.currentTransmuxState = i); + const { + contiguous: l, + discontinuity: h, + trackSwitch: d, + accurateTimeOffset: c, + timeOffset: u, + initSegmentChange: f + } = i || a, { + audioCodec: g, + videoCodec: m, + defaultInitPts: p, + duration: y, + initSegmentData: v + } = o, L = function(t, e) { + let s = null; + return t.byteLength > 0 && null != (null == e ? void 0 : e.key) && null !== e.iv && null != e.method && (s = e), s + }(n, e); + if (L && "AES-128" === L.method) { + const t = this.getDecrypter(); + if (!t.isSync()) return this.decryptionPromise = t.webCryptoDecrypt(n, L.key.buffer, L.iv.buffer).then((t => { + const e = this.push(t, null, s); + return this.decryptionPromise = null, e + })), this.decryptionPromise; + { + let e = t.softwareDecrypt(n, L.key.buffer, L.iv.buffer); + if (s.part > -1 && (e = t.flush()), !e) return r.executeEnd = Yi(), sr(s); + n = new Uint8Array(e) + } + } + const A = this.needsProbing(h, d); + if (A) { + const t = this.configureTransmuxer(n); + if (t) return b.warn(`[transmuxer] ${t.message}`), this.observer.emit(E.ERROR, E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + fatal: !1, + error: t, + reason: t.message + }), r.executeEnd = Yi(), sr(s) + }(h || d || f || A) && this.resetInitSegment(v, g, m, y, e), (h || f || A) && this.resetInitialTimestamp(p), l || this.resetContiguity(); + const R = this.transmux(n, L, u, c, s), + D = this.currentTransmuxState; + return D.contiguous = !0, D.discontinuity = !1, D.trackSwitch = !1, r.executeEnd = Yi(), R + } + flush(t) { + const e = t.transmuxing; + e.executeStart = Yi(); + const { + decrypter: s, + currentTransmuxState: i, + decryptionPromise: r + } = this; + if (r) return r.then((() => this.flush(t))); + const n = [], + { + timeOffset: a + } = i; + if (s) { + const e = s.flush(); + e && n.push(this.push(e, null, t)) + } + const { + demuxer: o, + remuxer: l + } = this; + if (!o || !l) return e.executeEnd = Yi(), [sr(t)]; + const h = o.flush(a); + return ir(h) ? h.then((e => (this.flushRemux(n, e, t), n))) : (this.flushRemux(n, h, t), n) + } + flushRemux(t, e, s) { + const { + audioTrack: i, + videoTrack: r, + id3Track: n, + textTrack: a + } = e, { + accurateTimeOffset: o, + timeOffset: l + } = this.currentTransmuxState; + b.log(`[transmuxer.ts]: Flushed fragment ${s.sn}${s.part>-1?" p: "+s.part:""} of level ${s.level}`); + const h = this.remuxer.remux(i, r, n, a, l, o, !0, this.id); + t.push({ + remuxResult: h, + chunkMeta: s + }), s.transmuxing.executeEnd = Yi() + } + resetInitialTimestamp(t) { + const { + demuxer: e, + remuxer: s + } = this; + e && s && (e.resetTimeStamp(t), s.resetTimeStamp(t)) + } + resetContiguity() { + const { + demuxer: t, + remuxer: e + } = this; + t && e && (t.resetContiguity(), e.resetNextTimestamp()) + } + resetInitSegment(t, e, s, i, r) { + const { + demuxer: n, + remuxer: a + } = this; + n && a && (n.resetInitSegment(t, e, s, i), a.resetInitSegment(t, e, s, r)) + } + destroy() { + this.demuxer && (this.demuxer.destroy(), this.demuxer = void 0), this.remuxer && (this.remuxer.destroy(), this.remuxer = void 0) + } + transmux(t, e, s, i, r) { + let n; + return n = e && "SAMPLE-AES" === e.method ? this.transmuxSampleAes(t, e, s, i, r) : this.transmuxUnencrypted(t, s, i, r), n + } + transmuxUnencrypted(t, e, s, i) { + const { + audioTrack: r, + videoTrack: n, + id3Track: a, + textTrack: o + } = this.demuxer.demux(t, e, !1, !this.config.progressive); + return { + remuxResult: this.remuxer.remux(r, n, a, o, e, s, !1, this.id), + chunkMeta: i + } + } + transmuxSampleAes(t, e, s, i, r) { + return this.demuxer.demuxSampleAes(t, e, s).then((t => ({ + remuxResult: this.remuxer.remux(t.audioTrack, t.videoTrack, t.id3Track, t.textTrack, s, i, !1, this.id), + chunkMeta: r + }))) + } + configureTransmuxer(t) { + const { + config: e, + observer: s, + typeSupported: i, + vendor: r + } = this; + let n; + for (let e = 0, s = tr.length; e < s; e++) { + var a; + if (null != (a = tr[e].demux) && a.probe(t)) { + n = tr[e]; + break + } + } + if (!n) return new Error("Failed to find demuxer by probing fragment data"); + const o = this.demuxer, + l = this.remuxer, + h = n.remux, + d = n.demux; + l && l instanceof h || (this.remuxer = new h(s, e, i, r)), o && o instanceof d || (this.demuxer = new d(s, e, i), this.probe = d.probe) + } + needsProbing(t, e) { + return !this.demuxer || !this.remuxer || t || e + } + getDecrypter() { + let t = this.decrypter; + return t || (t = this.decrypter = new Vs(this.config)), t + } + } + const sr = t => ({ + remuxResult: {}, + chunkMeta: t + }); + + function ir(t) { + return "then" in t && t.then instanceof Function + } + class rr { + constructor(t, e, s, i, r) { + this.audioCodec = void 0, this.videoCodec = void 0, this.initSegmentData = void 0, this.duration = void 0, this.defaultInitPts = void 0, this.audioCodec = t, this.videoCodec = e, this.initSegmentData = s, this.duration = i, this.defaultInitPts = r || null + } + } + class nr { + constructor(t, e, s, i, r, n) { + this.discontinuity = void 0, this.contiguous = void 0, this.accurateTimeOffset = void 0, this.trackSwitch = void 0, this.timeOffset = void 0, this.initSegmentChange = void 0, this.discontinuity = t, this.contiguous = e, this.accurateTimeOffset = s, this.trackSwitch = i, this.timeOffset = r, this.initSegmentChange = n + } + } + var ar = { + exports: {} + }; + ! function(t) { + var e = Object.prototype.hasOwnProperty, + s = "~"; + + function i() {} + + function r(t, e, s) { + this.fn = t, this.context = e, this.once = s || !1 + } + + function n(t, e, i, n, a) { + if ("function" != typeof i) throw new TypeError("The listener must be a function"); + var o = new r(i, n || t, a), + l = s ? s + e : e; + return t._events[l] ? t._events[l].fn ? t._events[l] = [t._events[l], o] : t._events[l].push(o) : (t._events[l] = o, t._eventsCount++), t + } + + function a(t, e) { + 0 == --t._eventsCount ? t._events = new i : delete t._events[e] + } + + function o() { + this._events = new i, this._eventsCount = 0 + } + Object.create && (i.prototype = Object.create(null), (new i).__proto__ || (s = !1)), o.prototype.eventNames = function() { + var t, i, r = []; + if (0 === this._eventsCount) return r; + for (i in t = this._events) e.call(t, i) && r.push(s ? i.slice(1) : i); + return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(t)) : r + }, o.prototype.listeners = function(t) { + var e = s ? s + t : t, + i = this._events[e]; + if (!i) return []; + if (i.fn) return [i.fn]; + for (var r = 0, n = i.length, a = new Array(n); r < n; r++) a[r] = i[r].fn; + return a + }, o.prototype.listenerCount = function(t) { + var e = s ? s + t : t, + i = this._events[e]; + return i ? i.fn ? 1 : i.length : 0 + }, o.prototype.emit = function(t, e, i, r, n, a) { + var o = s ? s + t : t; + if (!this._events[o]) return !1; + var l, h, d = this._events[o], + c = arguments.length; + if (d.fn) { + switch (d.once && this.removeListener(t, d.fn, void 0, !0), c) { + case 1: + return d.fn.call(d.context), !0; + case 2: + return d.fn.call(d.context, e), !0; + case 3: + return d.fn.call(d.context, e, i), !0; + case 4: + return d.fn.call(d.context, e, i, r), !0; + case 5: + return d.fn.call(d.context, e, i, r, n), !0; + case 6: + return d.fn.call(d.context, e, i, r, n, a), !0 + } + for (h = 1, l = new Array(c - 1); h < c; h++) l[h - 1] = arguments[h]; + d.fn.apply(d.context, l) + } else { + var u, f = d.length; + for (h = 0; h < f; h++) switch (d[h].once && this.removeListener(t, d[h].fn, void 0, !0), c) { + case 1: + d[h].fn.call(d[h].context); + break; + case 2: + d[h].fn.call(d[h].context, e); + break; + case 3: + d[h].fn.call(d[h].context, e, i); + break; + case 4: + d[h].fn.call(d[h].context, e, i, r); + break; + default: + if (!l) + for (u = 1, l = new Array(c - 1); u < c; u++) l[u - 1] = arguments[u]; + d[h].fn.apply(d[h].context, l) + } + } + return !0 + }, o.prototype.on = function(t, e, s) { + return n(this, t, e, s, !1) + }, o.prototype.once = function(t, e, s) { + return n(this, t, e, s, !0) + }, o.prototype.removeListener = function(t, e, i, r) { + var n = s ? s + t : t; + if (!this._events[n]) return this; + if (!e) return a(this, n), this; + var o = this._events[n]; + if (o.fn) o.fn !== e || r && !o.once || i && o.context !== i || a(this, n); + else { + for (var l = 0, h = [], d = o.length; l < d; l++)(o[l].fn !== e || r && !o[l].once || i && o[l].context !== i) && h.push(o[l]); + h.length ? this._events[n] = 1 === h.length ? h[0] : h : a(this, n) + } + return this + }, o.prototype.removeAllListeners = function(t) { + var e; + return t ? (e = s ? s + t : t, this._events[e] && a(this, e)) : (this._events = new i, this._eventsCount = 0), this + }, o.prototype.off = o.prototype.removeListener, o.prototype.addListener = o.prototype.on, o.prefixed = s, o.EventEmitter = o, t.exports = o + }(ar); + var or = r(ar.exports); + class lr { + constructor(t, e, s, i) { + this.error = null, this.hls = void 0, this.id = void 0, this.observer = void 0, this.frag = null, this.part = null, this.useWorker = void 0, this.workerContext = null, this.onwmsg = void 0, this.transmuxer = null, this.onTransmuxComplete = void 0, this.onFlush = void 0; + const r = t.config; + this.hls = t, this.id = e, this.useWorker = !!r.enableWorker, this.onTransmuxComplete = s, this.onFlush = i; + const n = (t, e) => { + (e = e || {}).frag = this.frag, e.id = this.id, t === E.ERROR && (this.error = e.error), this.hls.trigger(t, e) + }; + this.observer = new or, this.observer.on(E.FRAG_DECRYPTED, n), this.observer.on(E.ERROR, n); + const a = Wt(r.preferManagedMediaSource) || { + isTypeSupported: () => !1 + }, + o = { + mpeg: a.isTypeSupported("audio/mpeg"), + mp3: a.isTypeSupported('audio/mp4; codecs="mp3"'), + ac3: a.isTypeSupported('audio/mp4; codecs="ac-3"') + }, + l = navigator.vendor; + if (!this.useWorker || "undefined" == typeof Worker || !r.workerPath && "function" != typeof __HLS_WORKER_BUNDLE__) this.transmuxer = new er(this.observer, o, r, l, e); + else try { + r.workerPath ? (b.log(`loading Web Worker ${r.workerPath} for "${e}"`), this.workerContext = function(t) { + const e = new self.URL(t, self.location.href).href; + return { + worker: new self.Worker(e), + scriptURL: e + } + }(r.workerPath)) : (b.log(`injecting Web Worker for "${e}"`), this.workerContext = function() { + const t = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], { + type: "text/javascript" + }), + e = self.URL.createObjectURL(t); + return { + worker: new self.Worker(e), + objectURL: e + } + }()), this.onwmsg = t => this.onWorkerMessage(t); + const { + worker: t + } = this.workerContext; + t.addEventListener("message", this.onwmsg), t.onerror = t => { + const s = new Error(`${t.message} (${t.filename}:${t.lineno})`); + r.enableWorker = !1, b.warn(`Error in "${e}" Web Worker, fallback to inline`), this.hls.trigger(E.ERROR, { + type: T.OTHER_ERROR, + details: S.INTERNAL_EXCEPTION, + fatal: !1, + event: "demuxerWorker", + error: s + }) + }, t.postMessage({ + cmd: "init", + typeSupported: o, + vendor: l, + id: e, + config: JSON.stringify(r) + }) + } catch (t) { + b.warn(`Error setting up "${e}" Web Worker, fallback to inline`, t), this.resetWorker(), this.error = null, this.transmuxer = new er(this.observer, o, r, l, e) + } + } + resetWorker() { + if (this.workerContext) { + const { + worker: t, + objectURL: e + } = this.workerContext; + e && self.URL.revokeObjectURL(e), t.removeEventListener("message", this.onwmsg), t.onerror = null, t.terminate(), this.workerContext = null + } + } + destroy() { + if (this.workerContext) this.resetWorker(), this.onwmsg = void 0; + else { + const t = this.transmuxer; + t && (t.destroy(), this.transmuxer = null) + } + const t = this.observer; + t && t.removeAllListeners(), this.frag = null, this.observer = null, this.hls = null + } + push(t, e, s, i, r, n, a, o, l, h) { + var d, c; + l.transmuxing.start = self.performance.now(); + const { + transmuxer: u + } = this, f = n ? n.start : r.start, g = r.decryptdata, m = this.frag, p = !(m && r.cc === m.cc), y = !(m && l.level === m.level), v = m ? l.sn - m.sn : -1, E = this.part ? l.part - this.part.index : -1, T = 0 === v && l.id > 1 && l.id === (null == m ? void 0 : m.stats.chunkCount), S = !y && (1 === v || 0 === v && (1 === E || T && E <= 0)), L = self.performance.now(); + (y || v || 0 === r.stats.parsing.start) && (r.stats.parsing.start = L), !n || !E && S || (n.stats.parsing.start = L); + const A = !(m && (null == (d = r.initSegment) ? void 0 : d.url) === (null == (c = m.initSegment) ? void 0 : c.url)), + R = new nr(p, S, o, y, f, A); + if (!S || p || A) { + b.log(`[transmuxer-interface, ${r.type}]: Starting new transmux session for sn: ${l.sn} p: ${l.part} level: ${l.level} id: ${l.id}\n discontinuity: ${p}\n trackSwitch: ${y}\n contiguous: ${S}\n accurateTimeOffset: ${o}\n timeOffset: ${f}\n initSegmentChange: ${A}`); + const t = new rr(s, i, e, a, h); + this.configureTransmuxer(t) + } + if (this.frag = r, this.part = n, this.workerContext) this.workerContext.worker.postMessage({ + cmd: "demux", + data: t, + decryptdata: g, + chunkMeta: l, + state: R + }, t instanceof ArrayBuffer ? [t] : []); + else if (u) { + const e = u.push(t, g, l, R); + ir(e) ? (u.async = !0, e.then((t => { + this.handleTransmuxComplete(t) + })).catch((t => { + this.transmuxerError(t, l, "transmuxer-interface push error") + }))) : (u.async = !1, this.handleTransmuxComplete(e)) + } + } + flush(t) { + t.transmuxing.start = self.performance.now(); + const { + transmuxer: e + } = this; + if (this.workerContext) this.workerContext.worker.postMessage({ + cmd: "flush", + chunkMeta: t + }); + else if (e) { + let s = e.flush(t); + ir(s) || e.async ? (ir(s) || (s = Promise.resolve(s)), s.then((e => { + this.handleFlushResult(e, t) + })).catch((e => { + this.transmuxerError(e, t, "transmuxer-interface flush error") + }))) : this.handleFlushResult(s, t) + } + } + transmuxerError(t, e, s) { + this.hls && (this.error = t, this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_PARSING_ERROR, + chunkMeta: e, + fatal: !1, + error: t, + err: t, + reason: s + })) + } + handleFlushResult(t, e) { + t.forEach((t => { + this.handleTransmuxComplete(t) + })), this.onFlush(e) + } + onWorkerMessage(t) { + const e = t.data, + s = this.hls; + switch (e.event) { + case "init": { + var i; + const t = null == (i = this.workerContext) ? void 0 : i.objectURL; + t && self.URL.revokeObjectURL(t); + break + } + case "transmuxComplete": + this.handleTransmuxComplete(e.data); + break; + case "flush": + this.onFlush(e.data); + break; + case "workerLog": + b[e.data.logType] && b[e.data.logType](e.data.message); + break; + default: + e.data = e.data || {}, e.data.frag = this.frag, e.data.id = this.id, s.trigger(e.event, e.data) + } + } + configureTransmuxer(t) { + const { + transmuxer: e + } = this; + this.workerContext ? this.workerContext.worker.postMessage({ + cmd: "configure", + config: t + }) : e && e.configure(t) + } + handleTransmuxComplete(t) { + t.chunkMeta.transmuxing.end = self.performance.now(), this.onTransmuxComplete(t) + } + } + + function hr(t, e) { + if (t.length !== e.length) return !1; + for (let s = 0; s < t.length; s++) + if (!dr(t[s].attrs, e[s].attrs)) return !1; + return !0 + } + + function dr(t, e, s) { + const i = t["STABLE-RENDITION-ID"]; + return i && !s ? i === e["STABLE-RENDITION-ID"] : !(s || ["LANGUAGE", "NAME", "CHARACTERISTICS", "AUTOSELECT", "DEFAULT", "FORCED", "ASSOC-LANGUAGE"]).some((s => t[s] !== e[s])) + } + + function cr(t, e) { + return e.label.toLowerCase() === t.name.toLowerCase() && (!e.language || e.language.toLowerCase() === (t.lang || "").toLowerCase()) + } + class ur extends ii { + constructor(t, e, s) { + super(t, e, s, "[audio-stream-controller]", Te.AUDIO), this.videoBuffer = null, this.videoTrackCC = -1, this.waitingVideoCC = -1, this.bufferedTrack = null, this.switchingTrack = null, this.trackId = -1, this.waitingData = null, this.mainDetails = null, this.flushing = !1, this.bufferFlushed = !1, this.cachedTrackLoadedData = null, this._registerListeners() + } + onHandlerDestroying() { + this._unregisterListeners(), super.onHandlerDestroying(), this.mainDetails = null, this.bufferedTrack = null, this.switchingTrack = null + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.LEVEL_LOADED, this.onLevelLoaded, this), t.on(E.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), t.on(E.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), t.on(E.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), t.on(E.ERROR, this.onError, this), t.on(E.BUFFER_RESET, this.onBufferReset, this), t.on(E.BUFFER_CREATED, this.onBufferCreated, this), t.on(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.on(E.BUFFER_FLUSHED, this.onBufferFlushed, this), t.on(E.INIT_PTS_FOUND, this.onInitPtsFound, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.LEVEL_LOADED, this.onLevelLoaded, this), t.off(E.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), t.off(E.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), t.off(E.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), t.off(E.ERROR, this.onError, this), t.off(E.BUFFER_RESET, this.onBufferReset, this), t.off(E.BUFFER_CREATED, this.onBufferCreated, this), t.off(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.off(E.BUFFER_FLUSHED, this.onBufferFlushed, this), t.off(E.INIT_PTS_FOUND, this.onInitPtsFound, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + onInitPtsFound(t, { + frag: e, + id: s, + initPTS: i, + timescale: r + }) { + if ("main" === s) { + const t = e.cc; + this.initPTS[e.cc] = { + baseTime: i, + timescale: r + }, this.log(`InitPTS for cc: ${t} found from main: ${i}`), this.videoTrackCC = t, this.state === ei && this.tick() + } + } + startLoad(t) { + if (!this.levels) return this.startPosition = t, void(this.state = Ys); + const e = this.lastCurrentTime; + this.stopLoad(), this.setInterval(100), e > 0 && -1 === t ? (this.log(`Override startPosition with lastCurrentTime @${e.toFixed(3)}`), t = e, this.state = Ws) : (this.loadedmetadata = !1, this.state = zs), this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t, this.tick() + } + doTick() { + switch (this.state) { + case Ws: + this.doTickIdle(); + break; + case zs: { + var t; + const { + levels: e, + trackId: s + } = this, i = null == e || null == (t = e[s]) ? void 0 : t.details; + if (i) { + if (this.waitForCdnTuneIn(i)) break; + this.state = ei + } + break + } + case Xs: { + var e; + const t = performance.now(), + s = this.retryDate; + if (!s || t >= s || null != (e = this.media) && e.seeking) { + const { + levels: t, + trackId: e + } = this; + this.log("RetryDate reached, switch back to IDLE state"), this.resetStartWhenNotLoaded((null == t ? void 0 : t[e]) || null), this.state = Ws + } + break + } + case ei: { + const t = this.waitingData; + if (t) { + const { + frag: e, + part: s, + cache: i, + complete: r + } = t; + if (void 0 !== this.initPTS[e.cc]) { + this.waitingData = null, this.waitingVideoCC = -1, this.state = qs; + const t = { + frag: e, + part: s, + payload: i.flush(), + networkDetails: null + }; + this._handleFragmentLoadProgress(t), r && super._handleFragmentLoadComplete(t) + } else if (this.videoTrackCC !== this.waitingVideoCC) this.log(`Waiting fragment cc (${e.cc}) cancelled because video is at cc ${this.videoTrackCC}`), this.clearWaitingFragment(); + else { + const t = this.getLoadPosition(), + s = ws.bufferInfo(this.mediaBuffer, t, this.config.maxBufferHole); + is(s.end, this.config.maxFragLookUpTolerance, e) < 0 && (this.log(`Waiting fragment cc (${e.cc}) @ ${e.start} cancelled because another fragment at ${s.end} is needed`), this.clearWaitingFragment()) + } + } else this.state = Ws + } + } + this.onTickEnd() + } + clearWaitingFragment() { + const t = this.waitingData; + t && (this.fragmentTracker.removeFragment(t.frag), this.waitingData = null, this.waitingVideoCC = -1, this.state = Ws) + } + resetLoadingState() { + this.clearWaitingFragment(), super.resetLoadingState() + } + onTickEnd() { + const { + media: t + } = this; + null != t && t.readyState && (this.lastCurrentTime = t.currentTime) + } + doTickIdle() { + const { + hls: t, + levels: e, + media: s, + trackId: i + } = this, r = t.config; + if (!s && (this.startFragRequested || !r.startFragPrefetch) || null == e || !e[i]) return; + const n = e[i], + a = n.details; + if (!a || a.live && this.levelLastLoaded !== n || this.waitForCdnTuneIn(a)) return void(this.state = zs); + const o = this.mediaBuffer ? this.mediaBuffer : this.media; + this.bufferFlushed && o && (this.bufferFlushed = !1, this.afterBufferFlushed(o, x, Te.AUDIO)); + const l = this.getFwdBufferInfo(o, Te.AUDIO); + if (null === l) return; + const { + bufferedTrack: h, + switchingTrack: d + } = this; + if (!d && this._streamEnded(l, a)) return t.trigger(E.BUFFER_EOS, { + type: "audio" + }), void(this.state = Zs); + const c = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, Te.MAIN), + u = l.len, + f = this.getMaxBufferLength(null == c ? void 0 : c.len), + g = a.fragments, + m = g[0].start; + let p = this.flushing ? this.getLoadPosition() : l.end; + if (d && s) { + const t = this.getLoadPosition(); + h && !dr(d.attrs, h.attrs) && (p = t), a.PTSKnown && t < m && (l.end > m || l.nextStart) && (this.log("Alt audio track ahead of main track, seek to start of alt audio track"), s.currentTime = m + .05) + } + if (u >= f && !d && p < g[g.length - 1].start) return; + let y = this.getNextFragment(p, a), + v = !1; + if (y && this.isLoopLoading(y, p) && (v = !!y.gap, y = this.getNextFragmentLoopLoading(y, a, l, Te.MAIN, f)), !y) return void(this.bufferFlushed = !0); + const T = c && y.start > c.end + a.targetduration; + if (T || (null == c || !c.len) && l.len) { + const t = this.getAppendedFrag(y.start, Te.MAIN); + if (null === t) return; + if (v || (v = !!t.gap || !!T && 0 === c.len), T && !v || v && l.nextStart && l.nextStart < t.end) return + } + this.loadFragment(y, n, p) + } + getMaxBufferLength(t) { + const e = super.getMaxBufferLength(); + return t ? Math.min(Math.max(e, t), this.config.maxMaxBufferLength) : e + } + onMediaDetaching() { + this.videoBuffer = null, this.bufferFlushed = this.flushing = !1, super.onMediaDetaching() + } + onAudioTracksUpdated(t, { + audioTracks: e + }) { + this.resetTransmuxer(), this.levels = e.map((t => new Ge(t))) + } + onAudioTrackSwitching(t, e) { + const s = !!e.url; + this.trackId = e.id; + const { + fragCurrent: i + } = this; + i && (i.abortRequests(), this.removeUnbufferedFrags(i.start)), this.resetLoadingState(), s ? this.setInterval(100) : this.resetTransmuxer(), s ? (this.switchingTrack = e, this.state = Ws, this.flushAudioIfNeeded(e)) : (this.switchingTrack = null, this.bufferedTrack = e, this.state = Ys), this.tick() + } + onManifestLoading() { + this.fragmentTracker.removeAllFragments(), this.startPosition = this.lastCurrentTime = 0, this.bufferFlushed = this.flushing = !1, this.levels = this.mainDetails = this.waitingData = this.bufferedTrack = this.cachedTrackLoadedData = this.switchingTrack = null, this.startFragRequested = !1, this.trackId = this.videoTrackCC = this.waitingVideoCC = -1 + } + onLevelLoaded(t, e) { + this.mainDetails = e.details, null !== this.cachedTrackLoadedData && (this.hls.trigger(E.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData), this.cachedTrackLoadedData = null) + } + onAudioTrackLoaded(t, e) { + var s; + if (null == this.mainDetails) return void(this.cachedTrackLoadedData = e); + const { + levels: i + } = this, { + details: r, + id: n + } = e; + if (!i) return void this.warn(`Audio tracks were reset while loading level ${n}`); + this.log(`Audio track ${n} loaded [${r.startSN},${r.endSN}]${r.lastPartSn?`[part-${r.lastPartSn}-${r.lastPartIndex}]`:""},duration:${r.totalduration}`); + const a = i[n]; + let o = 0; + if (r.live || null != (s = a.details) && s.live) { + this.checkLiveUpdate(r); + const t = this.mainDetails; + if (r.deltaUpdateFailed || !t) return; + var l; + !a.details && r.hasProgramDateTime && t.hasProgramDateTime ? (Fs(r, t), o = r.fragments[0].start) : o = this.alignPlaylists(r, a.details, null == (l = this.levelLastLoaded) ? void 0 : l.details) + } + a.details = r, this.levelLastLoaded = a, this.startFragRequested || !this.mainDetails && r.live || this.setStartPosition(this.mainDetails || r, o), this.state !== zs || this.waitForCdnTuneIn(r) || (this.state = Ws), this.tick() + } + _handleFragmentLoadProgress(t) { + var e; + const { + frag: s, + part: i, + payload: r + } = t, { + config: n, + trackId: a, + levels: o + } = this; + if (!o) return void this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${s.sn} of level ${s.level} will not be buffered`); + const l = o[a]; + if (!l) return void this.warn("Audio track is undefined on fragment load progress"); + const h = l.details; + if (!h) return this.warn("Audio track details undefined on fragment load progress"), void this.removeUnbufferedFrags(s.start); + const d = n.defaultAudioCodec || l.audioCodec || "mp4a.40.2"; + let c = this.transmuxer; + c || (c = this.transmuxer = new lr(this.hls, Te.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this))); + const u = this.initPTS[s.cc], + f = null == (e = s.initSegment) ? void 0 : e.data; + if (void 0 !== u) { + const t = !1, + e = i ? i.index : -1, + n = -1 !== e, + a = new _s(s.level, s.sn, s.stats.chunkCount, r.byteLength, e, n); + c.push(r, f, d, "", s, i, h.totalduration, t, a, u) + } else { + this.log(`Unknown video PTS for cc ${s.cc}, waiting for video PTS before demuxing audio frag ${s.sn} of [${h.startSN} ,${h.endSN}],track ${a}`); + const { + cache: t + } = this.waitingData = this.waitingData || { + frag: s, + part: i, + cache: new ri, + complete: !1 + }; + t.push(new Uint8Array(r)), this.waitingVideoCC = this.videoTrackCC, this.state = ei + } + } + _handleFragmentLoadComplete(t) { + this.waitingData ? this.waitingData.complete = !0 : super._handleFragmentLoadComplete(t) + } + onBufferReset() { + this.mediaBuffer = this.videoBuffer = null, this.loadedmetadata = !1 + } + onBufferCreated(t, e) { + const s = e.tracks.audio; + s && (this.mediaBuffer = s.buffer || null), e.tracks.video && (this.videoBuffer = e.tracks.video.buffer || null) + } + onFragBuffered(t, e) { + const { + frag: s, + part: i + } = e; + if (s.type === Te.AUDIO) + if (this.fragContextChanged(s)) this.warn(`Fragment ${s.sn}${i?" p: "+i.index:""} of level ${s.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack?this.switchingTrack.name:"false"}`); + else { + if ("initSegment" !== s.sn) { + this.fragPrevious = s; + const t = this.switchingTrack; + t && (this.bufferedTrack = t, this.switchingTrack = null, this.hls.trigger(E.AUDIO_TRACK_SWITCHED, f({}, t))) + } + this.fragBufferedComplete(s, i) + } + else if (!this.loadedmetadata && s.type === Te.MAIN) { + const t = this.videoBuffer || this.media; + t && ws.getBuffered(t).length && (this.loadedmetadata = !0) + } + } + onError(t, e) { + var s; + if (e.fatal) this.state = ti; + else switch (e.details) { + case S.FRAG_GAP: + case S.FRAG_PARSING_ERROR: + case S.FRAG_DECRYPT_ERROR: + case S.FRAG_LOAD_ERROR: + case S.FRAG_LOAD_TIMEOUT: + case S.KEY_LOAD_ERROR: + case S.KEY_LOAD_TIMEOUT: + this.onFragmentOrKeyLoadError(Te.AUDIO, e); + break; + case S.AUDIO_TRACK_LOAD_ERROR: + case S.AUDIO_TRACK_LOAD_TIMEOUT: + case S.LEVEL_PARSING_ERROR: + e.levelRetry || this.state !== zs || (null == (s = e.context) ? void 0 : s.type) !== ve || (this.state = Ws); + break; + case S.BUFFER_APPEND_ERROR: + case S.BUFFER_FULL_ERROR: + if (!e.parent || "audio" !== e.parent) return; + if (e.details === S.BUFFER_APPEND_ERROR) return void this.resetLoadingState(); + this.reduceLengthAndFlushBuffer(e) && (this.bufferedTrack = null, super.flushMainBuffer(0, Number.POSITIVE_INFINITY, "audio")); + break; + case S.INTERNAL_EXCEPTION: + this.recoverWorkerError(e) + } + } + onBufferFlushing(t, { + type: e + }) { + e !== P && (this.flushing = !0) + } + onBufferFlushed(t, { + type: e + }) { + if (e !== P) { + this.flushing = !1, this.bufferFlushed = !0, this.state === Zs && (this.state = Ws); + const t = this.mediaBuffer || this.media; + t && (this.afterBufferFlushed(t, e, Te.AUDIO), this.tick()) + } + } + _handleTransmuxComplete(t) { + var e; + const s = "audio", + { + hls: i + } = this, + { + remuxResult: r, + chunkMeta: n + } = t, + a = this.getCurrentContext(n); + if (!a) return void this.resetWhenMissingContext(n); + const { + frag: o, + part: l, + level: h + } = a, { + details: d + } = h, { + audio: c, + text: u, + id3: f, + initSegment: g + } = r; + if (!this.fragContextChanged(o) && d) { + if (this.state = Qs, this.switchingTrack && c && this.completeAudioSwitch(this.switchingTrack), null != g && g.tracks) { + const t = o.initSegment || o; + this._bufferInitSegment(h, g.tracks, t, n), i.trigger(E.FRAG_PARSING_INIT_SEGMENT, { + frag: t, + id: s, + tracks: g.tracks + }) + } + if (c) { + const { + startPTS: t, + endPTS: e, + startDTS: s, + endDTS: i + } = c; + l && (l.elementaryStreams.audio = { + startPTS: t, + endPTS: e, + startDTS: s, + endDTS: i + }), o.setElementaryStreamInfo(x, t, e, s, i), this.bufferFragmentData(c, o, l, n) + } + if (null != f && null != (e = f.samples) && e.length) { + const t = m({ + id: s, + frag: o, + details: d + }, f); + i.trigger(E.FRAG_PARSING_METADATA, t) + } + if (u) { + const t = m({ + id: s, + frag: o, + details: d + }, u); + i.trigger(E.FRAG_PARSING_USERDATA, t) + } + } else this.fragmentTracker.removeFragment(o) + } + _bufferInitSegment(t, e, s, i) { + if (this.state !== Qs) return; + e.video && delete e.video; + const r = e.audio; + if (!r) return; + r.id = "audio"; + const n = t.audioCodec; + this.log(`Init audio buffer, container:${r.container}, codecs[level/parsed]=[${n}/${r.codec}]`), n && 1 === n.split(",").length && (r.levelCodec = n), this.hls.trigger(E.BUFFER_CODECS, e); + const a = r.initSegment; + if (null != a && a.byteLength) { + const t = { + type: "audio", + frag: s, + part: null, + chunkMeta: i, + parent: s.type, + data: a + }; + this.hls.trigger(E.BUFFER_APPENDING, t) + } + this.tickImmediate() + } + loadFragment(t, e, s) { + const i = this.fragmentTracker.getState(t); + var r; + if (this.fragCurrent = t, this.switchingTrack || i === Ls || i === Rs) + if ("initSegment" === t.sn) this._loadInitSegment(t, e); + else if (null != (r = e.details) && r.live && !this.initPTS[t.cc]) { + this.log(`Waiting for video PTS in continuity counter ${t.cc} of live stream before loading audio fragment ${t.sn} of level ${this.trackId}`), this.state = ei; + const s = this.mainDetails; + s && s.fragments[0].start !== e.details.fragments[0].start && Fs(e.details, s) + } else this.startFragRequested = !0, super.loadFragment(t, e, s); + else this.clearTrackerIfNeeded(t) + } + flushAudioIfNeeded(t) { + const { + media: e, + bufferedTrack: s + } = this, i = null == s ? void 0 : s.attrs, r = t.attrs; + e && i && (i.CHANNELS !== r.CHANNELS || s.name !== t.name || s.lang !== t.lang) && (this.log("Switching audio track : flushing all audio"), super.flushMainBuffer(0, Number.POSITIVE_INFINITY, "audio"), this.bufferedTrack = null) + } + completeAudioSwitch(t) { + const { + hls: e + } = this; + this.flushAudioIfNeeded(t), this.bufferedTrack = t, this.switchingTrack = null, e.trigger(E.AUDIO_TRACK_SWITCHED, f({}, t)) + } + } + class fr extends ls { + constructor(t) { + super(t, "[audio-track-controller]"), this.tracks = [], this.groupIds = null, this.tracksInGroup = [], this.trackId = -1, this.currentTrack = null, this.selectDefaultTrack = !0, this.registerListeners() + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.LEVEL_LOADING, this.onLevelLoading, this), t.on(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.on(E.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), t.on(E.ERROR, this.onError, this) + } + unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.LEVEL_LOADING, this.onLevelLoading, this), t.off(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.off(E.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), t.off(E.ERROR, this.onError, this) + } + destroy() { + this.unregisterListeners(), this.tracks.length = 0, this.tracksInGroup.length = 0, this.currentTrack = null, super.destroy() + } + onManifestLoading() { + this.tracks = [], this.tracksInGroup = [], this.groupIds = null, this.currentTrack = null, this.trackId = -1, this.selectDefaultTrack = !0 + } + onManifestParsed(t, e) { + this.tracks = e.audioTracks || [] + } + onAudioTrackLoaded(t, e) { + const { + id: s, + groupId: i, + details: r + } = e, n = this.tracksInGroup[s]; + if (!n || n.groupId !== i) return void this.warn(`Audio track with id:${s} and group:${i} not found in active group ${null==n?void 0:n.groupId}`); + const a = n.details; + n.details = e.details, this.log(`Audio track ${s} "${n.name}" lang:${n.lang} group:${i} loaded [${r.startSN}-${r.endSN}]`), s === this.trackId && this.playlistLoaded(s, e, a) + } + onLevelLoading(t, e) { + this.switchLevel(e.level) + } + onLevelSwitching(t, e) { + this.switchLevel(e.level) + } + switchLevel(t) { + const e = this.hls.levels[t]; + if (!e) return; + const s = e.audioGroups || null, + i = this.groupIds; + let r = this.currentTrack; + if (!s || (null == i ? void 0 : i.length) !== (null == s ? void 0 : s.length) || null != s && s.some((t => -1 === (null == i ? void 0 : i.indexOf(t))))) { + this.groupIds = s, this.trackId = -1, this.currentTrack = null; + const t = this.tracks.filter((t => !s || -1 !== s.indexOf(t.groupId))); + if (t.length) this.selectDefaultTrack && !t.some((t => t.default)) && (this.selectDefaultTrack = !1), t.forEach(((t, e) => { + t.id = e + })); + else if (!r && !this.tracksInGroup.length) return; + this.tracksInGroup = t; + const e = this.hls.config.audioPreference; + if (!r && e) { + const s = ps(e, t, vs); + if (s > -1) r = t[s]; + else { + const t = ps(e, this.tracks); + r = this.tracks[t] + } + } + let i = this.findTrackId(r); - 1 === i && r && (i = this.findTrackId(null)); + const a = { + audioTracks: t + }; + this.log(`Updating audio tracks, ${t.length} track(s) found in group(s): ${null==s?void 0:s.join(",")}`), this.hls.trigger(E.AUDIO_TRACKS_UPDATED, a); + const o = this.trackId; + if (-1 !== i && -1 === o) this.setAudioTrack(i); + else if (t.length && -1 === o) { + var n; + const e = new Error(`No audio track selected for current audio group-ID(s): ${null==(n=this.groupIds)?void 0:n.join(",")} track count: ${t.length}`); + this.warn(e.message), this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.AUDIO_TRACK_LOAD_ERROR, + fatal: !0, + error: e + }) + } + } else this.shouldReloadPlaylist(r) && this.setAudioTrack(this.trackId) + } + onError(t, e) { + !e.fatal && e.context && (e.context.type !== ve || e.context.id !== this.trackId || this.groupIds && -1 === this.groupIds.indexOf(e.context.groupId) || (this.requestScheduled = -1, this.checkRetry(e))) + } + get allAudioTracks() { + return this.tracks + } + get audioTracks() { + return this.tracksInGroup + } + get audioTrack() { + return this.trackId + } + set audioTrack(t) { + this.selectDefaultTrack = !1, this.setAudioTrack(t) + } + setAudioOption(t) { + const e = this.hls; + if (e.config.audioPreference = t, t) { + const s = this.allAudioTracks; + if (this.selectDefaultTrack = !1, s.length) { + const i = this.currentTrack; + if (i && ys(t, i, vs)) return i; + const r = ps(t, this.tracksInGroup, vs); + if (r > -1) { + const t = this.tracksInGroup[r]; + return this.setAudioTrack(r), t + } + if (i) { + let i = e.loadLevel; - 1 === i && (i = e.firstAutoLevel); + const r = function(t, e, s, i, r) { + const n = e[i], + a = e.reduce(((t, e, s) => { + const i = e.uri; + return (t[i] || (t[i] = [])).push(s), t + }), {})[n.uri]; + a.length > 1 && (i = Math.max.apply(Math, a)); + const o = n.videoRange, + l = n.frameRate, + h = n.codecSet.substring(0, 4), + d = Es(e, i, (e => { + if (e.videoRange !== o || e.frameRate !== l || e.codecSet.substring(0, 4) !== h) return !1; + const i = e.audioGroups, + n = s.filter((t => !i || -1 !== i.indexOf(t.groupId))); + return ps(t, n, r) > -1 + })); + return d > -1 ? d : Es(e, i, (e => { + const i = e.audioGroups, + n = s.filter((t => !i || -1 !== i.indexOf(t.groupId))); + return ps(t, n, r) > -1 + })) + }(t, e.levels, s, i, vs); + if (-1 === r) return null; + e.nextLoadLevel = r + } + if (t.channels || t.audioCodec) { + const e = ps(t, s); + if (e > -1) return s[e] + } + } + } + return null + } + setAudioTrack(t) { + const e = this.tracksInGroup; + if (t < 0 || t >= e.length) return void this.warn(`Invalid audio track id: ${t}`); + this.clearTimer(), this.selectDefaultTrack = !1; + const s = this.currentTrack, + i = e[t], + r = i.details && !i.details.live; + if (t === this.trackId && i === s && r) return; + if (this.log(`Switching to audio-track ${t} "${i.name}" lang:${i.lang} group:${i.groupId} channels:${i.channels}`), this.trackId = t, this.currentTrack = i, this.hls.trigger(E.AUDIO_TRACK_SWITCHING, f({}, i)), r) return; + const n = this.switchParams(i.url, null == s ? void 0 : s.details, i.details); + this.loadPlaylist(n) + } + findTrackId(t) { + const e = this.tracksInGroup; + for (let s = 0; s < e.length; s++) { + const i = e[s]; + if ((!this.selectDefaultTrack || i.default) && (!t || ys(t, i, vs))) return s + } + if (t) { + const { + name: s, + lang: i, + assocLang: r, + characteristics: n, + audioCodec: a, + channels: o + } = t; + for (let t = 0; t < e.length; t++) + if (ys({ + name: s, + lang: i, + assocLang: r, + characteristics: n, + audioCodec: a, + channels: o + }, e[t], vs)) return t; + for (let s = 0; s < e.length; s++) { + const i = e[s]; + if (dr(t.attrs, i.attrs, ["LANGUAGE", "ASSOC-LANGUAGE", "CHARACTERISTICS"])) return s + } + for (let s = 0; s < e.length; s++) { + const i = e[s]; + if (dr(t.attrs, i.attrs, ["LANGUAGE"])) return s + } + } + return -1 + } + loadPlaylist(t) { + const e = this.currentTrack; + if (this.shouldLoadPlaylist(e) && e) { + super.loadPlaylist(); + const s = e.id, + i = e.groupId; + let r = e.url; + if (t) try { + r = t.addDirectives(r) + } catch (t) { + this.warn(`Could not construct new URL with HLS Delivery Directives: ${t}`) + } + this.log(`loading audio-track playlist ${s} "${e.name}" lang:${e.lang} group:${i}`), this.clearTimer(), this.hls.trigger(E.AUDIO_TRACK_LOADING, { + url: r, + id: s, + groupId: i, + deliveryDirectives: t || null + }) + } + } + } + class gr extends ii { + constructor(t, e, s) { + super(t, e, s, "[subtitle-stream-controller]", Te.SUBTITLE), this.currentTrackId = -1, this.tracksBuffered = [], this.mainDetails = null, this._registerListeners() + } + onHandlerDestroying() { + this._unregisterListeners(), super.onHandlerDestroying(), this.mainDetails = null + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.LEVEL_LOADED, this.onLevelLoaded, this), t.on(E.ERROR, this.onError, this), t.on(E.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), t.on(E.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), t.on(E.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), t.on(E.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), t.on(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.LEVEL_LOADED, this.onLevelLoaded, this), t.off(E.ERROR, this.onError, this), t.off(E.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), t.off(E.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), t.off(E.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), t.off(E.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), t.off(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + startLoad(t) { + this.stopLoad(), this.state = Ws, this.setInterval(500), this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t, this.tick() + } + onManifestLoading() { + this.mainDetails = null, this.fragmentTracker.removeAllFragments() + } + onMediaDetaching() { + this.tracksBuffered = [], super.onMediaDetaching() + } + onLevelLoaded(t, e) { + this.mainDetails = e.details + } + onSubtitleFragProcessed(t, e) { + const { + frag: s, + success: i + } = e; + if (this.fragPrevious = s, this.state = Ws, !i) return; + const r = this.tracksBuffered[this.currentTrackId]; + if (!r) return; + let n; + const a = s.start; + for (let t = 0; t < r.length; t++) + if (a >= r[t].start && a <= r[t].end) { + n = r[t]; + break + } const o = s.start + s.duration; + n ? n.end = o : (n = { + start: a, + end: o + }, r.push(n)), this.fragmentTracker.fragBuffered(s), this.fragBufferedComplete(s, null) + } + onBufferFlushing(t, e) { + const { + startOffset: s, + endOffset: i + } = e; + if (0 === s && i !== Number.POSITIVE_INFINITY) { + const t = i - 1; + if (t <= 0) return; + e.endOffsetSubtitles = Math.max(0, t), this.tracksBuffered.forEach((e => { + for (let s = 0; s < e.length;) + if (e[s].end <= t) e.shift(); + else { + if (!(e[s].start < t)) break; + e[s].start = t, s++ + } + })), this.fragmentTracker.removeFragmentsInRange(s, t, Te.SUBTITLE) + } + } + onFragBuffered(t, e) { + var s; + this.loadedmetadata || e.frag.type !== Te.MAIN || null != (s = this.media) && s.buffered.length && (this.loadedmetadata = !0) + } + onError(t, e) { + const s = e.frag; + (null == s ? void 0 : s.type) === Te.SUBTITLE && (this.fragCurrent && this.fragCurrent.abortRequests(), this.state !== Ys && (this.state = Ws)) + } + onSubtitleTracksUpdated(t, { + subtitleTracks: e + }) { + this.levels && hr(this.levels, e) ? this.levels = e.map((t => new Ge(t))) : (this.tracksBuffered = [], this.levels = e.map((t => { + const e = new Ge(t); + return this.tracksBuffered[e.id] = [], e + })), this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, Te.SUBTITLE), this.fragPrevious = null, this.mediaBuffer = null) + } + onSubtitleTrackSwitch(t, e) { + var s; + if (this.currentTrackId = e.id, null == (s = this.levels) || !s.length || -1 === this.currentTrackId) return void this.clearInterval(); + const i = this.levels[this.currentTrackId]; + null != i && i.details ? this.mediaBuffer = this.mediaBufferTimeRanges : this.mediaBuffer = null, i && this.setInterval(500) + } + onSubtitleTrackLoaded(t, e) { + var s; + const { + currentTrackId: i, + levels: r + } = this, { + details: n, + id: a + } = e; + if (!r) return void this.warn(`Subtitle tracks were reset while loading level ${a}`); + const o = r[i]; + if (a >= r.length || a !== i || !o) return; + this.log(`Subtitle track ${a} loaded [${n.startSN},${n.endSN}]${n.lastPartSn?`[part-${n.lastPartSn}-${n.lastPartIndex}]`:""},duration:${n.totalduration}`), this.mediaBuffer = this.mediaBufferTimeRanges; + let l = 0; + if (n.live || null != (s = o.details) && s.live) { + const t = this.mainDetails; + if (n.deltaUpdateFailed || !t) return; + const e = t.fragments[0]; + var h; + o.details ? (l = this.alignPlaylists(n, o.details, null == (h = this.levelLastLoaded) ? void 0 : h.details), 0 === l && e && (l = e.start, We(n, l))) : n.hasProgramDateTime && t.hasProgramDateTime ? (Fs(n, t), l = n.fragments[0].start) : e && (l = e.start, We(n, l)) + } + o.details = n, this.levelLastLoaded = o, this.startFragRequested || !this.mainDetails && n.live || this.setStartPosition(this.mainDetails || n, l), this.tick(), n.live && !this.fragCurrent && this.media && this.state === Ws && (ss(null, n.fragments, this.media.currentTime, 0) || (this.warn("Subtitle playlist not aligned with playback"), o.details = void 0)) + } + _handleFragmentLoadComplete(t) { + const { + frag: e, + payload: s + } = t, i = e.decryptdata, r = this.hls; + if (!this.fragContextChanged(e) && s && s.byteLength > 0 && null != i && i.key && i.iv && "AES-128" === i.method) { + const t = performance.now(); + this.decrypter.decrypt(new Uint8Array(s), i.key.buffer, i.iv.buffer).catch((t => { + throw r.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.FRAG_DECRYPT_ERROR, + fatal: !1, + error: t, + reason: t.message, + frag: e + }), t + })).then((s => { + const i = performance.now(); + r.trigger(E.FRAG_DECRYPTED, { + frag: e, + payload: s, + stats: { + tstart: t, + tdecrypt: i + } + }) + })).catch((t => { + this.warn(`${t.name}: ${t.message}`), this.state = Ws + })) + } + } + doTick() { + if (this.media) { + if (this.state === Ws) { + const { + currentTrackId: t, + levels: e + } = this, s = null == e ? void 0 : e[t]; + if (!s || !e.length || !s.details) return; + const { + config: i + } = this, r = this.getLoadPosition(), n = ws.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], r, i.maxBufferHole), { + end: a, + len: o + } = n, l = this.getFwdBufferInfo(this.media, Te.MAIN), h = s.details; + if (o > this.getMaxBufferLength(null == l ? void 0 : l.len) + h.levelTargetDuration) return; + const d = h.fragments, + c = d.length, + u = h.edge; + let f = null; + const g = this.fragPrevious; + if (a < u) { + const t = i.maxFragLookUpTolerance, + e = a > u - t ? 0 : t; + f = ss(g, d, Math.max(d[0].start, a), e), !f && g && g.start < d[0].start && (f = d[0]) + } else f = d[c - 1]; + if (!f) return; + if (f = this.mapToInitFragWhenRequired(f), "initSegment" !== f.sn) { + const t = d[f.sn - h.startSN - 1]; + t && t.cc === f.cc && this.fragmentTracker.getState(t) === Ls && (f = t) + } + this.fragmentTracker.getState(f) === Ls && this.loadFragment(f, s, a) + } + } else this.state = Ws + } + getMaxBufferLength(t) { + const e = super.getMaxBufferLength(); + return t ? Math.max(e, t) : e + } + loadFragment(t, e, s) { + this.fragCurrent = t, "initSegment" === t.sn ? this._loadInitSegment(t, e) : (this.startFragRequested = !0, super.loadFragment(t, e, s)) + } + get mediaBufferTimeRanges() { + return new mr(this.tracksBuffered[this.currentTrackId] || []) + } + } + class mr { + constructor(t) { + this.buffered = void 0; + const e = (e, s, i) => { + if ((s >>>= 0) > i - 1) throw new DOMException(`Failed to execute '${e}' on 'TimeRanges': The index provided (${s}) is greater than the maximum bound (${i})`); + return t[s][e] + }; + this.buffered = { + get length() { + return t.length + }, + end: s => e("end", s, t.length), + start: s => e("start", s, t.length) + } + } + } + class pr extends ls { + constructor(t) { + super(t, "[subtitle-track-controller]"), this.media = null, this.tracks = [], this.groupIds = null, this.tracksInGroup = [], this.trackId = -1, this.currentTrack = null, this.selectDefaultTrack = !0, this.queuedDefaultTrack = -1, this.asyncPollTrackChange = () => this.pollTrackChange(0), this.useTextTrackPolling = !1, this.subtitlePollingInterval = -1, this._subtitleDisplay = !0, this.onTextTracksChanged = () => { + if (this.useTextTrackPolling || self.clearInterval(this.subtitlePollingInterval), !this.media || !this.hls.config.renderTextTracksNatively) return; + let t = null; + const e = Ie(this.media.textTracks); + for (let s = 0; s < e.length; s++) + if ("hidden" === e[s].mode) t = e[s]; + else if ("showing" === e[s].mode) { + t = e[s]; + break + } + const s = this.findTrackForTextTrack(t); + this.subtitleTrack !== s && this.setSubtitleTrack(s) + }, this.registerListeners() + } + destroy() { + this.unregisterListeners(), this.tracks.length = 0, this.tracksInGroup.length = 0, this.currentTrack = null, this.onTextTracksChanged = this.asyncPollTrackChange = null, super.destroy() + } + get subtitleDisplay() { + return this._subtitleDisplay + } + set subtitleDisplay(t) { + this._subtitleDisplay = t, this.trackId > -1 && this.toggleTrackModes() + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.LEVEL_LOADING, this.onLevelLoading, this), t.on(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.on(E.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), t.on(E.ERROR, this.onError, this) + } + unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.LEVEL_LOADING, this.onLevelLoading, this), t.off(E.LEVEL_SWITCHING, this.onLevelSwitching, this), t.off(E.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), t.off(E.ERROR, this.onError, this) + } + onMediaAttached(t, e) { + this.media = e.media, this.media && (this.queuedDefaultTrack > -1 && (this.subtitleTrack = this.queuedDefaultTrack, this.queuedDefaultTrack = -1), this.useTextTrackPolling = !(this.media.textTracks && "onchange" in this.media.textTracks), this.useTextTrackPolling ? this.pollTrackChange(500) : this.media.textTracks.addEventListener("change", this.asyncPollTrackChange)) + } + pollTrackChange(t) { + self.clearInterval(this.subtitlePollingInterval), this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, t) + } + onMediaDetaching() { + this.media && (self.clearInterval(this.subtitlePollingInterval), this.useTextTrackPolling || this.media.textTracks.removeEventListener("change", this.asyncPollTrackChange), this.trackId > -1 && (this.queuedDefaultTrack = this.trackId), Ie(this.media.textTracks).forEach((t => { + De(t) + })), this.subtitleTrack = -1, this.media = null) + } + onManifestLoading() { + this.tracks = [], this.groupIds = null, this.tracksInGroup = [], this.trackId = -1, this.currentTrack = null, this.selectDefaultTrack = !0 + } + onManifestParsed(t, e) { + this.tracks = e.subtitleTracks + } + onSubtitleTrackLoaded(t, e) { + const { + id: s, + groupId: i, + details: r + } = e, n = this.tracksInGroup[s]; + if (!n || n.groupId !== i) return void this.warn(`Subtitle track with id:${s} and group:${i} not found in active group ${null==n?void 0:n.groupId}`); + const a = n.details; + n.details = e.details, this.log(`Subtitle track ${s} "${n.name}" lang:${n.lang} group:${i} loaded [${r.startSN}-${r.endSN}]`), s === this.trackId && this.playlistLoaded(s, e, a) + } + onLevelLoading(t, e) { + this.switchLevel(e.level) + } + onLevelSwitching(t, e) { + this.switchLevel(e.level) + } + switchLevel(t) { + const e = this.hls.levels[t]; + if (!e) return; + const s = e.subtitleGroups || null, + i = this.groupIds; + let r = this.currentTrack; + if (!s || (null == i ? void 0 : i.length) !== (null == s ? void 0 : s.length) || null != s && s.some((t => -1 === (null == i ? void 0 : i.indexOf(t))))) { + this.groupIds = s, this.trackId = -1, this.currentTrack = null; + const t = this.tracks.filter((t => !s || -1 !== s.indexOf(t.groupId))); + if (t.length) this.selectDefaultTrack && !t.some((t => t.default)) && (this.selectDefaultTrack = !1), t.forEach(((t, e) => { + t.id = e + })); + else if (!r && !this.tracksInGroup.length) return; + this.tracksInGroup = t; + const e = this.hls.config.subtitlePreference; + if (!r && e) { + this.selectDefaultTrack = !1; + const s = ps(e, t); + if (s > -1) r = t[s]; + else { + const t = ps(e, this.tracks); + r = this.tracks[t] + } + } + let i = this.findTrackId(r); - 1 === i && r && (i = this.findTrackId(null)); + const n = { + subtitleTracks: t + }; + this.log(`Updating subtitle tracks, ${t.length} track(s) found in "${null==s?void 0:s.join(",")}" group-id`), this.hls.trigger(E.SUBTITLE_TRACKS_UPDATED, n), -1 !== i && -1 === this.trackId && this.setSubtitleTrack(i) + } else this.shouldReloadPlaylist(r) && this.setSubtitleTrack(this.trackId) + } + findTrackId(t) { + const e = this.tracksInGroup, + s = this.selectDefaultTrack; + for (let i = 0; i < e.length; i++) { + const r = e[i]; + if ((!s || r.default) && (s || t) && (!t || ys(r, t))) return i + } + if (t) { + for (let s = 0; s < e.length; s++) { + const i = e[s]; + if (dr(t.attrs, i.attrs, ["LANGUAGE", "ASSOC-LANGUAGE", "CHARACTERISTICS"])) return s + } + for (let s = 0; s < e.length; s++) { + const i = e[s]; + if (dr(t.attrs, i.attrs, ["LANGUAGE"])) return s + } + } + return -1 + } + findTrackForTextTrack(t) { + if (t) { + const e = this.tracksInGroup; + for (let s = 0; s < e.length; s++) + if (cr(e[s], t)) return s + } + return -1 + } + onError(t, e) { + !e.fatal && e.context && (e.context.type !== Ee || e.context.id !== this.trackId || this.groupIds && -1 === this.groupIds.indexOf(e.context.groupId) || this.checkRetry(e)) + } + get allSubtitleTracks() { + return this.tracks + } + get subtitleTracks() { + return this.tracksInGroup + } + get subtitleTrack() { + return this.trackId + } + set subtitleTrack(t) { + this.selectDefaultTrack = !1, this.setSubtitleTrack(t) + } + setSubtitleOption(t) { + if (this.hls.config.subtitlePreference = t, t) { + const e = this.allSubtitleTracks; + if (this.selectDefaultTrack = !1, e.length) { + const s = this.currentTrack; + if (s && ys(t, s)) return s; + const i = ps(t, this.tracksInGroup); + if (i > -1) { + const t = this.tracksInGroup[i]; + return this.setSubtitleTrack(i), t + } + if (s) return null; + { + const s = ps(t, e); + if (s > -1) return e[s] + } + } + } + return null + } + loadPlaylist(t) { + super.loadPlaylist(); + const e = this.currentTrack; + if (this.shouldLoadPlaylist(e) && e) { + const s = e.id, + i = e.groupId; + let r = e.url; + if (t) try { + r = t.addDirectives(r) + } catch (t) { + this.warn(`Could not construct new URL with HLS Delivery Directives: ${t}`) + } + this.log(`Loading subtitle playlist for id ${s}`), this.hls.trigger(E.SUBTITLE_TRACK_LOADING, { + url: r, + id: s, + groupId: i, + deliveryDirectives: t || null + }) + } + } + toggleTrackModes() { + const { + media: t + } = this; + if (!t) return; + const e = Ie(t.textTracks), + s = this.currentTrack; + let i; + if (s && (i = e.filter((t => cr(s, t)))[0], i || this.warn(`Unable to find subtitle TextTrack with name "${s.name}" and language "${s.lang}"`)), [].slice.call(e).forEach((t => { + "disabled" !== t.mode && t !== i && (t.mode = "disabled") + })), i) { + const t = this.subtitleDisplay ? "showing" : "hidden"; + i.mode !== t && (i.mode = t) + } + } + setSubtitleTrack(t) { + const e = this.tracksInGroup; + if (!this.media) return void(this.queuedDefaultTrack = t); + if (t < -1 || t >= e.length || !p(t)) return void this.warn(`Invalid subtitle track id: ${t}`); + this.clearTimer(), this.selectDefaultTrack = !1; + const s = this.currentTrack, + i = e[t] || null; + if (this.trackId = t, this.currentTrack = i, this.toggleTrackModes(), !i) return void this.hls.trigger(E.SUBTITLE_TRACK_SWITCH, { + id: t + }); + const r = !!i.details && !i.details.live; + if (t === this.trackId && i === s && r) return; + this.log(`Switching to subtitle-track ${t}` + (i ? ` "${i.name}" lang:${i.lang} group:${i.groupId}` : "")); + const { + id: n, + groupId: a = "", + name: o, + type: l, + url: h + } = i; + this.hls.trigger(E.SUBTITLE_TRACK_SWITCH, { + id: n, + groupId: a, + name: o, + type: l, + url: h + }); + const d = this.switchParams(i.url, null == s ? void 0 : s.details, i.details); + this.loadPlaylist(d) + } + } + class yr { + constructor(t) { + this.buffers = void 0, this.queues = { + video: [], + audio: [], + audiovideo: [] + }, this.buffers = t + } + append(t, e, s) { + const i = this.queues[e]; + i.push(t), 1 !== i.length || s || this.executeNext(e) + } + insertAbort(t, e) { + this.queues[e].unshift(t), this.executeNext(e) + } + appendBlocker(t) { + let e; + const s = new Promise((t => { + e = t + })), + i = { + execute: e, + onStart: () => {}, + onComplete: () => {}, + onError: () => {} + }; + return this.append(i, t), s + } + executeNext(t) { + const e = this.queues[t]; + if (e.length) { + const s = e[0]; + try { + s.execute() + } catch (e) { + b.warn(`[buffer-operation-queue]: Exception executing "${t}" SourceBuffer operation: ${e}`), s.onError(e); + const i = this.buffers[t]; + null != i && i.updating || this.shiftAndExecuteNext(t) + } + } + } + shiftAndExecuteNext(t) { + this.queues[t].shift(), this.executeNext(t) + } + current(t) { + return this.queues[t][0] + } + } + const vr = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/; + class Er { + constructor(t) { + this.details = null, this._objectUrl = null, this.operationQueue = void 0, this.listeners = void 0, this.hls = void 0, this.bufferCodecEventsExpected = 0, this._bufferCodecEventsTotal = 0, this.media = null, this.mediaSource = null, this.lastMpegAudioChunk = null, this.appendSource = void 0, this.appendErrors = { + audio: 0, + video: 0, + audiovideo: 0 + }, this.tracks = {}, this.pendingTracks = {}, this.sourceBuffer = void 0, this.log = void 0, this.warn = void 0, this.error = void 0, this._onEndStreaming = t => { + this.hls && this.hls.pauseBuffering() + }, this._onStartStreaming = t => { + this.hls && this.hls.resumeBuffering() + }, this._onMediaSourceOpen = () => { + const { + media: t, + mediaSource: e + } = this; + this.log("Media source opened"), t && (t.removeEventListener("emptied", this._onMediaEmptied), this.updateMediaElementDuration(), this.hls.trigger(E.MEDIA_ATTACHED, { + media: t, + mediaSource: e + })), e && e.removeEventListener("sourceopen", this._onMediaSourceOpen), this.checkPendingTracks() + }, this._onMediaSourceClose = () => { + this.log("Media source closed") + }, this._onMediaSourceEnded = () => { + this.log("Media source ended") + }, this._onMediaEmptied = () => { + const { + mediaSrc: t, + _objectUrl: e + } = this; + t !== e && b.error(`Media element src was set while attaching MediaSource (${e} > ${t})`) + }, this.hls = t; + const e = "[buffer-controller]"; + var s; + this.appendSource = (s = Wt(t.config.preferManagedMediaSource), "undefined" != typeof self && s === self.ManagedMediaSource), this.log = b.log.bind(b, e), this.warn = b.warn.bind(b, e), this.error = b.error.bind(b, e), this._initSourceBuffer(), this.registerListeners() + } + hasSourceTypes() { + return this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0 + } + destroy() { + this.unregisterListeners(), this.details = null, this.lastMpegAudioChunk = null, this.hls = null + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.BUFFER_RESET, this.onBufferReset, this), t.on(E.BUFFER_APPENDING, this.onBufferAppending, this), t.on(E.BUFFER_CODECS, this.onBufferCodecs, this), t.on(E.BUFFER_EOS, this.onBufferEos, this), t.on(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.on(E.LEVEL_UPDATED, this.onLevelUpdated, this), t.on(E.FRAG_PARSED, this.onFragParsed, this), t.on(E.FRAG_CHANGED, this.onFragChanged, this) + } + unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.BUFFER_RESET, this.onBufferReset, this), t.off(E.BUFFER_APPENDING, this.onBufferAppending, this), t.off(E.BUFFER_CODECS, this.onBufferCodecs, this), t.off(E.BUFFER_EOS, this.onBufferEos, this), t.off(E.BUFFER_FLUSHING, this.onBufferFlushing, this), t.off(E.LEVEL_UPDATED, this.onLevelUpdated, this), t.off(E.FRAG_PARSED, this.onFragParsed, this), t.off(E.FRAG_CHANGED, this.onFragChanged, this) + } + _initSourceBuffer() { + this.sourceBuffer = {}, this.operationQueue = new yr(this.sourceBuffer), this.listeners = { + audio: [], + video: [], + audiovideo: [] + }, this.appendErrors = { + audio: 0, + video: 0, + audiovideo: 0 + }, this.lastMpegAudioChunk = null + } + onManifestLoading() { + this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0, this.details = null + } + onManifestParsed(t, e) { + let s = 2; + (e.audio && !e.video || !e.altAudio) && (s = 1), this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = s, this.log(`${this.bufferCodecEventsExpected} bufferCodec event(s) expected`) + } + onMediaAttaching(t, e) { + const s = this.media = e.media, + i = Wt(this.appendSource); + if (s && i) { + var r; + const t = this.mediaSource = new i; + this.log(`created media source: ${null==(r=t.constructor)?void 0:r.name}`), t.addEventListener("sourceopen", this._onMediaSourceOpen), t.addEventListener("sourceended", this._onMediaSourceEnded), t.addEventListener("sourceclose", this._onMediaSourceClose), this.appendSource && (t.addEventListener("startstreaming", this._onStartStreaming), t.addEventListener("endstreaming", this._onEndStreaming)); + const e = this._objectUrl = self.URL.createObjectURL(t); + if (this.appendSource) try { + s.removeAttribute("src"); + const i = self.ManagedMediaSource; + s.disableRemotePlayback = s.disableRemotePlayback || i && t instanceof i, Tr(s), + function(t, e) { + const s = self.document.createElement("source"); + s.type = "video/mp4", s.src = e, t.appendChild(s) + }(s, e), s.load() + } catch (t) { + s.src = e + } else s.src = e; + s.addEventListener("emptied", this._onMediaEmptied) + } + } + onMediaDetaching() { + const { + media: t, + mediaSource: e, + _objectUrl: s + } = this; + if (e) { + if (this.log("media source detaching"), "open" === e.readyState) try { + e.endOfStream() + } catch (t) { + this.warn(`onMediaDetaching: ${t.message} while calling endOfStream`) + } + this.onBufferReset(), e.removeEventListener("sourceopen", this._onMediaSourceOpen), e.removeEventListener("sourceended", this._onMediaSourceEnded), e.removeEventListener("sourceclose", this._onMediaSourceClose), this.appendSource && (e.removeEventListener("startstreaming", this._onStartStreaming), e.removeEventListener("endstreaming", this._onEndStreaming)), t && (t.removeEventListener("emptied", this._onMediaEmptied), s && self.URL.revokeObjectURL(s), this.mediaSrc === s ? (t.removeAttribute("src"), this.appendSource && Tr(t), t.load()) : this.warn("media|source.src was changed by a third party - skip cleanup")), this.mediaSource = null, this.media = null, this._objectUrl = null, this.bufferCodecEventsExpected = this._bufferCodecEventsTotal, this.pendingTracks = {}, this.tracks = {} + } + this.hls.trigger(E.MEDIA_DETACHED, void 0) + } + onBufferReset() { + this.getSourceBufferTypes().forEach((t => { + this.resetBuffer(t) + })), this._initSourceBuffer() + } + resetBuffer(t) { + const e = this.sourceBuffer[t]; + try { + var s; + e && (this.removeBufferListeners(t), this.sourceBuffer[t] = void 0, null != (s = this.mediaSource) && s.sourceBuffers.length && this.mediaSource.removeSourceBuffer(e)) + } catch (e) { + this.warn(`onBufferReset ${t}`, e) + } + } + onBufferCodecs(t, e) { + const s = this.getSourceBufferTypes().length, + i = Object.keys(e); + if (i.forEach((t => { + if (s) { + const s = this.tracks[t]; + if (s && "function" == typeof s.buffer.changeType) { + var i; + const { + id: r, + codec: n, + levelCodec: a, + container: o, + metadata: l + } = e[t], h = se(s.codec, s.levelCodec), d = null == h ? void 0 : h.replace(vr, "$1"); + let c = se(n, a); + const u = null == (i = c) ? void 0 : i.replace(vr, "$1"); + if (c && d !== u) { + "audio" === t.slice(0, 5) && (c = ee(c, this.appendSource)); + const e = `${o};codecs=${c}`; + this.appendChangeType(t, e), this.log(`switching codec ${h} to ${c}`), this.tracks[t] = { + buffer: s.buffer, + codec: n, + container: o, + levelCodec: a, + metadata: l, + id: r + } + } + } + } else this.pendingTracks[t] = e[t] + })), s) return; + const r = Math.max(this.bufferCodecEventsExpected - 1, 0); + this.bufferCodecEventsExpected !== r && (this.log(`${r} bufferCodec event(s) expected ${i.join(",")}`), this.bufferCodecEventsExpected = r), this.mediaSource && "open" === this.mediaSource.readyState && this.checkPendingTracks() + } + appendChangeType(t, e) { + const { + operationQueue: s + } = this, i = { + execute: () => { + const i = this.sourceBuffer[t]; + i && (this.log(`changing ${t} sourceBuffer type to ${e}`), i.changeType(e)), s.shiftAndExecuteNext(t) + }, + onStart: () => {}, + onComplete: () => {}, + onError: e => { + this.warn(`Failed to change ${t} SourceBuffer type`, e) + } + }; + s.append(i, t, !!this.pendingTracks[t]) + } + onBufferAppending(t, e) { + const { + hls: s, + operationQueue: i, + tracks: r + } = this, { + data: n, + type: a, + frag: o, + part: l, + chunkMeta: h + } = e, d = h.buffering[a], c = self.performance.now(); + d.start = c; + const u = o.stats.buffering, + f = l ? l.stats.buffering : null; + 0 === u.start && (u.start = c), f && 0 === f.start && (f.start = c); + const g = r.audio; + let m = !1; + "audio" === a && "audio/mpeg" === (null == g ? void 0 : g.container) && (m = !this.lastMpegAudioChunk || 1 === h.id || this.lastMpegAudioChunk.sn !== h.sn, this.lastMpegAudioChunk = h); + const p = o.start, + y = { + execute: () => { + if (d.executeStart = self.performance.now(), m) { + const t = this.sourceBuffer[a]; + if (t) { + const e = p - t.timestampOffset; + Math.abs(e) >= .1 && (this.log(`Updating audio SourceBuffer timestampOffset to ${p} (delta: ${e}) sn: ${o.sn})`), t.timestampOffset = p) + } + } + this.appendExecutor(n, a) + }, + onStart: () => {}, + onComplete: () => { + const t = self.performance.now(); + d.executeEnd = d.end = t, 0 === u.first && (u.first = t), f && 0 === f.first && (f.first = t); + const { + sourceBuffer: e + } = this, s = {}; + for (const t in e) s[t] = ws.getBuffered(e[t]); + this.appendErrors[a] = 0, "audio" === a || "video" === a ? this.appendErrors.audiovideo = 0 : (this.appendErrors.audio = 0, this.appendErrors.video = 0), this.hls.trigger(E.BUFFER_APPENDED, { + type: a, + frag: o, + part: l, + chunkMeta: h, + parent: o.type, + timeRanges: s + }) + }, + onError: t => { + const e = { + type: T.MEDIA_ERROR, + parent: o.type, + details: S.BUFFER_APPEND_ERROR, + sourceBufferName: a, + frag: o, + part: l, + chunkMeta: h, + error: t, + err: t, + fatal: !1 + }; + if (t.code === DOMException.QUOTA_EXCEEDED_ERR) e.details = S.BUFFER_FULL_ERROR; + else { + const t = ++this.appendErrors[a]; + e.details = S.BUFFER_APPEND_ERROR, this.warn(`Failed ${t}/${s.config.appendErrorMaxRetry} times to append segment in "${a}" sourceBuffer`), t >= s.config.appendErrorMaxRetry && (e.fatal = !0) + } + s.trigger(E.ERROR, e) + } + }; + i.append(y, a, !!this.pendingTracks[a]) + } + onBufferFlushing(t, e) { + const { + operationQueue: s + } = this, i = t => ({ + execute: this.removeExecutor.bind(this, t, e.startOffset, e.endOffset), + onStart: () => {}, + onComplete: () => { + this.hls.trigger(E.BUFFER_FLUSHED, { + type: t + }) + }, + onError: e => { + this.warn(`Failed to remove from ${t} SourceBuffer`, e) + } + }); + e.type ? s.append(i(e.type), e.type) : this.getSourceBufferTypes().forEach((t => { + s.append(i(t), t) + })) + } + onFragParsed(t, e) { + const { + frag: s, + part: i + } = e, r = [], n = i ? i.elementaryStreams : s.elementaryStreams; + n.audiovideo ? r.push("audiovideo") : (n.audio && r.push("audio"), n.video && r.push("video")), 0 === r.length && this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${s.type} level: ${s.level} sn: ${s.sn}`), this.blockBuffers((() => { + const t = self.performance.now(); + s.stats.buffering.end = t, i && (i.stats.buffering.end = t); + const e = i ? i.stats : s.stats; + this.hls.trigger(E.FRAG_BUFFERED, { + frag: s, + part: i, + stats: e, + id: s.type + }) + }), r) + } + onFragChanged(t, e) { + this.trimBuffers() + } + onBufferEos(t, e) { + this.getSourceBufferTypes().reduce(((t, s) => { + const i = this.sourceBuffer[s]; + return !i || e.type && e.type !== s || (i.ending = !0, i.ended || (i.ended = !0, this.log(`${s} sourceBuffer now EOS`))), t && !(i && !i.ended) + }), !0) && (this.log("Queueing mediaSource.endOfStream()"), this.blockBuffers((() => { + this.getSourceBufferTypes().forEach((t => { + const e = this.sourceBuffer[t]; + e && (e.ending = !1) + })); + const { + mediaSource: t + } = this; + t && "open" === t.readyState ? (this.log("Calling mediaSource.endOfStream()"), t.endOfStream()) : t && this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${t.readyState}`) + }))) + } + onLevelUpdated(t, { + details: e + }) { + e.fragments.length && (this.details = e, this.getSourceBufferTypes().length ? this.blockBuffers(this.updateMediaElementDuration.bind(this)) : this.updateMediaElementDuration()) + } + trimBuffers() { + const { + hls: t, + details: e, + media: s + } = this; + if (!s || null === e) return; + if (!this.getSourceBufferTypes().length) return; + const i = t.config, + r = s.currentTime, + n = e.levelTargetDuration, + a = e.live && null !== i.liveBackBufferLength ? i.liveBackBufferLength : i.backBufferLength; + if (p(a) && a > 0) { + const t = Math.max(a, n), + e = Math.floor(r / n) * n - t; + this.flushBackBuffer(r, n, e) + } + if (p(i.frontBufferFlushThreshold) && i.frontBufferFlushThreshold > 0) { + const t = Math.max(i.maxBufferLength, i.frontBufferFlushThreshold), + e = Math.max(t, n), + s = Math.floor(r / n) * n + e; + this.flushFrontBuffer(r, n, s) + } + } + flushBackBuffer(t, e, s) { + const { + details: i, + sourceBuffer: r + } = this; + this.getSourceBufferTypes().forEach((n => { + const a = r[n]; + if (a) { + const r = ws.getBuffered(a); + if (r.length > 0 && s > r.start(0)) { + if (this.hls.trigger(E.BACK_BUFFER_REACHED, { + bufferEnd: s + }), null != i && i.live) this.hls.trigger(E.LIVE_BACK_BUFFER_REACHED, { + bufferEnd: s + }); + else if (a.ended && r.end(r.length - 1) - t < 2 * e) return void this.log(`Cannot flush ${n} back buffer while SourceBuffer is in ended state`); + this.hls.trigger(E.BUFFER_FLUSHING, { + startOffset: 0, + endOffset: s, + type: n + }) + } + } + })) + } + flushFrontBuffer(t, e, s) { + const { + sourceBuffer: i + } = this; + this.getSourceBufferTypes().forEach((r => { + const n = i[r]; + if (n) { + const i = ws.getBuffered(n), + a = i.length; + if (a < 2) return; + const o = i.start(a - 1), + l = i.end(a - 1); + if (s > o || t >= o && t <= l) return; + if (n.ended && t - l < 2 * e) return void this.log(`Cannot flush ${r} front buffer while SourceBuffer is in ended state`); + this.hls.trigger(E.BUFFER_FLUSHING, { + startOffset: o, + endOffset: 1 / 0, + type: r + }) + } + })) + } + updateMediaElementDuration() { + if (!this.details || !this.media || !this.mediaSource || "open" !== this.mediaSource.readyState) return; + const { + details: t, + hls: e, + media: s, + mediaSource: i + } = this, r = t.fragments[0].start + t.totalduration, n = s.duration, a = p(i.duration) ? i.duration : 0; + t.live && e.config.liveDurationInfinity ? (i.duration = 1 / 0, this.updateSeekableRange(t)) : (r > a && r > n || !p(n)) && (this.log(`Updating Media Source duration to ${r.toFixed(3)}`), i.duration = r) + } + updateSeekableRange(t) { + const e = this.mediaSource, + s = t.fragments; + if (s.length && t.live && null != e && e.setLiveSeekableRange) { + const i = Math.max(0, s[0].start), + r = Math.max(i, i + t.totalduration); + this.log(`Media Source duration is set to ${e.duration}. Setting seekable range to ${i}-${r}.`), e.setLiveSeekableRange(i, r) + } + } + checkPendingTracks() { + const { + bufferCodecEventsExpected: t, + operationQueue: e, + pendingTracks: s + } = this, i = Object.keys(s).length; + if (i && (!t || 2 === i || "audiovideo" in s)) { + this.createSourceBuffers(s), this.pendingTracks = {}; + const t = this.getSourceBufferTypes(); + if (t.length) this.hls.trigger(E.BUFFER_CREATED, { + tracks: this.tracks + }), t.forEach((t => { + e.executeNext(t) + })); + else { + const t = new Error("could not create source buffer for media codec(s)"); + this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_INCOMPATIBLE_CODECS_ERROR, + fatal: !0, + error: t, + reason: t.message + }) + } + } + } + createSourceBuffers(t) { + const { + sourceBuffer: e, + mediaSource: s + } = this; + if (!s) throw Error("createSourceBuffers called when mediaSource was null"); + for (const r in t) + if (!e[r]) { + var i; + const n = t[r]; + if (!n) throw Error(`source buffer exists for track ${r}, however track does not`); + let a = -1 === (null == (i = n.levelCodec) ? void 0 : i.indexOf(",")) ? n.levelCodec : n.codec; + a && "audio" === r.slice(0, 5) && (a = ee(a, this.appendSource)); + const o = `${n.container};codecs=${a}`; + this.log(`creating sourceBuffer(${o})`); + try { + const t = e[r] = s.addSourceBuffer(o), + i = r; + this.addBufferListener(i, "updatestart", this._onSBUpdateStart), this.addBufferListener(i, "updateend", this._onSBUpdateEnd), this.addBufferListener(i, "error", this._onSBUpdateError), this.appendSource && this.addBufferListener(i, "bufferedchange", ((t, e) => { + const s = e.removedRanges; + null != s && s.length && this.hls.trigger(E.BUFFER_FLUSHED, { + type: r + }) + })), this.tracks[r] = { + buffer: t, + codec: a, + container: n.container, + levelCodec: n.levelCodec, + metadata: n.metadata, + id: n.id + } + } catch (t) { + this.error(`error while trying to add sourceBuffer: ${t.message}`), this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_ADD_CODEC_ERROR, + fatal: !1, + error: t, + sourceBufferName: r, + mimeType: o + }) + } + } + } + get mediaSrc() { + var t; + const e = (null == (t = this.media) ? void 0 : t.firstChild) || this.media; + return null == e ? void 0 : e.src + } + _onSBUpdateStart(t) { + const { + operationQueue: e + } = this; + e.current(t).onStart() + } + _onSBUpdateEnd(t) { + var e; + if ("closed" === (null == (e = this.mediaSource) ? void 0 : e.readyState)) return void this.resetBuffer(t); + const { + operationQueue: s + } = this; + s.current(t).onComplete(), s.shiftAndExecuteNext(t) + } + _onSBUpdateError(t, e) { + var s; + const i = new Error(`${t} SourceBuffer error. MediaSource readyState: ${null==(s=this.mediaSource)?void 0:s.readyState}`); + this.error(`${i}`, e), this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_APPENDING_ERROR, + sourceBufferName: t, + error: i, + fatal: !1 + }); + const r = this.operationQueue.current(t); + r && r.onError(i) + } + removeExecutor(t, e, s) { + const { + media: i, + mediaSource: r, + operationQueue: n, + sourceBuffer: a + } = this, o = a[t]; + if (!i || !r || !o) return this.warn(`Attempting to remove from the ${t} SourceBuffer, but it does not exist`), void n.shiftAndExecuteNext(t); + const l = p(i.duration) ? i.duration : 1 / 0, + h = p(r.duration) ? r.duration : 1 / 0, + d = Math.max(0, e), + c = Math.min(s, l, h); + c > d && (!o.ending || o.ended) ? (o.ended = !1, this.log(`Removing [${d},${c}] from the ${t} SourceBuffer`), o.remove(d, c)) : n.shiftAndExecuteNext(t) + } + appendExecutor(t, e) { + const s = this.sourceBuffer[e]; + if (s) s.ended = !1, s.appendBuffer(t); + else if (!this.pendingTracks[e]) throw new Error(`Attempting to append to the ${e} SourceBuffer, but it does not exist`) + } + blockBuffers(t, e = this.getSourceBufferTypes()) { + if (!e.length) return this.log("Blocking operation requested, but no SourceBuffers exist"), void Promise.resolve().then(t); + const { + operationQueue: s + } = this, i = e.map((t => s.appendBlocker(t))); + Promise.all(i).then((() => { + t(), e.forEach((t => { + const e = this.sourceBuffer[t]; + null != e && e.updating || s.shiftAndExecuteNext(t) + })) + })) + } + getSourceBufferTypes() { + return Object.keys(this.sourceBuffer) + } + addBufferListener(t, e, s) { + const i = this.sourceBuffer[t]; + if (!i) return; + const r = s.bind(this, t); + this.listeners[t].push({ + event: e, + listener: r + }), i.addEventListener(e, r) + } + removeBufferListeners(t) { + const e = this.sourceBuffer[t]; + e && this.listeners[t].forEach((t => { + e.removeEventListener(t.event, t.listener) + })) + } + } + + function Tr(t) { + const e = t.querySelectorAll("source"); + [].slice.call(e).forEach((e => { + t.removeChild(e) + })) + } + const Sr = { + 42: 225, + 92: 233, + 94: 237, + 95: 243, + 96: 250, + 123: 231, + 124: 247, + 125: 209, + 126: 241, + 127: 9608, + 128: 174, + 129: 176, + 130: 189, + 131: 191, + 132: 8482, + 133: 162, + 134: 163, + 135: 9834, + 136: 224, + 137: 32, + 138: 232, + 139: 226, + 140: 234, + 141: 238, + 142: 244, + 143: 251, + 144: 193, + 145: 201, + 146: 211, + 147: 218, + 148: 220, + 149: 252, + 150: 8216, + 151: 161, + 152: 42, + 153: 8217, + 154: 9473, + 155: 169, + 156: 8480, + 157: 8226, + 158: 8220, + 159: 8221, + 160: 192, + 161: 194, + 162: 199, + 163: 200, + 164: 202, + 165: 203, + 166: 235, + 167: 206, + 168: 207, + 169: 239, + 170: 212, + 171: 217, + 172: 249, + 173: 219, + 174: 171, + 175: 187, + 176: 195, + 177: 227, + 178: 205, + 179: 204, + 180: 236, + 181: 210, + 182: 242, + 183: 213, + 184: 245, + 185: 123, + 186: 125, + 187: 92, + 188: 94, + 189: 95, + 190: 124, + 191: 8764, + 192: 196, + 193: 228, + 194: 214, + 195: 246, + 196: 223, + 197: 165, + 198: 164, + 199: 9475, + 200: 197, + 201: 229, + 202: 216, + 203: 248, + 204: 9487, + 205: 9491, + 206: 9495, + 207: 9499 + }, + Lr = function(t) { + let e = t; + return Sr.hasOwnProperty(t) && (e = Sr[t]), String.fromCharCode(e) + }, + Ar = 15, + Rr = 100, + br = { + 17: 1, + 18: 3, + 21: 5, + 22: 7, + 23: 9, + 16: 11, + 19: 12, + 20: 14 + }, + Dr = { + 17: 2, + 18: 4, + 21: 6, + 22: 8, + 23: 10, + 19: 13, + 20: 15 + }, + kr = { + 25: 1, + 26: 3, + 29: 5, + 30: 7, + 31: 9, + 24: 11, + 27: 12, + 28: 14 + }, + Ir = { + 25: 2, + 26: 4, + 29: 6, + 30: 8, + 31: 10, + 27: 13, + 28: 15 + }, + Cr = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"]; + class wr { + constructor() { + this.time = null, this.verboseLevel = 0 + } + log(t, e) { + if (this.verboseLevel >= t) { + const s = "function" == typeof e ? e() : e; + b.log(`${this.time} [${t}] ${s}`) + } + } + } + const _r = function(t) { + const e = []; + for (let s = 0; s < t.length; s++) e.push(t[s].toString(16)); + return e + }; + class xr { + constructor() { + this.foreground = "white", this.underline = !1, this.italics = !1, this.background = "black", this.flash = !1 + } + reset() { + this.foreground = "white", this.underline = !1, this.italics = !1, this.background = "black", this.flash = !1 + } + setStyles(t) { + const e = ["foreground", "underline", "italics", "background", "flash"]; + for (let s = 0; s < e.length; s++) { + const i = e[s]; + t.hasOwnProperty(i) && (this[i] = t[i]) + } + } + isDefault() { + return "white" === this.foreground && !this.underline && !this.italics && "black" === this.background && !this.flash + } + equals(t) { + return this.foreground === t.foreground && this.underline === t.underline && this.italics === t.italics && this.background === t.background && this.flash === t.flash + } + copy(t) { + this.foreground = t.foreground, this.underline = t.underline, this.italics = t.italics, this.background = t.background, this.flash = t.flash + } + toString() { + return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash + } + } + class Pr { + constructor() { + this.uchar = " ", this.penState = new xr + } + reset() { + this.uchar = " ", this.penState.reset() + } + setChar(t, e) { + this.uchar = t, this.penState.copy(e) + } + setPenState(t) { + this.penState.copy(t) + } + equals(t) { + return this.uchar === t.uchar && this.penState.equals(t.penState) + } + copy(t) { + this.uchar = t.uchar, this.penState.copy(t.penState) + } + isEmpty() { + return " " === this.uchar && this.penState.isDefault() + } + } + class Mr { + constructor(t) { + this.chars = [], this.pos = 0, this.currPenState = new xr, this.cueStartTime = null, this.logger = void 0; + for (let t = 0; t < Rr; t++) this.chars.push(new Pr); + this.logger = t + } + equals(t) { + for (let e = 0; e < Rr; e++) + if (!this.chars[e].equals(t.chars[e])) return !1; + return !0 + } + copy(t) { + for (let e = 0; e < Rr; e++) this.chars[e].copy(t.chars[e]) + } + isEmpty() { + let t = !0; + for (let e = 0; e < Rr; e++) + if (!this.chars[e].isEmpty()) { + t = !1; + break + } return t + } + setCursor(t) { + this.pos !== t && (this.pos = t), this.pos < 0 ? (this.logger.log(3, "Negative cursor position " + this.pos), this.pos = 0) : this.pos > Rr && (this.logger.log(3, "Too large cursor position " + this.pos), this.pos = Rr) + } + moveCursor(t) { + const e = this.pos + t; + if (t > 1) + for (let t = this.pos + 1; t < e + 1; t++) this.chars[t].setPenState(this.currPenState); + this.setCursor(e) + } + backSpace() { + this.moveCursor(-1), this.chars[this.pos].setChar(" ", this.currPenState) + } + insertChar(t) { + t >= 144 && this.backSpace(); + const e = Lr(t); + this.pos >= Rr ? this.logger.log(0, (() => "Cannot insert " + t.toString(16) + " (" + e + ") at position " + this.pos + ". Skipping it!")) : (this.chars[this.pos].setChar(e, this.currPenState), this.moveCursor(1)) + } + clearFromPos(t) { + let e; + for (e = t; e < Rr; e++) this.chars[e].reset() + } + clear() { + this.clearFromPos(0), this.pos = 0, this.currPenState.reset() + } + clearToEndOfRow() { + this.clearFromPos(this.pos) + } + getTextString() { + const t = []; + let e = !0; + for (let s = 0; s < Rr; s++) { + const i = this.chars[s].uchar; + " " !== i && (e = !1), t.push(i) + } + return e ? "" : t.join("") + } + setPenStyles(t) { + this.currPenState.setStyles(t), this.chars[this.pos].setPenState(this.currPenState) + } + } + class Fr { + constructor(t) { + this.rows = [], this.currRow = 14, this.nrRollUpRows = null, this.lastOutputScreen = null, this.logger = void 0; + for (let e = 0; e < Ar; e++) this.rows.push(new Mr(t)); + this.logger = t + } + reset() { + for (let t = 0; t < Ar; t++) this.rows[t].clear(); + this.currRow = 14 + } + equals(t) { + let e = !0; + for (let s = 0; s < Ar; s++) + if (!this.rows[s].equals(t.rows[s])) { + e = !1; + break + } return e + } + copy(t) { + for (let e = 0; e < Ar; e++) this.rows[e].copy(t.rows[e]) + } + isEmpty() { + let t = !0; + for (let e = 0; e < Ar; e++) + if (!this.rows[e].isEmpty()) { + t = !1; + break + } return t + } + backSpace() { + this.rows[this.currRow].backSpace() + } + clearToEndOfRow() { + this.rows[this.currRow].clearToEndOfRow() + } + insertChar(t) { + this.rows[this.currRow].insertChar(t) + } + setPen(t) { + this.rows[this.currRow].setPenStyles(t) + } + moveCursor(t) { + this.rows[this.currRow].moveCursor(t) + } + setCursor(t) { + this.logger.log(2, "setCursor: " + t), this.rows[this.currRow].setCursor(t) + } + setPAC(t) { + this.logger.log(2, (() => "pacData = " + JSON.stringify(t))); + let e = t.row - 1; + if (this.nrRollUpRows && e < this.nrRollUpRows - 1 && (e = this.nrRollUpRows - 1), this.nrRollUpRows && this.currRow !== e) { + for (let t = 0; t < Ar; t++) this.rows[t].clear(); + const t = this.currRow + 1 - this.nrRollUpRows, + s = this.lastOutputScreen; + if (s) { + const i = s.rows[t].cueStartTime, + r = this.logger.time; + if (null !== i && null !== r && i < r) + for (let i = 0; i < this.nrRollUpRows; i++) this.rows[e - this.nrRollUpRows + i + 1].copy(s.rows[t + i]) + } + } + this.currRow = e; + const s = this.rows[this.currRow]; + if (null !== t.indent) { + const e = t.indent, + i = Math.max(e - 1, 0); + s.setCursor(t.indent), t.color = s.chars[i].penState.foreground + } + const i = { + foreground: t.color, + underline: t.underline, + italics: t.italics, + background: "black", + flash: !1 + }; + this.setPen(i) + } + setBkgData(t) { + this.logger.log(2, (() => "bkgData = " + JSON.stringify(t))), this.backSpace(), this.setPen(t), this.insertChar(32) + } + setRollUpRows(t) { + this.nrRollUpRows = t + } + rollUp() { + if (null === this.nrRollUpRows) return void this.logger.log(3, "roll_up but nrRollUpRows not set yet"); + this.logger.log(1, (() => this.getDisplayText())); + const t = this.currRow + 1 - this.nrRollUpRows, + e = this.rows.splice(t, 1)[0]; + e.clear(), this.rows.splice(this.currRow, 0, e), this.logger.log(2, "Rolling up") + } + getDisplayText(t) { + t = t || !1; + const e = []; + let s = "", + i = -1; + for (let s = 0; s < Ar; s++) { + const r = this.rows[s].getTextString(); + r && (i = s + 1, t ? e.push("Row " + i + ": '" + r + "'") : e.push(r.trim())) + } + return e.length > 0 && (s = t ? "[" + e.join(" | ") + "]" : e.join("\n")), s + } + getTextAndFormat() { + return this.rows + } + } + class Or { + constructor(t, e, s) { + this.chNr = void 0, this.outputFilter = void 0, this.mode = void 0, this.verbose = void 0, this.displayedMemory = void 0, this.nonDisplayedMemory = void 0, this.lastOutputScreen = void 0, this.currRollUpRow = void 0, this.writeScreen = void 0, this.cueStartTime = void 0, this.logger = void 0, this.chNr = t, this.outputFilter = e, this.mode = null, this.verbose = 0, this.displayedMemory = new Fr(s), this.nonDisplayedMemory = new Fr(s), this.lastOutputScreen = new Fr(s), this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null, this.logger = s + } + reset() { + this.mode = null, this.displayedMemory.reset(), this.nonDisplayedMemory.reset(), this.lastOutputScreen.reset(), this.outputFilter.reset(), this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null + } + getHandler() { + return this.outputFilter + } + setHandler(t) { + this.outputFilter = t + } + setPAC(t) { + this.writeScreen.setPAC(t) + } + setBkgData(t) { + this.writeScreen.setBkgData(t) + } + setMode(t) { + t !== this.mode && (this.mode = t, this.logger.log(2, (() => "MODE=" + t)), "MODE_POP-ON" === this.mode ? this.writeScreen = this.nonDisplayedMemory : (this.writeScreen = this.displayedMemory, this.writeScreen.reset()), "MODE_ROLL-UP" !== this.mode && (this.displayedMemory.nrRollUpRows = null, this.nonDisplayedMemory.nrRollUpRows = null), this.mode = t) + } + insertChars(t) { + for (let e = 0; e < t.length; e++) this.writeScreen.insertChar(t[e]); + const e = this.writeScreen === this.displayedMemory ? "DISP" : "NON_DISP"; + this.logger.log(2, (() => e + ": " + this.writeScreen.getDisplayText(!0))), "MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (this.logger.log(1, (() => "DISPLAYED: " + this.displayedMemory.getDisplayText(!0))), this.outputDataUpdate()) + } + ccRCL() { + this.logger.log(2, "RCL - Resume Caption Loading"), this.setMode("MODE_POP-ON") + } + ccBS() { + this.logger.log(2, "BS - BackSpace"), "MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(), this.writeScreen === this.displayedMemory && this.outputDataUpdate()) + } + ccAOF() {} + ccAON() {} + ccDER() { + this.logger.log(2, "DER- Delete to End of Row"), this.writeScreen.clearToEndOfRow(), this.outputDataUpdate() + } + ccRU(t) { + this.logger.log(2, "RU(" + t + ") - Roll Up"), this.writeScreen = this.displayedMemory, this.setMode("MODE_ROLL-UP"), this.writeScreen.setRollUpRows(t) + } + ccFON() { + this.logger.log(2, "FON - Flash On"), this.writeScreen.setPen({ + flash: !0 + }) + } + ccRDC() { + this.logger.log(2, "RDC - Resume Direct Captioning"), this.setMode("MODE_PAINT-ON") + } + ccTR() { + this.logger.log(2, "TR"), this.setMode("MODE_TEXT") + } + ccRTD() { + this.logger.log(2, "RTD"), this.setMode("MODE_TEXT") + } + ccEDM() { + this.logger.log(2, "EDM - Erase Displayed Memory"), this.displayedMemory.reset(), this.outputDataUpdate(!0) + } + ccCR() { + this.logger.log(2, "CR - Carriage Return"), this.writeScreen.rollUp(), this.outputDataUpdate(!0) + } + ccENM() { + this.logger.log(2, "ENM - Erase Non-displayed Memory"), this.nonDisplayedMemory.reset() + } + ccEOC() { + if (this.logger.log(2, "EOC - End Of Caption"), "MODE_POP-ON" === this.mode) { + const t = this.displayedMemory; + this.displayedMemory = this.nonDisplayedMemory, this.nonDisplayedMemory = t, this.writeScreen = this.nonDisplayedMemory, this.logger.log(1, (() => "DISP: " + this.displayedMemory.getDisplayText())) + } + this.outputDataUpdate(!0) + } + ccTO(t) { + this.logger.log(2, "TO(" + t + ") - Tab Offset"), this.writeScreen.moveCursor(t) + } + ccMIDROW(t) { + const e = { + flash: !1 + }; + if (e.underline = t % 2 == 1, e.italics = t >= 46, e.italics) e.foreground = "white"; + else { + const s = Math.floor(t / 2) - 16, + i = ["white", "green", "blue", "cyan", "red", "yellow", "magenta"]; + e.foreground = i[s] + } + this.logger.log(2, "MIDROW: " + JSON.stringify(e)), this.writeScreen.setPen(e) + } + outputDataUpdate(t = !1) { + const e = this.logger.time; + null !== e && this.outputFilter && (null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue(this.cueStartTime, e, this.lastOutputScreen), t && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue(), this.cueStartTime = this.displayedMemory.isEmpty() ? null : e) : this.cueStartTime = e, this.lastOutputScreen.copy(this.displayedMemory)) + } + cueSplitAtTime(t) { + this.outputFilter && (this.displayedMemory.isEmpty() || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory), this.cueStartTime = t)) + } + } + class Nr { + constructor(t, e, s) { + this.channels = void 0, this.currentChannel = 0, this.cmdHistory = { + a: null, + b: null + }, this.logger = void 0; + const i = this.logger = new wr; + this.channels = [null, new Or(t, e, i), new Or(t + 1, s, i)] + } + getHandler(t) { + return this.channels[t].getHandler() + } + setHandler(t, e) { + this.channels[t].setHandler(e) + } + addData(t, e) { + let s, i, r, n = !1; + this.logger.time = t; + for (let t = 0; t < e.length; t += 2) + if (i = 127 & e[t], r = 127 & e[t + 1], 0 !== i || 0 !== r) { + if (this.logger.log(3, "[" + _r([e[t], e[t + 1]]) + "] -> (" + _r([i, r]) + ")"), s = this.parseCmd(i, r), s || (s = this.parseMidrow(i, r)), s || (s = this.parsePAC(i, r)), s || (s = this.parseBackgroundAttributes(i, r)), !s && (n = this.parseChars(i, r), n)) { + const t = this.currentChannel; + t && t > 0 ? this.channels[t].insertChars(n) : this.logger.log(2, "No channel found yet. TEXT-MODE?") + } + s || n || this.logger.log(2, "Couldn't parse cleaned data " + _r([i, r]) + " orig: " + _r([e[t], e[t + 1]])) + } + } + parseCmd(t, e) { + const { + cmdHistory: s + } = this; + if (!((20 === t || 28 === t || 21 === t || 29 === t) && e >= 32 && e <= 47 || (23 === t || 31 === t) && e >= 33 && e <= 35)) return !1; + if (Br(t, e, s)) return Ur(null, null, s), this.logger.log(3, "Repeated command (" + _r([t, e]) + ") is dropped"), !0; + const i = 20 === t || 21 === t || 23 === t ? 1 : 2, + r = this.channels[i]; + return 20 === t || 21 === t || 28 === t || 29 === t ? 32 === e ? r.ccRCL() : 33 === e ? r.ccBS() : 34 === e ? r.ccAOF() : 35 === e ? r.ccAON() : 36 === e ? r.ccDER() : 37 === e ? r.ccRU(2) : 38 === e ? r.ccRU(3) : 39 === e ? r.ccRU(4) : 40 === e ? r.ccFON() : 41 === e ? r.ccRDC() : 42 === e ? r.ccTR() : 43 === e ? r.ccRTD() : 44 === e ? r.ccEDM() : 45 === e ? r.ccCR() : 46 === e ? r.ccENM() : 47 === e && r.ccEOC() : r.ccTO(e - 32), Ur(t, e, s), this.currentChannel = i, !0 + } + parseMidrow(t, e) { + let s = 0; + if ((17 === t || 25 === t) && e >= 32 && e <= 47) { + if (s = 17 === t ? 1 : 2, s !== this.currentChannel) return this.logger.log(0, "Mismatch channel in midrow parsing"), !1; + const i = this.channels[s]; + return !!i && (i.ccMIDROW(e), this.logger.log(3, "MIDROW (" + _r([t, e]) + ")"), !0) + } + return !1 + } + parsePAC(t, e) { + let s; + const i = this.cmdHistory; + if (!((t >= 17 && t <= 23 || t >= 25 && t <= 31) && e >= 64 && e <= 127 || (16 === t || 24 === t) && e >= 64 && e <= 95)) return !1; + if (Br(t, e, i)) return Ur(null, null, i), !0; + const r = t <= 23 ? 1 : 2; + s = e >= 64 && e <= 95 ? 1 === r ? br[t] : kr[t] : 1 === r ? Dr[t] : Ir[t]; + const n = this.channels[r]; + return !!n && (n.setPAC(this.interpretPAC(s, e)), Ur(t, e, i), this.currentChannel = r, !0) + } + interpretPAC(t, e) { + let s; + const i = { + color: null, + italics: !1, + indent: null, + underline: !1, + row: t + }; + return s = e > 95 ? e - 96 : e - 64, i.underline = 1 == (1 & s), s <= 13 ? i.color = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "white"][Math.floor(s / 2)] : s <= 15 ? (i.italics = !0, i.color = "white") : i.indent = 4 * Math.floor((s - 16) / 2), i + } + parseChars(t, e) { + let s, i = null, + r = null; + if (t >= 25 ? (s = 2, r = t - 8) : (s = 1, r = t), r >= 17 && r <= 19) { + let t; + t = 17 === r ? e + 80 : 18 === r ? e + 112 : e + 144, this.logger.log(2, "Special char '" + Lr(t) + "' in channel " + s), i = [t] + } else t >= 32 && t <= 127 && (i = 0 === e ? [t] : [t, e]); + if (i) { + const s = _r(i); + this.logger.log(3, "Char codes = " + s.join(",")), Ur(t, e, this.cmdHistory) + } + return i + } + parseBackgroundAttributes(t, e) { + if (!((16 === t || 24 === t) && e >= 32 && e <= 47 || (23 === t || 31 === t) && e >= 45 && e <= 47)) return !1; + let s; + const i = {}; + 16 === t || 24 === t ? (s = Math.floor((e - 32) / 2), i.background = Cr[s], e % 2 == 1 && (i.background = i.background + "_semi")) : 45 === e ? i.background = "transparent" : (i.foreground = "black", 47 === e && (i.underline = !0)); + const r = t <= 23 ? 1 : 2; + return this.channels[r].setBkgData(i), Ur(t, e, this.cmdHistory), !0 + } + reset() { + for (let t = 0; t < Object.keys(this.channels).length; t++) { + const e = this.channels[t]; + e && e.reset() + } + this.cmdHistory = { + a: null, + b: null + } + } + cueSplitAtTime(t) { + for (let e = 0; e < this.channels.length; e++) { + const s = this.channels[e]; + s && s.cueSplitAtTime(t) + } + } + } + + function Ur(t, e, s) { + s.a = t, s.b = e + } + + function Br(t, e, s) { + return s.a === t && s.b === e + } + class $r { + constructor(t, e) { + this.timelineController = void 0, this.cueRanges = [], this.trackName = void 0, this.startTime = null, this.endTime = null, this.screen = null, this.timelineController = t, this.trackName = e + } + dispatchCue() { + null !== this.startTime && (this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges), this.startTime = null) + } + newCue(t, e, s) { + (null === this.startTime || this.startTime > t) && (this.startTime = t), this.endTime = e, this.screen = s, this.timelineController.createCaptionsTrack(this.trackName) + } + reset() { + this.cueRanges = [], this.startTime = null + } + } + var Gr = function() { + if (null != G && G.VTTCue) return self.VTTCue; + const t = ["", "lr", "rl"], + e = ["start", "middle", "end", "left", "right"]; + + function s(t, e) { + if ("string" != typeof e) return !1; + if (!Array.isArray(t)) return !1; + const s = e.toLowerCase(); + return !!~t.indexOf(s) && s + } + + function i(t) { + return s(e, t) + } + + function r(t, ...e) { + let s = 1; + for (; s < arguments.length; s++) { + const e = arguments[s]; + for (const s in e) t[s] = e[s] + } + return t + } + + function n(e, n, a) { + const o = this, + l = { + enumerable: !0 + }; + o.hasBeenReset = !1; + let h = "", + d = !1, + c = e, + u = n, + f = a, + g = null, + m = "", + p = !0, + y = "auto", + v = "start", + E = 50, + T = "middle", + S = 50, + L = "middle"; + Object.defineProperty(o, "id", r({}, l, { + get: function() { + return h + }, + set: function(t) { + h = "" + t + } + })), Object.defineProperty(o, "pauseOnExit", r({}, l, { + get: function() { + return d + }, + set: function(t) { + d = !!t + } + })), Object.defineProperty(o, "startTime", r({}, l, { + get: function() { + return c + }, + set: function(t) { + if ("number" != typeof t) throw new TypeError("Start time must be set to a number."); + c = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "endTime", r({}, l, { + get: function() { + return u + }, + set: function(t) { + if ("number" != typeof t) throw new TypeError("End time must be set to a number."); + u = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "text", r({}, l, { + get: function() { + return f + }, + set: function(t) { + f = "" + t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "region", r({}, l, { + get: function() { + return g + }, + set: function(t) { + g = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "vertical", r({}, l, { + get: function() { + return m + }, + set: function(e) { + const i = function(e) { + return s(t, e) + }(e); + if (!1 === i) throw new SyntaxError("An invalid or illegal string was specified."); + m = i, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "snapToLines", r({}, l, { + get: function() { + return p + }, + set: function(t) { + p = !!t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "line", r({}, l, { + get: function() { + return y + }, + set: function(t) { + if ("number" != typeof t && "auto" !== t) throw new SyntaxError("An invalid number or illegal string was specified."); + y = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "lineAlign", r({}, l, { + get: function() { + return v + }, + set: function(t) { + const e = i(t); + if (!e) throw new SyntaxError("An invalid or illegal string was specified."); + v = e, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "position", r({}, l, { + get: function() { + return E + }, + set: function(t) { + if (t < 0 || t > 100) throw new Error("Position must be between 0 and 100."); + E = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "positionAlign", r({}, l, { + get: function() { + return T + }, + set: function(t) { + const e = i(t); + if (!e) throw new SyntaxError("An invalid or illegal string was specified."); + T = e, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "size", r({}, l, { + get: function() { + return S + }, + set: function(t) { + if (t < 0 || t > 100) throw new Error("Size must be between 0 and 100."); + S = t, this.hasBeenReset = !0 + } + })), Object.defineProperty(o, "align", r({}, l, { + get: function() { + return L + }, + set: function(t) { + const e = i(t); + if (!e) throw new SyntaxError("An invalid or illegal string was specified."); + L = e, this.hasBeenReset = !0 + } + })), o.displayState = void 0 + } + return n.prototype.getCueAsHTML = function() { + return self.WebVTT.convertCueToDOMTree(self, this.text) + }, n + }(); + class Kr { + decode(t, e) { + if (!t) return ""; + if ("string" != typeof t) throw new Error("Error - expected string data."); + return decodeURIComponent(encodeURIComponent(t)) + } + } + + function Hr(t) { + function e(t, e, s, i) { + return 3600 * (0 | t) + 60 * (0 | e) + (0 | s) + parseFloat(i || 0) + } + const s = t.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/); + return s ? parseFloat(s[2]) > 59 ? e(s[2], s[3], 0, s[4]) : e(s[1], s[2], s[3], s[4]) : null + } + class Vr { + constructor() { + this.values = Object.create(null) + } + set(t, e) { + this.get(t) || "" === e || (this.values[t] = e) + } + get(t, e, s) { + return s ? this.has(t) ? this.values[t] : e[s] : this.has(t) ? this.values[t] : e + } + has(t) { + return t in this.values + } + alt(t, e, s) { + for (let i = 0; i < s.length; ++i) + if (e === s[i]) { + this.set(t, e); + break + } + } + integer(t, e) { + /^-?\d+$/.test(e) && this.set(t, parseInt(e, 10)) + } + percent(t, e) { + if (/^([\d]{1,3})(\.[\d]*)?%$/.test(e)) { + const s = parseFloat(e); + if (s >= 0 && s <= 100) return this.set(t, s), !0 + } + return !1 + } + } + + function Yr(t, e, s, i) { + const r = i ? t.split(i) : [t]; + for (const t in r) { + if ("string" != typeof r[t]) continue; + const i = r[t].split(s); + 2 === i.length && e(i[0], i[1]) + } + } + const Wr = new Gr(0, 0, ""), + jr = "middle" === Wr.align ? "middle" : "center"; + + function qr(t, e, s) { + const i = t; + + function r() { + const e = Hr(t); + if (null === e) throw new Error("Malformed timestamp: " + i); + return t = t.replace(/^[^\sa-zA-Z-]+/, ""), e + } + + function n() { + t = t.replace(/^\s+/, "") + } + if (n(), e.startTime = r(), n(), "--\x3e" !== t.slice(0, 3)) throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): " + i); + t = t.slice(3), n(), e.endTime = r(), n(), + function(t, e) { + const i = new Vr; + Yr(t, (function(t, e) { + let r; + switch (t) { + case "region": + for (let r = s.length - 1; r >= 0; r--) + if (s[r].id === e) { + i.set(t, s[r].region); + break + } break; + case "vertical": + i.alt(t, e, ["rl", "lr"]); + break; + case "line": + r = e.split(","), i.integer(t, r[0]), i.percent(t, r[0]) && i.set("snapToLines", !1), i.alt(t, r[0], ["auto"]), 2 === r.length && i.alt("lineAlign", r[1], ["start", jr, "end"]); + break; + case "position": + r = e.split(","), i.percent(t, r[0]), 2 === r.length && i.alt("positionAlign", r[1], ["start", jr, "end", "line-left", "line-right", "auto"]); + break; + case "size": + i.percent(t, e); + break; + case "align": + i.alt(t, e, ["start", jr, "end", "left", "right"]) + } + }), /:/, /\s/), e.region = i.get("region", null), e.vertical = i.get("vertical", ""); + let r = i.get("line", "auto"); + "auto" === r && -1 === Wr.line && (r = -1), e.line = r, e.lineAlign = i.get("lineAlign", "start"), e.snapToLines = i.get("snapToLines", !0), e.size = i.get("size", 100), e.align = i.get("align", jr); + let n = i.get("position", "auto"); + "auto" === n && 50 === Wr.position && (n = "start" === e.align || "left" === e.align ? 0 : "end" === e.align || "right" === e.align ? 100 : 50), e.position = n + }(t, e) + } + + function Xr(t) { + return t.replace(//gi, "\n") + } + class zr { + constructor() { + this.state = "INITIAL", this.buffer = "", this.decoder = new Kr, this.regionList = [], this.cue = null, this.oncue = void 0, this.onparsingerror = void 0, this.onflush = void 0 + } + parse(t) { + const e = this; + + function s() { + let t = e.buffer, + s = 0; + for (t = Xr(t); s < t.length && "\r" !== t[s] && "\n" !== t[s];) ++s; + const i = t.slice(0, s); + return "\r" === t[s] && ++s, "\n" === t[s] && ++s, e.buffer = t.slice(s), i + } + t && (e.buffer += e.decoder.decode(t, { + stream: !0 + })); + try { + let t = ""; + if ("INITIAL" === e.state) { + if (!/\r\n|\n/.test(e.buffer)) return this; + t = s(); + const i = t.match(/^()?WEBVTT([ \t].*)?$/); + if (null == i || !i[0]) throw new Error("Malformed WebVTT signature."); + e.state = "HEADER" + } + let i = !1; + for (; e.buffer;) { + if (!/\r\n|\n/.test(e.buffer)) return this; + switch (i ? i = !1 : t = s(), e.state) { + case "HEADER": + /:/.test(t) ? Yr(t, (function(t, e) {}), /:/) : t || (e.state = "ID"); + continue; + case "NOTE": + t || (e.state = "ID"); + continue; + case "ID": + if (/^NOTE($|[ \t])/.test(t)) { + e.state = "NOTE"; + break + } + if (!t) continue; + if (e.cue = new Gr(0, 0, ""), e.state = "CUE", -1 === t.indexOf("--\x3e")) { + e.cue.id = t; + continue + } + case "CUE": + if (!e.cue) { + e.state = "BADCUE"; + continue + } + try { + qr(t, e.cue, e.regionList) + } catch (t) { + e.cue = null, e.state = "BADCUE"; + continue + } + e.state = "CUETEXT"; + continue; + case "CUETEXT": { + const s = -1 !== t.indexOf("--\x3e"); + if (!t || s && (i = !0)) { + e.oncue && e.cue && e.oncue(e.cue), e.cue = null, e.state = "ID"; + continue + } + if (null === e.cue) continue; + e.cue.text && (e.cue.text += "\n"), e.cue.text += t + } + continue; + case "BADCUE": + t || (e.state = "ID") + } + } + } catch (t) { + "CUETEXT" === e.state && e.cue && e.oncue && e.oncue(e.cue), e.cue = null, e.state = "INITIAL" === e.state ? "BADWEBVTT" : "BADCUE" + } + return this + } + flush() { + const t = this; + try { + if ((t.cue || "HEADER" === t.state) && (t.buffer += "\n\n", t.parse()), "INITIAL" === t.state || "BADWEBVTT" === t.state) throw new Error("Malformed WebVTT signature.") + } catch (e) { + t.onparsingerror && t.onparsingerror(e) + } + return t.onflush && t.onflush(), this + } + } + const Qr = /\r\n|\n\r|\n|\r/g, + Jr = function(t, e, s = 0) { + return t.slice(s, s + e.length) === e + }, + Zr = function(t) { + let e = 5381, + s = t.length; + for (; s;) e = 33 * e ^ t.charCodeAt(--s); + return (e >>> 0).toString() + }; + + function tn(t, e, s) { + return Zr(t.toString()) + Zr(e.toString()) + Zr(s) + } + const en = "stpp.ttml.im1t", + sn = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/, + rn = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/, + nn = { + left: "start", + center: "center", + right: "end", + start: "start", + end: "end" + }; + + function an(t, e, s, i) { + const r = Rt(new Uint8Array(t), ["mdat"]); + if (0 === r.length) return void i(new Error("Could not parse IMSC1 mdat")); + const n = r.map((t => ct(t))), + a = function(t, e, s = 1, i = !1) { + return Hi(t, e, 1 / s, i) + }(e.baseTime, 1, e.timescale); + try { + n.forEach((t => s(function(t, e) { + const s = (new DOMParser).parseFromString(t, "text/xml").getElementsByTagName("tt")[0]; + if (!s) throw new Error("Invalid ttml"); + const i = { + frameRate: 30, + subFrameRate: 1, + frameRateMultiplier: 0, + tickRate: 0 + }, + r = Object.keys(i).reduce(((t, e) => (t[e] = s.getAttribute(`ttp:${e}`) || i[e], t)), {}), + n = "preserve" !== s.getAttribute("xml:space"), + a = ln(on(s, "styling", "style")), + o = ln(on(s, "layout", "region")), + l = on(s, "body", "[begin]"); + return [].map.call(l, (t => { + const s = hn(t, n); + if (!s || !t.hasAttribute("begin")) return null; + const i = un(t.getAttribute("begin"), r), + l = un(t.getAttribute("dur"), r); + let h = un(t.getAttribute("end"), r); + if (null === i) throw cn(t); + if (null === h) { + if (null === l) throw cn(t); + h = i + l + } + const d = new Gr(i - e, h - e, s); + d.id = tn(d.startTime, d.endTime, d.text); + const c = function(t, e, s) { + const i = "http://www.w3.org/ns/ttml#styling"; + let r = null; + const n = null != t && t.hasAttribute("style") ? t.getAttribute("style") : null; + return n && s.hasOwnProperty(n) && (r = s[n]), ["displayAlign", "textAlign", "color", "backgroundColor", "fontSize", "fontFamily"].reduce(((s, n) => { + const a = dn(e, i, n) || dn(t, i, n) || dn(r, i, n); + return a && (s[n] = a), s + }), {}) + }(o[t.getAttribute("region")], a[t.getAttribute("style")], a), + { + textAlign: u + } = c; + if (u) { + const t = nn[u]; + t && (d.lineAlign = t), d.align = u + } + return m(d, c), d + })).filter((t => null !== t)) + }(t, a)))) + } catch (t) { + i(t) + } + } + + function on(t, e, s) { + const i = t.getElementsByTagName(e)[0]; + return i ? [].slice.call(i.querySelectorAll(s)) : [] + } + + function ln(t) { + return t.reduce(((t, e) => { + const s = e.getAttribute("xml:id"); + return s && (t[s] = e), t + }), {}) + } + + function hn(t, e) { + return [].slice.call(t.childNodes).reduce(((t, s, i) => { + var r; + return "br" === s.nodeName && i ? t + "\n" : null != (r = s.childNodes) && r.length ? hn(s, e) : e ? t + s.textContent.trim().replace(/\s+/g, " ") : t + s.textContent + }), "") + } + + function dn(t, e, s) { + return t && t.hasAttributeNS(e, s) ? t.getAttributeNS(e, s) : null + } + + function cn(t) { + return new Error(`Could not parse ttml timestamp ${t}`) + } + + function un(t, e) { + if (!t) return null; + let s = Hr(t); + return null === s && (sn.test(t) ? s = function(t, e) { + const s = sn.exec(t), + i = (0 | s[4]) + (0 | s[5]) / e.subFrameRate; + return 3600 * (0 | s[1]) + 60 * (0 | s[2]) + (0 | s[3]) + i / e.frameRate + }(t, e) : rn.test(t) && (s = function(t, e) { + const s = rn.exec(t), + i = Number(s[1]); + switch (s[2]) { + case "h": + return 3600 * i; + case "m": + return 60 * i; + case "ms": + return 1e3 * i; + case "f": + return i / e.frameRate; + case "t": + return i / e.tickRate + } + return i + }(t, e))), s + } + class fn { + constructor(t) { + this.hls = void 0, this.media = null, this.config = void 0, this.enabled = !0, this.Cues = void 0, this.textTracks = [], this.tracks = [], this.initPTS = [], this.unparsedVttFrags = [], this.captionsTracks = {}, this.nonNativeCaptionsTracks = {}, this.cea608Parser1 = void 0, this.cea608Parser2 = void 0, this.lastCc = -1, this.lastSn = -1, this.lastPartIndex = -1, this.prevCC = -1, this.vttCCs = { + ccOffset: 0, + presentationOffset: 0, + 0: { + start: 0, + prevCC: -1, + new: !0 + } + }, this.captionsProperties = void 0, this.hls = t, this.config = t.config, this.Cues = t.config.cueHandler, this.captionsProperties = { + textTrack1: { + label: this.config.captionsTextTrack1Label, + languageCode: this.config.captionsTextTrack1LanguageCode + }, + textTrack2: { + label: this.config.captionsTextTrack2Label, + languageCode: this.config.captionsTextTrack2LanguageCode + }, + textTrack3: { + label: this.config.captionsTextTrack3Label, + languageCode: this.config.captionsTextTrack3LanguageCode + }, + textTrack4: { + label: this.config.captionsTextTrack4Label, + languageCode: this.config.captionsTextTrack4LanguageCode + } + }, t.on(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.on(E.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), t.on(E.FRAG_LOADING, this.onFragLoading, this), t.on(E.FRAG_LOADED, this.onFragLoaded, this), t.on(E.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), t.on(E.FRAG_DECRYPTED, this.onFragDecrypted, this), t.on(E.INIT_PTS_FOUND, this.onInitPtsFound, this), t.on(E.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), t.on(E.BUFFER_FLUSHING, this.onBufferFlushing, this) + } + destroy() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.off(E.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), t.off(E.FRAG_LOADING, this.onFragLoading, this), t.off(E.FRAG_LOADED, this.onFragLoaded, this), t.off(E.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), t.off(E.FRAG_DECRYPTED, this.onFragDecrypted, this), t.off(E.INIT_PTS_FOUND, this.onInitPtsFound, this), t.off(E.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), t.off(E.BUFFER_FLUSHING, this.onBufferFlushing, this), this.hls = this.config = null, this.cea608Parser1 = this.cea608Parser2 = void 0 + } + initCea608Parsers() { + if (this.config.enableCEA708Captions && (!this.cea608Parser1 || !this.cea608Parser2)) { + const t = new $r(this, "textTrack1"), + e = new $r(this, "textTrack2"), + s = new $r(this, "textTrack3"), + i = new $r(this, "textTrack4"); + this.cea608Parser1 = new Nr(1, t, e), this.cea608Parser2 = new Nr(3, s, i) + } + } + addCues(t, e, s, i, r) { + let n = !1; + for (let t = r.length; t--;) { + const i = r[t], + d = (a = i[0], o = i[1], l = e, h = s, Math.min(o, h) - Math.max(a, l)); + if (d >= 0 && (i[0] = Math.min(i[0], e), i[1] = Math.max(i[1], s), n = !0, d / (s - e) > .5)) return + } + var a, o, l, h; + if (n || r.push([e, s]), this.config.renderTextTracksNatively) { + const r = this.captionsTracks[t]; + this.Cues.newCue(r, e, s, i) + } else { + const r = this.Cues.newCue(null, e, s, i); + this.hls.trigger(E.CUES_PARSED, { + type: "captions", + cues: r, + track: t + }) + } + } + onInitPtsFound(t, { + frag: e, + id: s, + initPTS: i, + timescale: r + }) { + const { + unparsedVttFrags: n + } = this; + "main" === s && (this.initPTS[e.cc] = { + baseTime: i, + timescale: r + }), n.length && (this.unparsedVttFrags = [], n.forEach((t => { + this.onFragLoaded(E.FRAG_LOADED, t) + }))) + } + getExistingTrack(t, e) { + const { + media: s + } = this; + if (s) + for (let i = 0; i < s.textTracks.length; i++) { + const r = s.textTracks[i]; + if (mn(r, { + name: t, + lang: e, + attrs: {} + })) return r + } + return null + } + createCaptionsTrack(t) { + this.config.renderTextTracksNatively ? this.createNativeTrack(t) : this.createNonNativeTrack(t) + } + createNativeTrack(t) { + if (this.captionsTracks[t]) return; + const { + captionsProperties: e, + captionsTracks: s, + media: i + } = this, { + label: r, + languageCode: n + } = e[t], a = this.getExistingTrack(r, n); + if (a) s[t] = a, De(s[t]), Re(s[t], i); + else { + const e = this.createTextTrack("captions", r, n); + e && (e[t] = !0, s[t] = e) + } + } + createNonNativeTrack(t) { + if (this.nonNativeCaptionsTracks[t]) return; + const e = this.captionsProperties[t]; + if (!e) return; + const s = { + _id: t, + label: e.label, + kind: "captions", + default: !!e.media && !!e.media.default, + closedCaptions: e.media + }; + this.nonNativeCaptionsTracks[t] = s, this.hls.trigger(E.NON_NATIVE_TEXT_TRACKS_FOUND, { + tracks: [s] + }) + } + createTextTrack(t, e, s) { + const i = this.media; + if (i) return i.addTextTrack(t, e, s) + } + onMediaAttaching(t, e) { + this.media = e.media, this._cleanTracks() + } + onMediaDetaching() { + const { + captionsTracks: t + } = this; + Object.keys(t).forEach((e => { + De(t[e]), delete t[e] + })), this.nonNativeCaptionsTracks = {} + } + onManifestLoading() { + this.lastCc = -1, this.lastSn = -1, this.lastPartIndex = -1, this.prevCC = -1, this.vttCCs = { + ccOffset: 0, + presentationOffset: 0, + 0: { + start: 0, + prevCC: -1, + new: !0 + } + }, this._cleanTracks(), this.tracks = [], this.captionsTracks = {}, this.nonNativeCaptionsTracks = {}, this.textTracks = [], this.unparsedVttFrags = [], this.initPTS = [], this.cea608Parser1 && this.cea608Parser2 && (this.cea608Parser1.reset(), this.cea608Parser2.reset()) + } + _cleanTracks() { + const { + media: t + } = this; + if (!t) return; + const e = t.textTracks; + if (e) + for (let t = 0; t < e.length; t++) De(e[t]) + } + onSubtitleTracksUpdated(t, e) { + const s = e.subtitleTracks || [], + i = s.some((t => t.textCodec === en)); + if (this.config.enableWebVTT || i && this.config.enableIMSC1) { + if (hr(this.tracks, s)) return void(this.tracks = s); + if (this.textTracks = [], this.tracks = s, this.config.renderTextTracksNatively) { + const t = this.media, + e = t ? Ie(t.textTracks) : null; + if (this.tracks.forEach(((t, s) => { + let i; + if (e) { + let s = null; + for (let i = 0; i < e.length; i++) + if (e[i] && mn(e[i], t)) { + s = e[i], e[i] = null; + break + } s && (i = s) + } + if (i) De(i); + else { + const e = gn(t); + i = this.createTextTrack(e, t.name, t.lang), i && (i.mode = "disabled") + } + i && this.textTracks.push(i) + })), null != e && e.length) { + const t = e.filter((t => null !== t)).map((t => t.label)); + t.length && b.warn(`Media element contains unused subtitle tracks: ${t.join(", ")}. Replace media element for each source to clear TextTracks and captions menu.`) + } + } else if (this.tracks.length) { + const t = this.tracks.map((t => ({ + label: t.name, + kind: t.type.toLowerCase(), + default: t.default, + subtitleTrack: t + }))); + this.hls.trigger(E.NON_NATIVE_TEXT_TRACKS_FOUND, { + tracks: t + }) + } + } + } + onManifestLoaded(t, e) { + this.config.enableCEA708Captions && e.captions && e.captions.forEach((t => { + const e = /(?:CC|SERVICE)([1-4])/.exec(t.instreamId); + if (!e) return; + const s = `textTrack${e[1]}`, + i = this.captionsProperties[s]; + i && (i.label = t.name, t.lang && (i.languageCode = t.lang), i.media = t) + })) + } + closedCaptionsForLevel(t) { + const e = this.hls.levels[t.level]; + return null == e ? void 0 : e.attrs["CLOSED-CAPTIONS"] + } + onFragLoading(t, e) { + this.initCea608Parsers(); + const { + cea608Parser1: s, + cea608Parser2: i, + lastCc: r, + lastSn: n, + lastPartIndex: a + } = this; + if (this.enabled && s && i && e.frag.type === Te.MAIN) { + var o, l; + const { + cc: t, + sn: h + } = e.frag, d = null != (o = null == e || null == (l = e.part) ? void 0 : l.index) ? o : -1; + h === n + 1 || h === n && d === a + 1 || t === r || (s.reset(), i.reset()), this.lastCc = t, this.lastSn = h, this.lastPartIndex = d + } + } + onFragLoaded(t, e) { + const { + frag: s, + payload: i + } = e; + if (s.type === Te.SUBTITLE) + if (i.byteLength) { + const t = s.decryptdata, + r = "stats" in e; + if (null == t || !t.encrypted || r) { + const t = this.tracks[s.level], + r = this.vttCCs; + r[s.cc] || (r[s.cc] = { + start: s.start, + prevCC: this.prevCC, + new: !0 + }, this.prevCC = s.cc), t && t.textCodec === en ? this._parseIMSC1(s, i) : this._parseVTTs(e) + } + } else this.hls.trigger(E.SUBTITLE_FRAG_PROCESSED, { + success: !1, + frag: s, + error: new Error("Empty subtitle payload") + }) + } + _parseIMSC1(t, e) { + const s = this.hls; + an(e, this.initPTS[t.cc], (e => { + this._appendCues(e, t.level), s.trigger(E.SUBTITLE_FRAG_PROCESSED, { + success: !0, + frag: t + }) + }), (e => { + b.log(`Failed to parse IMSC1: ${e}`), s.trigger(E.SUBTITLE_FRAG_PROCESSED, { + success: !1, + frag: t, + error: e + }) + })) + } + _parseVTTs(t) { + var e; + const { + frag: s, + payload: i + } = t, { + initPTS: r, + unparsedVttFrags: n + } = this, a = r.length - 1; + if (!r[s.cc] && -1 === a) return void n.push(t); + const o = this.hls; + ! function(t, e, s, i, r, n, a) { + const o = new zr, + l = ct(new Uint8Array(t)).trim().replace(Qr, "\n").split("\n"), + h = [], + d = e ? function(t, e = 1) { + return Hi(t, 9e4, 1 / e) + }(e.baseTime, e.timescale) : 0; + let c, u = "00:00.000", + f = 0, + g = 0, + m = !0; + o.oncue = function(t) { + const n = s[i]; + let a = s.ccOffset; + const o = (f - d) / 9e4; + if (null != n && n.new && (void 0 !== g ? a = s.ccOffset = n.start : function(t, e, s) { + let i = t[e], + r = t[i.prevCC]; + if (!r || !r.new && i.new) return t.ccOffset = t.presentationOffset = i.start, void(i.new = !1); + for (; null != (n = r) && n.new;) { + var n; + t.ccOffset += i.start - r.start, i.new = !1, i = r, r = t[i.prevCC] + } + t.presentationOffset = s + }(s, i, o)), o) { + if (!e) return void(c = new Error("Missing initPTS for VTT MPEGTS")); + a = o - s.presentationOffset + } + const l = t.endTime - t.startTime, + u = Xi(9e4 * (t.startTime + a - g), 9e4 * r) / 9e4; + t.startTime = Math.max(u, 0), t.endTime = Math.max(u + l, 0); + const m = t.text.trim(); + t.text = decodeURIComponent(encodeURIComponent(m)), t.id || (t.id = tn(t.startTime, t.endTime, m)), t.endTime > 0 && h.push(t) + }, o.onparsingerror = function(t) { + c = t + }, o.onflush = function() { + c ? a(c) : n(h) + }, l.forEach((t => { + if (m) { + if (Jr(t, "X-TIMESTAMP-MAP=")) { + m = !1, t.slice(16).split(",").forEach((t => { + Jr(t, "LOCAL:") ? u = t.slice(6) : Jr(t, "MPEGTS:") && (f = parseInt(t.slice(7))) + })); + try { + g = function(t) { + let e = parseInt(t.slice(-3)); + const s = parseInt(t.slice(-6, -4)), + i = parseInt(t.slice(-9, -7)), + r = t.length > 9 ? parseInt(t.substring(0, t.indexOf(":"))) : 0; + if (!(p(e) && p(s) && p(i) && p(r))) throw Error(`Malformed X-TIMESTAMP-MAP: Local:${t}`); + return e += 1e3 * s, e += 6e4 * i, e += 36e5 * r, e + }(u) / 1e3 + } catch (t) { + c = t + } + return + } + "" === t && (m = !1) + } + o.parse(t + "\n") + })), o.flush() + }(null != (e = s.initSegment) && e.data ? Pt(s.initSegment.data, new Uint8Array(i)) : i, this.initPTS[s.cc], this.vttCCs, s.cc, s.start, (t => { + this._appendCues(t, s.level), o.trigger(E.SUBTITLE_FRAG_PROCESSED, { + success: !0, + frag: s + }) + }), (e => { + const r = "Missing initPTS for VTT MPEGTS" === e.message; + r ? n.push(t) : this._fallbackToIMSC1(s, i), b.log(`Failed to parse VTT cue: ${e}`), r && a > s.cc || o.trigger(E.SUBTITLE_FRAG_PROCESSED, { + success: !1, + frag: s, + error: e + }) + })) + } + _fallbackToIMSC1(t, e) { + const s = this.tracks[t.level]; + s.textCodec || an(e, this.initPTS[t.cc], (() => { + s.textCodec = en, this._parseIMSC1(t, e) + }), (() => { + s.textCodec = "wvtt" + })) + } + _appendCues(t, e) { + const s = this.hls; + if (this.config.renderTextTracksNatively) { + const s = this.textTracks[e]; + if (!s || "disabled" === s.mode) return; + t.forEach((t => be(s, t))) + } else { + const i = this.tracks[e]; + if (!i) return; + const r = i.default ? "default" : "subtitles" + e; + s.trigger(E.CUES_PARSED, { + type: "subtitles", + cues: t, + track: r + }) + } + } + onFragDecrypted(t, e) { + const { + frag: s + } = e; + s.type === Te.SUBTITLE && this.onFragLoaded(E.FRAG_LOADED, e) + } + onSubtitleTracksCleared() { + this.tracks = [], this.captionsTracks = {} + } + onFragParsingUserdata(t, e) { + this.initCea608Parsers(); + const { + cea608Parser1: s, + cea608Parser2: i + } = this; + if (!this.enabled || !s || !i) return; + const { + frag: r, + samples: n + } = e; + if (r.type !== Te.MAIN || "NONE" !== this.closedCaptionsForLevel(r)) + for (let t = 0; t < n.length; t++) { + const e = n[t].bytes; + if (e) { + const r = this.extractCea608Data(e); + s.addData(n[t].pts, r[0]), i.addData(n[t].pts, r[1]) + } + } + } + onBufferFlushing(t, { + startOffset: e, + endOffset: s, + endOffsetSubtitles: i, + type: r + }) { + const { + media: n + } = this; + if (n && !(n.currentTime < s)) { + if (!r || "video" === r) { + const { + captionsTracks: t + } = this; + Object.keys(t).forEach((i => ke(t[i], e, s))) + } + if (this.config.renderTextTracksNatively && 0 === e && void 0 !== i) { + const { + textTracks: t + } = this; + Object.keys(t).forEach((s => ke(t[s], e, i))) + } + } + } + extractCea608Data(t) { + const e = [ + [], + [] + ], + s = 31 & t[0]; + let i = 2; + for (let r = 0; r < s; r++) { + const s = t[i++], + r = 127 & t[i++], + n = 127 & t[i++]; + if ((0 !== r || 0 !== n) && 0 != (4 & s)) { + const t = 3 & s; + 0 !== t && 1 !== t || (e[t].push(r), e[t].push(n)) + } + } + return e + } + } + + function gn(t) { + return t.characteristics && /transcribes-spoken-dialog/gi.test(t.characteristics) && /describes-music-and-sound/gi.test(t.characteristics) ? "captions" : "subtitles" + } + + function mn(t, e) { + return !!t && t.kind === gn(e) && cr(e, t) + } + class pn { + constructor(t) { + this.hls = void 0, this.autoLevelCapping = void 0, this.firstLevel = void 0, this.media = void 0, this.restrictedLevels = void 0, this.timer = void 0, this.clientRect = void 0, this.streamController = void 0, this.hls = t, this.autoLevelCapping = Number.POSITIVE_INFINITY, this.firstLevel = -1, this.media = null, this.restrictedLevels = [], this.timer = void 0, this.clientRect = null, this.registerListeners() + } + setStreamController(t) { + this.streamController = t + } + destroy() { + this.hls && this.unregisterListener(), this.timer && this.stopCapping(), this.media = null, this.clientRect = null, this.hls = this.streamController = null + } + registerListeners() { + const { + hls: t + } = this; + t.on(E.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), t.on(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.on(E.BUFFER_CODECS, this.onBufferCodecs, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this) + } + unregisterListener() { + const { + hls: t + } = this; + t.off(E.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), t.off(E.MEDIA_ATTACHING, this.onMediaAttaching, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.off(E.BUFFER_CODECS, this.onBufferCodecs, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this) + } + onFpsDropLevelCapping(t, e) { + const s = this.hls.levels[e.droppedLevel]; + this.isLevelAllowed(s) && this.restrictedLevels.push({ + bitrate: s.bitrate, + height: s.height, + width: s.width + }) + } + onMediaAttaching(t, e) { + this.media = e.media instanceof HTMLVideoElement ? e.media : null, this.clientRect = null, this.timer && this.hls.levels.length && this.detectPlayerSize() + } + onManifestParsed(t, e) { + const s = this.hls; + this.restrictedLevels = [], this.firstLevel = e.firstLevel, s.config.capLevelToPlayerSize && e.video && this.startCapping() + } + onLevelsUpdated(t, e) { + this.timer && p(this.autoLevelCapping) && this.detectPlayerSize() + } + onBufferCodecs(t, e) { + this.hls.config.capLevelToPlayerSize && e.video && this.startCapping() + } + onMediaDetaching() { + this.stopCapping() + } + detectPlayerSize() { + if (this.media) { + if (this.mediaHeight <= 0 || this.mediaWidth <= 0) return void(this.clientRect = null); + const t = this.hls.levels; + if (t.length) { + const e = this.hls, + s = this.getMaxLevel(t.length - 1); + s !== this.autoLevelCapping && b.log(`Setting autoLevelCapping to ${s}: ${t[s].height}p@${t[s].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`), e.autoLevelCapping = s, e.autoLevelCapping > this.autoLevelCapping && this.streamController && this.streamController.nextLevelSwitch(), this.autoLevelCapping = e.autoLevelCapping + } + } + } + getMaxLevel(t) { + const e = this.hls.levels; + if (!e.length) return -1; + const s = e.filter(((e, s) => this.isLevelAllowed(e) && s <= t)); + return this.clientRect = null, pn.getMaxLevelByMediaSize(s, this.mediaWidth, this.mediaHeight) + } + startCapping() { + this.timer || (this.autoLevelCapping = Number.POSITIVE_INFINITY, self.clearInterval(this.timer), this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3), this.detectPlayerSize()) + } + stopCapping() { + this.restrictedLevels = [], this.firstLevel = -1, this.autoLevelCapping = Number.POSITIVE_INFINITY, this.timer && (self.clearInterval(this.timer), this.timer = void 0) + } + getDimensions() { + if (this.clientRect) return this.clientRect; + const t = this.media, + e = { + width: 0, + height: 0 + }; + if (t) { + const s = t.getBoundingClientRect(); + e.width = s.width, e.height = s.height, e.width || e.height || (e.width = s.right - s.left || t.width || 0, e.height = s.bottom - s.top || t.height || 0) + } + return this.clientRect = e, e + } + get mediaWidth() { + return this.getDimensions().width * this.contentScaleFactor + } + get mediaHeight() { + return this.getDimensions().height * this.contentScaleFactor + } + get contentScaleFactor() { + let t = 1; + if (!this.hls.config.ignoreDevicePixelRatio) try { + t = self.devicePixelRatio + } catch (t) {} + return t + } + isLevelAllowed(t) { + return !this.restrictedLevels.some((e => t.bitrate === e.bitrate && t.width === e.width && t.height === e.height)) + } + static getMaxLevelByMediaSize(t, e, s) { + if (null == t || !t.length) return -1; + let i = t.length - 1; + const r = Math.max(e, s); + for (let e = 0; e < t.length; e += 1) { + const s = t[e]; + if ((s.width >= r || s.height >= r) && (n = s, !(a = t[e + 1]) || n.width !== a.width || n.height !== a.height)) { + i = e; + break + } + } + var n, a; + return i + } + } + class yn { + constructor(t) { + this.hls = void 0, this.isVideoPlaybackQualityAvailable = !1, this.timer = void 0, this.media = null, this.lastTime = void 0, this.lastDroppedFrames = 0, this.lastDecodedFrames = 0, this.streamController = void 0, this.hls = t, this.registerListeners() + } + setStreamController(t) { + this.streamController = t + } + registerListeners() { + this.hls.on(E.MEDIA_ATTACHING, this.onMediaAttaching, this) + } + unregisterListeners() { + this.hls.off(E.MEDIA_ATTACHING, this.onMediaAttaching, this) + } + destroy() { + this.timer && clearInterval(this.timer), this.unregisterListeners(), this.isVideoPlaybackQualityAvailable = !1, this.media = null + } + onMediaAttaching(t, e) { + const s = this.hls.config; + if (s.capLevelOnFPSDrop) { + const t = e.media instanceof self.HTMLVideoElement ? e.media : null; + this.media = t, t && "function" == typeof t.getVideoPlaybackQuality && (this.isVideoPlaybackQualityAvailable = !0), self.clearInterval(this.timer), this.timer = self.setInterval(this.checkFPSInterval.bind(this), s.fpsDroppedMonitoringPeriod) + } + } + checkFPS(t, e, s) { + const i = performance.now(); + if (e) { + if (this.lastTime) { + const t = i - this.lastTime, + r = s - this.lastDroppedFrames, + n = e - this.lastDecodedFrames, + a = 1e3 * r / t, + o = this.hls; + if (o.trigger(E.FPS_DROP, { + currentDropped: r, + currentDecoded: n, + totalDroppedFrames: s + }), a > 0 && r > o.config.fpsDroppedMonitoringThreshold * n) { + let t = o.currentLevel; + b.warn("drop FPS ratio greater than max allowed value for currentLevel: " + t), t > 0 && (-1 === o.autoLevelCapping || o.autoLevelCapping >= t) && (t -= 1, o.trigger(E.FPS_DROP_LEVEL_CAPPING, { + level: t, + droppedLevel: o.currentLevel + }), o.autoLevelCapping = t, this.streamController.nextLevelSwitch()) + } + } + this.lastTime = i, this.lastDroppedFrames = s, this.lastDecodedFrames = e + } + } + checkFPSInterval() { + const t = this.media; + if (t) + if (this.isVideoPlaybackQualityAvailable) { + const e = t.getVideoPlaybackQuality(); + this.checkFPS(t, e.totalVideoFrames, e.droppedVideoFrames) + } else this.checkFPS(t, t.webkitDecodedFrameCount, t.webkitDroppedFrameCount) + } + } + const vn = "[eme]"; + class En { + constructor(t) { + this.hls = void 0, this.config = void 0, this.media = null, this.keyFormatPromise = null, this.keySystemAccessPromises = {}, this._requestLicenseFailureCount = 0, this.mediaKeySessions = [], this.keyIdToKeySessionPromise = {}, this.setMediaKeysQueue = En.CDMCleanupPromise ? [En.CDMCleanupPromise] : [], this.onMediaEncrypted = this._onMediaEncrypted.bind(this), this.onWaitingForKey = this._onWaitingForKey.bind(this), this.debug = b.debug.bind(b, vn), this.log = b.log.bind(b, vn), this.warn = b.warn.bind(b, vn), this.error = b.error.bind(b, vn), this.hls = t, this.config = t.config, this.registerListeners() + } + destroy() { + this.unregisterListeners(), this.onMediaDetached(); + const t = this.config; + t.requestMediaKeySystemAccessFunc = null, t.licenseXhrSetup = t.licenseResponseCallback = void 0, t.drmSystems = t.drmSystemOptions = {}, this.hls = this.onMediaEncrypted = this.onWaitingForKey = this.keyIdToKeySessionPromise = null, this.config = null + } + registerListeners() { + this.hls.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), this.hls.on(E.MEDIA_DETACHED, this.onMediaDetached, this), this.hls.on(E.MANIFEST_LOADING, this.onManifestLoading, this), this.hls.on(E.MANIFEST_LOADED, this.onManifestLoaded, this) + } + unregisterListeners() { + this.hls.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), this.hls.off(E.MEDIA_DETACHED, this.onMediaDetached, this), this.hls.off(E.MANIFEST_LOADING, this.onManifestLoading, this), this.hls.off(E.MANIFEST_LOADED, this.onManifestLoaded, this) + } + getLicenseServerUrl(t) { + const { + drmSystems: e, + widevineLicenseUrl: s + } = this.config, i = e[t]; + if (i) return i.licenseUrl; + if (t === K.WIDEVINE && s) return s; + throw new Error(`no license server URL configured for key-system "${t}"`) + } + getServerCertificateUrl(t) { + const { + drmSystems: e + } = this.config, s = e[t]; + if (s) return s.serverCertificateUrl; + this.log(`No Server Certificate in config.drmSystems["${t}"]`) + } + attemptKeySystemAccess(t) { + const e = this.hls.levels, + s = (t, e, s) => !!t && s.indexOf(t) === e, + i = e.map((t => t.audioCodec)).filter(s), + r = e.map((t => t.videoCodec)).filter(s); + return i.length + r.length === 0 && r.push("avc1.42e01e"), new Promise(((e, s) => { + const n = t => { + const a = t.shift(); + this.getMediaKeysPromise(a, i, r).then((t => e({ + keySystem: a, + mediaKeys: t + }))).catch((e => { + t.length ? n(t) : s(e instanceof Tn ? e : new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_NO_ACCESS, + error: e, + fatal: !0 + }, e.message)) + })) + }; + n(t) + })) + } + requestMediaKeySystemAccess(t, e) { + const { + requestMediaKeySystemAccessFunc: s + } = this.config; + if ("function" != typeof s) { + let t = `Configured requestMediaKeySystemAccess is not a function ${s}`; + return null === q && "http:" === self.location.protocol && (t = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`), Promise.reject(new Error(t)) + } + return s(t, e) + } + getMediaKeysPromise(t, e, s) { + const i = function(t, e, s, i) { + let r; + switch (t) { + case K.FAIRPLAY: + r = ["cenc", "sinf"]; + break; + case K.WIDEVINE: + case K.PLAYREADY: + r = ["cenc"]; + break; + case K.CLEARKEY: + r = ["cenc", "keyids"]; + break; + default: + throw new Error(`Unknown key-system: ${t}`) + } + return function(t, e, s, i) { + return [{ + initDataTypes: t, + persistentState: i.persistentState || "optional", + distinctiveIdentifier: i.distinctiveIdentifier || "optional", + sessionTypes: i.sessionTypes || [i.sessionType || "temporary"], + audioCapabilities: e.map((t => ({ + contentType: `audio/mp4; codecs="${t}"`, + robustness: i.audioRobustness || "", + encryptionScheme: i.audioEncryptionScheme || null + }))), + videoCapabilities: s.map((t => ({ + contentType: `video/mp4; codecs="${t}"`, + robustness: i.videoRobustness || "", + encryptionScheme: i.videoEncryptionScheme || null + }))) + }] + }(r, e, s, i) + }(t, e, s, this.config.drmSystemOptions), + r = this.keySystemAccessPromises[t]; + let n = null == r ? void 0 : r.keySystemAccess; + if (!n) { + this.log(`Requesting encrypted media "${t}" key-system access with config: ${JSON.stringify(i)}`), n = this.requestMediaKeySystemAccess(t, i); + const e = this.keySystemAccessPromises[t] = { + keySystemAccess: n + }; + return n.catch((e => { + this.log(`Failed to obtain access to key-system "${t}": ${e}`) + })), n.then((s => { + this.log(`Access for key-system "${s.keySystem}" obtained`); + const i = this.fetchServerCertificate(t); + return this.log(`Create media-keys for "${t}"`), e.mediaKeys = s.createMediaKeys().then((e => (this.log(`Media-keys created for "${t}"`), i.then((s => s ? this.setMediaKeysServerCertificate(e, t, s) : e))))), e.mediaKeys.catch((e => { + this.error(`Failed to create media-keys for "${t}"}: ${e}`) + })), e.mediaKeys + })) + } + return n.then((() => r.mediaKeys)) + } + createMediaKeySessionContext({ + decryptdata: t, + keySystem: e, + mediaKeys: s + }) { + this.log(`Creating key-system session "${e}" keyId: ${gt(t.keyId||[])}`); + const i = s.createSession(), + r = { + decryptdata: t, + keySystem: e, + mediaKeys: s, + mediaKeysSession: i, + keyStatus: "status-pending" + }; + return this.mediaKeySessions.push(r), r + } + renewKeySession(t) { + const e = t.decryptdata; + if (e.pssh) { + const s = this.createMediaKeySessionContext(t), + i = this.getKeyIdString(e), + r = "cenc"; + this.keyIdToKeySessionPromise[i] = this.generateRequestWithPreferredKeySession(s, r, e.pssh, "expired") + } else this.warn("Could not renew expired session. Missing pssh initData."); + this.removeSession(t) + } + getKeyIdString(t) { + if (!t) throw new Error("Could not read keyId of undefined decryptdata"); + if (null === t.keyId) throw new Error("keyId is null"); + return gt(t.keyId) + } + updateKeySession(t, e) { + var s; + const i = t.mediaKeysSession; + return this.log(`Updating key-session "${i.sessionId}" for keyID ${gt((null==(s=t.decryptdata)?void 0:s.keyId)||[])}\n } (data length: ${e?e.byteLength:e})`), i.update(e) + } + selectKeySystemFormat(t) { + const e = Object.keys(t.levelkeys || {}); + return this.keyFormatPromise || (this.log(`Selecting key-system from fragment (sn: ${t.sn} ${t.type}: ${t.level}) key formats ${e.join(", ")}`), this.keyFormatPromise = this.getKeyFormatPromise(e)), this.keyFormatPromise + } + getKeyFormatPromise(t) { + return new Promise(((e, s) => { + const i = j(this.config), + r = t.map(V).filter((t => !!t && -1 !== i.indexOf(t))); + return this.getKeySystemSelectionPromise(r).then((({ + keySystem: t + }) => { + const i = W(t); + i ? e(i) : s(new Error(`Unable to find format for key-system "${t}"`)) + })).catch(s) + })) + } + loadKey(t) { + const e = t.keyInfo.decryptdata, + s = this.getKeyIdString(e), + i = `(keyId: ${s} format: "${e.keyFormat}" method: ${e.method} uri: ${e.uri})`; + this.log(`Starting session for key ${i}`); + let r = this.keyIdToKeySessionPromise[s]; + return r || (r = this.keyIdToKeySessionPromise[s] = this.getKeySystemForKeyPromise(e).then((({ + keySystem: s, + mediaKeys: r + }) => (this.throwIfDestroyed(), this.log(`Handle encrypted media sn: ${t.frag.sn} ${t.frag.type}: ${t.frag.level} using key ${i}`), this.attemptSetMediaKeys(s, r).then((() => { + this.throwIfDestroyed(); + const t = this.createMediaKeySessionContext({ + keySystem: s, + mediaKeys: r, + decryptdata: e + }); + return this.generateRequestWithPreferredKeySession(t, "cenc", e.pssh, "playlist-key") + }))))), r.catch((t => this.handleError(t)))), r + } + throwIfDestroyed(t = "Invalid state") { + if (!this.hls) throw new Error("invalid state") + } + handleError(t) { + this.hls && (this.error(t.message), t instanceof Tn ? this.hls.trigger(E.ERROR, t.data) : this.hls.trigger(E.ERROR, { + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_NO_KEYS, + error: t, + fatal: !0 + })) + } + getKeySystemForKeyPromise(t) { + const e = this.getKeyIdString(t), + s = this.keyIdToKeySessionPromise[e]; + if (!s) { + const e = V(t.keyFormat), + s = e ? [e] : j(this.config); + return this.attemptKeySystemAccess(s) + } + return s + } + getKeySystemSelectionPromise(t) { + if (t.length || (t = j(this.config)), 0 === t.length) throw new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_NO_CONFIGURED_LICENSE, + fatal: !0 + }, `Missing key-system license configuration options ${JSON.stringify({drmSystems:this.config.drmSystems})}`); + return this.attemptKeySystemAccess(t) + } + _onMediaEncrypted(t) { + const { + initDataType: e, + initData: s + } = t; + if (this.debug(`"${t.type}" event: init data type: "${e}"`), null === s) return; + let i, r; + if ("sinf" === e && this.config.drmSystems[K.FAIRPLAY]) { + const t = vt(new Uint8Array(s)); + try { + const e = B(JSON.parse(t).sinf), + s = _t(new Uint8Array(e)); + if (!s) return; + i = s.subarray(8, 24), r = K.FAIRPLAY + } catch (t) { + return void this.warn('Failed to parse sinf "encrypted" event message initData') + } + } else { + const t = function(t) { + if (!(t instanceof ArrayBuffer) || t.byteLength < 32) return null; + const e = { + version: 0, + systemId: "", + kids: null, + data: null + }, + s = new DataView(t), + i = s.getUint32(0); + if (t.byteLength !== i && i > 44) return null; + if (1886614376 !== s.getUint32(4)) return null; + if (e.version = s.getUint32(8) >>> 24, e.version > 1) return null; + e.systemId = gt(new Uint8Array(t, 12, 16)); + const r = s.getUint32(28); + if (0 === e.version) { + if (i - 32 < r) return null; + e.data = new Uint8Array(t, 32, r) + } else if (1 === e.version) { + e.kids = []; + for (let s = 0; s < r; s++) e.kids.push(new Uint8Array(t, 32 + 16 * s, 16)) + } + return e + }(s); + if (null === t) return; + 0 === t.version && t.systemId === Y && t.data && (i = t.data.subarray(8, 24)), r = function(t) { + if (t === Y) return K.WIDEVINE + }(t.systemId) + } + if (!r || !i) return; + const n = gt(i), + { + keyIdToKeySessionPromise: a, + mediaKeySessions: o + } = this; + let l = a[n]; + for (let t = 0; t < o.length; t++) { + const r = o[t], + h = r.decryptdata; + if (h.pssh || !h.keyId) continue; + const d = gt(h.keyId); + if (n === d || -1 !== h.uri.replace(/-/g, "").indexOf(n)) { + l = a[d], delete a[d], h.pssh = new Uint8Array(s), h.keyId = i, l = a[n] = l.then((() => this.generateRequestWithPreferredKeySession(r, e, s, "encrypted-event-key-match"))); + break + } + } + l || (l = a[n] = this.getKeySystemSelectionPromise([r]).then((({ + keySystem: t, + mediaKeys: r + }) => { + var a; + this.throwIfDestroyed(); + const o = new Bt("ISO-23001-7", n, null != (a = W(t)) ? a : ""); + return o.pssh = new Uint8Array(s), o.keyId = i, this.attemptSetMediaKeys(t, r).then((() => { + this.throwIfDestroyed(); + const i = this.createMediaKeySessionContext({ + decryptdata: o, + keySystem: t, + mediaKeys: r + }); + return this.generateRequestWithPreferredKeySession(i, e, s, "encrypted-event-no-match") + })) + }))), l.catch((t => this.handleError(t))) + } + _onWaitingForKey(t) { + this.log(`"${t.type}" event`) + } + attemptSetMediaKeys(t, e) { + const s = this.setMediaKeysQueue.slice(); + this.log(`Setting media-keys for "${t}"`); + const i = Promise.all(s).then((() => { + if (!this.media) throw new Error("Attempted to set mediaKeys without media element attached"); + return this.media.setMediaKeys(e) + })); + return this.setMediaKeysQueue.push(i), i.then((() => { + this.log(`Media-keys set for "${t}"`), s.push(i), this.setMediaKeysQueue = this.setMediaKeysQueue.filter((t => -1 === s.indexOf(t))) + })) + } + generateRequestWithPreferredKeySession(t, e, s, i) { + var r, n; + const a = null == (r = this.config.drmSystems) || null == (n = r[t.keySystem]) ? void 0 : n.generateRequest; + if (a) try { + const i = a.call(this.hls, e, s, t); + if (!i) throw new Error("Invalid response from configured generateRequest filter"); + e = i.initDataType, s = t.decryptdata.pssh = i.initData ? new Uint8Array(i.initData) : null + } catch (t) { + var o; + if (this.warn(t.message), null != (o = this.hls) && o.config.debug) throw t + } + if (null === s) return this.log(`Skipping key-session request for "${i}" (no initData)`), Promise.resolve(t); + const l = this.getKeyIdString(t.decryptdata); + this.log(`Generating key-session request for "${i}": ${l} (init data type: ${e} length: ${s?s.byteLength:null})`); + const h = new or, + d = t._onmessage = e => { + const s = t.mediaKeysSession; + if (!s) return void h.emit("error", new Error("invalid state")); + const { + messageType: i, + message: r + } = e; + this.log(`"${i}" message event for session "${s.sessionId}" message size: ${r.byteLength}`), "license-request" === i || "license-renewal" === i ? this.renewLicense(t, r).catch((t => { + this.handleError(t), h.emit("error", t) + })) : "license-release" === i ? t.keySystem === K.FAIRPLAY && (this.updateKeySession(t, $("acknowledged")), this.removeSession(t)) : this.warn(`unhandled media key message type "${i}"`) + }, + c = t._onkeystatuseschange = e => { + if (!t.mediaKeysSession) return void h.emit("error", new Error("invalid state")); + this.onKeyStatusChange(t); + const s = t.keyStatus; + h.emit("keyStatus", s), "expired" === s && (this.warn(`${t.keySystem} expired for key ${l}`), this.renewKeySession(t)) + }; + t.mediaKeysSession.addEventListener("message", d), t.mediaKeysSession.addEventListener("keystatuseschange", c); + const u = new Promise(((t, e) => { + h.on("error", e), h.on("keyStatus", (s => { + s.startsWith("usable") ? t() : "output-restricted" === s ? e(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED, + fatal: !1 + }, "HDCP level output restricted")) : "internal-error" === s ? e(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_STATUS_INTERNAL_ERROR, + fatal: !0 + }, `key status changed to "${s}"`)) : "expired" === s ? e(new Error("key expired while generating request")) : this.warn(`unhandled key status change "${s}"`) + })) + })); + return t.mediaKeysSession.generateRequest(e, s).then((() => { + var e; + this.log(`Request generated for key-session "${null==(e=t.mediaKeysSession)?void 0:e.sessionId}" keyId: ${l}`) + })).catch((t => { + throw new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_NO_SESSION, + error: t, + fatal: !1 + }, `Error generating key-session request: ${t}`) + })).then((() => u)).catch((e => { + throw h.removeAllListeners(), this.removeSession(t), e + })).then((() => (h.removeAllListeners(), t))) + } + onKeyStatusChange(t) { + t.mediaKeysSession.keyStatuses.forEach(((e, s) => { + this.log(`key status change "${e}" for keyStatuses keyId: ${gt("buffer"in s?new Uint8Array(s.buffer,s.byteOffset,s.byteLength):new Uint8Array(s))} session keyId: ${gt(new Uint8Array(t.decryptdata.keyId||[]))} uri: ${t.decryptdata.uri}`), t.keyStatus = e + })) + } + fetchServerCertificate(t) { + const e = this.config, + s = new(0, e.loader)(e), + i = this.getServerCertificateUrl(t); + return i ? (this.log(`Fetching server certificate for "${t}"`), new Promise(((r, n) => { + const a = { + responseType: "arraybuffer", + url: i + }, + o = e.certLoadPolicy.default, + l = { + loadPolicy: o, + timeout: o.maxLoadTimeMs, + maxRetry: 0, + retryDelay: 0, + maxRetryDelay: 0 + }, + h = { + onSuccess: (t, e, s, i) => { + r(t.data) + }, + onError: (e, s, r, o) => { + n(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, + fatal: !0, + networkDetails: r, + response: f({ + url: a.url, + data: void 0 + }, e) + }, `"${t}" certificate request failed (${i}). Status: ${e.code} (${e.text})`)) + }, + onTimeout: (e, s, r) => { + n(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, + fatal: !0, + networkDetails: r, + response: { + url: a.url, + data: void 0 + } + }, `"${t}" certificate request timed out (${i})`)) + }, + onAbort: (t, e, s) => { + n(new Error("aborted")) + } + }; + s.load(a, l, h) + }))) : Promise.resolve() + } + setMediaKeysServerCertificate(t, e, s) { + return new Promise(((i, r) => { + t.setServerCertificate(s).then((r => { + this.log(`setServerCertificate ${r?"success":"not supported by CDM"} (${null==s?void 0:s.byteLength}) on "${e}"`), i(t) + })).catch((t => { + r(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED, + error: t, + fatal: !0 + }, t.message)) + })) + })) + } + renewLicense(t, e) { + return this.requestLicense(t, new Uint8Array(e)).then((e => this.updateKeySession(t, new Uint8Array(e)).catch((t => { + throw new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_SESSION_UPDATE_FAILED, + error: t, + fatal: !0 + }, t.message) + })))) + } + unpackPlayReadyKeyMessage(t, e) { + const s = String.fromCharCode.apply(null, new Uint16Array(e.buffer)); + if (!s.includes("PlayReadyKeyMessage")) return t.setRequestHeader("Content-Type", "text/xml; charset=utf-8"), e; + const i = (new DOMParser).parseFromString(s, "application/xml"), + r = i.querySelectorAll("HttpHeader"); + if (r.length > 0) { + let e; + for (let s = 0, i = r.length; s < i; s++) { + var n, a; + e = r[s]; + const i = null == (n = e.querySelector("name")) ? void 0 : n.textContent, + o = null == (a = e.querySelector("value")) ? void 0 : a.textContent; + i && o && t.setRequestHeader(i, o) + } + } + const o = i.querySelector("Challenge"), + l = null == o ? void 0 : o.textContent; + if (!l) throw new Error("Cannot find in key message"); + return $(atob(l)) + } + setupLicenseXHR(t, e, s, i) { + const r = this.config.licenseXhrSetup; + return r ? Promise.resolve().then((() => { + if (!s.decryptdata) throw new Error("Key removed"); + return r.call(this.hls, t, e, s, i) + })).catch((n => { + if (!s.decryptdata) throw n; + return t.open("POST", e, !0), r.call(this.hls, t, e, s, i) + })).then((s => (t.readyState || t.open("POST", e, !0), { + xhr: t, + licenseChallenge: s || i + }))) : (t.open("POST", e, !0), Promise.resolve({ + xhr: t, + licenseChallenge: i + })) + } + requestLicense(t, e) { + const s = this.config.keyLoadPolicy.default; + return new Promise(((i, r) => { + const n = this.getLicenseServerUrl(t.keySystem); + this.log(`Sending license request to URL: ${n}`); + const a = new XMLHttpRequest; + a.responseType = "arraybuffer", a.onreadystatechange = () => { + if (!this.hls || !t.mediaKeysSession) return r(new Error("invalid state")); + if (4 === a.readyState) + if (200 === a.status) { + this._requestLicenseFailureCount = 0; + let e = a.response; + this.log(`License received ${e instanceof ArrayBuffer?e.byteLength:e}`); + const s = this.config.licenseResponseCallback; + if (s) try { + e = s.call(this.hls, a, n, t) + } catch (t) { + this.error(t) + } + i(e) + } else { + const o = s.errorRetry, + l = o ? o.maxNumRetry : 0; + if (this._requestLicenseFailureCount++, this._requestLicenseFailureCount > l || a.status >= 400 && a.status < 500) r(new Tn({ + type: T.KEY_SYSTEM_ERROR, + details: S.KEY_SYSTEM_LICENSE_REQUEST_FAILED, + fatal: !0, + networkDetails: a, + response: { + url: n, + data: void 0, + code: a.status, + text: a.statusText + } + }, `License Request XHR failed (${n}). Status: ${a.status} (${a.statusText})`)); + else { + const s = l - this._requestLicenseFailureCount + 1; + this.warn(`Retrying license request, ${s} attempts left`), this.requestLicense(t, e).then(i, r) + } + } + }, t.licenseXhr && t.licenseXhr.readyState !== XMLHttpRequest.DONE && t.licenseXhr.abort(), t.licenseXhr = a, this.setupLicenseXHR(a, n, t, e).then((({ + xhr: e, + licenseChallenge: s + }) => { + t.keySystem == K.PLAYREADY && (s = this.unpackPlayReadyKeyMessage(e, s)), e.send(s) + })) + })) + } + onMediaAttached(t, e) { + if (!this.config.emeEnabled) return; + const s = e.media; + this.media = s, s.addEventListener("encrypted", this.onMediaEncrypted), s.addEventListener("waitingforkey", this.onWaitingForKey) + } + onMediaDetached() { + const t = this.media, + e = this.mediaKeySessions; + t && (t.removeEventListener("encrypted", this.onMediaEncrypted), t.removeEventListener("waitingforkey", this.onWaitingForKey), this.media = null), this._requestLicenseFailureCount = 0, this.setMediaKeysQueue = [], this.mediaKeySessions = [], this.keyIdToKeySessionPromise = {}, Bt.clearKeyUriToKeyIdMap(); + const s = e.length; + En.CDMCleanupPromise = Promise.all(e.map((t => this.removeSession(t))).concat(null == t ? void 0 : t.setMediaKeys(null).catch((t => { + this.log(`Could not clear media keys: ${t}`) + })))).then((() => { + s && (this.log("finished closing key sessions and clearing media keys"), e.length = 0) + })).catch((t => { + this.log(`Could not close sessions and clear media keys: ${t}`) + })) + } + onManifestLoading() { + this.keyFormatPromise = null + } + onManifestLoaded(t, { + sessionKeys: e + }) { + if (e && this.config.emeEnabled && !this.keyFormatPromise) { + const t = e.reduce(((t, e) => (-1 === t.indexOf(e.keyFormat) && t.push(e.keyFormat), t)), []); + this.log(`Selecting key-system from session-keys ${t.join(", ")}`), this.keyFormatPromise = this.getKeyFormatPromise(t) + } + } + removeSession(t) { + const { + mediaKeysSession: e, + licenseXhr: s + } = t; + if (e) { + this.log(`Remove licenses and keys and close session ${e.sessionId}`), t._onmessage && (e.removeEventListener("message", t._onmessage), t._onmessage = void 0), t._onkeystatuseschange && (e.removeEventListener("keystatuseschange", t._onkeystatuseschange), t._onkeystatuseschange = void 0), s && s.readyState !== XMLHttpRequest.DONE && s.abort(), t.mediaKeysSession = t.decryptdata = t.licenseXhr = void 0; + const i = this.mediaKeySessions.indexOf(t); + return i > -1 && this.mediaKeySessions.splice(i, 1), e.remove().catch((t => { + this.log(`Could not remove session: ${t}`) + })).then((() => e.close())).catch((t => { + this.log(`Could not close session: ${t}`) + })) + } + } + } + En.CDMCleanupPromise = void 0; + class Tn extends Error { + constructor(t, e) { + super(e), this.data = void 0, t.error || (t.error = new Error(e)), this.data = t, t.err = t.error + } + } + var Sn, Ln, An; + ! function(t) { + t.MANIFEST = "m", t.AUDIO = "a", t.VIDEO = "v", t.MUXED = "av", t.INIT = "i", t.CAPTION = "c", t.TIMED_TEXT = "tt", t.KEY = "k", t.OTHER = "o" + }(Sn || (Sn = {})), + function(t) { + t.DASH = "d", t.HLS = "h", t.SMOOTH = "s", t.OTHER = "o" + }(Ln || (Ln = {})), + function(t) { + t.OBJECT = "CMCD-Object", t.REQUEST = "CMCD-Request", t.SESSION = "CMCD-Session", t.STATUS = "CMCD-Status" + }(An || (An = {})); + const Rn = { + [An.OBJECT]: ["br", "d", "ot", "tb"], + [An.REQUEST]: ["bl", "dl", "mtp", "nor", "nrr", "su"], + [An.SESSION]: ["cid", "pr", "sf", "sid", "st", "v"], + [An.STATUS]: ["bs", "rtp"] + }; + class bn { + constructor(t, e) { + this.value = void 0, this.params = void 0, Array.isArray(t) && (t = t.map((t => t instanceof bn ? t : new bn(t)))), this.value = t, this.params = e + } + } + class Dn { + constructor(t) { + this.description = void 0, this.description = t + } + } + const kn = "Bare Item", + In = /[\x00-\x1f\x7f]+/; + + function Cn(t, e, s) { + return function(t, e, s, i) { + return new Error(`failed to ${t} "${r=e,Array.isArray(r)?JSON.stringify(r):r instanceof Map?"Map{}":r instanceof Set?"Set{}":"object"==typeof r?JSON.stringify(r):String(r)}" as ${s}`, { + cause: i + }); + var r + }("serialize", t, e, s) + } + + function wn(t) { + if (function(t) { + return t < -999999999999999 || 999999999999999 < t + }(t)) throw Cn(t, "Integer"); + return t.toString() + } + + function _n(t, e) { + if (t < 0) return -_n(-t, e); + const s = Math.pow(10, e); + if (Math.abs(t * s % 1 - .5) < Number.EPSILON) { + const e = Math.floor(t * s); + return (e % 2 == 0 ? e : e + 1) / s + } + return Math.round(t * s) / s + } + + function xn(t) { + const e = _n(t, 3); + if (Math.floor(Math.abs(e)).toString().length > 12) throw Cn(t, "Decimal"); + const s = e.toString(); + return s.includes(".") ? s : `${s}.0` + } + + function Pn(t) { + const e = (s = t).description || s.toString().slice(7, -1); + var s; + if (!1 === /^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(e)) throw Cn(e, "Token"); + return e + } + + function Mn(t) { + switch (typeof t) { + case "number": + if (!p(t)) throw Cn(t, kn); + return Number.isInteger(t) ? wn(t) : xn(t); + case "string": + return function(t) { + if (In.test(t)) throw Cn(t, "String"); + return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"` + }(t); + case "symbol": + return Pn(t); + case "boolean": + return function(t) { + if ("boolean" != typeof t) throw Cn(t, "Boolean"); + return t ? "?1" : "?0" + }(t); + case "object": + if (t instanceof Date) return function(t) { + return `@${wn(t.getTime()/1e3)}` + }(t); + if (t instanceof Uint8Array) return function(t) { + if (!1 === ArrayBuffer.isView(t)) throw Cn(t, "Byte Sequence"); + return `:${e=t,btoa(String.fromCharCode(...e))}:`; + var e + }(t); + if (t instanceof Dn) return Pn(t); + default: + throw Cn(t, kn) + } + } + + function Fn(t) { + if (!1 === /^[a-z*][a-z0-9\-_.*]*$/.test(t)) throw Cn(t, "Key"); + return t + } + + function On(t) { + return null == t ? "" : Object.entries(t).map((([t, e]) => !0 === e ? `;${Fn(t)}` : `;${Fn(t)}=${Mn(e)}`)).join("") + } + + function Nn(t) { + return t instanceof bn ? `${Mn(t.value)}${On(t.params)}` : Mn(t) + } + const Un = t => Math.round(t), + Bn = t => 100 * Un(t / 100), + $n = { + br: Un, + d: Un, + bl: Bn, + dl: Bn, + mtp: Bn, + nor: (t, e) => (null != e && e.baseUrl && (t = function(t, e) { + const s = new URL(t), + i = new URL(e); + if (s.origin !== i.origin) return t; + const r = s.pathname.split("/").slice(1), + n = i.pathname.split("/").slice(1, -1); + for (; r[0] === n[0];) r.shift(), n.shift(); + for (; n.length;) n.shift(), r.unshift(".."); + return r.join("/") + }(t, e.baseUrl)), encodeURIComponent(t)), + rtp: Bn, + tb: Un + }; + + function Gn(t, e = {}) { + return t ? function(t, e) { + return function(t, e = { + whitespace: !0 + }) { + if ("object" != typeof t) throw Cn(t, "Dict"); + const s = t instanceof Map ? t.entries() : Object.entries(t), + i = null != e && e.whitespace ? " " : ""; + return Array.from(s).map((([t, e]) => { + e instanceof bn == 0 && (e = new bn(e)); + let s = Fn(t); + var i; + return !0 === e.value ? s += On(e.params) : (s += "=", Array.isArray(e.value) ? s += `(${(i=e).value.map(Nn).join(" ")})${On(i.params)}` : s += Nn(e)), s + })).join(`,${i}`) + }(t, e) + }(function(t, e) { + const s = {}; + if (null == t || "object" != typeof t) return s; + const i = Object.keys(t).sort(), + r = m({}, $n, null == e ? void 0 : e.formatters), + n = null == e ? void 0 : e.filter; + return i.forEach((i => { + if (null != n && n(i)) return; + let a = t[i]; + const o = r[i]; + o && (a = o(a, e)), "v" === i && 1 === a || "pr" == i && 1 === a || (t => "number" == typeof t ? p(t) : null != t && "" !== t && !1 !== t)(a) && ((t => "ot" === t || "sf" === t || "st" === t)(i) && "string" == typeof a && (a = new Dn(a)), s[i] = a) + })), s + }(t, e), m({ + whitespace: !1 + }, e)) : "" + } + const Kn = /CMCD=[^]+/; + class Hn { + constructor(t) { + this.hls = void 0, this.config = void 0, this.media = void 0, this.sid = void 0, this.cid = void 0, this.useHeaders = !1, this.includeKeys = void 0, this.initialized = !1, this.starved = !1, this.buffering = !0, this.audioBuffer = void 0, this.videoBuffer = void 0, this.onWaiting = () => { + this.initialized && (this.starved = !0), this.buffering = !0 + }, this.onPlaying = () => { + this.initialized || (this.initialized = !0), this.buffering = !1 + }, this.applyPlaylistData = t => { + try { + this.apply(t, { + ot: Sn.MANIFEST, + su: !this.initialized + }) + } catch (t) { + b.warn("Could not generate manifest CMCD data.", t) + } + }, this.applyFragmentData = t => { + try { + const e = t.frag, + s = this.hls.levels[e.level], + i = this.getObjectType(e), + r = { + d: 1e3 * e.duration, + ot: i + }; + i !== Sn.VIDEO && i !== Sn.AUDIO && i != Sn.MUXED || (r.br = s.bitrate / 1e3, r.tb = this.getTopBandwidth(i) / 1e3, r.bl = this.getBufferLength(i)), this.apply(t, r) + } catch (t) { + b.warn("Could not generate segment CMCD data.", t) + } + }, this.hls = t; + const e = this.config = t.config, + { + cmcd: s + } = e; + null != s && (e.pLoader = this.createPlaylistLoader(), e.fLoader = this.createFragmentLoader(), this.sid = s.sessionId || function() { + try { + return crypto.randomUUID() + } catch (t) { + try { + const t = URL.createObjectURL(new Blob), + e = t.toString(); + return URL.revokeObjectURL(t), e.slice(e.lastIndexOf("/") + 1) + } catch (t) { + let e = (new Date).getTime(); + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (t => { + const s = (e + 16 * Math.random()) % 16 | 0; + return e = Math.floor(e / 16), ("x" == t ? s : 3 & s | 8).toString(16) + })) + } + } + }(), this.cid = s.contentId, this.useHeaders = !0 === s.useHeaders, this.includeKeys = s.includeKeys, this.registerListeners()) + } + registerListeners() { + const t = this.hls; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHED, this.onMediaDetached, this), t.on(E.BUFFER_CREATED, this.onBufferCreated, this) + } + unregisterListeners() { + const t = this.hls; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHED, this.onMediaDetached, this), t.off(E.BUFFER_CREATED, this.onBufferCreated, this) + } + destroy() { + this.unregisterListeners(), this.onMediaDetached(), this.hls = this.config = this.audioBuffer = this.videoBuffer = null, this.onWaiting = this.onPlaying = null + } + onMediaAttached(t, e) { + this.media = e.media, this.media.addEventListener("waiting", this.onWaiting), this.media.addEventListener("playing", this.onPlaying) + } + onMediaDetached() { + this.media && (this.media.removeEventListener("waiting", this.onWaiting), this.media.removeEventListener("playing", this.onPlaying), this.media = null) + } + onBufferCreated(t, e) { + var s, i; + this.audioBuffer = null == (s = e.tracks.audio) ? void 0 : s.buffer, this.videoBuffer = null == (i = e.tracks.video) ? void 0 : i.buffer + } + createData() { + var t; + return { + v: 1, + sf: Ln.HLS, + sid: this.sid, + cid: this.cid, + pr: null == (t = this.media) ? void 0 : t.playbackRate, + mtp: this.hls.bandwidthEstimate / 1e3 + } + } + apply(t, e = {}) { + m(e, this.createData()); + const s = e.ot === Sn.INIT || e.ot === Sn.VIDEO || e.ot === Sn.MUXED; + this.starved && s && (e.bs = !0, e.su = !0, this.starved = !1), null == e.su && (e.su = this.buffering); + const { + includeKeys: i + } = this; + var r; + i && (e = Object.keys(e).reduce(((t, s) => (i.includes(s) && (t[s] = e[s]), t)), {})), this.useHeaders ? (t.headers || (t.headers = {}), m(t.headers, function(t, e = {}) { + if (!t) return {}; + const s = Object.entries(t), + i = Object.entries(Rn).concat(Object.entries((null == e ? void 0 : e.customHeaderMap) || {})), + r = s.reduce(((t, e) => { + var s; + const [r, n] = e, a = (null == (s = i.find((t => t[1].includes(r)))) ? void 0 : s[0]) || An.REQUEST; + return null != t[a] || (t[a] = {}), t[a][r] = n, t + }), {}); + return Object.entries(r).reduce(((t, [s, i]) => (t[s] = Gn(i, e), t)), {}) + }(e, r))) : t.url = function(t, e, s) { + const i = function(t, e = {}) { + if (!t) return ""; + const s = Gn(t, e); + return `CMCD=${encodeURIComponent(s)}` + }(e, s); + if (!i) return t; + if (Kn.test(t)) return t.replace(Kn, i); + const r = t.includes("?") ? "&" : "?"; + return `${t}${r}${i}` + }(t.url, e) + } + getObjectType(t) { + const { + type: e + } = t; + return "subtitle" === e ? Sn.TIMED_TEXT : "initSegment" === t.sn ? Sn.INIT : "audio" === e ? Sn.AUDIO : "main" === e ? this.hls.audioTracks.length ? Sn.VIDEO : Sn.MUXED : void 0 + } + getTopBandwidth(t) { + let e, s = 0; + const i = this.hls; + if (t === Sn.AUDIO) e = i.audioTracks; + else { + const t = i.maxAutoLevel, + s = t > -1 ? t + 1 : i.levels.length; + e = i.levels.slice(0, s) + } + for (const t of e) t.bitrate > s && (s = t.bitrate); + return s > 0 ? s : NaN + } + getBufferLength(t) { + const e = this.hls.media, + s = t === Sn.AUDIO ? this.audioBuffer : this.videoBuffer; + return s && e ? 1e3 * ws.bufferInfo(s, e.currentTime, this.config.maxBufferHole).len : NaN + } + createPlaylistLoader() { + const { + pLoader: t + } = this.config, e = this.applyPlaylistData, s = t || this.config.loader; + return class { + constructor(t) { + this.loader = void 0, this.loader = new s(t) + } + get stats() { + return this.loader.stats + } + get context() { + return this.loader.context + } + destroy() { + this.loader.destroy() + } + abort() { + this.loader.abort() + } + load(t, s, i) { + e(t), this.loader.load(t, s, i) + } + } + } + createFragmentLoader() { + const { + fLoader: t + } = this.config, e = this.applyFragmentData, s = t || this.config.loader; + return class { + constructor(t) { + this.loader = void 0, this.loader = new s(t) + } + get stats() { + return this.loader.stats + } + get context() { + return this.loader.context + } + destroy() { + this.loader.destroy() + } + abort() { + this.loader.abort() + } + load(t, s, i) { + e(t), this.loader.load(t, s, i) + } + } + } + } + class Vn { + constructor(t) { + this.hls = void 0, this.log = void 0, this.loader = null, this.uri = null, this.pathwayId = ".", this.pathwayPriority = null, this.timeToLoad = 300, this.reloadTimer = -1, this.updated = 0, this.started = !1, this.enabled = !0, this.levels = null, this.audioTracks = null, this.subtitleTracks = null, this.penalizedPathways = {}, this.hls = t, this.log = b.log.bind(b, "[content-steering]:"), this.registerListeners() + } + registerListeners() { + const t = this.hls; + t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.ERROR, this.onError, this) + } + unregisterListeners() { + const t = this.hls; + t && (t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.ERROR, this.onError, this)) + } + startLoad() { + if (this.started = !0, this.clearTimeout(), this.enabled && this.uri) { + if (this.updated) { + const t = 1e3 * this.timeToLoad - (performance.now() - this.updated); + if (t > 0) return void this.scheduleRefresh(this.uri, t) + } + this.loadSteeringManifest(this.uri) + } + } + stopLoad() { + this.started = !1, this.loader && (this.loader.destroy(), this.loader = null), this.clearTimeout() + } + clearTimeout() { + -1 !== this.reloadTimer && (self.clearTimeout(this.reloadTimer), this.reloadTimer = -1) + } + destroy() { + this.unregisterListeners(), this.stopLoad(), this.hls = null, this.levels = this.audioTracks = this.subtitleTracks = null + } + removeLevel(t) { + const e = this.levels; + e && (this.levels = e.filter((e => e !== t))) + } + onManifestLoading() { + this.stopLoad(), this.enabled = !0, this.timeToLoad = 300, this.updated = 0, this.uri = null, this.pathwayId = ".", this.levels = this.audioTracks = this.subtitleTracks = null + } + onManifestLoaded(t, e) { + const { + contentSteering: s + } = e; + null !== s && (this.pathwayId = s.pathwayId, this.uri = s.uri, this.started && this.startLoad()) + } + onManifestParsed(t, e) { + this.audioTracks = e.audioTracks, this.subtitleTracks = e.subtitleTracks + } + onError(t, e) { + const { + errorAction: s + } = e; + if ((null == s ? void 0 : s.action) === ns.SendAlternateToPenaltyBox && s.flags === as.MoveAllAlternatesMatchingHost) { + const t = this.levels; + let i = this.pathwayPriority, + r = this.pathwayId; + if (e.context) { + const { + groupId: s, + pathwayId: i, + type: n + } = e.context; + s && t ? r = this.getPathwayForGroupId(s, n, r) : i && (r = i) + } + r in this.penalizedPathways || (this.penalizedPathways[r] = performance.now()), !i && t && (i = t.reduce(((t, e) => (-1 === t.indexOf(e.pathwayId) && t.push(e.pathwayId), t)), [])), i && i.length > 1 && (this.updatePathwayPriority(i), s.resolved = this.pathwayId !== r), s.resolved || b.warn(`Could not resolve ${e.details} ("${e.error.message}") with content-steering for Pathway: ${r} levels: ${t?t.length:t} priorities: ${JSON.stringify(i)} penalized: ${JSON.stringify(this.penalizedPathways)}`) + } + } + filterParsedLevels(t) { + this.levels = t; + let e = this.getLevelsForPathway(this.pathwayId); + if (0 === e.length) { + const s = t[0].pathwayId; + this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to "${s}"`), e = this.getLevelsForPathway(s), this.pathwayId = s + } + return e.length !== t.length ? (this.log(`Found ${e.length}/${t.length} levels in Pathway "${this.pathwayId}"`), e) : t + } + getLevelsForPathway(t) { + return null === this.levels ? [] : this.levels.filter((e => t === e.pathwayId)) + } + updatePathwayPriority(t) { + let e; + this.pathwayPriority = t; + const s = this.penalizedPathways, + i = performance.now(); + Object.keys(s).forEach((t => { + i - s[t] > 3e5 && delete s[t] + })); + for (let i = 0; i < t.length; i++) { + const r = t[i]; + if (r in s) continue; + if (r === this.pathwayId) return; + const n = this.hls.nextLoadLevel, + a = this.hls.levels[n]; + if (e = this.getLevelsForPathway(r), e.length > 0) { + this.log(`Setting Pathway to "${r}"`), this.pathwayId = r, Xe(e), this.hls.trigger(E.LEVELS_UPDATED, { + levels: e + }); + const t = this.hls.levels[n]; + a && t && this.levels && (t.attrs["STABLE-VARIANT-ID"] !== a.attrs["STABLE-VARIANT-ID"] && t.bitrate !== a.bitrate && this.log(`Unstable Pathways change from bitrate ${a.bitrate} to ${t.bitrate}`), this.hls.nextLoadLevel = n); + break + } + } + } + getPathwayForGroupId(t, e, s) { + const i = this.getLevelsForPathway(s).concat(this.levels || []); + for (let s = 0; s < i.length; s++) + if (e === ve && i[s].hasAudioGroup(t) || e === Ee && i[s].hasSubtitleGroup(t)) return i[s].pathwayId; + return s + } + clonePathways(t) { + const e = this.levels; + if (!e) return; + const s = {}, + i = {}; + t.forEach((t => { + const { + ID: r, + "BASE-ID": n, + "URI-REPLACEMENT": a + } = t; + if (e.some((t => t.pathwayId === r))) return; + const o = this.getLevelsForPathway(n).map((t => { + const e = new I(t.attrs); + e["PATHWAY-ID"] = r; + const n = e.AUDIO && `${e.AUDIO}_clone_${r}`, + o = e.SUBTITLES && `${e.SUBTITLES}_clone_${r}`; + n && (s[e.AUDIO] = n, e.AUDIO = n), o && (i[e.SUBTITLES] = o, e.SUBTITLES = o); + const l = Wn(t.uri, e["STABLE-VARIANT-ID"], "PER-VARIANT-URIS", a), + h = new Ge({ + attrs: e, + audioCodec: t.audioCodec, + bitrate: t.bitrate, + height: t.height, + name: t.name, + url: l, + videoCodec: t.videoCodec, + width: t.width + }); + if (t.audioGroups) + for (let e = 1; e < t.audioGroups.length; e++) h.addGroupId("audio", `${t.audioGroups[e]}_clone_${r}`); + if (t.subtitleGroups) + for (let e = 1; e < t.subtitleGroups.length; e++) h.addGroupId("text", `${t.subtitleGroups[e]}_clone_${r}`); + return h + })); + e.push(...o), Yn(this.audioTracks, s, a, r), Yn(this.subtitleTracks, i, a, r) + })) + } + loadSteeringManifest(t) { + const e = this.hls.config, + s = e.loader; + let i; + this.loader && this.loader.destroy(), this.loader = new s(e); + try { + i = new self.URL(t) + } catch (e) { + return this.enabled = !1, void this.log(`Failed to parse Steering Manifest URI: ${t}`) + } + if ("data:" !== i.protocol) { + const t = 0 | (this.hls.bandwidthEstimate || e.abrEwmaDefaultEstimate); + i.searchParams.set("_HLS_pathway", this.pathwayId), i.searchParams.set("_HLS_throughput", "" + t) + } + const r = { + responseType: "json", + url: i.href + }, + n = e.steeringManifestLoadPolicy.default, + a = n.errorRetry || n.timeoutRetry || {}, + o = { + loadPolicy: n, + timeout: n.maxLoadTimeMs, + maxRetry: a.maxNumRetry || 0, + retryDelay: a.retryDelayMs || 0, + maxRetryDelay: a.maxRetryDelayMs || 0 + }, + l = { + onSuccess: (t, e, s, r) => { + this.log(`Loaded steering manifest: "${i}"`); + const n = t.data; + if (1 !== n.VERSION) return void this.log(`Steering VERSION ${n.VERSION} not supported!`); + this.updated = performance.now(), this.timeToLoad = n.TTL; + const { + "RELOAD-URI": a, + "PATHWAY-CLONES": o, + "PATHWAY-PRIORITY": l + } = n; + if (a) try { + this.uri = new self.URL(a, i).href + } catch (t) { + return this.enabled = !1, void this.log(`Failed to parse Steering Manifest RELOAD-URI: ${a}`) + } + this.scheduleRefresh(this.uri || s.url), o && this.clonePathways(o); + const h = { + steeringManifest: n, + url: i.toString() + }; + this.hls.trigger(E.STEERING_MANIFEST_LOADED, h), l && this.updatePathwayPriority(l) + }, + onError: (t, e, s, i) => { + if (this.log(`Error loading steering manifest: ${t.code} ${t.text} (${e.url})`), this.stopLoad(), 410 === t.code) return this.enabled = !1, void this.log(`Steering manifest ${e.url} no longer available`); + let r = 1e3 * this.timeToLoad; + if (429 !== t.code) this.scheduleRefresh(this.uri || e.url, r); + else { + const t = this.loader; + if ("function" == typeof(null == t ? void 0 : t.getResponseHeader)) { + const e = t.getResponseHeader("Retry-After"); + e && (r = 1e3 * parseFloat(e)) + } + this.log(`Steering manifest ${e.url} rate limited`) + } + }, + onTimeout: (t, e, s) => { + this.log(`Timeout loading steering manifest (${e.url})`), this.scheduleRefresh(this.uri || e.url) + } + }; + this.log(`Requesting steering manifest: ${i}`), this.loader.load(r, o, l) + } + scheduleRefresh(t, e = 1e3 * this.timeToLoad) { + this.clearTimeout(), this.reloadTimer = self.setTimeout((() => { + var e; + const s = null == (e = this.hls) ? void 0 : e.media; + !s || s.ended ? this.scheduleRefresh(t, 1e3 * this.timeToLoad) : this.loadSteeringManifest(t) + }), e) + } + } + + function Yn(t, e, s, i) { + t && Object.keys(e).forEach((r => { + const n = t.filter((t => t.groupId === r)).map((t => { + const n = m({}, t); + return n.details = void 0, n.attrs = new I(n.attrs), n.url = n.attrs.URI = Wn(t.url, t.attrs["STABLE-RENDITION-ID"], "PER-RENDITION-URIS", s), n.groupId = n.attrs["GROUP-ID"] = e[r], n.attrs["PATHWAY-ID"] = i, n + })); + t.push(...n) + })) + } + + function Wn(t, e, s, i) { + const { + HOST: r, + PARAMS: n, + [s]: a + } = i; + let o; + e && (o = null == a ? void 0 : a[e], o && (t = o)); + const l = new self.URL(t); + return r && !o && (l.host = r), n && Object.keys(n).sort().forEach((t => { + t && l.searchParams.set(t, n[t]) + })), l.href + } + const jn = /^age:\s*[\d.]+\s*$/im; + class qn { + constructor(t) { + this.xhrSetup = void 0, this.requestTimeout = void 0, this.retryTimeout = void 0, this.retryDelay = void 0, this.config = null, this.callbacks = null, this.context = null, this.loader = null, this.stats = void 0, this.xhrSetup = t && t.xhrSetup || null, this.stats = new _, this.retryDelay = 0 + } + destroy() { + this.callbacks = null, this.abortInternal(), this.loader = null, this.config = null, this.context = null, this.xhrSetup = null, this.stats = null + } + abortInternal() { + const t = this.loader; + self.clearTimeout(this.requestTimeout), self.clearTimeout(this.retryTimeout), t && (t.onreadystatechange = null, t.onprogress = null, 4 !== t.readyState && (this.stats.aborted = !0, t.abort())) + } + abort() { + var t; + this.abortInternal(), null != (t = this.callbacks) && t.onAbort && this.callbacks.onAbort(this.stats, this.context, this.loader) + } + load(t, e, s) { + if (this.stats.loading.start) throw new Error("Loader can only be used once."); + this.stats.loading.start = self.performance.now(), this.context = t, this.config = e, this.callbacks = s, this.loadInternal() + } + loadInternal() { + const { + config: t, + context: e + } = this; + if (!t || !e) return; + const s = this.loader = new self.XMLHttpRequest, + i = this.stats; + i.loading.first = 0, i.loaded = 0, i.aborted = !1; + const r = this.xhrSetup; + r ? Promise.resolve().then((() => { + if (!this.stats.aborted) return r(s, e.url) + })).catch((t => (s.open("GET", e.url, !0), r(s, e.url)))).then((() => { + this.stats.aborted || this.openAndSendXhr(s, e, t) + })).catch((t => { + this.callbacks.onError({ + code: s.status, + text: t.message + }, e, s, i) + })) : this.openAndSendXhr(s, e, t) + } + openAndSendXhr(t, e, s) { + t.readyState || t.open("GET", e.url, !0); + const i = e.headers, + { + maxTimeToFirstByteMs: r, + maxLoadTimeMs: n + } = s.loadPolicy; + if (i) + for (const e in i) t.setRequestHeader(e, i[e]); + e.rangeEnd && t.setRequestHeader("Range", "bytes=" + e.rangeStart + "-" + (e.rangeEnd - 1)), t.onreadystatechange = this.readystatechange.bind(this), t.onprogress = this.loadprogress.bind(this), t.responseType = e.responseType, self.clearTimeout(this.requestTimeout), s.timeout = r && p(r) ? r : n, this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), s.timeout), t.send() + } + readystatechange() { + const { + context: t, + loader: e, + stats: s + } = this; + if (!t || !e) return; + const i = e.readyState, + r = this.config; + if (!s.aborted && i >= 2 && (0 === s.loading.first && (s.loading.first = Math.max(self.performance.now(), s.loading.start), r.timeout !== r.loadPolicy.maxLoadTimeMs && (self.clearTimeout(this.requestTimeout), r.timeout = r.loadPolicy.maxLoadTimeMs, this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), r.loadPolicy.maxLoadTimeMs - (s.loading.first - s.loading.start)))), 4 === i)) { + self.clearTimeout(this.requestTimeout), e.onreadystatechange = null, e.onprogress = null; + const i = e.status, + n = "text" !== e.responseType; + if (i >= 200 && i < 300 && (n && e.response || null !== e.responseText)) { + s.loading.end = Math.max(self.performance.now(), s.loading.first); + const r = n ? e.response : e.responseText, + a = "arraybuffer" === e.responseType ? r.byteLength : r.length; + if (s.loaded = s.total = a, s.bwEstimate = 8e3 * s.total / (s.loading.end - s.loading.first), !this.callbacks) return; + const o = this.callbacks.onProgress; + if (o && o(s, t, r, e), !this.callbacks) return; + const l = { + url: e.responseURL, + data: r, + code: i + }; + this.callbacks.onSuccess(l, s, t, e) + } else { + const n = r.loadPolicy.errorRetry; + ts(n, s.retry, !1, { + url: t.url, + data: void 0, + code: i + }) ? this.retry(n) : (b.error(`${i} while loading ${t.url}`), this.callbacks.onError({ + code: i, + text: e.statusText + }, t, e, s)) + } + } + } + loadtimeout() { + var t; + const e = null == (t = this.config) ? void 0 : t.loadPolicy.timeoutRetry; + if (ts(e, this.stats.retry, !0)) this.retry(e); + else { + var s; + b.warn(`timeout while loading ${null==(s=this.context)?void 0:s.url}`); + const t = this.callbacks; + t && (this.abortInternal(), t.onTimeout(this.stats, this.context, this.loader)) + } + } + retry(t) { + const { + context: e, + stats: s + } = this; + this.retryDelay = Je(t, s.retry), s.retry++, b.warn(`${status?"HTTP Status "+status:"Timeout"} while loading ${null==e?void 0:e.url}, retrying ${s.retry}/${t.maxNumRetry} in ${this.retryDelay}ms`), this.abortInternal(), this.loader = null, self.clearTimeout(this.retryTimeout), this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay) + } + loadprogress(t) { + const e = this.stats; + e.loaded = t.loaded, t.lengthComputable && (e.total = t.total) + } + getCacheAge() { + let t = null; + if (this.loader && jn.test(this.loader.getAllResponseHeaders())) { + const e = this.loader.getResponseHeader("age"); + t = e ? parseFloat(e) : null + } + return t + } + getResponseHeader(t) { + return this.loader && new RegExp(`^${t}:\\s*[\\d.]+\\s*$`, "im").test(this.loader.getAllResponseHeaders()) ? this.loader.getResponseHeader(t) : null + } + } + const Xn = /(\d+)-(\d+)\/(\d+)/; + class zn { + constructor(t) { + this.fetchSetup = void 0, this.requestTimeout = void 0, this.request = null, this.response = null, this.controller = void 0, this.context = null, this.config = null, this.callbacks = null, this.stats = void 0, this.loader = null, this.fetchSetup = t.fetchSetup || Qn, this.controller = new self.AbortController, this.stats = new _ + } + destroy() { + this.loader = this.callbacks = this.context = this.config = this.request = null, this.abortInternal(), this.response = null, this.fetchSetup = this.controller = this.stats = null + } + abortInternal() { + this.controller && !this.stats.loading.end && (this.stats.aborted = !0, this.controller.abort()) + } + abort() { + var t; + this.abortInternal(), null != (t = this.callbacks) && t.onAbort && this.callbacks.onAbort(this.stats, this.context, this.response) + } + load(t, e, s) { + const i = this.stats; + if (i.loading.start) throw new Error("Loader can only be used once."); + i.loading.start = self.performance.now(); + const r = function(t, e) { + const s = { + method: "GET", + mode: "cors", + credentials: "same-origin", + signal: e, + headers: new self.Headers(m({}, t.headers)) + }; + return t.rangeEnd && s.headers.set("Range", "bytes=" + t.rangeStart + "-" + String(t.rangeEnd - 1)), s + }(t, this.controller.signal), + n = s.onProgress, + a = "arraybuffer" === t.responseType, + o = a ? "byteLength" : "length", + { + maxTimeToFirstByteMs: l, + maxLoadTimeMs: h + } = e.loadPolicy; + this.context = t, this.config = e, this.callbacks = s, this.request = this.fetchSetup(t, r), self.clearTimeout(this.requestTimeout), e.timeout = l && p(l) ? l : h, this.requestTimeout = self.setTimeout((() => { + this.abortInternal(), s.onTimeout(i, t, this.response) + }), e.timeout), self.fetch(this.request).then((r => { + this.response = this.loader = r; + const o = Math.max(self.performance.now(), i.loading.start); + if (self.clearTimeout(this.requestTimeout), e.timeout = h, this.requestTimeout = self.setTimeout((() => { + this.abortInternal(), s.onTimeout(i, t, this.response) + }), h - (o - i.loading.start)), !r.ok) { + const { + status: t, + statusText: e + } = r; + throw new Jn(e || "fetch, bad network response", t, r) + } + return i.loading.first = o, i.total = function(t) { + const e = t.get("Content-Range"); + if (e) { + const t = function(t) { + const e = Xn.exec(t); + if (e) return parseInt(e[2]) - parseInt(e[1]) + 1 + }(e); + if (p(t)) return t + } + const s = t.get("Content-Length"); + if (s) return parseInt(s) + }(r.headers) || i.total, n && p(e.highWaterMark) ? this.loadProgressively(r, i, t, e.highWaterMark, n) : a ? r.arrayBuffer() : "json" === t.responseType ? r.json() : r.text() + })).then((r => { + const a = this.response; + if (!a) throw new Error("loader destroyed"); + self.clearTimeout(this.requestTimeout), i.loading.end = Math.max(self.performance.now(), i.loading.first); + const l = r[o]; + l && (i.loaded = i.total = l); + const h = { + url: a.url, + data: r, + code: a.status + }; + n && !p(e.highWaterMark) && n(i, t, r, a), s.onSuccess(h, i, t, a) + })).catch((e => { + if (self.clearTimeout(this.requestTimeout), i.aborted) return; + const r = e && e.code || 0, + n = e ? e.message : null; + s.onError({ + code: r, + text: n + }, t, e ? e.details : null, i) + })) + } + getCacheAge() { + let t = null; + if (this.response) { + const e = this.response.headers.get("age"); + t = e ? parseFloat(e) : null + } + return t + } + getResponseHeader(t) { + return this.response ? this.response.headers.get(t) : null + } + loadProgressively(t, e, s, i = 0, r) { + const n = new ri, + a = t.body.getReader(), + o = () => a.read().then((a => { + if (a.done) return n.dataLength && r(e, s, n.flush(), t), Promise.resolve(new ArrayBuffer(0)); + const l = a.value, + h = l.length; + return e.loaded += h, h < i || n.dataLength ? (n.push(l), n.dataLength >= i && r(e, s, n.flush(), t)) : r(e, s, l, t), o() + })).catch((() => Promise.reject())); + return o() + } + } + + function Qn(t, e) { + return new self.Request(t.url, e) + } + class Jn extends Error { + constructor(t, e, s) { + super(t), this.code = void 0, this.details = void 0, this.code = e, this.details = s + } + } + const Zn = /\s/, + ta = f(f({ + autoStartLoad: !0, + startPosition: -1, + defaultAudioCodec: void 0, + debug: !1, + capLevelOnFPSDrop: !1, + capLevelToPlayerSize: !1, + ignoreDevicePixelRatio: !1, + preferManagedMediaSource: !0, + initialLiveManifestSize: 1, + maxBufferLength: 30, + backBufferLength: 1 / 0, + frontBufferFlushThreshold: 1 / 0, + maxBufferSize: 6e7, + maxBufferHole: .1, + highBufferWatchdogPeriod: 2, + nudgeOffset: .1, + nudgeMaxRetry: 3, + maxFragLookUpTolerance: .25, + liveSyncDurationCount: 3, + liveMaxLatencyDurationCount: 1 / 0, + liveSyncDuration: void 0, + liveMaxLatencyDuration: void 0, + maxLiveSyncPlaybackRate: 1, + liveDurationInfinity: !1, + liveBackBufferLength: null, + maxMaxBufferLength: 600, + enableWorker: !0, + workerPath: null, + enableSoftwareAES: !0, + startLevel: void 0, + startFragPrefetch: !1, + fpsDroppedMonitoringPeriod: 5e3, + fpsDroppedMonitoringThreshold: .2, + appendErrorMaxRetry: 3, + loader: qn, + fLoader: void 0, + pLoader: void 0, + xhrSetup: void 0, + licenseXhrSetup: void 0, + licenseResponseCallback: void 0, + abrController: Ts, + bufferController: Er, + capLevelController: pn, + errorController: os, + fpsController: yn, + stretchShortVideoTrack: !1, + maxAudioFramesDrift: 1, + forceKeyFrameOnDiscontinuity: !0, + abrEwmaFastLive: 3, + abrEwmaSlowLive: 9, + abrEwmaFastVoD: 3, + abrEwmaSlowVoD: 9, + abrEwmaDefaultEstimate: 5e5, + abrEwmaDefaultEstimateMax: 5e6, + abrBandWidthFactor: .95, + abrBandWidthUpFactor: .7, + abrMaxWithRealBitrate: !1, + maxStarvationDelay: 4, + maxLoadingDelay: 4, + minAutoBitrate: 0, + emeEnabled: !1, + widevineLicenseUrl: void 0, + drmSystems: {}, + drmSystemOptions: {}, + requestMediaKeySystemAccessFunc: q, + testBandwidth: !0, + progressive: !1, + lowLatencyMode: !0, + cmcd: void 0, + enableDateRangeMetadataCues: !0, + enableEmsgMetadataCues: !0, + enableID3MetadataCues: !0, + useMediaCapabilities: !0, + certLoadPolicy: { + default: { + maxTimeToFirstByteMs: 8e3, + maxLoadTimeMs: 2e4, + timeoutRetry: null, + errorRetry: null + } + }, + keyLoadPolicy: { + default: { + maxTimeToFirstByteMs: 8e3, + maxLoadTimeMs: 2e4, + timeoutRetry: { + maxNumRetry: 1, + retryDelayMs: 1e3, + maxRetryDelayMs: 2e4, + backoff: "linear" + }, + errorRetry: { + maxNumRetry: 8, + retryDelayMs: 1e3, + maxRetryDelayMs: 2e4, + backoff: "linear" + } + } + }, + manifestLoadPolicy: { + default: { + maxTimeToFirstByteMs: 1 / 0, + maxLoadTimeMs: 2e4, + timeoutRetry: { + maxNumRetry: 2, + retryDelayMs: 0, + maxRetryDelayMs: 0 + }, + errorRetry: { + maxNumRetry: 1, + retryDelayMs: 1e3, + maxRetryDelayMs: 8e3 + } + } + }, + playlistLoadPolicy: { + default: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 2e4, + timeoutRetry: { + maxNumRetry: 2, + retryDelayMs: 0, + maxRetryDelayMs: 0 + }, + errorRetry: { + maxNumRetry: 2, + retryDelayMs: 1e3, + maxRetryDelayMs: 8e3 + } + } + }, + fragLoadPolicy: { + default: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 12e4, + timeoutRetry: { + maxNumRetry: 4, + retryDelayMs: 0, + maxRetryDelayMs: 0 + }, + errorRetry: { + maxNumRetry: 6, + retryDelayMs: 1e3, + maxRetryDelayMs: 8e3 + } + } + }, + steeringManifestLoadPolicy: { + default: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 2e4, + timeoutRetry: { + maxNumRetry: 2, + retryDelayMs: 0, + maxRetryDelayMs: 0 + }, + errorRetry: { + maxNumRetry: 1, + retryDelayMs: 1e3, + maxRetryDelayMs: 8e3 + } + } + }, + manifestLoadingTimeOut: 1e4, + manifestLoadingMaxRetry: 1, + manifestLoadingRetryDelay: 1e3, + manifestLoadingMaxRetryTimeout: 64e3, + levelLoadingTimeOut: 1e4, + levelLoadingMaxRetry: 4, + levelLoadingRetryDelay: 1e3, + levelLoadingMaxRetryTimeout: 64e3, + fragLoadingTimeOut: 2e4, + fragLoadingMaxRetry: 6, + fragLoadingRetryDelay: 1e3, + fragLoadingMaxRetryTimeout: 64e3 + }, { + cueHandler: { + newCue(t, e, s, i) { + const r = []; + let n, a, o, l, h; + const d = self.VTTCue || self.TextTrackCue; + for (let u = 0; u < i.rows.length; u++) + if (n = i.rows[u], o = !0, l = 0, h = "", !n.isEmpty()) { + var c; + for (let t = 0; t < n.chars.length; t++) Zn.test(n.chars[t].uchar) && o ? l++ : (h += n.chars[t].uchar, o = !1); + n.cueStartTime = e, e === s && (s += 1e-4), l >= 16 ? l-- : l++; + const i = Xr(h.trim()), + f = tn(e, s, i); + null != t && null != (c = t.cues) && c.getCueById(f) || (a = new d(e, s, i), a.id = f, a.line = u + 1, a.align = "left", a.position = 10 + Math.min(80, 10 * Math.floor(8 * l / 32)), r.push(a)) + } return t && r.length && (r.sort(((t, e) => "auto" === t.line || "auto" === e.line ? 0 : t.line > 8 && e.line > 8 ? e.line - t.line : t.line - e.line)), r.forEach((e => be(t, e)))), r + } + }, + enableWebVTT: !0, + enableIMSC1: !0, + enableCEA708Captions: !0, + captionsTextTrack1Label: "English", + captionsTextTrack1LanguageCode: "en", + captionsTextTrack2Label: "Spanish", + captionsTextTrack2LanguageCode: "es", + captionsTextTrack3Label: "Unknown CC", + captionsTextTrack3LanguageCode: "", + captionsTextTrack4Label: "Unknown CC", + captionsTextTrack4LanguageCode: "", + renderTextTracksNatively: !0 + }), {}, { + subtitleStreamController: gr, + subtitleTrackController: pr, + timelineController: fn, + audioStreamController: ur, + audioTrackController: fr, + emeController: En, + cmcdController: Hn, + contentSteeringController: Vn + }); + + function ea(t) { + return t && "object" == typeof t ? Array.isArray(t) ? t.map(ea) : Object.keys(t).reduce(((e, s) => (e[s] = ea(t[s]), e)), {}) : t + } + let sa; + class ia extends ls { + constructor(t, e) { + super(t, "[level-controller]"), this._levels = [], this._firstLevel = -1, this._maxAutoLevel = -1, this._startLevel = void 0, this.currentLevel = null, this.currentLevelIndex = -1, this.manualLevelIndex = -1, this.steering = void 0, this.onParsedComplete = void 0, this.steering = e, this._registerListeners() + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.on(E.LEVEL_LOADED, this.onLevelLoaded, this), t.on(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this), t.on(E.ERROR, this.onError, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_LOADED, this.onManifestLoaded, this), t.off(E.LEVEL_LOADED, this.onLevelLoaded, this), t.off(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this), t.off(E.ERROR, this.onError, this) + } + destroy() { + this._unregisterListeners(), this.steering = null, this.resetLevels(), super.destroy() + } + stopLoad() { + this._levels.forEach((t => { + t.loadError = 0, t.fragmentError = 0 + })), super.stopLoad() + } + resetLevels() { + this._startLevel = void 0, this.manualLevelIndex = -1, this.currentLevelIndex = -1, this.currentLevel = null, this._levels = [], this._maxAutoLevel = -1 + } + onManifestLoading(t, e) { + this.resetLevels() + } + onManifestLoaded(t, e) { + const s = this.hls.config.preferManagedMediaSource, + i = [], + r = {}, + n = {}; + let a = !1, + o = !1, + l = !1; + e.levels.forEach((t => { + var e, h; + const d = t.attrs; + let { + audioCodec: c, + videoCodec: u + } = t; - 1 !== (null == (e = c) ? void 0 : e.indexOf("mp4a.40.34")) && (sa || (sa = /chrome|firefox/i.test(navigator.userAgent)), sa && (t.audioCodec = c = void 0)), c && (t.audioCodec = c = ee(c, s)), 0 === (null == (h = u) ? void 0 : h.indexOf("avc1")) && (u = t.videoCodec = function(t) { + const e = t.split("."); + if (e.length > 2) { + let t = e.shift() + "."; + return t += parseInt(e.shift()).toString(16), t += ("000" + parseInt(e.shift()).toString(16)).slice(-4), t + } + return t + }(u)); + const { + width: f, + height: g, + unknownCodecs: m + } = t; + if (a || (a = !(!f || !g)), o || (o = !!u), l || (l = !!c), null != m && m.length || c && !qt(c, "audio", s) || u && !qt(u, "video", s)) return; + const { + CODECS: p, + "FRAME-RATE": y, + "HDCP-LEVEL": v, + "PATHWAY-ID": E, + RESOLUTION: T, + "VIDEO-RANGE": S + } = d, L = `${E||"."}-${t.bitrate}-${T}-${y}-${p}-${S}-${v}`; + if (r[L]) + if (r[L].uri === t.url || t.attrs["PATHWAY-ID"]) r[L].addGroupId("audio", d.AUDIO), r[L].addGroupId("text", d.SUBTITLES); + else { + const e = n[L] += 1; + t.attrs["PATHWAY-ID"] = new Array(e + 1).join("."); + const s = new Ge(t); + r[L] = s, i.push(s) + } + else { + const e = new Ge(t); + r[L] = e, n[L] = 1, i.push(e) + } + })), this.filterAndSortMediaOptions(i, e, a, o, l) + } + filterAndSortMediaOptions(t, e, s, i, r) { + let n = [], + a = [], + o = t; + if ((s || i) && r && (o = o.filter((({ + videoCodec: t, + videoRange: e, + width: s, + height: i + }) => { + return (!!t || !(!s || !i)) && !!(r = e) && Ne.indexOf(r) > -1; + var r + }))), 0 === o.length) return void Promise.resolve().then((() => { + if (this.hls) { + e.levels.length && this.warn(`One or more CODECS in variant not supported: ${JSON.stringify(e.levels[0].attrs)}`); + const t = new Error("no level with compatible codecs found in manifest"); + this.hls.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.MANIFEST_INCOMPATIBLE_CODECS_ERROR, + fatal: !0, + url: e.url, + error: t, + reason: t.message + }) + } + })); + if (e.audioTracks) { + const { + preferManagedMediaSource: t + } = this.hls.config; + n = e.audioTracks.filter((e => !e.audioCodec || qt(e.audioCodec, "audio", t))), ra(n) + } + e.subtitles && (a = e.subtitles, ra(a)); + const l = o.slice(0); + o.sort(((t, e) => { + if (t.attrs["HDCP-LEVEL"] !== e.attrs["HDCP-LEVEL"]) return (t.attrs["HDCP-LEVEL"] || "") > (e.attrs["HDCP-LEVEL"] || "") ? 1 : -1; + if (s && t.height !== e.height) return t.height - e.height; + if (t.frameRate !== e.frameRate) return t.frameRate - e.frameRate; + if (t.videoRange !== e.videoRange) return Ne.indexOf(t.videoRange) - Ne.indexOf(e.videoRange); + if (t.videoCodec !== e.videoCodec) { + const s = Qt(t.videoCodec), + i = Qt(e.videoCodec); + if (s !== i) return i - s + } + if (t.uri === e.uri && t.codecSet !== e.codecSet) { + const s = Jt(t.codecSet), + i = Jt(e.codecSet); + if (s !== i) return i - s + } + return t.averageBitrate !== e.averageBitrate ? t.averageBitrate - e.averageBitrate : 0 + })); + let h = l[0]; + if (this.steering && (o = this.steering.filterParsedLevels(o), o.length !== l.length)) + for (let t = 0; t < l.length; t++) + if (l[t].pathwayId === o[0].pathwayId) { + h = l[t]; + break + } this._levels = o; + for (let t = 0; t < o.length; t++) + if (o[t] === h) { + var d; + this._firstLevel = t; + const e = h.bitrate, + s = this.hls.bandwidthEstimate; + if (this.log(`manifest loaded, ${o.length} level(s) found, first bitrate: ${e}`), void 0 === (null == (d = this.hls.userConfig) ? void 0 : d.abrEwmaDefaultEstimate)) { + const t = Math.min(e, this.hls.config.abrEwmaDefaultEstimateMax); + t > s && s === ta.abrEwmaDefaultEstimate && (this.hls.bandwidthEstimate = t) + } + break + } const c = r && !i, + u = { + levels: o, + audioTracks: n, + subtitleTracks: a, + sessionData: e.sessionData, + sessionKeys: e.sessionKeys, + firstLevel: this._firstLevel, + stats: e.stats, + audio: r, + video: i, + altAudio: !c && n.some((t => !!t.url)) + }; + this.hls.trigger(E.MANIFEST_PARSED, u), (this.hls.config.autoStartLoad || this.hls.forceStartLoad) && this.hls.startLoad(this.hls.config.startPosition) + } + get levels() { + return 0 === this._levels.length ? null : this._levels + } + get level() { + return this.currentLevelIndex + } + set level(t) { + const e = this._levels; + if (0 === e.length) return; + if (t < 0 || t >= e.length) { + const s = new Error("invalid level idx"), + i = t < 0; + if (this.hls.trigger(E.ERROR, { + type: T.OTHER_ERROR, + details: S.LEVEL_SWITCH_ERROR, + level: t, + fatal: i, + error: s, + reason: s.message + }), i) return; + t = Math.min(t, e.length - 1) + } + const s = this.currentLevelIndex, + i = this.currentLevel, + r = i ? i.attrs["PATHWAY-ID"] : void 0, + n = e[t], + a = n.attrs["PATHWAY-ID"]; + if (this.currentLevelIndex = t, this.currentLevel = n, s === t && n.details && i && r === a) return; + this.log(`Switching to level ${t} (${n.height?n.height+"p ":""}${n.videoRange?n.videoRange+" ":""}${n.codecSet?n.codecSet+" ":""}@${n.bitrate})${a?" with Pathway "+a:""} from level ${s}${r?" with Pathway "+r:""}`); + const o = { + level: t, + attrs: n.attrs, + details: n.details, + bitrate: n.bitrate, + averageBitrate: n.averageBitrate, + maxBitrate: n.maxBitrate, + realBitrate: n.realBitrate, + width: n.width, + height: n.height, + codecSet: n.codecSet, + audioCodec: n.audioCodec, + videoCodec: n.videoCodec, + audioGroups: n.audioGroups, + subtitleGroups: n.subtitleGroups, + loaded: n.loaded, + loadError: n.loadError, + fragmentError: n.fragmentError, + name: n.name, + id: n.id, + uri: n.uri, + url: n.url, + urlId: 0, + audioGroupIds: n.audioGroupIds, + textGroupIds: n.textGroupIds + }; + this.hls.trigger(E.LEVEL_SWITCHING, o); + const l = n.details; + if (!l || l.live) { + const t = this.switchParams(n.uri, null == i ? void 0 : i.details, l); + this.loadPlaylist(t) + } + } + get manualLevel() { + return this.manualLevelIndex + } + set manualLevel(t) { + this.manualLevelIndex = t, void 0 === this._startLevel && (this._startLevel = t), -1 !== t && (this.level = t) + } + get firstLevel() { + return this._firstLevel + } + set firstLevel(t) { + this._firstLevel = t + } + get startLevel() { + if (void 0 === this._startLevel) { + const t = this.hls.config.startLevel; + return void 0 !== t ? t : this.hls.firstAutoLevel + } + return this._startLevel + } + set startLevel(t) { + this._startLevel = t + } + onError(t, e) { + !e.fatal && e.context && e.context.type === ye && e.context.level === this.level && this.checkRetry(e) + } + onFragBuffered(t, { + frag: e + }) { + if (void 0 !== e && e.type === Te.MAIN) { + const t = e.elementaryStreams; + if (!Object.keys(t).some((e => !!t[e]))) return; + const s = this._levels[e.level]; + null != s && s.loadError && (this.log(`Resetting level error count of ${s.loadError} on frag buffered`), s.loadError = 0) + } + } + onLevelLoaded(t, e) { + var s; + const { + level: i, + details: r + } = e, n = this._levels[i]; + var a; + if (!n) return this.warn(`Invalid level index ${i}`), void(null != (a = e.deliveryDirectives) && a.skip && (r.deltaUpdateFailed = !0)); + i === this.currentLevelIndex ? (0 === n.fragmentError && (n.loadError = 0), this.playlistLoaded(i, e, n.details)) : null != (s = e.deliveryDirectives) && s.skip && (r.deltaUpdateFailed = !0) + } + loadPlaylist(t) { + super.loadPlaylist(); + const e = this.currentLevelIndex, + s = this.currentLevel; + if (s && this.shouldLoadPlaylist(s)) { + let i = s.uri; + if (t) try { + i = t.addDirectives(i) + } catch (t) { + this.warn(`Could not construct new URL with HLS Delivery Directives: ${t}`) + } + const r = s.attrs["PATHWAY-ID"]; + this.log(`Loading level index ${e}${void 0!==(null==t?void 0:t.msn)?" at sn "+t.msn+" part "+t.part:""} with${r?" Pathway "+r:""} ${i}`), this.clearTimer(), this.hls.trigger(E.LEVEL_LOADING, { + url: i, + level: e, + pathwayId: s.attrs["PATHWAY-ID"], + id: 0, + deliveryDirectives: t || null + }) + } + } + get nextLoadLevel() { + return -1 !== this.manualLevelIndex ? this.manualLevelIndex : this.hls.nextAutoLevel + } + set nextLoadLevel(t) { + this.level = t, -1 === this.manualLevelIndex && (this.hls.nextAutoLevel = t) + } + removeLevel(t) { + var e; + const s = this._levels.filter(((e, s) => s !== t || (this.steering && this.steering.removeLevel(e), e === this.currentLevel && (this.currentLevel = null, this.currentLevelIndex = -1, e.details && e.details.fragments.forEach((t => t.level = -1))), !1))); + Xe(s), this._levels = s, this.currentLevelIndex > -1 && null != (e = this.currentLevel) && e.details && (this.currentLevelIndex = this.currentLevel.details.fragments[0].level), this.hls.trigger(E.LEVELS_UPDATED, { + levels: s + }) + } + onLevelsUpdated(t, { + levels: e + }) { + this._levels = e + } + checkMaxAutoUpdated() { + const { + autoLevelCapping: t, + maxAutoLevel: e, + maxHdcpLevel: s + } = this.hls; + this._maxAutoLevel !== e && (this._maxAutoLevel = e, this.hls.trigger(E.MAX_AUTO_LEVEL_UPDATED, { + autoLevelCapping: t, + levels: this.levels, + maxAutoLevel: e, + minAutoLevel: this.hls.minAutoLevel, + maxHdcpLevel: s + })) + } + } + + function ra(t) { + const e = {}; + t.forEach((t => { + const s = t.groupId || ""; + t.id = e[s] = e[s] || 0, e[s]++ + })) + } + class na { + constructor(t) { + this.config = void 0, this.keyUriToKeyInfo = {}, this.emeController = null, this.config = t + } + abort(t) { + for (const s in this.keyUriToKeyInfo) { + const i = this.keyUriToKeyInfo[s].loader; + if (i) { + var e; + if (t && t !== (null == (e = i.context) ? void 0 : e.frag.type)) return; + i.abort() + } + } + } + detach() { + for (const t in this.keyUriToKeyInfo) { + const e = this.keyUriToKeyInfo[t]; + (e.mediaKeySessionContext || e.decryptdata.isCommonEncryption) && delete this.keyUriToKeyInfo[t] + } + } + destroy() { + this.detach(); + for (const t in this.keyUriToKeyInfo) { + const e = this.keyUriToKeyInfo[t].loader; + e && e.destroy() + } + this.keyUriToKeyInfo = {} + } + createKeyLoadError(t, e = S.KEY_LOAD_ERROR, s, i, r) { + return new $s({ + type: T.NETWORK_ERROR, + details: e, + fatal: !1, + frag: t, + response: r, + error: s, + networkDetails: i + }) + } + loadClear(t, e) { + if (this.emeController && this.config.emeEnabled) { + const { + sn: s, + cc: i + } = t; + for (let t = 0; t < e.length; t++) { + const r = e[t]; + if (i <= r.cc && ("initSegment" === s || "initSegment" === r.sn || s < r.sn)) { + this.emeController.selectKeySystemFormat(r).then((t => { + r.setKeyFormat(t) + })); + break + } + } + } + } + load(t) { + return !t.decryptdata && t.encrypted && this.emeController ? this.emeController.selectKeySystemFormat(t).then((e => this.loadInternal(t, e))) : this.loadInternal(t) + } + loadInternal(t, e) { + var s, i; + e && t.setKeyFormat(e); + const r = t.decryptdata; + if (!r) { + const s = new Error(e ? `Expected frag.decryptdata to be defined after setting format ${e}` : "Missing decryption data on fragment in onKeyLoading"); + return Promise.reject(this.createKeyLoadError(t, S.KEY_LOAD_ERROR, s)) + } + const n = r.uri; + if (!n) return Promise.reject(this.createKeyLoadError(t, S.KEY_LOAD_ERROR, new Error(`Invalid key URI: "${n}"`))); + let a = this.keyUriToKeyInfo[n]; + if (null != (s = a) && s.decryptdata.key) return r.key = a.decryptdata.key, Promise.resolve({ + frag: t, + keyInfo: a + }); + var o; + if (null != (i = a) && i.keyLoadPromise) switch (null == (o = a.mediaKeySessionContext) ? void 0 : o.keyStatus) { + case void 0: + case "status-pending": + case "usable": + case "usable-in-future": + return a.keyLoadPromise.then((e => (r.key = e.keyInfo.decryptdata.key, { + frag: t, + keyInfo: a + }))) + } + switch (a = this.keyUriToKeyInfo[n] = { + decryptdata: r, + keyLoadPromise: null, + loader: null, + mediaKeySessionContext: null + }, r.method) { + case "ISO-23001-7": + case "SAMPLE-AES": + case "SAMPLE-AES-CENC": + case "SAMPLE-AES-CTR": + return "identity" === r.keyFormat ? this.loadKeyHTTP(a, t) : this.loadKeyEME(a, t); + case "AES-128": + return this.loadKeyHTTP(a, t); + default: + return Promise.reject(this.createKeyLoadError(t, S.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: "${r.method}"`))) + } + } + loadKeyEME(t, e) { + const s = { + frag: e, + keyInfo: t + }; + if (this.emeController && this.config.emeEnabled) { + const e = this.emeController.loadKey(s); + if (e) return (t.keyLoadPromise = e.then((e => (t.mediaKeySessionContext = e, s)))).catch((e => { + throw t.keyLoadPromise = null, e + })) + } + return Promise.resolve(s) + } + loadKeyHTTP(t, e) { + const s = this.config, + i = new(0, s.loader)(s); + return e.keyLoader = t.loader = i, t.keyLoadPromise = new Promise(((r, n) => { + const a = { + keyInfo: t, + frag: e, + responseType: "arraybuffer", + url: t.decryptdata.uri + }, + o = s.keyLoadPolicy.default, + l = { + loadPolicy: o, + timeout: o.maxLoadTimeMs, + maxRetry: 0, + retryDelay: 0, + maxRetryDelay: 0 + }, + h = { + onSuccess: (t, e, s, i) => { + const { + frag: a, + keyInfo: o, + url: l + } = s; + if (!a.decryptdata || o !== this.keyUriToKeyInfo[l]) return n(this.createKeyLoadError(a, S.KEY_LOAD_ERROR, new Error("after key load, decryptdata unset or changed"), i)); + o.decryptdata.key = a.decryptdata.key = new Uint8Array(t.data), a.keyLoader = null, o.loader = null, r({ + frag: a, + keyInfo: o + }) + }, + onError: (t, s, i, r) => { + this.resetLoader(s), n(this.createKeyLoadError(e, S.KEY_LOAD_ERROR, new Error(`HTTP Error ${t.code} loading key ${t.text}`), i, f({ + url: a.url, + data: void 0 + }, t))) + }, + onTimeout: (t, s, i) => { + this.resetLoader(s), n(this.createKeyLoadError(e, S.KEY_LOAD_TIMEOUT, new Error("key loading timed out"), i)) + }, + onAbort: (t, s, i) => { + this.resetLoader(s), n(this.createKeyLoadError(e, S.INTERNAL_ABORTED, new Error("key loading aborted"), i)) + } + }; + i.load(a, l, h) + })) + } + resetLoader(t) { + const { + frag: e, + keyInfo: s, + url: i + } = t, r = s.loader; + e.keyLoader === r && (e.keyLoader = null, s.loader = null), delete this.keyUriToKeyInfo[i], r && r.destroy() + } + } + + function aa() { + return self.SourceBuffer || self.WebKitSourceBuffer + } + + function oa() { + if (!Wt()) return !1; + const t = aa(); + return !t || t.prototype && "function" == typeof t.prototype.appendBuffer && "function" == typeof t.prototype.remove + } + + function la() { + if (!oa()) return !1; + const t = Wt(); + return "function" == typeof(null == t ? void 0 : t.isTypeSupported) && (["avc1.42E01E,mp4a.40.2", "av01.0.01M.08", "vp09.00.50.08"].some((e => t.isTypeSupported(zt(e, "video")))) || ["mp4a.40.2", "fLaC"].some((e => t.isTypeSupported(zt(e, "audio"))))) + } + class ha { + constructor(t, e, s, i) { + this.config = void 0, this.media = null, this.fragmentTracker = void 0, this.hls = void 0, this.nudgeRetry = 0, this.stallReported = !1, this.stalled = null, this.moved = !1, this.seeking = !1, this.config = t, this.media = e, this.fragmentTracker = s, this.hls = i + } + destroy() { + this.media = null, this.hls = this.fragmentTracker = null + } + poll(t, e) { + const { + config: s, + media: i, + stalled: r + } = this; + if (null === i) return; + const { + currentTime: n, + seeking: a + } = i, o = this.seeking && !a, l = !this.seeking && a; + if (this.seeking = a, n !== t) { + if (this.moved = !0, a || (this.nudgeRetry = 0), null !== r) { + if (this.stallReported) { + const t = self.performance.now() - r; + b.warn(`playback not stuck anymore @${n}, after ${Math.round(t)}ms`), this.stallReported = !1 + } + this.stalled = null + } + return + } + if (l || o) return void(this.stalled = null); + if (i.paused && !a || i.ended || 0 === i.playbackRate || !ws.getBuffered(i).length) return void(this.nudgeRetry = 0); + const h = ws.bufferInfo(i, n, 0), + d = h.nextStart || 0; + if (a) { + const t = h.len > 2, + s = !d || e && e.start <= n || d - n > 2 && !this.fragmentTracker.getPartialFragment(n); + if (t || s) return; + this.moved = !1 + } + if (!this.moved && null !== this.stalled) { + var c; + if (!(h.len > 0 || d)) return; + const t = Math.max(d, h.start || 0) - n, + e = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null, + s = (null == e || null == (c = e.details) ? void 0 : c.live) ? 2 * e.details.targetduration : 2, + r = this.fragmentTracker.getPartialFragment(n); + if (t > 0 && (t <= s || r)) return void(i.paused || this._trySkipBufferHole(r)) + } + const u = self.performance.now(); + if (null === r) return void(this.stalled = u); + const f = u - r; + if (!a && f >= 250 && (this._reportStall(h), !this.media)) return; + const g = ws.bufferInfo(i, n, s.maxBufferHole); + this._tryFixBufferStall(g, f) + } + _tryFixBufferStall(t, e) { + const { + config: s, + fragmentTracker: i, + media: r + } = this; + if (null === r) return; + const n = r.currentTime, + a = i.getPartialFragment(n); + (!a || !this._trySkipBufferHole(a) && this.media) && (t.len > s.maxBufferHole || t.nextStart && t.nextStart - n < s.maxBufferHole) && e > 1e3 * s.highBufferWatchdogPeriod && (b.warn("Trying to nudge playhead over buffer-hole"), this.stalled = null, this._tryNudgeBuffer()) + } + _reportStall(t) { + const { + hls: e, + media: s, + stallReported: i + } = this; + if (!i && s) { + this.stallReported = !0; + const i = new Error(`Playback stalling at @${s.currentTime} due to low buffer (${JSON.stringify(t)})`); + b.warn(i.message), e.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_STALLED_ERROR, + fatal: !1, + error: i, + buffer: t.len + }) + } + } + _trySkipBufferHole(t) { + const { + config: e, + hls: s, + media: i + } = this; + if (null === i) return 0; + const r = i.currentTime, + n = ws.bufferInfo(i, r, 0), + a = r < n.start ? n.start : n.nextStart; + if (a) { + const o = n.len <= e.maxBufferHole, + l = n.len > 0 && n.len < 1 && i.readyState < 3, + h = a - r; + if (h > 0 && (o || l)) { + if (h > e.maxBufferHole) { + const { + fragmentTracker: e + } = this; + let s = !1; + if (0 === r) { + const t = e.getAppendedFrag(0, Te.MAIN); + t && a < t.end && (s = !0) + } + if (!s) { + const s = t || e.getAppendedFrag(r, Te.MAIN); + if (s) { + let t = !1, + i = s.end; + for (; i < a;) { + const s = e.getPartialFragment(i); + if (!s) { + t = !0; + break + } + i += s.duration + } + if (t) return 0 + } + } + } + const n = Math.max(a + .05, r + .1); + if (b.warn(`skipping hole, adjusting currentTime from ${r} to ${n}`), this.moved = !0, this.stalled = null, i.currentTime = n, t && !t.gap) { + const e = new Error(`fragment loaded with buffer holes, seeking from ${r} to ${n}`); + s.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_SEEK_OVER_HOLE, + fatal: !1, + error: e, + reason: e.message, + frag: t + }) + } + return n + } + } + return 0 + } + _tryNudgeBuffer() { + const { + config: t, + hls: e, + media: s, + nudgeRetry: i + } = this; + if (null === s) return; + const r = s.currentTime; + if (this.nudgeRetry++, i < t.nudgeMaxRetry) { + const n = r + (i + 1) * t.nudgeOffset, + a = new Error(`Nudging 'currentTime' from ${r} to ${n}`); + b.warn(a.message), s.currentTime = n, e.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_NUDGE_ON_STALL, + error: a, + fatal: !1 + }) + } else { + const s = new Error(`Playhead still not moving while enough data buffered @${r} after ${t.nudgeMaxRetry} nudges`); + b.error(s.message), e.trigger(E.ERROR, { + type: T.MEDIA_ERROR, + details: S.BUFFER_STALLED_ERROR, + error: s, + fatal: !0 + }) + } + } + } + class da extends ii { + constructor(t, e, s) { + super(t, e, s, "[stream-controller]", Te.MAIN), this.audioCodecSwap = !1, this.gapController = null, this.level = -1, this._forceStartLoad = !1, this.altAudio = !1, this.audioOnly = !1, this.fragPlaying = null, this.onvplaying = null, this.onvseeked = null, this.fragLastKbps = 0, this.couldBacktrack = !1, this.backtrackFragment = null, this.audioCodecSwitch = !1, this.videoBuffer = null, this._registerListeners() + } + _registerListeners() { + const { + hls: t + } = this; + t.on(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.on(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.on(E.MANIFEST_LOADING, this.onManifestLoading, this), t.on(E.MANIFEST_PARSED, this.onManifestParsed, this), t.on(E.LEVEL_LOADING, this.onLevelLoading, this), t.on(E.LEVEL_LOADED, this.onLevelLoaded, this), t.on(E.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), t.on(E.ERROR, this.onError, this), t.on(E.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), t.on(E.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), t.on(E.BUFFER_CREATED, this.onBufferCreated, this), t.on(E.BUFFER_FLUSHED, this.onBufferFlushed, this), t.on(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.on(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + _unregisterListeners() { + const { + hls: t + } = this; + t.off(E.MEDIA_ATTACHED, this.onMediaAttached, this), t.off(E.MEDIA_DETACHING, this.onMediaDetaching, this), t.off(E.MANIFEST_LOADING, this.onManifestLoading, this), t.off(E.MANIFEST_PARSED, this.onManifestParsed, this), t.off(E.LEVEL_LOADED, this.onLevelLoaded, this), t.off(E.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), t.off(E.ERROR, this.onError, this), t.off(E.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), t.off(E.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), t.off(E.BUFFER_CREATED, this.onBufferCreated, this), t.off(E.BUFFER_FLUSHED, this.onBufferFlushed, this), t.off(E.LEVELS_UPDATED, this.onLevelsUpdated, this), t.off(E.FRAG_BUFFERED, this.onFragBuffered, this) + } + onHandlerDestroying() { + this._unregisterListeners(), super.onHandlerDestroying() + } + startLoad(t) { + if (this.levels) { + const { + lastCurrentTime: e, + hls: s + } = this; + if (this.stopLoad(), this.setInterval(100), this.level = -1, !this.startFragRequested) { + let t = s.startLevel; - 1 === t && (s.config.testBandwidth && this.levels.length > 1 ? (t = 0, this.bitrateTest = !0) : t = s.firstAutoLevel), s.nextLoadLevel = t, this.level = s.loadLevel, this.loadedmetadata = !1 + } + e > 0 && -1 === t && (this.log(`Override startPosition with lastCurrentTime @${e.toFixed(3)}`), t = e), this.state = Ws, this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t, this.tick() + } else this._forceStartLoad = !0, this.state = Ys + } + stopLoad() { + this._forceStartLoad = !1, super.stopLoad() + } + doTick() { + switch (this.state) { + case si: { + const { + levels: t, + level: e + } = this, s = null == t ? void 0 : t[e], i = null == s ? void 0 : s.details; + if (i && (!i.live || this.levelLastLoaded === s)) { + if (this.waitForCdnTuneIn(i)) break; + this.state = Ws; + break + } + if (this.hls.nextLoadLevel !== this.level) { + this.state = Ws; + break + } + break + } + case Xs: { + var t; + const e = self.performance.now(), + s = this.retryDate; + if (!s || e >= s || null != (t = this.media) && t.seeking) { + const { + levels: t, + level: e + } = this, s = null == t ? void 0 : t[e]; + this.resetStartWhenNotLoaded(s || null), this.state = Ws + } + } + } + this.state === Ws && this.doTickIdle(), this.onTickEnd() + } + onTickEnd() { + super.onTickEnd(), this.checkBuffer(), this.checkFragmentChanged() + } + doTickIdle() { + const { + hls: t, + levelLastLoaded: e, + levels: s, + media: i + } = this; + if (null === e || !i && (this.startFragRequested || !t.config.startFragPrefetch)) return; + if (this.altAudio && this.audioOnly) return; + const r = t.nextLoadLevel; + if (null == s || !s[r]) return; + const n = s[r], + a = this.getMainFwdBufferInfo(); + if (null === a) return; + const o = this.getLevelDetails(); + if (o && this._streamEnded(a, o)) { + const t = {}; + return this.altAudio && (t.type = "video"), this.hls.trigger(E.BUFFER_EOS, t), void(this.state = Zs) + } + t.loadLevel !== r && -1 === t.manualLevel && this.log(`Adapting to level ${r} from level ${this.level}`), this.level = t.nextLoadLevel = r; + const l = n.details; + if (!l || this.state === si || l.live && this.levelLastLoaded !== n) return this.level = r, void(this.state = si); + const h = a.len, + d = this.getMaxBufferLength(n.maxBitrate); + if (h >= d) return; + this.backtrackFragment && this.backtrackFragment.start > a.end && (this.backtrackFragment = null); + const c = this.backtrackFragment ? this.backtrackFragment.start : a.end; + let u = this.getNextFragment(c, l); + if (this.couldBacktrack && !this.fragPrevious && u && "initSegment" !== u.sn && this.fragmentTracker.getState(u) !== bs) { + var f; + const t = (null != (f = this.backtrackFragment) ? f : u).sn - l.startSN, + e = l.fragments[t - 1]; + e && u.cc === e.cc && (u = e, this.fragmentTracker.removeFragment(e)) + } else this.backtrackFragment && a.len && (this.backtrackFragment = null); + if (u && this.isLoopLoading(u, c)) { + if (!u.gap) { + const t = this.audioOnly && !this.altAudio ? x : P, + e = (t === P ? this.videoBuffer : this.mediaBuffer) || this.media; + e && this.afterBufferFlushed(e, t, Te.MAIN) + } + u = this.getNextFragmentLoopLoading(u, l, a, Te.MAIN, d) + } + u && (!u.initSegment || u.initSegment.data || this.bitrateTest || (u = u.initSegment), this.loadFragment(u, n, c)) + } + loadFragment(t, e, s) { + const i = this.fragmentTracker.getState(t); + this.fragCurrent = t, i === Ls || i === Rs ? "initSegment" === t.sn ? this._loadInitSegment(t, e) : this.bitrateTest ? (this.log(`Fragment ${t.sn} of level ${t.level} is being downloaded to test bitrate and will not be buffered`), this._loadBitrateTestFrag(t, e)) : (this.startFragRequested = !0, super.loadFragment(t, e, s)) : this.clearTrackerIfNeeded(t) + } + getBufferedFrag(t) { + return this.fragmentTracker.getBufferedFrag(t, Te.MAIN) + } + followingBufferedFrag(t) { + return t ? this.getBufferedFrag(t.end + .5) : null + } + immediateLevelSwitch() { + this.abortCurrentFrag(), this.flushMainBuffer(0, Number.POSITIVE_INFINITY) + } + nextLevelSwitch() { + const { + levels: t, + media: e + } = this; + if (null != e && e.readyState) { + let s; + const i = this.getAppendedFrag(e.currentTime); + i && i.start > 1 && this.flushMainBuffer(0, i.start - 1); + const r = this.getLevelDetails(); + if (null != r && r.live) { + const t = this.getMainFwdBufferInfo(); + if (!t || t.len < 2 * r.targetduration) return + } + if (!e.paused && t) { + const e = t[this.hls.nextLoadLevel], + i = this.fragLastKbps; + s = i && this.fragCurrent ? this.fragCurrent.duration * e.maxBitrate / (1e3 * i) + 1 : 0 + } else s = 0; + const n = this.getBufferedFrag(e.currentTime + s); + if (n) { + const t = this.followingBufferedFrag(n); + if (t) { + this.abortCurrentFrag(); + const e = t.maxStartPTS ? t.maxStartPTS : t.start, + s = t.duration, + i = Math.max(n.end, e + Math.min(Math.max(s - this.config.maxFragLookUpTolerance, s * (this.couldBacktrack ? .5 : .125)), s * (this.couldBacktrack ? .75 : .25))); + this.flushMainBuffer(i, Number.POSITIVE_INFINITY) + } + } + } + } + abortCurrentFrag() { + const t = this.fragCurrent; + switch (this.fragCurrent = null, this.backtrackFragment = null, t && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), this.state) { + case js: + case qs: + case Xs: + case Qs: + case Js: + this.state = Ws + } + this.nextLoadPosition = this.getLoadPosition() + } + flushMainBuffer(t, e) { + super.flushMainBuffer(t, e, this.altAudio ? "video" : null) + } + onMediaAttached(t, e) { + super.onMediaAttached(t, e); + const s = e.media; + this.onvplaying = this.onMediaPlaying.bind(this), this.onvseeked = this.onMediaSeeked.bind(this), s.addEventListener("playing", this.onvplaying), s.addEventListener("seeked", this.onvseeked), this.gapController = new ha(this.config, s, this.fragmentTracker, this.hls) + } + onMediaDetaching() { + const { + media: t + } = this; + t && this.onvplaying && this.onvseeked && (t.removeEventListener("playing", this.onvplaying), t.removeEventListener("seeked", this.onvseeked), this.onvplaying = this.onvseeked = null, this.videoBuffer = null), this.fragPlaying = null, this.gapController && (this.gapController.destroy(), this.gapController = null), super.onMediaDetaching() + } + onMediaPlaying() { + this.tick() + } + onMediaSeeked() { + const t = this.media, + e = t ? t.currentTime : null; + p(e) && this.log(`Media seeked to ${e.toFixed(3)}`); + const s = this.getMainFwdBufferInfo(); + null !== s && 0 !== s.len ? this.tick() : this.warn(`Main forward buffer length on "seeked" event ${s?s.len:"empty"})`) + } + onManifestLoading() { + this.log("Trigger BUFFER_RESET"), this.hls.trigger(E.BUFFER_RESET, void 0), this.fragmentTracker.removeAllFragments(), this.couldBacktrack = !1, this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0, this.levels = this.fragPlaying = this.backtrackFragment = this.levelLastLoaded = null, this.altAudio = this.audioOnly = this.startFragRequested = !1 + } + onManifestParsed(t, e) { + let s = !1, + i = !1; + e.levels.forEach((t => { + const e = t.audioCodec; + e && (s = s || -1 !== e.indexOf("mp4a.40.2"), i = i || -1 !== e.indexOf("mp4a.40.5")) + })), this.audioCodecSwitch = s && i && ! function() { + var t; + const e = aa(); + return "function" == typeof(null == e || null == (t = e.prototype) ? void 0 : t.changeType) + }(), this.audioCodecSwitch && this.log("Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"), this.levels = e.levels, this.startFragRequested = !1 + } + onLevelLoading(t, e) { + const { + levels: s + } = this; + if (!s || this.state !== Ws) return; + const i = s[e.level]; + (!i.details || i.details.live && this.levelLastLoaded !== i || this.waitForCdnTuneIn(i.details)) && (this.state = si) + } + onLevelLoaded(t, e) { + var s; + const { + levels: i + } = this, r = e.level, n = e.details, a = n.totalduration; + if (!i) return void this.warn(`Levels were reset while loading level ${r}`); + this.log(`Level ${r} loaded [${n.startSN},${n.endSN}]${n.lastPartSn?`[part-${n.lastPartSn}-${n.lastPartIndex}]`:""}, cc [${n.startCC}, ${n.endCC}] duration:${a}`); + const o = i[r], + l = this.fragCurrent; + !l || this.state !== qs && this.state !== Xs || l.level !== e.level && l.loader && this.abortCurrentFrag(); + let h = 0; + if (n.live || null != (s = o.details) && s.live) { + var d; + if (this.checkLiveUpdate(n), n.deltaUpdateFailed) return; + h = this.alignPlaylists(n, o.details, null == (d = this.levelLastLoaded) ? void 0 : d.details) + } + if (o.details = n, this.levelLastLoaded = o, this.hls.trigger(E.LEVEL_UPDATED, { + details: n, + level: r + }), this.state === si) { + if (this.waitForCdnTuneIn(n)) return; + this.state = Ws + } + this.startFragRequested ? n.live && this.synchronizeToLiveEdge(n) : this.setStartPosition(n, h), this.tick() + } + _handleFragmentLoadProgress(t) { + var e; + const { + frag: s, + part: i, + payload: r + } = t, { + levels: n + } = this; + if (!n) return void this.warn(`Levels were reset while fragment load was in progress. Fragment ${s.sn} of level ${s.level} will not be buffered`); + const a = n[s.level], + o = a.details; + if (!o) return this.warn(`Dropping fragment ${s.sn} of level ${s.level} after level details were reset`), void this.fragmentTracker.removeFragment(s); + const l = a.videoCodec, + h = o.PTSKnown || !o.live, + d = null == (e = s.initSegment) ? void 0 : e.data, + c = this._getAudioCodec(a), + u = this.transmuxer = this.transmuxer || new lr(this.hls, Te.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this)), + f = i ? i.index : -1, + g = -1 !== f, + m = new _s(s.level, s.sn, s.stats.chunkCount, r.byteLength, f, g), + p = this.initPTS[s.cc]; + u.push(r, d, c, l, s, i, o.totalduration, h, m, p) + } + onAudioTrackSwitching(t, e) { + const s = this.altAudio; + if (!e.url) { + if (this.mediaBuffer !== this.media) { + this.log("Switching on main audio, use media.buffered to schedule main fragment loading"), this.mediaBuffer = this.media; + const t = this.fragCurrent; + t && (this.log("Switching to main audio track, cancel main fragment load"), t.abortRequests(), this.fragmentTracker.removeFragment(t)), this.resetTransmuxer(), this.resetLoadingState() + } else this.audioOnly && this.resetTransmuxer(); + const t = this.hls; + s && (t.trigger(E.BUFFER_FLUSHING, { + startOffset: 0, + endOffset: Number.POSITIVE_INFINITY, + type: null + }), this.fragmentTracker.removeAllFragments()), t.trigger(E.AUDIO_TRACK_SWITCHED, e) + } + } + onAudioTrackSwitched(t, e) { + const s = e.id, + i = !!this.hls.audioTracks[s].url; + if (i) { + const t = this.videoBuffer; + t && this.mediaBuffer !== t && (this.log("Switching on alternate audio, use video.buffered to schedule main fragment loading"), this.mediaBuffer = t) + } + this.altAudio = i, this.tick() + } + onBufferCreated(t, e) { + const s = e.tracks; + let i, r, n = !1; + for (const t in s) { + const e = s[t]; + if ("main" === e.id) { + if (r = t, i = e, "video" === t) { + const e = s[t]; + e && (this.videoBuffer = e.buffer) + } + } else n = !0 + } + n && i ? (this.log(`Alternate track found, use ${r}.buffered to schedule main fragment loading`), this.mediaBuffer = i.buffer) : this.mediaBuffer = this.media + } + onFragBuffered(t, e) { + const { + frag: s, + part: i + } = e; + if (s && s.type !== Te.MAIN) return; + if (this.fragContextChanged(s)) return this.warn(`Fragment ${s.sn}${i?" p: "+i.index:""} of level ${s.level} finished buffering, but was aborted. state: ${this.state}`), void(this.state === Js && (this.state = Ws)); + const r = i ? i.stats : s.stats; + this.fragLastKbps = Math.round(8 * r.total / (r.buffering.end - r.loading.first)), "initSegment" !== s.sn && (this.fragPrevious = s), this.fragBufferedComplete(s, i) + } + onError(t, e) { + var s; + if (e.fatal) this.state = ti; + else switch (e.details) { + case S.FRAG_GAP: + case S.FRAG_PARSING_ERROR: + case S.FRAG_DECRYPT_ERROR: + case S.FRAG_LOAD_ERROR: + case S.FRAG_LOAD_TIMEOUT: + case S.KEY_LOAD_ERROR: + case S.KEY_LOAD_TIMEOUT: + this.onFragmentOrKeyLoadError(Te.MAIN, e); + break; + case S.LEVEL_LOAD_ERROR: + case S.LEVEL_LOAD_TIMEOUT: + case S.LEVEL_PARSING_ERROR: + e.levelRetry || this.state !== si || (null == (s = e.context) ? void 0 : s.type) !== ye || (this.state = Ws); + break; + case S.BUFFER_APPEND_ERROR: + case S.BUFFER_FULL_ERROR: + if (!e.parent || "main" !== e.parent) return; + if (e.details === S.BUFFER_APPEND_ERROR) return void this.resetLoadingState(); + this.reduceLengthAndFlushBuffer(e) && this.flushMainBuffer(0, Number.POSITIVE_INFINITY); + break; + case S.INTERNAL_EXCEPTION: + this.recoverWorkerError(e) + } + } + checkBuffer() { + const { + media: t, + gapController: e + } = this; + if (t && e && t.readyState) { + if (this.loadedmetadata || !ws.getBuffered(t).length) { + const t = this.state !== Ws ? this.fragCurrent : null; + e.poll(this.lastCurrentTime, t) + } + this.lastCurrentTime = t.currentTime + } + } + onFragLoadEmergencyAborted() { + this.state = Ws, this.loadedmetadata || (this.startFragRequested = !1, this.nextLoadPosition = this.startPosition), this.tickImmediate() + } + onBufferFlushed(t, { + type: e + }) { + if (e !== x || this.audioOnly && !this.altAudio) { + const t = (e === P ? this.videoBuffer : this.mediaBuffer) || this.media; + this.afterBufferFlushed(t, e, Te.MAIN), this.tick() + } + } + onLevelsUpdated(t, e) { + this.level > -1 && this.fragCurrent && (this.level = this.fragCurrent.level), this.levels = e.levels + } + swapAudioCodec() { + this.audioCodecSwap = !this.audioCodecSwap + } + seekToStartPos() { + const { + media: t + } = this; + if (!t) return; + const e = t.currentTime; + let s = this.startPosition; + if (s >= 0 && e < s) { + if (t.seeking) return void this.log(`could not seek to ${s}, already seeking at ${e}`); + const i = ws.getBuffered(t), + r = (i.length ? i.start(0) : 0) - s; + r > 0 && (r < this.config.maxBufferHole || r < this.config.maxFragLookUpTolerance) && (this.log(`adjusting start position by ${r} to match buffer start`), s += r, this.startPosition = s), this.log(`seek to target start position ${s} from current time ${e}`), t.currentTime = s + } + } + _getAudioCodec(t) { + let e = this.config.defaultAudioCodec || t.audioCodec; + return this.audioCodecSwap && e && (this.log("Swapping audio codec"), e = -1 !== e.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5"), e + } + _loadBitrateTestFrag(t, e) { + t.bitrateTest = !0, this._doFragLoad(t, e).then((s => { + const { + hls: i + } = this; + if (!s || this.fragContextChanged(t)) return; + e.fragmentError = 0, this.state = Ws, this.startFragRequested = !1, this.bitrateTest = !1; + const r = t.stats; + r.parsing.start = r.parsing.end = r.buffering.start = r.buffering.end = self.performance.now(), i.trigger(E.FRAG_LOADED, s), t.bitrateTest = !1 + })) + } + _handleTransmuxComplete(t) { + var e; + const s = "main", + { + hls: i + } = this, + { + remuxResult: r, + chunkMeta: n + } = t, + a = this.getCurrentContext(n); + if (!a) return void this.resetWhenMissingContext(n); + const { + frag: o, + part: l, + level: h + } = a, { + video: d, + text: c, + id3: u, + initSegment: f + } = r, { + details: g + } = h, m = this.altAudio ? void 0 : r.audio; + if (this.fragContextChanged(o)) this.fragmentTracker.removeFragment(o); + else { + if (this.state = Qs, f) { + if (null != f && f.tracks) { + const t = o.initSegment || o; + this._bufferInitSegment(h, f.tracks, t, n), i.trigger(E.FRAG_PARSING_INIT_SEGMENT, { + frag: t, + id: s, + tracks: f.tracks + }) + } + const t = f.initPTS, + e = f.timescale; + p(t) && (this.initPTS[o.cc] = { + baseTime: t, + timescale: e + }, i.trigger(E.INIT_PTS_FOUND, { + frag: o, + id: s, + initPTS: t, + timescale: e + })) + } + if (d && g && "initSegment" !== o.sn) { + const t = g.fragments[o.sn - 1 - g.startSN], + e = o.sn === g.startSN, + s = !t || o.cc > t.cc; + if (!1 !== r.independent) { + const { + startPTS: t, + endPTS: i, + startDTS: r, + endDTS: a + } = d; + if (l) l.elementaryStreams[d.type] = { + startPTS: t, + endPTS: i, + startDTS: r, + endDTS: a + }; + else if (d.firstKeyFrame && d.independent && 1 === n.id && !s && (this.couldBacktrack = !0), d.dropped && d.independent) { + const r = this.getMainFwdBufferInfo(), + n = (r ? r.end : this.getLoadPosition()) + this.config.maxBufferHole, + l = d.firstKeyFramePTS ? d.firstKeyFramePTS : t; + if (!e && n < l - this.config.maxBufferHole && !s) return void this.backtrack(o); + s && (o.gap = !0), o.setElementaryStreamInfo(d.type, o.start, i, o.start, a, !0) + } else e && t > 2 && (o.gap = !0); + o.setElementaryStreamInfo(d.type, t, i, r, a), this.backtrackFragment && (this.backtrackFragment = o), this.bufferFragmentData(d, o, l, n, e || s) + } else { + if (!e && !s) return void this.backtrack(o); + o.gap = !0 + } + } + if (m) { + const { + startPTS: t, + endPTS: e, + startDTS: s, + endDTS: i + } = m; + l && (l.elementaryStreams.audio = { + startPTS: t, + endPTS: e, + startDTS: s, + endDTS: i + }), o.setElementaryStreamInfo(x, t, e, s, i), this.bufferFragmentData(m, o, l, n) + } + if (g && null != u && null != (e = u.samples) && e.length) { + const t = { + id: s, + frag: o, + details: g, + samples: u.samples + }; + i.trigger(E.FRAG_PARSING_METADATA, t) + } + if (g && c) { + const t = { + id: s, + frag: o, + details: g, + samples: c.samples + }; + i.trigger(E.FRAG_PARSING_USERDATA, t) + } + } + } + _bufferInitSegment(t, e, s, i) { + if (this.state !== Qs) return; + this.audioOnly = !!e.audio && !e.video, this.altAudio && !this.audioOnly && delete e.audio; + const { + audio: r, + video: n, + audiovideo: a + } = e; + if (r) { + let e = t.audioCodec; + const s = navigator.userAgent.toLowerCase(); + this.audioCodecSwitch && (e && (e = -1 !== e.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5"), 1 !== r.metadata.channelCount && -1 === s.indexOf("firefox") && (e = "mp4a.40.5")), e && -1 !== e.indexOf("mp4a.40.5") && -1 !== s.indexOf("android") && "audio/mpeg" !== r.container && (e = "mp4a.40.2", this.log(`Android: force audio codec to ${e}`)), t.audioCodec && t.audioCodec !== e && this.log(`Swapping manifest audio codec "${t.audioCodec}" for "${e}"`), r.levelCodec = e, r.id = "main", this.log(`Init audio buffer, container:${r.container}, codecs[selected/level/parsed]=[${e||""}/${t.audioCodec||""}/${r.codec}]`) + } + n && (n.levelCodec = t.videoCodec, n.id = "main", this.log(`Init video buffer, container:${n.container}, codecs[level/parsed]=[${t.videoCodec||""}/${n.codec}]`)), a && this.log(`Init audiovideo buffer, container:${a.container}, codecs[level/parsed]=[${t.codecs}/${a.codec}]`), this.hls.trigger(E.BUFFER_CODECS, e), Object.keys(e).forEach((t => { + const r = e[t].initSegment; + null != r && r.byteLength && this.hls.trigger(E.BUFFER_APPENDING, { + type: t, + data: r, + frag: s, + part: null, + chunkMeta: i, + parent: s.type + }) + })), this.tickImmediate() + } + getMainFwdBufferInfo() { + return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, Te.MAIN) + } + backtrack(t) { + this.couldBacktrack = !0, this.backtrackFragment = t, this.resetTransmuxer(), this.flushBufferGap(t), this.fragmentTracker.removeFragment(t), this.fragPrevious = null, this.nextLoadPosition = t.start, this.state = Ws + } + checkFragmentChanged() { + const t = this.media; + let e = null; + if (t && t.readyState > 1 && !1 === t.seeking) { + const s = t.currentTime; + if (ws.isBuffered(t, s) ? e = this.getAppendedFrag(s) : ws.isBuffered(t, s + .1) && (e = this.getAppendedFrag(s + .1)), e) { + this.backtrackFragment = null; + const t = this.fragPlaying, + s = e.level; + t && e.sn === t.sn && t.level === s || (this.fragPlaying = e, this.hls.trigger(E.FRAG_CHANGED, { + frag: e + }), t && t.level === s || this.hls.trigger(E.LEVEL_SWITCHED, { + level: s + })) + } + } + } + get nextLevel() { + const t = this.nextBufferedFrag; + return t ? t.level : -1 + } + get currentFrag() { + const t = this.media; + return t ? this.fragPlaying || this.getAppendedFrag(t.currentTime) : null + } + get currentProgramDateTime() { + const t = this.media; + if (t) { + const e = t.currentTime, + s = this.currentFrag; + if (s && p(e) && p(s.programDateTime)) { + const t = s.programDateTime + 1e3 * (e - s.start); + return new Date(t) + } + } + return null + } + get currentLevel() { + const t = this.currentFrag; + return t ? t.level : -1 + } + get nextBufferedFrag() { + const t = this.currentFrag; + return t ? this.followingBufferedFrag(t) : null + } + get forceStartLoad() { + return this._forceStartLoad + } + } + class ca { + static get version() { + return "1.5.8" + } + static isMSESupported() { + return oa() + } + static isSupported() { + return la() + } + static getMediaSource() { + return Wt() + } + static get Events() { + return E + } + static get ErrorTypes() { + return T + } + static get ErrorDetails() { + return S + } + static get DefaultConfig() { + return ca.defaultConfig ? ca.defaultConfig : ta + } + static set DefaultConfig(t) { + ca.defaultConfig = t + } + constructor(t = {}) { + this.config = void 0, this.userConfig = void 0, this.coreComponents = void 0, this.networkControllers = void 0, this.started = !1, this._emitter = new or, this._autoLevelCapping = -1, this._maxHdcpLevel = null, this.abrController = void 0, this.bufferController = void 0, this.capLevelController = void 0, this.latencyController = void 0, this.levelController = void 0, this.streamController = void 0, this.audioTrackController = void 0, this.subtitleTrackController = void 0, this.emeController = void 0, this.cmcdController = void 0, this._media = null, this.url = null, this.triggeringException = void 0, + function(t, e) { + if ("object" == typeof i && !0 === t || "object" == typeof t) { + ! function(t, ...e) { + e.forEach((function(e) { + R[e] = t[e] ? t[e].bind(t) : function(t) { + const e = self.console[t]; + return e ? e.bind(self.console, `[${t}] >`) : L + }(e) + })) + }(t, "debug", "log", "info", "warn", "error"); + try { + R.log('Debug logs enabled for "Hls instance" in hls.js version 1.5.8') + } catch (t) { + R = A + } + } else R = A + }(t.debug || !1); + const e = this.config = function(t, e) { + if ((e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration)) throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration"); + if (void 0 !== e.liveMaxLatencyDurationCount && (void 0 === e.liveSyncDurationCount || e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount)) throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"'); + if (void 0 !== e.liveMaxLatencyDuration && (void 0 === e.liveSyncDuration || e.liveMaxLatencyDuration <= e.liveSyncDuration)) throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"'); + const s = ea(t), + i = ["TimeOut", "MaxRetry", "RetryDelay", "MaxRetryTimeout"]; + return ["manifest", "level", "frag"].forEach((t => { + const r = `${"level"===t?"playlist":t}LoadPolicy`, + n = void 0 === e[r], + a = []; + i.forEach((i => { + const o = `${t}Loading${i}`, + l = e[o]; + if (void 0 !== l && n) { + a.push(o); + const t = s[r].default; + switch (e[r] = { + default: t + }, i) { + case "TimeOut": + t.maxLoadTimeMs = l, t.maxTimeToFirstByteMs = l; + break; + case "MaxRetry": + t.errorRetry.maxNumRetry = l, t.timeoutRetry.maxNumRetry = l; + break; + case "RetryDelay": + t.errorRetry.retryDelayMs = l, t.timeoutRetry.retryDelayMs = l; + break; + case "MaxRetryTimeout": + t.errorRetry.maxRetryDelayMs = l, t.timeoutRetry.maxRetryDelayMs = l + } + } + })), a.length && b.warn(`hls.js config: "${a.join('", "')}" setting(s) are deprecated, use "${r}": ${JSON.stringify(e[r])}`) + })), f(f({}, s), e) + }(ca.DefaultConfig, t); + this.userConfig = t, e.progressive && function(t) { + const e = t.loader; + e !== zn && e !== qn ? (b.log("[config]: Custom loader detected, cannot enable progressive streaming"), t.progressive = !1) : function() { + if (self.fetch && self.AbortController && self.ReadableStream && self.Request) try { + return new self.ReadableStream({}), !0 + } catch (t) {} + return !1 + }() && (t.loader = zn, t.progressive = !0, t.enableSoftwareAES = !0, b.log("[config]: Progressive streaming enabled, using FetchLoader")) + }(e); + const { + abrController: s, + bufferController: r, + capLevelController: n, + errorController: a, + fpsController: o + } = e, l = new a(this), h = this.abrController = new s(this), d = this.bufferController = new r(this), c = this.capLevelController = new n(this), u = new o(this), g = new Ae(this), m = new Me(this), p = e.contentSteeringController, y = p ? new p(this) : null, v = this.levelController = new ia(this, y), T = new Ds(this), S = new na(this.config), D = this.streamController = new da(this, T, S); + c.setStreamController(D), u.setStreamController(D); + const k = [g, v, D]; + y && k.splice(1, 0, y), this.networkControllers = k; + const I = [h, d, c, u, m, T]; + this.audioTrackController = this.createController(e.audioTrackController, k); + const C = e.audioStreamController; + C && k.push(new C(this, T, S)), this.subtitleTrackController = this.createController(e.subtitleTrackController, k); + const w = e.subtitleStreamController; + w && k.push(new w(this, T, S)), this.createController(e.timelineController, I), S.emeController = this.emeController = this.createController(e.emeController, I), this.cmcdController = this.createController(e.cmcdController, I), this.latencyController = this.createController(Fe, I), this.coreComponents = I, k.push(l); + const _ = l.onErrorOut; + "function" == typeof _ && this.on(E.ERROR, _, l) + } + createController(t, e) { + if (t) { + const s = new t(this); + return e && e.push(s), s + } + return null + } + on(t, e, s = this) { + this._emitter.on(t, e, s) + } + once(t, e, s = this) { + this._emitter.once(t, e, s) + } + removeAllListeners(t) { + this._emitter.removeAllListeners(t) + } + off(t, e, s = this, i) { + this._emitter.off(t, e, s, i) + } + listeners(t) { + return this._emitter.listeners(t) + } + emit(t, e, s) { + return this._emitter.emit(t, e, s) + } + trigger(t, e) { + if (this.config.debug) return this.emit(t, t, e); + try { + return this.emit(t, t, e) + } catch (e) { + if (b.error("An internal error happened while handling event " + t + '. Error message: "' + e.message + '". Here is a stacktrace:', e), !this.triggeringException) { + this.triggeringException = !0; + const s = t === E.ERROR; + this.trigger(E.ERROR, { + type: T.OTHER_ERROR, + details: S.INTERNAL_EXCEPTION, + fatal: s, + event: t, + error: e + }), this.triggeringException = !1 + } + } + return !1 + } + listenerCount(t) { + return this._emitter.listenerCount(t) + } + destroy() { + b.log("destroy"), this.trigger(E.DESTROYING, void 0), this.detachMedia(), this.removeAllListeners(), this._autoLevelCapping = -1, this.url = null, this.networkControllers.forEach((t => t.destroy())), this.networkControllers.length = 0, this.coreComponents.forEach((t => t.destroy())), this.coreComponents.length = 0; + const t = this.config; + t.xhrSetup = t.fetchSetup = void 0, this.userConfig = null + } + attachMedia(t) { + b.log("attachMedia"), this._media = t, this.trigger(E.MEDIA_ATTACHING, { + media: t + }) + } + detachMedia() { + b.log("detachMedia"), this.trigger(E.MEDIA_DETACHING, void 0), this._media = null + } + loadSource(t) { + this.stopLoad(); + const e = this.media, + s = this.url, + i = this.url = c.buildAbsoluteURL(self.location.href, t, { + alwaysNormalize: !0 + }); + this._autoLevelCapping = -1, this._maxHdcpLevel = null, b.log(`loadSource:${i}`), e && s && (s !== i || this.bufferController.hasSourceTypes()) && (this.detachMedia(), this.attachMedia(e)), this.trigger(E.MANIFEST_LOADING, { + url: t + }) + } + startLoad(t = -1) { + b.log(`startLoad(${t})`), this.started = !0, this.networkControllers.forEach((e => { + e.startLoad(t) + })) + } + stopLoad() { + b.log("stopLoad"), this.started = !1, this.networkControllers.forEach((t => { + t.stopLoad() + })) + } + resumeBuffering() { + this.started && this.networkControllers.forEach((t => { + "fragmentLoader" in t && t.startLoad(-1) + })) + } + pauseBuffering() { + this.networkControllers.forEach((t => { + "fragmentLoader" in t && t.stopLoad() + })) + } + swapAudioCodec() { + b.log("swapAudioCodec"), this.streamController.swapAudioCodec() + } + recoverMediaError() { + b.log("recoverMediaError"); + const t = this._media; + this.detachMedia(), t && this.attachMedia(t) + } + removeLevel(t) { + this.levelController.removeLevel(t) + } + get levels() { + return this.levelController.levels || [] + } + get currentLevel() { + return this.streamController.currentLevel + } + set currentLevel(t) { + b.log(`set currentLevel:${t}`), this.levelController.manualLevel = t, this.streamController.immediateLevelSwitch() + } + get nextLevel() { + return this.streamController.nextLevel + } + set nextLevel(t) { + b.log(`set nextLevel:${t}`), this.levelController.manualLevel = t, this.streamController.nextLevelSwitch() + } + get loadLevel() { + return this.levelController.level + } + set loadLevel(t) { + b.log(`set loadLevel:${t}`), this.levelController.manualLevel = t + } + get nextLoadLevel() { + return this.levelController.nextLoadLevel + } + set nextLoadLevel(t) { + this.levelController.nextLoadLevel = t + } + get firstLevel() { + return Math.max(this.levelController.firstLevel, this.minAutoLevel) + } + set firstLevel(t) { + b.log(`set firstLevel:${t}`), this.levelController.firstLevel = t + } + get startLevel() { + const t = this.levelController.startLevel; + return -1 === t && this.abrController.forcedAutoLevel > -1 ? this.abrController.forcedAutoLevel : t + } + set startLevel(t) { + b.log(`set startLevel:${t}`), -1 !== t && (t = Math.max(t, this.minAutoLevel)), this.levelController.startLevel = t + } + get capLevelToPlayerSize() { + return this.config.capLevelToPlayerSize + } + set capLevelToPlayerSize(t) { + const e = !!t; + e !== this.config.capLevelToPlayerSize && (e ? this.capLevelController.startCapping() : (this.capLevelController.stopCapping(), this.autoLevelCapping = -1, this.streamController.nextLevelSwitch()), this.config.capLevelToPlayerSize = e) + } + get autoLevelCapping() { + return this._autoLevelCapping + } + get bandwidthEstimate() { + const { + bwEstimator: t + } = this.abrController; + return t ? t.getEstimate() : NaN + } + set bandwidthEstimate(t) { + this.abrController.resetEstimator(t) + } + get ttfbEstimate() { + const { + bwEstimator: t + } = this.abrController; + return t ? t.getEstimateTTFB() : NaN + } + set autoLevelCapping(t) { + this._autoLevelCapping !== t && (b.log(`set autoLevelCapping:${t}`), this._autoLevelCapping = t, this.levelController.checkMaxAutoUpdated()) + } + get maxHdcpLevel() { + return this._maxHdcpLevel + } + set maxHdcpLevel(t) { + (function(t) { + return Oe.indexOf(t) > -1 + })(t) && this._maxHdcpLevel !== t && (this._maxHdcpLevel = t, this.levelController.checkMaxAutoUpdated()) + } + get autoLevelEnabled() { + return -1 === this.levelController.manualLevel + } + get manualLevel() { + return this.levelController.manualLevel + } + get minAutoLevel() { + const { + levels: t, + config: { + minAutoBitrate: e + } + } = this; + if (!t) return 0; + const s = t.length; + for (let i = 0; i < s; i++) + if (t[i].maxBitrate >= e) return i; + return 0 + } + get maxAutoLevel() { + const { + levels: t, + autoLevelCapping: e, + maxHdcpLevel: s + } = this; + let i; + if (i = -1 === e && null != t && t.length ? t.length - 1 : e, s) + for (let e = i; e--;) { + const i = t[e].attrs["HDCP-LEVEL"]; + if (i && i <= s) return e + } + return i + } + get firstAutoLevel() { + return this.abrController.firstAutoLevel + } + get nextAutoLevel() { + return this.abrController.nextAutoLevel + } + set nextAutoLevel(t) { + this.abrController.nextAutoLevel = t + } + get playingDate() { + return this.streamController.currentProgramDateTime + } + get mainForwardBufferInfo() { + return this.streamController.getMainFwdBufferInfo() + } + setAudioOption(t) { + var e; + return null == (e = this.audioTrackController) ? void 0 : e.setAudioOption(t) + } + setSubtitleOption(t) { + var e; + return null == (e = this.subtitleTrackController) || e.setSubtitleOption(t), null + } + get allAudioTracks() { + const t = this.audioTrackController; + return t ? t.allAudioTracks : [] + } + get audioTracks() { + const t = this.audioTrackController; + return t ? t.audioTracks : [] + } + get audioTrack() { + const t = this.audioTrackController; + return t ? t.audioTrack : -1 + } + set audioTrack(t) { + const e = this.audioTrackController; + e && (e.audioTrack = t) + } + get allSubtitleTracks() { + const t = this.subtitleTrackController; + return t ? t.allSubtitleTracks : [] + } + get subtitleTracks() { + const t = this.subtitleTrackController; + return t ? t.subtitleTracks : [] + } + get subtitleTrack() { + const t = this.subtitleTrackController; + return t ? t.subtitleTrack : -1 + } + get media() { + return this._media + } + set subtitleTrack(t) { + const e = this.subtitleTrackController; + e && (e.subtitleTrack = t) + } + get subtitleDisplay() { + const t = this.subtitleTrackController; + return !!t && t.subtitleDisplay + } + set subtitleDisplay(t) { + const e = this.subtitleTrackController; + e && (e.subtitleDisplay = t) + } + get lowLatencyMode() { + return this.config.lowLatencyMode + } + set lowLatencyMode(t) { + this.config.lowLatencyMode = t + } + get liveSyncPosition() { + return this.latencyController.liveSyncPosition + } + get latency() { + return this.latencyController.latency + } + get maxLatency() { + return this.latencyController.maxLatency + } + get targetLatency() { + return this.latencyController.targetLatency + } + get drift() { + return this.latencyController.drift + } + get forceStartLoad() { + return this.streamController.forceStartLoad + } + } + ca.defaultConfig = void 0 + } + } +]); \ No newline at end of file diff --git a/mp-core/3170.98ff77257d0dd1ce1e79.bundle.js b/mp-core/3170.98ff77257d0dd1ce1e79.bundle.js new file mode 100644 index 0000000..641351e --- /dev/null +++ b/mp-core/3170.98ff77257d0dd1ce1e79.bundle.js @@ -0,0 +1,262 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3170], { + 83170: (e, t, r) => { + r.r(t), r.d(t, { + default: () => d + }); + var i = r(28250), + s = r(99477), + n = r(62371); + class a { + name = "UI: Anchor to Screen"; + hidden = !0; + entity = null; + renderer = null; + onLoad() { + if (!this.renderer.object?.isObject3D) throw new Error(`Cannot anchor a entity of type '${this.entity.type}'`) + } + beforeRender() { + if (metapress.renderer.camera.updateMatrixWorld(!0), this.v3a || (this.v3a = new THREE.Vector3), "top-left" == this.entity.anchorTo) { + let e = (this.entity.anchorOffsetX || 0) / metapress.renderer.canvasRect.width - 1, + t = 1 - (this.entity.anchorOffsetY || 0) / metapress.renderer.canvasRect.height; + this.v3a.set(e, t, 0) + } else if ("center-left" == this.entity.anchorTo) { + let e = (this.entity.anchorOffsetX || 0) / metapress.renderer.canvasRect.width - 1, + t = 0 - (this.entity.anchorOffsetY || 0) / metapress.renderer.canvasRect.height; + this.v3a.set(e, t, 0) + } else this.v3a.set(0, 0, 0); + this.v3a.unproject(metapress.renderer.camera), this.renderer.container.position.copy(this.v3a), this.renderer.container.quaternion.copy(metapress.renderer.camera.quaternion) + } + } + var o = r(25108); + class h { + timers = []; + lastTimerID = 1e4; + constructor() { + this.fallbackTimer = setInterval(this.doFallbackIteration.bind(this), 250), this._originalSetImmediate = window.setImmediate, this._originalSetTimeout = window.setTimeout, this._originalSetInterval = window.setInterval, this._originalClearTimeout = window.clearTimeout, this._originalClearInterval = window.clearInterval, window.setTimeout = this.setTimeout.bind(this), window.setInterval = this.setInterval.bind(this), window.clearTimeout = this.clearTimeout.bind(this), window.clearInterval = this.clearInterval.bind(this) + } + setTimeout(e, t) { + let r = this.lastTimerID++; + return this.timers.push({ + func: e, + interval: t, + lastRun: performance.now(), + id: r, + once: !0 + }), r + } + setInterval(e, t) { + let r = this.lastTimerID++; + return this.timers.push({ + func: e, + interval: t, + lastRun: performance.now(), + id: r, + once: !1 + }), r + } + setImmediate(e) { + this.setTimeout(e, 0) + } + clearTimeout(e) { + for (let t = 0; t < this.timers.length; t++) + if (this.timers[t].id == e) return void this.timers.splice(t, 1); + this._originalClearTimeout.call(window, e) + } + clearInterval(e) { + for (let t = 0; t < this.timers.length; t++) + if (this.timers[t].id == e) return void this.timers.splice(t, 1); + this._originalClearInterval.call(window, e) + } + runIteration() { + let e = 0, + t = performance.now(); + for (let r = 0; r < this.timers.length; r++) { + let i = this.timers[r]; + if (!(t - i.lastRun < i.interval)) { + try { + e += 1, i.lastRun = t, i.func() + } catch (e) { + o.error(e) + } + if (i.once) { + let e = r; + i !== this.timers[r] && (e = this.timers.findIndex((e => e === i))), -1 != e && this.timers.splice(e, 1) + } + } + } + return this.lastIterationTime = t, e + } + doFallbackIteration() { + performance.now() - this.lastIterationTime < 200 || this.runIteration() + } + } + class l { + minDuration = 0; + avgDuration = 0; + maxDuration = 0; + count = 0; + _lastConsolidation = 0; + _numRuns = 0; + _currentMin = 0; + _currentMax = 0; + _currentTotal = 0; + start() { + this.startedAt = performance.now() + } + end() { + let e = performance.now(), + t = e - this.startedAt; + this._currentMax = Math.max(this._currentMax, t), this._currentMin = 0 == this._numRuns ? t : Math.min(this._currentMin, t), this._currentTotal += t, this._numRuns += 1, e - this._lastConsolidation < 1e3 || (this.minDuration = this._currentMin || this.minDuration, this.avgDuration = this._currentTotal / this._numRuns || this.avgDuration, this.maxDuration = this._currentMax || this.maxDuration, this.count = this._numRuns, this._currentMax = 0, this._currentMin = 0, this._currentTotal = 0, this._numRuns = 0, this._lastConsolidation = e) + } + get text() { + return `min=${this.minDuration.toFixed(1)}ms, avg=${this.avgDuration.toFixed(1)}ms, max=${this.maxDuration.toFixed(1)}ms` + } + } + var m = r(25108); + s.ColorManagement.enabled = !0; + class d { + id = "core.render.world"; + name = "World Renderer"; + description = "Renders the 3D environment."; + version = "1.0.0"; + provides = ["renderer", "modifier:anchor"]; + requires = []; + scene = new s.Scene; + camera = new s.PerspectiveCamera(75, window.innerWidth / window.innerHeight, .1, 500); + glrenderer = new s.WebGLRenderer({ + powerPreference: "high-performance", + antialias: !0, + stencil: !1, + depth: !1 + }); + get canvas() { + return this.glrenderer.domElement + } + canvasRect = null; + composer = null; + antialias = new n.Ln({ + blendFunction: n.YQ.SRC + }); + bloom = new n.rk({ + intensity: 1.8, + radius: .6, + mipmapBlur: !0, + luminanceThreshold: 1.0000001 + }); + delta = 0; + graphicsVendor = "?"; + graphicsRenderer = "?"; + stats = { + frames: new l, + timers: new l, + timersRun: 0, + glTimeNanos: 0, + textureMemory: 0 + }; + frameTime = performance.now(); + timerWrapper = new h; + layers = ["render"]; + async onLoad() { + window.THREE = s, window.TWEEN = i.ZP, this.camera.position.y = 1.8, this.glrenderer.domElement.style.cssText = "position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; outline: none; ", this.glrenderer.domElement.tabIndex = 1, this.glrenderer.info.autoReset = !1, this.glrenderer.autoClear = !1, this.glrenderer.xr.enabled = !0, this.glrenderer.outputColorSpace = s.SRGBColorSpace, metapress.contentDiv.appendChild(this.glrenderer.domElement), window.addEventListener("resize", this.onResize), this.onResize(), window.addEventListener("orientationchange", this.onResize), window.screen.orientation.addEventListener("change", this.onResize), window.__metapress_bot ? (this.timerWrapper._originalSetInterval || setInterval)(this.onRender, 1e3 / 30) : this.glrenderer.setAnimationLoop(this.onRender); + try { + this.disjointTimerExt = this.glrenderer.getContext().getExtension("EXT_disjoint_timer_query_webgl2"), this.disjointTimerQuery = this.glrenderer.getContext().createQuery() + } catch (e) {} + } + $onAppReady() { + this.antialias.subpixelQuality = 1, this.updatePipeline() + } + onResize = async e => { + if (this.glrenderer.xr.isPresenting) return; + if (e) { + this._resizeCounter = (this._resizeCounter || 0) + 1; + let e = this._resizeCounter; + if (await new Promise((e => setTimeout(e, 200))), e != this._resizeCounter) return + } + this.canvasRect = this.canvas.getBoundingClientRect(); + let t = Math.round(this.canvasRect.width), + r = Math.round(this.canvasRect.height); + m.debug(`[WorldRenderer] Resizing viewport to ${t}x${r}`), this.composer ? this.composer.setSize(t, r, !1) : this.glrenderer.setSize(t, r, !1), this.camera.aspect = t / r, this.camera.updateProjectionMatrix(), e && metapress.plugins.sendEvent("renderer_onResize") + }; + onRender = () => { + try { + if (!metapress.isOpen) return + } catch (e) {} + this.stats.frames.start(); + let e = performance.now(); + this.delta = Math.min(1 / 15, (e - (this.frameTime || 0)) / 1e3), this.frameTime = e, metapress.plugins.sendEvent("beforeRender"), i.ZP.update(this.frameTime); + let t = this.glrenderer.getContext(), + r = !1; + this.disjointTimerExt && this.disjointTimerQuery && !this.disjointTimerQueryRunning && (this.disjointTimerQueryRunning = !0, r = !0, t.beginQuery(this.disjointTimerExt.TIME_ELAPSED_EXT, this.disjointTimerQuery)), metapress.plugins.sendEvent("onRender"), this.glrenderer.info.reset(), this.renderScene(), r && t.endQuery(this.disjointTimerExt.TIME_ELAPSED_EXT), this.disjointTimerQueryRunning && t.getQueryParameter(this.disjointTimerQuery, t.QUERY_RESULT_AVAILABLE) && (this.stats.glTimeNanos = Math.max(t.getQueryParameter(this.disjointTimerQuery, t.QUERY_RESULT), this.stats.glTimeNanos), this.disjointTimerQueryRunning = !1), metapress.plugins.sendEvent("afterRender"), this.stats.timers.start(); + let s = this.timerWrapper.runIteration(); + this.stats.timersRun += s, this.stats.timers.end(), this.stats.frames.end() + }; + renderScene() { + window.__metapress_bot ? this.scene.updateWorldMatrix(!1, !0) : (this.glrenderer.clear(), this.composer ? this.composer.render(this.delta) : this.glrenderer.render(this.scene, this.camera)) + } + $renderer_getPipelineEffects(e) { + return [this.antialias, this.bloom] + } + updatePipeline() { + this.composer && (this.composer.dispose(), this.composer = null), m.debug("[WorldRenderer] Creating effect composer"), this.composer = new n.xC(this.glrenderer, { + stencilBuffer: !0, + frameBufferType: s.HalfFloatType + }), this.composer.addPass(new n.CD(this.scene, this.camera)); + let e = metapress.plugins.callAll("renderer_getPipelinePasses", { + pipeline: this.composer, + camera: this.camera + }).flat().filter((e => !!e)), + t = metapress.plugins.callAll("renderer_getPipelineEffects", this.camera).flat().filter((e => !!e)); + t.sort(((e, t) => (e.priority || 0) - (t.priority || 0))), t.length > 0 && e.unshift(new n.H5(this.camera, ...t)), e.sort(((e, t) => (e.priority || 0) - (t.priority || 0))); + for (let t of e) this.composer.addPass(t) + } + $getDebugSection() { + if (!this.fetchedGlInfo) { + this.fetchedGlInfo = !0; + try { + let e = this.glrenderer.getContext(), + t = e?.getExtension("WEBGL_debug_renderer_info"); + if (!t) throw new Error("WebGL extension missing: WEBGL_debug_renderer_info"); + this.graphicsVendor = e.getParameter(t.UNMASKED_VENDOR_WEBGL) || "?", this.graphicsRenderer = e.getParameter(t.UNMASKED_RENDERER_WEBGL) || "?" + } catch (e) {} + } + let e = this.stats.frames.avgDuration, + t = this.stats.glTimeNanos / 1e6, + r = Math.max(e, t), + i = Math.round(Math.min(r / 12 * 100, 100)), + s = Date.now(); + if (!this._lastTextureMemoryDate || s - this._lastTextureMemoryDate > 5e3) { + this._lastTextureMemoryDate = s; + let e = []; + this.stats.textureMemory = 0, this.scene.traverse((t => { + if (t.material) + for (let r in t.material) { + let i = t.material[r]; + i?.image?.width && (e.includes(i) || (e.push(i), this.stats.textureMemory += i.image.width * i.image.height * 4)) + } + })) + } + let n = `Render (${this.stats.frames.count} FPS)`, + a = `Time: cpu=(${this.stats.frames.text}) gpu=${t?t.toFixed(1):"?"}ms budget=12ms usage=${i}%\nDriver: ${this.graphicsRenderer||"?"} - ${this.graphicsVendor||"?"}\nStats: api=${this.glrenderer.capabilities?.isWebGL2?"webgl2":"webgl1"} lib=threejs-v${window.__THREE__||"?"} calls=${this.glrenderer.info.render.calls} tris=${this.glrenderer.info.render.triangles} meshes=${this.glrenderer.info.memory.geometries} textures=(${this.glrenderer.info.memory.textures}, ${Math.round(this.stats.textureMemory/1024/1024)}MB)\nTimers: registered=${this.timerWrapper.timers.length} executed=${this.stats.timersRun}/s duration=(${this.stats.timers.text})`; + return this.stats.timersRun = 0, this.stats.glTimeNanos = 0, { + name: n, + text: a, + order: -100 + } + } + createModifier(e) { + if ("anchor" == e) return new a + } + namedLayer(e) { + let t = this.layers.indexOf(e); + if (-1 == t) { + if (32 == this.layers.length) throw new Error("Too many layers! There can only be a maximum of 32 layers."); + t = this.layers.length, this.layers.push(e) + } + return t + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3301.6c003d1f94da33ed48a2.bundle.js b/mp-core/3301.6c003d1f94da33ed48a2.bundle.js new file mode 100644 index 0000000..bf37412 --- /dev/null +++ b/mp-core/3301.6c003d1f94da33ed48a2.bundle.js @@ -0,0 +1,266 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3301], { + 13301: (e, t, r) => { + r.r(t), r.d(t, { + default: () => s + }); + var i = r(28721), + n = r(55293), + d = r(25108); + class s extends EventTarget { + id = "core.render.entities"; + name = "Entity Manager"; + description = "Manages entities. An entity is any visible thing in the 3D environment."; + version = "1.0.0"; + provides = ["entities"]; + requires = ["renderer"]; + all = []; + renderers = []; + modifiers = []; + onLoad() { + for (let e of metapress.config.template?.entities || []) this.add(e); + this.entityTimer = setInterval((() => this.checkAllEntities()), 250) + } + add(e) { + if (e.id || (e.id = (0, i.Z)()), e.type || (e.type = "group"), delete e._lastCheckComplete, delete e._deleted, this.all.find((t => t.id == e.id))) throw new Error(`An entity with ID '${e.id}' already exists.`); + return e.lastModified = Date.now(), e.lastEdited = Date.now(), this.all.push(e), metapress.plugins.sendEvent("onEntitiesUpdated"), "template" == e.sync && metapress.plugins.sendEvent("onUnsavedFieldsChanged"), e + } + create(e) { + return this.add(e) + } + get(e) { + return this.all.find((t => t.id == e)) + } + update(e, t) { + let r = this.all.find((t => t.id == e)); + if (!r) throw new Error(`Entity with id '${e}' was not found.`); + if (t.id && t.id == r.id && delete t.id, t.id) throw new Error("You cannot modify the 'id' field."); + if (t.type && t.type == r.type && delete t.type, t.type) throw new Error("You cannot modify the 'type' field."); + delete t._lastCheckComplete, delete t._deleted, Object.assign(r, t), r.lastModified = Date.now(), metapress.plugins.sendEvent("onEntitiesUpdated"), "template" == r.sync && metapress.plugins.sendEvent("onUnsavedFieldsChanged") + } + remove(e) { + let t = this.all.findIndex((t => t.id == e)); + if (-1 == t) return; + let r = this.all[t]; + "template" == r.sync && metapress.plugins.sendEvent("onUnsavedFieldsChanged"), metapress.editor?.selectionManager && metapress.editor.selectionManager.isSelected(e) && metapress.editor.selectionManager.deselectOnly(e), this.all.splice(t, 1), r._deleted = !0, metapress.plugins.sendEvent("onEntityRemoved", { + entity: r + }), metapress.plugins.sendEvent("onEntitiesUpdated") + } + delete(e) { + return this.remove(e) + } + getRenderer(e, t) { + let r = this.renderers.find((t => t.entity.id == e)); + return r && (t || r._loaded) ? r : null + } + getModifiers(e) { + return this.modifiers.filter((t => t.entity?.id == e)) + } + getModifier(e, t) { + return this.modifiers.find((r => r.entity?.id == e && r.id == t)) + } + $onPluginLoad(e) { + this.renderers = this.renderers.filter((e => !e._dummy)), this.modifiers = this.modifiers.filter((e => !e._dummy)) + } + checkAllEntities() { + if (metapress.plugins.allLoaded) { + for (let e = 0; e < this.all.length; e++) { + let t = this.all[e], + r = this.getOrCreateRenderer(t); + if (!r || !r._loaded || r._loadError) continue; + if (r._entityLastModified != t.lastModified) { + r._entityLastModified = t.lastModified; + try { + r.onEntityUpdated?.() + } catch (e) { + d.warn("[MetaPress > EntityManager] Error in onEntityUpdated:", e) + } + } + if (r._entityLastEdited != t.lastEdited) { + r._entityLastEdited = t.lastEdited; + try { + r.onEntityEdited?.() + } catch (e) { + d.warn("[MetaPress > EntityManager] Error in onEntityEdited:", e) + } + } + let i = !0; + for (let e in t) { + if (!e.startsWith("modifier:")) continue; + if (!t[e]) continue; + let n = this.getOrCreateModifier(t, r, e.substring(9)); + if (n && n._loaded && !n._loadError) { + if (n._entityLastModified != t.lastModified) { + n._entityLastModified = t.lastModified; + try { + n.onEntityUpdated?.() + } catch (e) { + d.warn("[MetaPress > EntityManager] Error in onEntityUpdated:", e) + } + } + if (n._entityLastEdited != t.lastEdited) { + n._entityLastEdited = t.lastEdited; + try { + n.onEntityEdited?.() + } catch (e) { + d.warn("[MetaPress > EntityManager] Error in onEntityEdited:", e) + } + } + } else n._loaded || (i = !1) + } + i && !r._hasSentLoadedEvent && (r._hasSentLoadedEvent = !0, metapress.plugins.sendEvent("onEntityLoaded", { + id: t.id, + renderer: r + })) + } + for (let e = 0; e < this.modifiers.length; e++) { + let t = this.modifiers[e]; + if (!t._loaded) continue; + let r = !this.all.includes(t.entity); + r = r || !t.entity["modifier:" + t.id], r = r || t._wantsUnload, r && (this.modifiers.splice(e--, 1), t.entity._lastCheckDate = 0, Promise.resolve().then((() => t.beforeUnload?.())).then((() => t.onUnload?.())).then((() => t.afterUnload?.())).catch((e => { + d.warn(`[MetaPress] Error unloading modifier '${t.id}' for '${t.entity.id}': `, e) + }))) + } + for (let e = 0; e < this.renderers.length; e++) { + let t = this.renderers[e]; + if (!t._loaded) continue; + let r = !this.all.includes(t.entity); + r = r || t._wantsUnload, r && (this.renderers.splice(e--, 1), t.entity._lastCheckDate = 0, Promise.resolve().then((() => t.beforeUnload?.())).then((() => t.onUnload?.())).then((() => t.afterUnload?.())).catch((e => { + d.warn(`[MetaPress] Error unloading renderer for '${t.entity.id}':`, e) + }))) + } + } + } + getOrCreateRenderer(e) { + let t = this.renderers.find((t => t.entity == e)); + if (t) return t; + let r = metapress["render:" + e.type]; + if (!r) return t = { + entity: e, + _loaded: !0, + _loadError: !0, + _dummy: !0 + }, this.renderers.push(t), t; + if (r._state == n.BV.Waiting || r._state == n.BV.Loading) return null; + try { + if (t = r.createRenderer?.(e.type), !t) throw !1 + } catch (r) { + return !1 !== r && d.warn(`[MetaPress > EntityManager] Error creating '${e.type}' renderer`, r), t = { + entity: e, + _loaded: !0, + _loadError: !0, + _dummy: !0 + }, this.renderers.push(t), t + } + return t.entity = e, t._loaded = !1, t._entityLastModified = e.lastModified, t._entityLastEdited = e.lastEdited, this.renderers.push(t), this.renderers.sort(((e, t) => (e.priority || 0) - (t.priority || 0))), Promise.resolve().then((() => t.beforeLoad?.())).then((() => t.onLoad?.())).then((() => metapress.plugins.callAllAsync("onEntityRendererLoad", t))).then((() => t.afterLoad?.())).then((() => t._loaded = !0)).catch((r => { + d.warn(`[MetaPress] Unable to load renderer for '${e.id}':`, r), t._loaded = !0, t._loadError = !0, metapress.plugins.sendEvent("entity_loadFailed", { + entity: e, + renderer: t, + error: r + }) + })), t + } + getOrCreateModifier(e, t, r) { + let i = this.getModifier(e.id, r); + if (i) return i; + let s = metapress["modifier:" + r]; + if (!s) return i = { + entity: e, + id: r, + _loaded: !0, + _loadError: !0, + _dummy: !0 + }, this.modifiers.push(i), i; + if (s._state == n.BV.Waiting || s._state == n.BV.Loading) return null; + try { + if (i = s.createModifier?.(r), !i) throw !1 + } catch (t) { + return !1 !== t && d.warn(`[MetaPress > EntityManager] Error creating '${e.type}' modifier`, t), i = { + entity: e, + id: r, + _loaded: !0, + _loadError: !0, + _dummy: !0 + }, this.modifiers.push(i), i + } + return i.id = r, i.entity = e, i.renderer = t, i._loaded = !1, i._entityLastModified = e.lastModified, i._entityLastEdited = e.lastEdited, this.modifiers.push(i), this.modifiers.sort(((e, t) => (e.priority || 0) - (t.priority || 0))), Promise.resolve().then((() => i.beforeLoad?.())).then((() => i.onLoad?.())).then((() => metapress.plugins.callAllAsync("onEntityModifierLoad", i))).then((() => i.afterLoad?.())).then((() => i._loaded = !0)).catch((t => { + d.warn(`[MetaPress] Unable to load modifier '${r}' for '${e.id}':`, t), i._loaded = !0, i._loadError = !0, metapress.plugins.sendEvent("entity_loadFailed", { + entity: e, + modifier: i, + error: t + }) + })), i + } + $beforeRender() { + for (let e of this.renderers) e.beforeRender && e._loaded && !e._loadError && e.beforeRender(); + for (let e of this.modifiers) e.beforeRender && e._loaded && !e._loadError && e.beforeRender() + } + $onRender() { + for (let e of this.renderers) e.onRender && e._loaded && !e._loadError && e.onRender(); + for (let e of this.modifiers) e.onRender && e._loaded && !e._loadError && e.onRender() + } + $afterRender() { + for (let e of this.renderers) e.afterRender && e._loaded && !e._loadError && e.afterRender(); + for (let e of this.modifiers) e.afterRender && e._loaded && !e._loadError && e.afterRender() + } + rendererFromObject3D(e) { + let t = e; + for (; t && !t.entityRenderer;) t = t.parent; + return t?.entityRenderer + } + isClickable(e) { + return !!this.getRenderer(e).onClick || !!metapress.entities.getModifiers(e).find((e => e.onClick)) + } + doClick(e, t) { + let r = metapress.entities.getRenderer(e)?.onClick?.(t); + for (let i of metapress.entities.getModifiers(e)) { + let e = i.onClick?.(t); + r = r || e + } + return r + } + reload(e) { + for (let t of this.renderers) t.entity.id == e && (t._wantsUnload = !0); + for (let t of this.modifiers) t.entity.id == e && (t._wantsUnload = !0) + } + $_onInternalEvent(e, t, r) { + t = "$" + t; + let i = e == n.mc.All || e == n.mc.AllAsync ? [] : null; + for (let d of this.renderers) { + if (!d[t]) continue; + let s = e == n.mc.AllAsync ? Promise.resolve().then((() => d[t]?.apply(d, r))) : d[t]?.apply(d, r); + if (null == s); + else if (e == n.mc.All || e == n.mc.AllAsync) i.push(s); + else if (e == n.mc.First) return s + } + for (let d of this.modifiers) { + if (!d[t]) continue; + let s = e == n.mc.AllAsync ? Promise.resolve().then((() => d[t]?.apply(d, r))) : d[t]?.apply(d, r); + if (null == s); + else if (e == n.mc.All || e == n.mc.AllAsync) i.push(s); + else if (e == n.mc.First) return s + } + return i + } + didSettingsChange(e, t) { + let r = e.entity; + if (!r) return !1; + if (!t) { + let i = e.settings; + if ("function" == typeof i) try { + i = i(r) + } catch (t) { + return d.warn(`[EntityManager] Error getting renderer/modifier settings for ${e.id}`, t), !1 + } + t = i?.map((e => e.id))?.filter((e => !!e)) || [] + } + e.__lastEntityState || (e.__lastEntityState = {}); + let i = !1; + for (let n of t) r[n] !== e.__lastEntityState[n] && (i = !0, e.__lastEntityState[n] = r[n]); + return i + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/341.48692c3a072447f43798.bundle.js b/mp-core/341.48692c3a072447f43798.bundle.js new file mode 100644 index 0000000..1b3255e --- /dev/null +++ b/mp-core/341.48692c3a072447f43798.bundle.js @@ -0,0 +1,75 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [341], { + 90341: (e, t, s) => { + s.r(t), s.d(t, { + default: () => l + }); + var a = s(80983), + o = s(25108); + class l { + id = "core.assets"; + name = "Asset Manager"; + description = "Handles downloading and managing assets, such as models, images, etc."; + version = "1.0.0"; + provides = ["assets"]; + cache = {}; + numActiveDownloads = 0; + load(e, t, s) { + let a = e + ":" + t, + l = this.cache[a]; + if (l && !s) return l; + let n = this.load2(e, t); + return this.cache[a] = n, n.catch((s => { + o.warn(`[MetaPress > Assets] Failed to load ${e} from ${t}`, s), this.cache[a] = null + })), n + } + async load2(e, t) { + let s = new URL(t, window.location.href), + l = s.pathname; + "blob:" == s.protocol && (l = s.href); + let n = "", + r = "application/octet-stream", + i = l.lastIndexOf("."); - 1 != i && (n = l.substring(i).toLowerCase(), r = a.lookup(l) || r); + let d = await metapress.plugins.callAllAsync("loadAsset", { + type: e, + url: t, + extension: n, + mimetype: r + }); + if (0 == d.length) throw new Error(`Asset type '${e}' (${r}) is not supported.`); + return d.length > 1 && o.warn(`[MetaPress > Assets] Multiple loaders responded to type '${e}' (${r}). One will be used at random!`), d[0] + } + getProviders() { + return metapress.plugins.callAll("getAssetProviders").flat().filter((e => null != e)) + } + download(e, t) { + let s = "_blob:" + e, + a = this.cache[s]; + if (a && !t) return a; + let l = this.download2(e); + return this.cache[s] = l, l.catch((t => { + o.warn(`[MetaPress > Assets] Failed to download ${e}`, t), this.cache[s] = null + })), l + } + async download2(e) { + for (this.numActiveDownloads = this.numActiveDownloads || 0; this.numActiveDownloads >= 8;) await new Promise((e => setTimeout(e, 100))); + try { + this.numActiveDownloads += 1; + let t = await fetch(e); + if (!t.ok) throw new Error(`Unable to load file: ${t.status} ${t.statusText}`); + return await t.blob() + } finally { + this.numActiveDownloads -= 1 + } + } + $loadAsset(e) { + return "blob" == e.type ? this.download(e.url) : "string" == e.type ? this.download(e.url).then((e => e.text())) : "image" == e.type ? new Promise(((t, s) => { + let a = new Image; + a.crossOrigin = "anonymous", a.src = e.url, a.onload = () => t(a), a.onerror = () => s(new Error("Unable to load image.")) + })) : void 0 + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3446.dd059db1d4c0efb71f7e.bundle.js b/mp-core/3446.dd059db1d4c0efb71f7e.bundle.js new file mode 100644 index 0000000..628528e --- /dev/null +++ b/mp-core/3446.dd059db1d4c0efb71f7e.bundle.js @@ -0,0 +1,360 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3446], { + 43446: (t, e, a) => { + a.r(e), a.d(e, { + default: () => h + }); + var i = a(99477), + r = a(1794), + s = a(25108); + class n { + name = "Avatar Controller"; + hidden = !0; + entity = null; + renderer = null; + shouldControl = !1; + animationOverrideActive = null; + characterController = null; + yVelocity = 0; + isGrounded = !0; + onLoad() { + this.shouldControl = this.entity.owner == metapress.instanceID, this.shouldControl && (this.characterController = metapress.physics.world.createCharacterController(.1), this.characterController.enableAutostep(.8, .1, !1), this.characterController.enableSnapToGround(.8), this.characterController.applyImpulsesToDynamicBodies(!0), this.characterController.setSlideEnabled(!0), this.characterController.setCharacterMass(50), this.characterController.setOffset(.1), this.isLoaded = !1) + } + onUnload() { + this.characterController && metapress.physics.world.removeCharacterController(this.characterController), this.characterController = null + } + onRender() { + this.shouldControl && this.entity["modifier:animator"] && this.onRenderAnimation() + } + axisY = new i.Vector3(0, 1, 0); + eulerA = new i.Euler; + quatA = new i.Quaternion; + $physics_beforeStep() { + if (!this.shouldControl) return; + if (!this.entity["modifier:physics"]) return; + if (this.entity.y < -15) return void metapress.spawnpoints.respawn(); + if (this.physicsModifier || (this.physicsModifier = metapress.entities.getModifier(this.entity.id, "physics")), !this.physicsModifier?.body || !this.physicsModifier.colliders?.length || null === metapress.physics.world_colliders || this.shouldControl && !this.isLoaded) return; + if (this.physicsModifier.colliders.length > 1 && !this.shownColliderWarning && (s.warn("[AvatarControllerModifier] Avatar has multiple colliders. This could cause issues.", this.entity), this.shownColliderWarning = !0), this.animationOverrideActive?.preventMovement) return; + this.v3a || (this.v3a = new i.Vector3), this.v3a.set(metapress.input.movementSmoothed.x, 0, -metapress.input.movementSmoothed.y), this.v3a.applyAxisAngle(this.axisY, metapress.renderer.camera.rotation.y); + let t = this.entity.avatar_walkSpeed || 2, + e = this.entity.avatar_runSpeed || 5, + a = this.v3a.length() / metapress.renderer.delta * (metapress.input.actionActive("run") ? e : t); + this._smoothSpeed || (this._smoothSpeed = 0), this._smoothSpeed = i.MathUtils.damp(this._smoothSpeed, a, 10, metapress.renderer.delta), this.v3a.setLength(this._smoothSpeed); + let r = this.entity.avatar_gravity ?? -9.8; + this.yVelocity += r * metapress.renderer.delta, this.v3a.y = this.yVelocity; + let n = this.physicsModifier.colliders[0]; + if (this.characterController.computeColliderMovement(n, this.v3a.multiplyScalar(metapress.physics.world.timestep)), this.entity.physics_kinematicVelocity) { + let t = this.characterController.computedMovement(); + t.x /= metapress.physics.world.timestep, t.y /= metapress.physics.world.timestep, t.z /= metapress.physics.world.timestep, this.physicsModifier.body.setLinvel(t, !0) + } else if (this.entity.physics_kinematicPosition) { + let t = this.characterController.computedMovement(), + e = this.physicsModifier.body.translation(); + e.x += t.x, e.y += t.y, e.z += t.z, this.physicsModifier.body.setTranslation(e) + } else this.warnedUnknownType || (s.warn("[AvatarControllerModifier] Unknown physics kinematic mode", this.entity), this.warnedUnknownType = !0); + let o = this.characterController.computedGrounded(); + o != this.isGrounded && s.debug(`[AvatarControllerModifier] Grounded: ${o}`), this.isGrounded = o, o && (this.yVelocity = 0), this.isGrounded && metapress.input.actionActive("jump") && (s.debug("[AvatarControllerModifier] Jumping"), this.yVelocity += this.entity.avatar_jumpHeight || 5, this.isGrounded = !1, metapress.plugins.sendEvent("avatar_jump", { + id: this.entity.id, + height: this.entity.avatar_jumpHeight || 5 + }), this.overrideAnimation({ + animationStart: "jump_start", + animation: "jump_loop", + animationEnd: "jump_end", + interruptOnGround: !0, + pauseAtEnd: !0 + })) + } + $physics_unlocked() { + this.yVelocity = 0 + } + onRenderAnimation() { + if (this.animationOverrideActive) return; + let t = metapress.input.movement.length() / metapress.renderer.delta > .1 ? metapress.input.actionActive("run") ? "run" : "walk" : "idle"; + if (this._lastAnimationName != t) { + this._lastAnimationName = t; + let e = this.entity.avatar_skeletonType || "core.human"; + this.entity.animation_name = e + "." + t, this.entity.animation_loop = !0 + } + } + async overrideAnimation(t) { + let e = this.entity.avatar_skeletonType || "core.human"; + if (!t.animationStart && !t.animation && !t.animationEnd) throw new Error("Please specify an animation name to play."); + if (this.animator || (this.animator = metapress.entities.getModifier(this.entity.id, "animator")), !this.animator) return; + if (this.animationOverrideActive = t, this._lastAnimationName = "", this._didTryToMove = !1, t.animationStart && await this.animator.playAnimationAndWait(e + "." + t.animationStart), this.animationOverrideActive != t) return; + let a = t.loop; + !0 === a && (a = 1 / 0), !1 === a && (a = 1), null == a && (a = 1); + let i = 0; + for (;;) { + let s = !1; + t.animation && i < a && this.animator.playAnimationAndWait(e + "." + t.animation).then((t => s = !0)); + let n = await (0, r.C)((() => s ? 1 : this.animationOverrideActive != t ? 3 : t.interruptOnMovement && (metapress.input.movement.length() > .001 || metapress.input.actionActive("jump")) || t.interruptOnGround && this.isGrounded ? 2 : void 0)); + if (2 == n) break; + if (3 == n) return; + if (i += 1, i >= a && !t.pauseAtEnd) break + } + t.animationEnd && await this.animator.playAnimationAndWait(e + "." + t.animationEnd), this.animationOverrideActive == t && (this.animationOverrideActive = null) + } + $onEntityLoaded(t) { + t.id == metapress.avatar.currentUserEntity.id && (this.isLoaded = !0) + } + } + class o { + instanceID = ""; + avatarID = ""; + lastSeen = 0; + get x() { + return this.avatarEntity?.x || 0 + } + get y() { + return this.avatarEntity?.y || 0 + } + get z() { + return this.avatarEntity?.z || 0 + } + metadata = {}; + get name() { + return this.metadata.name || "Guest" + } + get avatarEntity() { + return this._avatarEntity && this.avatarID == this._avatarEntity?.id && !this.needsEntityUpdate || (this._avatarEntity = metapress.entities.all.find((t => t.isMainAvatar && "avatars" == t.sync && t.owner == this.instanceID)), this.needsEntityUpdate = !1), this._avatarEntity + } + get distance() { + let t = Date.now(); + if (this._lastDistanceCheck && t - this._lastDistanceCheck < 500) return this._lastDistanceValue; + if (!this.avatarEntity) return this._lastDistanceCheck = t, this._lastDistanceValue = -1, -1; + let e = metapress.renderer.camera.position, + a = Math.sqrt((this.x - e.x) ** 2 + (this.y - e.y) ** 2 + (this.z - e.z) ** 2); + return this._lastDistanceCheck = t, this._lastDistanceValue = a, a + } + } + var l = a(25108); + class h { + id = "core.avatars"; + name = "Avatars over IPFS PubSub"; + description = "Creates avatar entities based on realtime data."; + version = "1.0.0"; + requires = ["entities", "camera", "physics", "profile", "avatar:default"]; + provides = ["avatar", "avatars", "modifier:avatar-controller"]; + users = []; + sharedMetadata = {}; + currentUserEntity = null; + fallbackAvatarConfiguration = { + type: "cube", + "modifier:physics": !0, + physics_enabled: !0, + physics_shape: "cube", + "modifier:avatar-controller": !0, + avatar_id: "fallback" + }; + async onLoad() { + this.updateTimer = setInterval(this.sendSlowUpdate.bind(this), 5e3), this.cleanupTimer = setInterval(this.cleanup.bind(this), 1e4); + let t = metapress.profile.get("avatarConfig"); + if (!t) { + let configurations = metapress.plugins.callAll("getAvatarConfigurations").flat().filter((t => !!t)); + if (configurations.length > 0) { + let randomIndex = Math.floor(Math.random() * configurations.length); + t = configurations[randomIndex]; + } else { + l.warn(`[MetaPress > Avatars] No avatar configurations found!`), t = this.fallbackAvatarConfiguration; + } + } + await this.setAvatarConfiguration(t, !0) + } + updateAvatarEntity(t) { + metapress.entities.update(this.currentUserEntity.id, t) + } + moveTo(t, e, a) { + this.updateAvatarEntity({ + x: t, + y: e, + z: a + }) + } + distanceTo(t) { + if ("string" == typeof t && !(t = metapress.entities.get(t))) return -1; + let e = this.currentUserEntity?.x || 0, + a = this.currentUserEntity?.y || 0, + i = this.currentUserEntity?.z || 0, + r = t.x || 0, + s = t.y || 0, + n = t.z || 0; + return Math.sqrt((e - r) ** 2 + (a - s) ** 2 + (i - n) ** 2) + } + getAdvertisementPacket() { + return this.sharedMetadata.name = metapress.profile.currentProfile.fields.name || "Guest", { + action: "advertise", + instanceID: metapress.instanceID, + metadata: this.sharedMetadata, + entities: [this.currentUserEntity] + } + } + sendSlowUpdate() { + metapress.messaging.send("global", "avatar:update", this.getAdvertisementPacket()) + } + $onIncomingMessage(t) { + "avatar:update" == t.name && this.onAdvertisementPacketReceived(t.data, t.from, !0) + } + onAdvertisementPacketReceived(t, e, a = !1) { + let i = null; + try { + i = this.users.find((t => t.instanceID == e)), i || (i = new o, i.instanceID = e, this.users.push(i)), i.lastSeen = Date.now(), i.metadata = t.metadata || i.metadata; + for (let r = 0; r < t.entities.length; r++) { + let s = 0 == r, + n = t.entities[r], + o = n.id, + l = metapress.entities.get(o); + if (l) { + if (a && l.lastModified > i.lastSeen - 1e3) continue; + metapress.entities.update(o, { + ...n, + id: l.id, + sync: l.sync, + owner: l.owner, + isMainAvatar: s + }), i.avatarID = l.id, l.x == i.avatarEntity.x && l.y == i.avatarEntity.y && l.z == i.avatarEntity.z || (i.needsEntityUpdate = !0) + } else l = metapress.entities.add({ + ...n, + sync: "avatars", + owner: e, + isMainAvatar: s + }), i.avatarID = l.id + } + for (let a of metapress.entities.all) "avatars" == a.sync && a.owner == e && (t.entities.find((t => t.id == a.id)) || metapress.entities.remove(a.id)) + } catch (t) { + l.warn(`[MetaPress > Avatars] Failed to process update from ${e}: `, t) + } + return i + } + cleanup() { + let t = Date.now(); + for (let e of this.users) + if (!(t - e.lastSeen < 15e3)) { + this.users = this.users.filter((t => t != e)); + for (let t of metapress.entities.all) "avatars" == t.sync && t.owner == e.instanceID && metapress.entities.remove(t.id) + } + } + getUser(t, e) { + let a = this.users.find((e => e.instanceID == t)); + return a || (e ? (a = new o, a.instanceID = t, this.users.push(a), a) : null) + } + async setConfigurationByID(t, e = !1) { + let a = this.getConfigurations().find((e => e.avatar_id == t)); + if (!a) throw new Error(`Avatar configuration for '${t}' not found!`); + this.currentUserEntity?.avatar_id != t || this.currentUserEntity?.url != a.url || e ? await this.setAvatarConfiguration(a) : l.warn(`[MetaPress > Avatars] Avatar configuration '${t}' is already active.`) + } + getConfigurations() { + return metapress.plugins.callAll("getAvatarConfigurations").flat().filter((t => !!t)) + } + get configurationID() { + return this.currentUserEntity?.avatar_id || "extra.justin" + } + async setAvatarConfiguration(t, e) { + if (t.getURL && "function" == typeof t.getURL) { + let e = t.getURL; + delete(t = { + ...t + }).getURL; + let a = null; + try { + a = await e() + } catch (t) { + l.error("[MetaPress > Avatars] Failed to get URL for avatar: ", t) + } + if (!a) return null; + if ("string" == typeof a) t.url = a; + else { + if ("object" != typeof a) return l.error("[MetaPress > Avatars] Unknown response from getURL function: ", a), null; + t = { + ...t, + ...a + } + } + } + let a = this.currentUserEntity; + a && metapress.entities.remove(a.id), this.currentUserEntity = metapress.entities.add({ + ...t, + id: "", + sync: "avatars", + owner: metapress.instanceID, + x: a?.x || 0, + y: a?.y || 0, + z: a?.z || 0 + }), metapress.camera.attachedEntity = this.currentUserEntity, metapress.camera.attachedEntityOffset.set(0, this.currentUserEntity.avatar_eye_height || .95 * (this.currentUserEntity.avatar_height || 1.8), 0), e || metapress.profile.set("avatarConfig", t), a && metapress.plugins.sendEvent("avatar_changed", t), setTimeout((t => { + a && a?.y != this.currentUserEntity.y && this.updateAvatarEntity({ + y: a.y + }) + }), 1e3) + } + createModifier(t) { + if ("avatar-controller" == t) return new n + } + $getDebugMenuOptions = () => [{ + id: "core.avatar.respawn", + section: "Avatar", + name: "Move to Origin", + action: () => metapress.entities.update(this.currentUserEntity.id, { + x: 0, + y: 0, + z: 0 + }) + }]; + $profile_onUpdate(t) { + let e = t?.isFromPortal ? metapress.profile.get("avatarConfig") : null; + t?.isFromPortal && e && this.setAvatarConfiguration(e, !0) + } + $entity_loadFailed({ + entity: t, + renderer: e, + modifier: a + }) { + t.id == this.currentUserEntity?.id && (l.warn("[MetaPress > Avatars] Failed to load avatar entity, setting back to default."), this.setConfigurationByID("default")) + } + moveToUser(t) { + this.users.forEach((e => { + let a = t?.toLowerCase(); + if (e.name.toLowerCase().includes(a)) { + var i = Math.random(); + let t = e.x + i, + a = e.y + i, + r = e.z + i; + this.moveTo(t, a, r) + } + })) + } + $ai_getKnowledgeBaseEntries = () => [{ + id: "core.avatars:setAvatar", + type: "action", + name: "Set Avatar", + content: `\n To change the avatar, run the KB action "core.avatars:setAvatar" with value as the ID of the avatar to use.\n Current avatar: id=${this.currentUserEntity?.avatar_id||"default"} name=${this.currentUserEntity?.avatar_name||"default"}\n Available avatars:\n ${this.getConfigurations().map((t=>`- id=${t.avatar_id} name=${t.avatar_name}`)).join("\n")}\n `, + action: t => this.setConfigurationByID(t.value) + }, { + id: `${this.id}:goToUser`, + type: "action", + name: "Avatars - Go To User", + tags: "go to user, find user, teleport to user, join user, take me to, take me to user, go to person, find person, teleport to person, join person, take me to, take me to person, go to avatar, find avatar, teleport to avatar, join avatar, take me to, take me to avatar", + content: `\n This action can be used to go to a user in the space.\n Assistant instruction: The value is the name of the user to go to. This is the list of users in a space:\n ${this.users.map((t=>`- ${t.name}`)).join("\n")}\n `, + action: t => { + if (!t.value) throw new Error("Cannot go to user."); + return this.moveToUser(t.value), "Moved to user." + } + }] + } + }, + 1794: (t, e, a) => { + function i(t, e = 1 / 0) { + return new Promise(((a, i) => { + let r = Date.now(), + s = null; + s = setInterval((function() { + if (Date.now() - r > e) return clearInterval(s), void i(new Error("Timed out.")); + let n = t(); + n && (clearInterval(s), a(n)) + }), 5) + })) + } + a.d(e, { + C: () => i + }) + } + } +]); \ No newline at end of file diff --git a/mp-core/3475.e6774ca63479294c37ab.bundle.js b/mp-core/3475.e6774ca63479294c37ab.bundle.js new file mode 100644 index 0000000..bb2556e --- /dev/null +++ b/mp-core/3475.e6774ca63479294c37ab.bundle.js @@ -0,0 +1,22304 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3475], { + 47743: (o, e, i) => { + i.d(e, { + Z: () => p + }); + var r, n = i(25108), + s = function(o, e, i, r) { + if ("a" === i && !r) throw new TypeError("Private accessor was defined without a getter"); + if ("function" == typeof e ? o !== e || !r : !e.has(o)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return "m" === i ? r : "a" === i ? r.call(o) : r ? r.value : e.get(o) + }; + + function t(o, e) { + const i = [...o], + r = i.length; + let n = ""; + for (let o = 0; o < r; o++) n += a(i[o]) + "-"; + return n = n.substring(0, n.length - 1), `https://dataabinash.github.io/emoji/${e.author}/${e.type}/${e.size}/emojis/${n}.${e.type}` + } + + function a(o) { + let e = 0; + return 1 == o.length ? e = o.charCodeAt(0) : 2 == o.length ? e = 1024 * (o.charCodeAt(0) - 55296) + (o.charCodeAt(1) - 56320) + 65536 : n.warn(`The emoji '${o}' is not suported.`), e.toString(16) + } + class p { + constructor(o) { + r.set(this, { + author: "apple", + type: "png", + size: 160 + }), o && this.setProps(o) + } + setProps(o) { + o.author && (s(this, r, "f").author = o.author), o.size && (s(this, r, "f").size = o.size), o.type && (s(this, r, "f").type = o.type) + } + set author(o) { + s(this, r, "f").author = o + } + set type(o) { + s(this, r, "f").type = o + } + set size(o) { + s(this, r, "f").size = o + } + get(o) { + return t(o, s(this, r, "f")) + } + static get(o, e = { + author: "apple", + type: "png", + size: 160 + }) { + return t(o, e) + } + } + r = new WeakMap + }, + 55437: (o, e, i) => { + i.d(e, { + m6: () => t + }); + const r = [{ + emoji: "😀", + description: "grinning face", + version: "1.0", + keywords: ["face", "grin", "grinning face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😃", + description: "grinning face with big eyes", + version: "0.6", + keywords: ["face", "grinning face with big eyes", "mouth", "open", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😄", + description: "grinning face with smiling eyes", + version: "0.6", + keywords: ["eye", "face", "grinning face with smiling eyes", "mouth", "open", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😁", + description: "beaming face with smiling eyes", + version: "0.6", + keywords: ["beaming face with smiling eyes", "eye", "face", "grin", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😆", + description: "grinning squinting face", + version: "0.6", + keywords: ["face", "grinning squinting face", "laugh", "mouth", "satisfied", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😅", + description: "grinning face with sweat", + version: "0.6", + keywords: ["cold", "face", "grinning face with sweat", "open", "smile", "sweat"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "🤣", + description: "rolling on the floor laughing", + version: "3.0", + keywords: ["face", "floor", "laugh", "rofl", "rolling", "rolling on the floor laughing", "rotfl"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😂", + description: "face with tears of joy", + version: "0.6", + keywords: ["face", "face with tears of joy", "joy", "laugh", "tear"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "🙂", + description: "slightly smiling face", + version: "1.0", + keywords: ["face", "slightly smiling face", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "🙃", + description: "upside-down face", + version: "1.0", + keywords: ["face", "upside-down"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "🫠", + description: "melting face", + version: "14.0", + keywords: ["disappear", "dissolve", "liquid", "melt", "melting face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😉", + description: "winking face", + version: "0.6", + keywords: ["face", "wink", "winking face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😊", + description: "smiling face with smiling eyes", + version: "0.6", + keywords: ["blush", "eye", "face", "smile", "smiling face with smiling eyes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "😇", + description: "smiling face with halo", + version: "1.0", + keywords: ["angel", "face", "fantasy", "halo", "innocent", "smiling face with halo"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-smiling" + }, { + emoji: "🥰", + description: "smiling face with hearts", + version: "11.0", + keywords: ["adore", "crush", "hearts", "in love", "smiling face with hearts"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😍", + description: "smiling face with heart-eyes", + version: "0.6", + keywords: ["eye", "face", "love", "smile", "smiling face with heart-eyes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "🤩", + description: "star-struck", + version: "5.0", + keywords: ["eyes", "face", "grinning", "star", "star-struck"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😘", + description: "face blowing a kiss", + version: "0.6", + keywords: ["face", "face blowing a kiss", "kiss"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😗", + description: "kissing face", + version: "1.0", + keywords: ["face", "kiss", "kissing face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "☺️", + description: "smiling face", + version: "0.6", + keywords: ["face", "outlined", "relaxed", "smile", "smiling face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😚", + description: "kissing face with closed eyes", + version: "0.6", + keywords: ["closed", "eye", "face", "kiss", "kissing face with closed eyes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😙", + description: "kissing face with smiling eyes", + version: "1.0", + keywords: ["eye", "face", "kiss", "kissing face with smiling eyes", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "🥲", + description: "smiling face with tear", + version: "13.0", + keywords: ["grateful", "proud", "relieved", "smiling", "smiling face with tear", "tear", "touched"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-affection" + }, { + emoji: "😋", + description: "face savoring food", + version: "0.6", + keywords: ["delicious", "face", "face savoring food", "savouring", "smile", "yum"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "😛", + description: "face with tongue", + version: "1.0", + keywords: ["face", "face with tongue", "tongue"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "😜", + description: "winking face with tongue", + version: "0.6", + keywords: ["eye", "face", "joke", "tongue", "wink", "winking face with tongue"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "🤪", + description: "zany face", + version: "5.0", + keywords: ["eye", "goofy", "large", "small", "zany face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "😝", + description: "squinting face with tongue", + version: "0.6", + keywords: ["eye", "face", "horrible", "squinting face with tongue", "taste", "tongue"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "🤑", + description: "money-mouth face", + version: "1.0", + keywords: ["face", "money", "money-mouth face", "mouth"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-tongue" + }, { + emoji: "🤗", + description: "smiling face with open hands", + version: "1.0", + keywords: ["face", "hug", "hugging", "open hands", "smiling face", "smiling face with open hands"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🤭", + description: "face with hand over mouth", + version: "5.0", + keywords: ["face with hand over mouth", "whoops"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🫢", + description: "face with open eyes and hand over mouth", + version: "14.0", + keywords: ["amazement", "awe", "disbelief", "embarrass", "face with open eyes and hand over mouth", "scared", "surprise"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🫣", + description: "face with peeking eye", + version: "14.0", + keywords: ["captivated", "face with peeking eye", "peep", "stare"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🤫", + description: "shushing face", + version: "5.0", + keywords: ["quiet", "shush", "shushing face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🤔", + description: "thinking face", + version: "1.0", + keywords: ["face", "thinking"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🫡", + description: "saluting face", + version: "14.0", + keywords: ["OK", "salute", "saluting face", "sunny", "troops", "yes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hand" + }, { + emoji: "🤐", + description: "zipper-mouth face", + version: "1.0", + keywords: ["face", "mouth", "zipper", "zipper-mouth face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "🤨", + description: "face with raised eyebrow", + version: "5.0", + keywords: ["distrust", "face with raised eyebrow", "skeptic"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😐", + description: "neutral face", + version: "0.7", + keywords: ["deadpan", "face", "meh", "neutral"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😑", + description: "expressionless face", + version: "1.0", + keywords: ["expressionless", "face", "inexpressive", "meh", "unexpressive"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😶", + description: "face without mouth", + version: "1.0", + keywords: ["face", "face without mouth", "mouth", "quiet", "silent"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "🫥", + description: "dotted line face", + version: "14.0", + keywords: ["depressed", "disappear", "dotted line face", "hide", "introvert", "invisible"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😶🌫️", + description: "face in clouds", + version: "13.1", + keywords: ["absentminded", "face in clouds", "face in the fog", "head in clouds"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😏", + description: "smirking face", + version: "0.6", + keywords: ["face", "smirk", "smirking face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😒", + description: "unamused face", + version: "0.6", + keywords: ["face", "unamused", "unhappy"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "🙄", + description: "face with rolling eyes", + version: "1.0", + keywords: ["eyeroll", "eyes", "face", "face with rolling eyes", "rolling"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😬", + description: "grimacing face", + version: "1.0", + keywords: ["face", "grimace", "grimacing face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😮💨", + description: "face exhaling", + version: "13.1", + keywords: ["exhale", "face exhaling", "gasp", "groan", "relief", "whisper", "whistle"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "🤥", + description: "lying face", + version: "3.0", + keywords: ["face", "lie", "lying face", "pinocchio"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "🫨", + description: "shaking face", + version: "15.0", + keywords: ["earthquake", "face", "shaking", "shock", "vibrate"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-neutral-skeptical" + }, { + emoji: "😌", + description: "relieved face", + version: "0.6", + keywords: ["face", "relieved"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-sleepy" + }, { + emoji: "😔", + description: "pensive face", + version: "0.6", + keywords: ["dejected", "face", "pensive"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-sleepy" + }, { + emoji: "😪", + description: "sleepy face", + version: "0.6", + keywords: ["face", "good night", "sleep", "sleepy face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-sleepy" + }, { + emoji: "🤤", + description: "drooling face", + version: "3.0", + keywords: ["drooling", "face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-sleepy" + }, { + emoji: "😴", + description: "sleeping face", + version: "1.0", + keywords: ["face", "good night", "sleep", "sleeping face", "ZZZ"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-sleepy" + }, { + emoji: "😷", + description: "face with medical mask", + version: "0.6", + keywords: ["cold", "doctor", "face", "face with medical mask", "mask", "sick"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤒", + description: "face with thermometer", + version: "1.0", + keywords: ["face", "face with thermometer", "ill", "sick", "thermometer"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤕", + description: "face with head-bandage", + version: "1.0", + keywords: ["bandage", "face", "face with head-bandage", "hurt", "injury"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤢", + description: "nauseated face", + version: "3.0", + keywords: ["face", "nauseated", "vomit"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤮", + description: "face vomiting", + version: "5.0", + keywords: ["face vomiting", "puke", "sick", "vomit"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤧", + description: "sneezing face", + version: "3.0", + keywords: ["face", "gesundheit", "sneeze", "sneezing face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🥵", + description: "hot face", + version: "11.0", + keywords: ["feverish", "heat stroke", "hot", "hot face", "red-faced", "sweating"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🥶", + description: "cold face", + version: "11.0", + keywords: ["blue-faced", "cold", "cold face", "freezing", "frostbite", "icicles"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🥴", + description: "woozy face", + version: "11.0", + keywords: ["dizzy", "intoxicated", "tipsy", "uneven eyes", "wavy mouth", "woozy face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "😵", + description: "face with crossed-out eyes", + version: "0.6", + keywords: ["crossed-out eyes", "dead", "face", "face with crossed-out eyes", "knocked out"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "😵💫", + description: "face with spiral eyes", + version: "13.1", + keywords: ["dizzy", "face with spiral eyes", "hypnotized", "spiral", "trouble", "whoa"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤯", + description: "exploding head", + version: "5.0", + keywords: ["exploding head", "mind blown", "shocked"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-unwell" + }, { + emoji: "🤠", + description: "cowboy hat face", + version: "3.0", + keywords: ["cowboy", "cowgirl", "face", "hat"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hat" + }, { + emoji: "🥳", + description: "partying face", + version: "11.0", + keywords: ["celebration", "hat", "horn", "party", "partying face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hat" + }, { + emoji: "🥸", + description: "disguised face", + version: "13.0", + keywords: ["disguise", "disguised face", "face", "glasses", "incognito", "nose"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-hat" + }, { + emoji: "😎", + description: "smiling face with sunglasses", + version: "1.0", + keywords: ["bright", "cool", "face", "smiling face with sunglasses", "sun", "sunglasses"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-glasses" + }, { + emoji: "🤓", + description: "nerd face", + version: "1.0", + keywords: ["face", "geek", "nerd"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-glasses" + }, { + emoji: "🧐", + description: "face with monocle", + version: "5.0", + keywords: ["face", "face with monocle", "monocle", "stuffy"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-glasses" + }, { + emoji: "😕", + description: "confused face", + version: "1.0", + keywords: ["confused", "face", "meh"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "🫤", + description: "face with diagonal mouth", + version: "14.0", + keywords: ["disappointed", "face with diagonal mouth", "meh", "skeptical", "unsure"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😟", + description: "worried face", + version: "1.0", + keywords: ["face", "worried"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "🙁", + description: "slightly frowning face", + version: "1.0", + keywords: ["face", "frown", "slightly frowning face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "☹️", + description: "frowning face", + version: "0.7", + keywords: ["face", "frown", "frowning face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😮", + description: "face with open mouth", + version: "1.0", + keywords: ["face", "face with open mouth", "mouth", "open", "sympathy"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😯", + description: "hushed face", + version: "1.0", + keywords: ["face", "hushed", "stunned", "surprised"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😲", + description: "astonished face", + version: "0.6", + keywords: ["astonished", "face", "shocked", "totally"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😳", + description: "flushed face", + version: "0.6", + keywords: ["dazed", "face", "flushed"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "🥺", + description: "pleading face", + version: "11.0", + keywords: ["begging", "mercy", "pleading face", "puppy eyes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "🥹", + description: "face holding back tears", + version: "14.0", + keywords: ["angry", "cry", "face holding back tears", "proud", "resist", "sad"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😦", + description: "frowning face with open mouth", + version: "1.0", + keywords: ["face", "frown", "frowning face with open mouth", "mouth", "open"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😧", + description: "anguished face", + version: "1.0", + keywords: ["anguished", "face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😨", + description: "fearful face", + version: "0.6", + keywords: ["face", "fear", "fearful", "scared"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😰", + description: "anxious face with sweat", + version: "0.6", + keywords: ["anxious face with sweat", "blue", "cold", "face", "rushed", "sweat"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😥", + description: "sad but relieved face", + version: "0.6", + keywords: ["disappointed", "face", "relieved", "sad but relieved face", "whew"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😢", + description: "crying face", + version: "0.6", + keywords: ["cry", "crying face", "face", "sad", "tear"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😭", + description: "loudly crying face", + version: "0.6", + keywords: ["cry", "face", "loudly crying face", "sad", "sob", "tear"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😱", + description: "face screaming in fear", + version: "0.6", + keywords: ["face", "face screaming in fear", "fear", "munch", "scared", "scream"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😖", + description: "confounded face", + version: "0.6", + keywords: ["confounded", "face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😣", + description: "persevering face", + version: "0.6", + keywords: ["face", "persevere", "persevering face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😞", + description: "disappointed face", + version: "0.6", + keywords: ["disappointed", "face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😓", + description: "downcast face with sweat", + version: "0.6", + keywords: ["cold", "downcast face with sweat", "face", "sweat"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😩", + description: "weary face", + version: "0.6", + keywords: ["face", "tired", "weary"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😫", + description: "tired face", + version: "0.6", + keywords: ["face", "tired"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "🥱", + description: "yawning face", + version: "12.0", + keywords: ["bored", "tired", "yawn", "yawning face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-concerned" + }, { + emoji: "😤", + description: "face with steam from nose", + version: "0.6", + keywords: ["face", "face with steam from nose", "triumph", "won"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "😡", + description: "enraged face", + version: "0.6", + keywords: ["angry", "enraged", "face", "mad", "pouting", "rage", "red"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "😠", + description: "angry face", + version: "0.6", + keywords: ["anger", "angry", "face", "mad"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "🤬", + description: "face with symbols on mouth", + version: "5.0", + keywords: ["face with symbols on mouth", "swearing"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "😈", + description: "smiling face with horns", + version: "1.0", + keywords: ["face", "fairy tale", "fantasy", "horns", "smile", "smiling face with horns"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "👿", + description: "angry face with horns", + version: "0.6", + keywords: ["angry face with horns", "demon", "devil", "face", "fantasy", "imp"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "💀", + description: "skull", + version: "0.6", + keywords: ["death", "face", "fairy tale", "monster", "skull"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "☠️", + description: "skull and crossbones", + version: "1.0", + keywords: ["crossbones", "death", "face", "monster", "skull", "skull and crossbones"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-negative" + }, { + emoji: "💩", + description: "pile of poo", + version: "0.6", + keywords: ["dung", "face", "monster", "pile of poo", "poo", "poop"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "🤡", + description: "clown face", + version: "3.0", + keywords: ["clown", "face"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "👹", + description: "ogre", + version: "0.6", + keywords: ["creature", "face", "fairy tale", "fantasy", "monster", "ogre"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "👺", + description: "goblin", + version: "0.6", + keywords: ["creature", "face", "fairy tale", "fantasy", "goblin", "monster"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "👻", + description: "ghost", + version: "0.6", + keywords: ["creature", "face", "fairy tale", "fantasy", "ghost", "monster"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "👽", + description: "alien", + version: "0.6", + keywords: ["alien", "creature", "extraterrestrial", "face", "fantasy", "ufo"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "👾", + description: "alien monster", + version: "0.6", + keywords: ["alien", "creature", "extraterrestrial", "face", "monster", "ufo"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "🤖", + description: "robot", + version: "1.0", + keywords: ["face", "monster", "robot"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "face-costume" + }, { + emoji: "😺", + description: "grinning cat", + version: "0.6", + keywords: ["cat", "face", "grinning", "mouth", "open", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😸", + description: "grinning cat with smiling eyes", + version: "0.6", + keywords: ["cat", "eye", "face", "grin", "grinning cat with smiling eyes", "smile"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😹", + description: "cat with tears of joy", + version: "0.6", + keywords: ["cat", "cat with tears of joy", "face", "joy", "tear"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😻", + description: "smiling cat with heart-eyes", + version: "0.6", + keywords: ["cat", "eye", "face", "heart", "love", "smile", "smiling cat with heart-eyes"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😼", + description: "cat with wry smile", + version: "0.6", + keywords: ["cat", "cat with wry smile", "face", "ironic", "smile", "wry"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😽", + description: "kissing cat", + version: "0.6", + keywords: ["cat", "eye", "face", "kiss", "kissing cat"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "🙀", + description: "weary cat", + version: "0.6", + keywords: ["cat", "face", "oh", "surprised", "weary"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😿", + description: "crying cat", + version: "0.6", + keywords: ["cat", "cry", "crying cat", "face", "sad", "tear"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "😾", + description: "pouting cat", + version: "0.6", + keywords: ["cat", "face", "pouting"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "cat-face" + }, { + emoji: "🙈", + description: "see-no-evil monkey", + version: "0.6", + keywords: ["evil", "face", "forbidden", "monkey", "see", "see-no-evil monkey"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "monkey-face" + }, { + emoji: "🙉", + description: "hear-no-evil monkey", + version: "0.6", + keywords: ["evil", "face", "forbidden", "hear", "hear-no-evil monkey", "monkey"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "monkey-face" + }, { + emoji: "🙊", + description: "speak-no-evil monkey", + version: "0.6", + keywords: ["evil", "face", "forbidden", "monkey", "speak", "speak-no-evil monkey"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "monkey-face" + }, { + emoji: "💌", + description: "love letter", + version: "0.6", + keywords: ["heart", "letter", "love", "mail"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💘", + description: "heart with arrow", + version: "0.6", + keywords: ["arrow", "cupid", "heart with arrow"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💝", + description: "heart with ribbon", + version: "0.6", + keywords: ["heart with ribbon", "ribbon", "valentine"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💖", + description: "sparkling heart", + version: "0.6", + keywords: ["excited", "sparkle", "sparkling heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💗", + description: "growing heart", + version: "0.6", + keywords: ["excited", "growing", "growing heart", "nervous", "pulse"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💓", + description: "beating heart", + version: "0.6", + keywords: ["beating", "beating heart", "heartbeat", "pulsating"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💞", + description: "revolving hearts", + version: "0.6", + keywords: ["revolving", "revolving hearts"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💕", + description: "two hearts", + version: "0.6", + keywords: ["love", "two hearts"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💟", + description: "heart decoration", + version: "0.6", + keywords: ["heart", "heart decoration"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "❣️", + description: "heart exclamation", + version: "1.0", + keywords: ["exclamation", "heart exclamation", "mark", "punctuation"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💔", + description: "broken heart", + version: "0.6", + keywords: ["break", "broken", "broken heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "❤️🔥", + description: "heart on fire", + version: "13.1", + keywords: ["burn", "heart", "heart on fire", "love", "lust", "sacred heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "❤️🩹", + description: "mending heart", + version: "13.1", + keywords: ["healthier", "improving", "mending", "mending heart", "recovering", "recuperating", "well"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "❤️", + description: "red heart", + version: "0.6", + keywords: ["heart", "red heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🩷", + description: "pink heart", + version: "15.0", + keywords: ["cute", "heart", "like", "love", "pink"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🧡", + description: "orange heart", + version: "5.0", + keywords: ["orange", "orange heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💛", + description: "yellow heart", + version: "0.6", + keywords: ["yellow", "yellow heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💚", + description: "green heart", + version: "0.6", + keywords: ["green", "green heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💙", + description: "blue heart", + version: "0.6", + keywords: ["blue", "blue heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🩵", + description: "light blue heart", + version: "15.0", + keywords: ["cyan", "heart", "light blue", "light blue heart", "teal"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💜", + description: "purple heart", + version: "0.6", + keywords: ["purple", "purple heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🤎", + description: "brown heart", + version: "12.0", + keywords: ["brown", "heart"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🖤", + description: "black heart", + version: "3.0", + keywords: ["black", "black heart", "evil", "wicked"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🩶", + description: "grey heart", + version: "15.0", + keywords: ["gray", "grey heart", "heart", "silver", "slate"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "🤍", + description: "white heart", + version: "12.0", + keywords: ["heart", "white"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "heart" + }, { + emoji: "💋", + description: "kiss mark", + version: "0.6", + keywords: ["kiss", "kiss mark", "lips"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💯", + description: "hundred points", + version: "0.6", + keywords: ["100", "full", "hundred", "hundred points", "score"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💢", + description: "anger symbol", + version: "0.6", + keywords: ["anger symbol", "angry", "comic", "mad"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💥", + description: "collision", + version: "0.6", + keywords: ["boom", "collision", "comic"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💫", + description: "dizzy", + version: "0.6", + keywords: ["comic", "dizzy", "star"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💦", + description: "sweat droplets", + version: "0.6", + keywords: ["comic", "splashing", "sweat", "sweat droplets"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💨", + description: "dashing away", + version: "0.6", + keywords: ["comic", "dash", "dashing away", "running"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "🕳️", + description: "hole", + version: "0.7", + keywords: ["hole"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💬", + description: "speech balloon", + version: "0.6", + keywords: ["balloon", "bubble", "comic", "dialog", "speech"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "👁️🗨️", + description: "eye in speech bubble", + version: "2.0", + keywords: ["balloon", "bubble", "eye", "eye in speech bubble", "speech", "witness"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "🗨️", + description: "left speech bubble", + version: "2.0", + keywords: ["balloon", "bubble", "dialog", "left speech bubble", "speech"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "🗯️", + description: "right anger bubble", + version: "0.7", + keywords: ["angry", "balloon", "bubble", "mad", "right anger bubble"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💭", + description: "thought balloon", + version: "1.0", + keywords: ["balloon", "bubble", "comic", "thought"], + category: "symbols", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "💤", + description: "ZZZ", + version: "0.6", + keywords: ["comic", "good night", "sleep", "ZZZ"], + category: "face-emotion", + group: "smileys-emotion", + subgroup: "emotion" + }, { + emoji: "👋", + description: "waving hand", + version: "0.6", + keywords: ["hand", "wave", "waving"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "👋🏻", + description: "waving hand: light skin tone", + version: "1.0" + }, { + emoji: "👋🏼", + description: "waving hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "👋🏽", + description: "waving hand: medium skin tone", + version: "1.0" + }, { + emoji: "👋🏾", + description: "waving hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👋🏿", + description: "waving hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤚", + description: "raised back of hand", + version: "3.0", + keywords: ["backhand", "raised", "raised back of hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🤚🏻", + description: "raised back of hand: light skin tone", + version: "3.0" + }, { + emoji: "🤚🏼", + description: "raised back of hand: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤚🏽", + description: "raised back of hand: medium skin tone", + version: "3.0" + }, { + emoji: "🤚🏾", + description: "raised back of hand: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤚🏿", + description: "raised back of hand: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🖐️", + description: "hand with fingers splayed", + version: "0.7", + keywords: ["finger", "hand", "hand with fingers splayed", "splayed"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🖐🏻", + description: "hand with fingers splayed: light skin tone", + version: "1.0" + }, { + emoji: "🖐🏼", + description: "hand with fingers splayed: medium-light skin tone", + version: "1.0" + }, { + emoji: "🖐🏽", + description: "hand with fingers splayed: medium skin tone", + version: "1.0" + }, { + emoji: "🖐🏾", + description: "hand with fingers splayed: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🖐🏿", + description: "hand with fingers splayed: dark skin tone", + version: "1.0" + }] + }, { + emoji: "✋", + description: "raised hand", + version: "0.6", + keywords: ["hand", "high 5", "high five", "raised hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "✋🏻", + description: "raised hand: light skin tone", + version: "1.0" + }, { + emoji: "✋🏼", + description: "raised hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "✋🏽", + description: "raised hand: medium skin tone", + version: "1.0" + }, { + emoji: "✋🏾", + description: "raised hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "✋🏿", + description: "raised hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🖖", + description: "vulcan salute", + version: "1.0", + keywords: ["finger", "hand", "spock", "vulcan", "vulcan salute"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🖖🏻", + description: "vulcan salute: light skin tone", + version: "1.0" + }, { + emoji: "🖖🏼", + description: "vulcan salute: medium-light skin tone", + version: "1.0" + }, { + emoji: "🖖🏽", + description: "vulcan salute: medium skin tone", + version: "1.0" + }, { + emoji: "🖖🏾", + description: "vulcan salute: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🖖🏿", + description: "vulcan salute: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🫱", + description: "rightwards hand", + version: "14.0", + keywords: ["hand", "right", "rightward", "rightwards hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫱🏻", + description: "rightwards hand: light skin tone", + version: "14.0" + }, { + emoji: "🫱🏼", + description: "rightwards hand: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫱🏽", + description: "rightwards hand: medium skin tone", + version: "14.0" + }, { + emoji: "🫱🏾", + description: "rightwards hand: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏿", + description: "rightwards hand: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🫲", + description: "leftwards hand", + version: "14.0", + keywords: ["hand", "left", "leftward", "leftwards hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫲🏻", + description: "leftwards hand: light skin tone", + version: "14.0" + }, { + emoji: "🫲🏼", + description: "leftwards hand: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫲🏽", + description: "leftwards hand: medium skin tone", + version: "14.0" + }, { + emoji: "🫲🏾", + description: "leftwards hand: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫲🏿", + description: "leftwards hand: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🫳", + description: "palm down hand", + version: "14.0", + keywords: ["dismiss", "drop", "palm down hand", "shoo"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫳🏻", + description: "palm down hand: light skin tone", + version: "14.0" + }, { + emoji: "🫳🏼", + description: "palm down hand: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫳🏽", + description: "palm down hand: medium skin tone", + version: "14.0" + }, { + emoji: "🫳🏾", + description: "palm down hand: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫳🏿", + description: "palm down hand: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🫴", + description: "palm up hand", + version: "14.0", + keywords: ["beckon", "catch", "come", "offer", "palm up hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫴🏻", + description: "palm up hand: light skin tone", + version: "14.0" + }, { + emoji: "🫴🏼", + description: "palm up hand: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫴🏽", + description: "palm up hand: medium skin tone", + version: "14.0" + }, { + emoji: "🫴🏾", + description: "palm up hand: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫴🏿", + description: "palm up hand: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🫷", + description: "leftwards pushing hand", + version: "15.0", + keywords: ["high five", "leftward", "leftwards pushing hand", "push", "refuse", "stop", "wait"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫷🏻", + description: "leftwards pushing hand: light skin tone", + version: "15.0" + }, { + emoji: "🫷🏼", + description: "leftwards pushing hand: medium-light skin tone", + version: "15.0" + }, { + emoji: "🫷🏽", + description: "leftwards pushing hand: medium skin tone", + version: "15.0" + }, { + emoji: "🫷🏾", + description: "leftwards pushing hand: medium-dark skin tone", + version: "15.0" + }, { + emoji: "🫷🏿", + description: "leftwards pushing hand: dark skin tone", + version: "15.0" + }] + }, { + emoji: "🫸", + description: "rightwards pushing hand", + version: "15.0", + keywords: ["high five", "push", "refuse", "rightward", "rightwards pushing hand", "stop", "wait"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-open", + variations: [{ + emoji: "🫸🏻", + description: "rightwards pushing hand: light skin tone", + version: "15.0" + }, { + emoji: "🫸🏼", + description: "rightwards pushing hand: medium-light skin tone", + version: "15.0" + }, { + emoji: "🫸🏽", + description: "rightwards pushing hand: medium skin tone", + version: "15.0" + }, { + emoji: "🫸🏾", + description: "rightwards pushing hand: medium-dark skin tone", + version: "15.0" + }, { + emoji: "🫸🏿", + description: "rightwards pushing hand: dark skin tone", + version: "15.0" + }] + }, { + emoji: "👌", + description: "OK hand", + version: "0.6", + keywords: ["hand", "OK"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "👌🏻", + description: "OK hand: light skin tone", + version: "1.0" + }, { + emoji: "👌🏼", + description: "OK hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "👌🏽", + description: "OK hand: medium skin tone", + version: "1.0" + }, { + emoji: "👌🏾", + description: "OK hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👌🏿", + description: "OK hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤌", + description: "pinched fingers", + version: "13.0", + keywords: ["fingers", "hand gesture", "interrogation", "pinched", "sarcastic"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤌🏻", + description: "pinched fingers: light skin tone", + version: "13.0" + }, { + emoji: "🤌🏼", + description: "pinched fingers: medium-light skin tone", + version: "13.0" + }, { + emoji: "🤌🏽", + description: "pinched fingers: medium skin tone", + version: "13.0" + }, { + emoji: "🤌🏾", + description: "pinched fingers: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🤌🏿", + description: "pinched fingers: dark skin tone", + version: "13.0" + }] + }, { + emoji: "🤏", + description: "pinching hand", + version: "12.0", + keywords: ["pinching hand", "small amount"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤏🏻", + description: "pinching hand: light skin tone", + version: "12.0" + }, { + emoji: "🤏🏼", + description: "pinching hand: medium-light skin tone", + version: "12.0" + }, { + emoji: "🤏🏽", + description: "pinching hand: medium skin tone", + version: "12.0" + }, { + emoji: "🤏🏾", + description: "pinching hand: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🤏🏿", + description: "pinching hand: dark skin tone", + version: "12.0" + }] + }, { + emoji: "✌️", + description: "victory hand", + version: "0.6", + keywords: ["hand", "v", "victory"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "✌🏻", + description: "victory hand: light skin tone", + version: "1.0" + }, { + emoji: "✌🏼", + description: "victory hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "✌🏽", + description: "victory hand: medium skin tone", + version: "1.0" + }, { + emoji: "✌🏾", + description: "victory hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "✌🏿", + description: "victory hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤞", + description: "crossed fingers", + version: "3.0", + keywords: ["cross", "crossed fingers", "finger", "hand", "luck"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤞🏻", + description: "crossed fingers: light skin tone", + version: "3.0" + }, { + emoji: "🤞🏼", + description: "crossed fingers: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤞🏽", + description: "crossed fingers: medium skin tone", + version: "3.0" + }, { + emoji: "🤞🏾", + description: "crossed fingers: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤞🏿", + description: "crossed fingers: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🫰", + description: "hand with index finger and thumb crossed", + version: "14.0", + keywords: ["expensive", "hand with index finger and thumb crossed", "heart", "love", "money", "snap"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🫰🏻", + description: "hand with index finger and thumb crossed: light skin tone", + version: "14.0" + }, { + emoji: "🫰🏼", + description: "hand with index finger and thumb crossed: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫰🏽", + description: "hand with index finger and thumb crossed: medium skin tone", + version: "14.0" + }, { + emoji: "🫰🏾", + description: "hand with index finger and thumb crossed: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫰🏿", + description: "hand with index finger and thumb crossed: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🤟", + description: "love-you gesture", + version: "5.0", + keywords: ["hand", "ILY", "love-you gesture"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤟🏻", + description: "love-you gesture: light skin tone", + version: "5.0" + }, { + emoji: "🤟🏼", + description: "love-you gesture: medium-light skin tone", + version: "5.0" + }, { + emoji: "🤟🏽", + description: "love-you gesture: medium skin tone", + version: "5.0" + }, { + emoji: "🤟🏾", + description: "love-you gesture: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🤟🏿", + description: "love-you gesture: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🤘", + description: "sign of the horns", + version: "1.0", + keywords: ["finger", "hand", "horns", "rock-on", "sign of the horns"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤘🏻", + description: "sign of the horns: light skin tone", + version: "1.0" + }, { + emoji: "🤘🏼", + description: "sign of the horns: medium-light skin tone", + version: "1.0" + }, { + emoji: "🤘🏽", + description: "sign of the horns: medium skin tone", + version: "1.0" + }, { + emoji: "🤘🏾", + description: "sign of the horns: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🤘🏿", + description: "sign of the horns: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤙", + description: "call me hand", + version: "3.0", + keywords: ["call", "call me hand", "hand", "hang loose", "Shaka"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-partial", + variations: [{ + emoji: "🤙🏻", + description: "call me hand: light skin tone", + version: "3.0" + }, { + emoji: "🤙🏼", + description: "call me hand: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤙🏽", + description: "call me hand: medium skin tone", + version: "3.0" + }, { + emoji: "🤙🏾", + description: "call me hand: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤙🏿", + description: "call me hand: dark skin tone", + version: "3.0" + }] + }, { + emoji: "👈", + description: "backhand index pointing left", + version: "0.6", + keywords: ["backhand", "backhand index pointing left", "finger", "hand", "index", "point"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "👈🏻", + description: "backhand index pointing left: light skin tone", + version: "1.0" + }, { + emoji: "👈🏼", + description: "backhand index pointing left: medium-light skin tone", + version: "1.0" + }, { + emoji: "👈🏽", + description: "backhand index pointing left: medium skin tone", + version: "1.0" + }, { + emoji: "👈🏾", + description: "backhand index pointing left: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👈🏿", + description: "backhand index pointing left: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👉", + description: "backhand index pointing right", + version: "0.6", + keywords: ["backhand", "backhand index pointing right", "finger", "hand", "index", "point"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "👉🏻", + description: "backhand index pointing right: light skin tone", + version: "1.0" + }, { + emoji: "👉🏼", + description: "backhand index pointing right: medium-light skin tone", + version: "1.0" + }, { + emoji: "👉🏽", + description: "backhand index pointing right: medium skin tone", + version: "1.0" + }, { + emoji: "👉🏾", + description: "backhand index pointing right: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👉🏿", + description: "backhand index pointing right: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👆", + description: "backhand index pointing up", + version: "0.6", + keywords: ["backhand", "backhand index pointing up", "finger", "hand", "point", "up"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "👆🏻", + description: "backhand index pointing up: light skin tone", + version: "1.0" + }, { + emoji: "👆🏼", + description: "backhand index pointing up: medium-light skin tone", + version: "1.0" + }, { + emoji: "👆🏽", + description: "backhand index pointing up: medium skin tone", + version: "1.0" + }, { + emoji: "👆🏾", + description: "backhand index pointing up: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👆🏿", + description: "backhand index pointing up: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🖕", + description: "middle finger", + version: "1.0", + keywords: ["finger", "hand", "middle finger"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "🖕🏻", + description: "middle finger: light skin tone", + version: "1.0" + }, { + emoji: "🖕🏼", + description: "middle finger: medium-light skin tone", + version: "1.0" + }, { + emoji: "🖕🏽", + description: "middle finger: medium skin tone", + version: "1.0" + }, { + emoji: "🖕🏾", + description: "middle finger: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🖕🏿", + description: "middle finger: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👇", + description: "backhand index pointing down", + version: "0.6", + keywords: ["backhand", "backhand index pointing down", "down", "finger", "hand", "point"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "👇🏻", + description: "backhand index pointing down: light skin tone", + version: "1.0" + }, { + emoji: "👇🏼", + description: "backhand index pointing down: medium-light skin tone", + version: "1.0" + }, { + emoji: "👇🏽", + description: "backhand index pointing down: medium skin tone", + version: "1.0" + }, { + emoji: "👇🏾", + description: "backhand index pointing down: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👇🏿", + description: "backhand index pointing down: dark skin tone", + version: "1.0" + }] + }, { + emoji: "☝️", + description: "index pointing up", + version: "0.6", + keywords: ["finger", "hand", "index", "index pointing up", "point", "up"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "☝🏻", + description: "index pointing up: light skin tone", + version: "1.0" + }, { + emoji: "☝🏼", + description: "index pointing up: medium-light skin tone", + version: "1.0" + }, { + emoji: "☝🏽", + description: "index pointing up: medium skin tone", + version: "1.0" + }, { + emoji: "☝🏾", + description: "index pointing up: medium-dark skin tone", + version: "1.0" + }, { + emoji: "☝🏿", + description: "index pointing up: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🫵", + description: "index pointing at the viewer", + version: "14.0", + keywords: ["index pointing at the viewer", "point", "you"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-single-finger", + variations: [{ + emoji: "🫵🏻", + description: "index pointing at the viewer: light skin tone", + version: "14.0" + }, { + emoji: "🫵🏼", + description: "index pointing at the viewer: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫵🏽", + description: "index pointing at the viewer: medium skin tone", + version: "14.0" + }, { + emoji: "🫵🏾", + description: "index pointing at the viewer: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫵🏿", + description: "index pointing at the viewer: dark skin tone", + version: "14.0" + }] + }, { + emoji: "👍", + description: "thumbs up", + version: "0.6", + keywords: ["+1", "hand", "thumb", "thumbs up", "up"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "👍🏻", + description: "thumbs up: light skin tone", + version: "1.0" + }, { + emoji: "👍🏼", + description: "thumbs up: medium-light skin tone", + version: "1.0" + }, { + emoji: "👍🏽", + description: "thumbs up: medium skin tone", + version: "1.0" + }, { + emoji: "👍🏾", + description: "thumbs up: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👍🏿", + description: "thumbs up: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👎", + description: "thumbs down", + version: "0.6", + keywords: ["-1", "down", "hand", "thumb", "thumbs down"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "👎🏻", + description: "thumbs down: light skin tone", + version: "1.0" + }, { + emoji: "👎🏼", + description: "thumbs down: medium-light skin tone", + version: "1.0" + }, { + emoji: "👎🏽", + description: "thumbs down: medium skin tone", + version: "1.0" + }, { + emoji: "👎🏾", + description: "thumbs down: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👎🏿", + description: "thumbs down: dark skin tone", + version: "1.0" + }] + }, { + emoji: "✊", + description: "raised fist", + version: "0.6", + keywords: ["clenched", "fist", "hand", "punch", "raised fist"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "✊🏻", + description: "raised fist: light skin tone", + version: "1.0" + }, { + emoji: "✊🏼", + description: "raised fist: medium-light skin tone", + version: "1.0" + }, { + emoji: "✊🏽", + description: "raised fist: medium skin tone", + version: "1.0" + }, { + emoji: "✊🏾", + description: "raised fist: medium-dark skin tone", + version: "1.0" + }, { + emoji: "✊🏿", + description: "raised fist: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👊", + description: "oncoming fist", + version: "0.6", + keywords: ["clenched", "fist", "hand", "oncoming fist", "punch"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "👊🏻", + description: "oncoming fist: light skin tone", + version: "1.0" + }, { + emoji: "👊🏼", + description: "oncoming fist: medium-light skin tone", + version: "1.0" + }, { + emoji: "👊🏽", + description: "oncoming fist: medium skin tone", + version: "1.0" + }, { + emoji: "👊🏾", + description: "oncoming fist: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👊🏿", + description: "oncoming fist: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤛", + description: "left-facing fist", + version: "3.0", + keywords: ["fist", "left-facing fist", "leftwards"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "🤛🏻", + description: "left-facing fist: light skin tone", + version: "3.0" + }, { + emoji: "🤛🏼", + description: "left-facing fist: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤛🏽", + description: "left-facing fist: medium skin tone", + version: "3.0" + }, { + emoji: "🤛🏾", + description: "left-facing fist: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤛🏿", + description: "left-facing fist: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤜", + description: "right-facing fist", + version: "3.0", + keywords: ["fist", "right-facing fist", "rightwards"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-fingers-closed", + variations: [{ + emoji: "🤜🏻", + description: "right-facing fist: light skin tone", + version: "3.0" + }, { + emoji: "🤜🏼", + description: "right-facing fist: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤜🏽", + description: "right-facing fist: medium skin tone", + version: "3.0" + }, { + emoji: "🤜🏾", + description: "right-facing fist: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤜🏿", + description: "right-facing fist: dark skin tone", + version: "3.0" + }] + }, { + emoji: "👏", + description: "clapping hands", + version: "0.6", + keywords: ["clap", "clapping hands", "hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "👏🏻", + description: "clapping hands: light skin tone", + version: "1.0" + }, { + emoji: "👏🏼", + description: "clapping hands: medium-light skin tone", + version: "1.0" + }, { + emoji: "👏🏽", + description: "clapping hands: medium skin tone", + version: "1.0" + }, { + emoji: "👏🏾", + description: "clapping hands: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👏🏿", + description: "clapping hands: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙌", + description: "raising hands", + version: "0.6", + keywords: ["celebration", "gesture", "hand", "hooray", "raised", "raising hands"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "🙌🏻", + description: "raising hands: light skin tone", + version: "1.0" + }, { + emoji: "🙌🏼", + description: "raising hands: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙌🏽", + description: "raising hands: medium skin tone", + version: "1.0" + }, { + emoji: "🙌🏾", + description: "raising hands: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙌🏿", + description: "raising hands: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🫶", + description: "heart hands", + version: "14.0", + keywords: ["heart hands", "love"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "🫶🏻", + description: "heart hands: light skin tone", + version: "14.0" + }, { + emoji: "🫶🏼", + description: "heart hands: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫶🏽", + description: "heart hands: medium skin tone", + version: "14.0" + }, { + emoji: "🫶🏾", + description: "heart hands: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫶🏿", + description: "heart hands: dark skin tone", + version: "14.0" + }] + }, { + emoji: "👐", + description: "open hands", + version: "0.6", + keywords: ["hand", "open", "open hands"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "👐🏻", + description: "open hands: light skin tone", + version: "1.0" + }, { + emoji: "👐🏼", + description: "open hands: medium-light skin tone", + version: "1.0" + }, { + emoji: "👐🏽", + description: "open hands: medium skin tone", + version: "1.0" + }, { + emoji: "👐🏾", + description: "open hands: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👐🏿", + description: "open hands: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤲", + description: "palms up together", + version: "5.0", + keywords: ["palms up together", "prayer"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "🤲🏻", + description: "palms up together: light skin tone", + version: "5.0" + }, { + emoji: "🤲🏼", + description: "palms up together: medium-light skin tone", + version: "5.0" + }, { + emoji: "🤲🏽", + description: "palms up together: medium skin tone", + version: "5.0" + }, { + emoji: "🤲🏾", + description: "palms up together: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🤲🏿", + description: "palms up together: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🤝", + description: "handshake", + version: "3.0", + keywords: ["agreement", "hand", "handshake", "meeting", "shake"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "🤝🏻", + description: "handshake: light skin tone", + version: "14.0" + }, { + emoji: "🤝🏼", + description: "handshake: medium-light skin tone", + version: "14.0" + }, { + emoji: "🤝🏽", + description: "handshake: medium skin tone", + version: "14.0" + }, { + emoji: "🤝🏾", + description: "handshake: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🤝🏿", + description: "handshake: dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏻🫲🏼", + description: "handshake: light skin tone, medium-light skin tone", + version: "14.0" + }, { + emoji: "🫱🏻🫲🏽", + description: "handshake: light skin tone, medium skin tone", + version: "14.0" + }, { + emoji: "🫱🏻🫲🏾", + description: "handshake: light skin tone, medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏻🫲🏿", + description: "handshake: light skin tone, dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏼🫲🏻", + description: "handshake: medium-light skin tone, light skin tone", + version: "14.0" + }, { + emoji: "🫱🏼🫲🏽", + description: "handshake: medium-light skin tone, medium skin tone", + version: "14.0" + }, { + emoji: "🫱🏼🫲🏾", + description: "handshake: medium-light skin tone, medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏼🫲🏿", + description: "handshake: medium-light skin tone, dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏽🫲🏻", + description: "handshake: medium skin tone, light skin tone", + version: "14.0" + }, { + emoji: "🫱🏽🫲🏼", + description: "handshake: medium skin tone, medium-light skin tone", + version: "14.0" + }, { + emoji: "🫱🏽🫲🏾", + description: "handshake: medium skin tone, medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏽🫲🏿", + description: "handshake: medium skin tone, dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏾🫲🏻", + description: "handshake: medium-dark skin tone, light skin tone", + version: "14.0" + }, { + emoji: "🫱🏾🫲🏼", + description: "handshake: medium-dark skin tone, medium-light skin tone", + version: "14.0" + }, { + emoji: "🫱🏾🫲🏽", + description: "handshake: medium-dark skin tone, medium skin tone", + version: "14.0" + }, { + emoji: "🫱🏾🫲🏿", + description: "handshake: medium-dark skin tone, dark skin tone", + version: "14.0" + }, { + emoji: "🫱🏿🫲🏻", + description: "handshake: dark skin tone, light skin tone", + version: "14.0" + }, { + emoji: "🫱🏿🫲🏼", + description: "handshake: dark skin tone, medium-light skin tone", + version: "14.0" + }, { + emoji: "🫱🏿🫲🏽", + description: "handshake: dark skin tone, medium skin tone", + version: "14.0" + }, { + emoji: "🫱🏿🫲🏾", + description: "handshake: dark skin tone, medium-dark skin tone", + version: "14.0" + }] + }, { + emoji: "🙏", + description: "folded hands", + version: "0.6", + keywords: ["ask", "folded hands", "hand", "high 5", "high five", "please", "pray", "thanks"], + category: "face-emotion", + group: "people-body", + subgroup: "hands", + variations: [{ + emoji: "🙏🏻", + description: "folded hands: light skin tone", + version: "1.0" + }, { + emoji: "🙏🏼", + description: "folded hands: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙏🏽", + description: "folded hands: medium skin tone", + version: "1.0" + }, { + emoji: "🙏🏾", + description: "folded hands: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙏🏿", + description: "folded hands: dark skin tone", + version: "1.0" + }] + }, { + emoji: "✍️", + description: "writing hand", + version: "0.7", + keywords: ["hand", "write", "writing hand"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-prop", + variations: [{ + emoji: "✍🏻", + description: "writing hand: light skin tone", + version: "1.0" + }, { + emoji: "✍🏼", + description: "writing hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "✍🏽", + description: "writing hand: medium skin tone", + version: "1.0" + }, { + emoji: "✍🏾", + description: "writing hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "✍🏿", + description: "writing hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "💅", + description: "nail polish", + version: "0.6", + keywords: ["care", "cosmetics", "manicure", "nail", "polish"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-prop", + variations: [{ + emoji: "💅🏻", + description: "nail polish: light skin tone", + version: "1.0" + }, { + emoji: "💅🏼", + description: "nail polish: medium-light skin tone", + version: "1.0" + }, { + emoji: "💅🏽", + description: "nail polish: medium skin tone", + version: "1.0" + }, { + emoji: "💅🏾", + description: "nail polish: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💅🏿", + description: "nail polish: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤳", + description: "selfie", + version: "3.0", + keywords: ["camera", "phone", "selfie"], + category: "face-emotion", + group: "people-body", + subgroup: "hand-prop", + variations: [{ + emoji: "🤳🏻", + description: "selfie: light skin tone", + version: "3.0" + }, { + emoji: "🤳🏼", + description: "selfie: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤳🏽", + description: "selfie: medium skin tone", + version: "3.0" + }, { + emoji: "🤳🏾", + description: "selfie: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤳🏿", + description: "selfie: dark skin tone", + version: "3.0" + }] + }, { + emoji: "💪", + description: "flexed biceps", + version: "0.6", + keywords: ["biceps", "comic", "flex", "flexed biceps", "muscle"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "💪🏻", + description: "flexed biceps: light skin tone", + version: "1.0" + }, { + emoji: "💪🏼", + description: "flexed biceps: medium-light skin tone", + version: "1.0" + }, { + emoji: "💪🏽", + description: "flexed biceps: medium skin tone", + version: "1.0" + }, { + emoji: "💪🏾", + description: "flexed biceps: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💪🏿", + description: "flexed biceps: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🦾", + description: "mechanical arm", + version: "12.0", + keywords: ["accessibility", "mechanical arm", "prosthetic"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🦿", + description: "mechanical leg", + version: "12.0", + keywords: ["accessibility", "mechanical leg", "prosthetic"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🦵", + description: "leg", + version: "11.0", + keywords: ["kick", "leg", "limb"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "🦵🏻", + description: "leg: light skin tone", + version: "11.0" + }, { + emoji: "🦵🏼", + description: "leg: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦵🏽", + description: "leg: medium skin tone", + version: "11.0" + }, { + emoji: "🦵🏾", + description: "leg: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦵🏿", + description: "leg: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦶", + description: "foot", + version: "11.0", + keywords: ["foot", "kick", "stomp"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "🦶🏻", + description: "foot: light skin tone", + version: "11.0" + }, { + emoji: "🦶🏼", + description: "foot: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦶🏽", + description: "foot: medium skin tone", + version: "11.0" + }, { + emoji: "🦶🏾", + description: "foot: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦶🏿", + description: "foot: dark skin tone", + version: "11.0" + }] + }, { + emoji: "👂", + description: "ear", + version: "0.6", + keywords: ["body", "ear"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "👂🏻", + description: "ear: light skin tone", + version: "1.0" + }, { + emoji: "👂🏼", + description: "ear: medium-light skin tone", + version: "1.0" + }, { + emoji: "👂🏽", + description: "ear: medium skin tone", + version: "1.0" + }, { + emoji: "👂🏾", + description: "ear: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👂🏿", + description: "ear: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🦻", + description: "ear with hearing aid", + version: "12.0", + keywords: ["accessibility", "ear with hearing aid", "hard of hearing"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "🦻🏻", + description: "ear with hearing aid: light skin tone", + version: "12.0" + }, { + emoji: "🦻🏼", + description: "ear with hearing aid: medium-light skin tone", + version: "12.0" + }, { + emoji: "🦻🏽", + description: "ear with hearing aid: medium skin tone", + version: "12.0" + }, { + emoji: "🦻🏾", + description: "ear with hearing aid: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🦻🏿", + description: "ear with hearing aid: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👃", + description: "nose", + version: "0.6", + keywords: ["body", "nose"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts", + variations: [{ + emoji: "👃🏻", + description: "nose: light skin tone", + version: "1.0" + }, { + emoji: "👃🏼", + description: "nose: medium-light skin tone", + version: "1.0" + }, { + emoji: "👃🏽", + description: "nose: medium skin tone", + version: "1.0" + }, { + emoji: "👃🏾", + description: "nose: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👃🏿", + description: "nose: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🧠", + description: "brain", + version: "5.0", + keywords: ["brain", "intelligent"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🫀", + description: "anatomical heart", + version: "13.0", + keywords: ["anatomical", "cardiology", "heart", "organ", "pulse"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🫁", + description: "lungs", + version: "13.0", + keywords: ["breath", "exhalation", "inhalation", "lungs", "organ", "respiration"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🦷", + description: "tooth", + version: "11.0", + keywords: ["dentist", "tooth"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🦴", + description: "bone", + version: "11.0", + keywords: ["bone", "skeleton"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "👀", + description: "eyes", + version: "0.6", + keywords: ["eye", "eyes", "face"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "👁️", + description: "eye", + version: "0.7", + keywords: ["body", "eye"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "👅", + description: "tongue", + version: "0.6", + keywords: ["body", "tongue"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "👄", + description: "mouth", + version: "0.6", + keywords: ["lips", "mouth"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "🫦", + description: "biting lip", + version: "14.0", + keywords: ["anxious", "biting lip", "fear", "flirting", "nervous", "uncomfortable", "worried"], + category: "face-emotion", + group: "people-body", + subgroup: "body-parts" + }, { + emoji: "👶", + description: "baby", + version: "0.6", + keywords: ["baby", "young"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👶🏻", + description: "baby: light skin tone", + version: "1.0" + }, { + emoji: "👶🏼", + description: "baby: medium-light skin tone", + version: "1.0" + }, { + emoji: "👶🏽", + description: "baby: medium skin tone", + version: "1.0" + }, { + emoji: "👶🏾", + description: "baby: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👶🏿", + description: "baby: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🧒", + description: "child", + version: "5.0", + keywords: ["child", "gender-neutral", "unspecified gender", "young"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "🧒🏻", + description: "child: light skin tone", + version: "5.0" + }, { + emoji: "🧒🏼", + description: "child: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧒🏽", + description: "child: medium skin tone", + version: "5.0" + }, { + emoji: "🧒🏾", + description: "child: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧒🏿", + description: "child: dark skin tone", + version: "5.0" + }] + }, { + emoji: "👦", + description: "boy", + version: "0.6", + keywords: ["boy", "young"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👦🏻", + description: "boy: light skin tone", + version: "1.0" + }, { + emoji: "👦🏼", + description: "boy: medium-light skin tone", + version: "1.0" + }, { + emoji: "👦🏽", + description: "boy: medium skin tone", + version: "1.0" + }, { + emoji: "👦🏾", + description: "boy: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👦🏿", + description: "boy: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👧", + description: "girl", + version: "0.6", + keywords: ["girl", "Virgo", "young", "zodiac"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👧🏻", + description: "girl: light skin tone", + version: "1.0" + }, { + emoji: "👧🏼", + description: "girl: medium-light skin tone", + version: "1.0" + }, { + emoji: "👧🏽", + description: "girl: medium skin tone", + version: "1.0" + }, { + emoji: "👧🏾", + description: "girl: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👧🏿", + description: "girl: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🧑", + description: "person", + version: "5.0", + keywords: ["adult", "gender-neutral", "person", "unspecified gender"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "🧑🏻", + description: "person: light skin tone", + version: "5.0" + }, { + emoji: "🧑🏼", + description: "person: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧑🏽", + description: "person: medium skin tone", + version: "5.0" + }, { + emoji: "🧑🏾", + description: "person: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧑🏿", + description: "person: dark skin tone", + version: "5.0" + }, { + emoji: "👱", + description: "person: blond hair", + version: "0.6" + }, { + emoji: "👱🏻", + description: "person: light skin tone, blond hair", + version: "1.0" + }, { + emoji: "👱🏼", + description: "person: medium-light skin tone, blond hair", + version: "1.0" + }, { + emoji: "👱🏽", + description: "person: medium skin tone, blond hair", + version: "1.0" + }, { + emoji: "👱🏾", + description: "person: medium-dark skin tone, blond hair", + version: "1.0" + }, { + emoji: "👱🏿", + description: "person: dark skin tone, blond hair", + version: "1.0" + }, { + emoji: "🧔", + description: "person: beard", + version: "5.0" + }, { + emoji: "🧔🏻", + description: "person: light skin tone, beard", + version: "5.0" + }, { + emoji: "🧔🏼", + description: "person: medium-light skin tone, beard", + version: "5.0" + }, { + emoji: "🧔🏽", + description: "person: medium skin tone, beard", + version: "5.0" + }, { + emoji: "🧔🏾", + description: "person: medium-dark skin tone, beard", + version: "5.0" + }, { + emoji: "🧔🏿", + description: "person: dark skin tone, beard", + version: "5.0" + }, { + emoji: "🧑🦰", + description: "person: red hair", + version: "12.1" + }, { + emoji: "🧑🏻🦰", + description: "person: light skin tone, red hair", + version: "12.1" + }, { + emoji: "🧑🏼🦰", + description: "person: medium-light skin tone, red hair", + version: "12.1" + }, { + emoji: "🧑🏽🦰", + description: "person: medium skin tone, red hair", + version: "12.1" + }, { + emoji: "🧑🏾🦰", + description: "person: medium-dark skin tone, red hair", + version: "12.1" + }, { + emoji: "🧑🏿🦰", + description: "person: dark skin tone, red hair", + version: "12.1" + }, { + emoji: "🧑🦱", + description: "person: curly hair", + version: "12.1" + }, { + emoji: "🧑🏻🦱", + description: "person: light skin tone, curly hair", + version: "12.1" + }, { + emoji: "🧑🏼🦱", + description: "person: medium-light skin tone, curly hair", + version: "12.1" + }, { + emoji: "🧑🏽🦱", + description: "person: medium skin tone, curly hair", + version: "12.1" + }, { + emoji: "🧑🏾🦱", + description: "person: medium-dark skin tone, curly hair", + version: "12.1" + }, { + emoji: "🧑🏿🦱", + description: "person: dark skin tone, curly hair", + version: "12.1" + }, { + emoji: "🧑🦳", + description: "person: white hair", + version: "12.1" + }, { + emoji: "🧑🏻🦳", + description: "person: light skin tone, white hair", + version: "12.1" + }, { + emoji: "🧑🏼🦳", + description: "person: medium-light skin tone, white hair", + version: "12.1" + }, { + emoji: "🧑🏽🦳", + description: "person: medium skin tone, white hair", + version: "12.1" + }, { + emoji: "🧑🏾🦳", + description: "person: medium-dark skin tone, white hair", + version: "12.1" + }, { + emoji: "🧑🏿🦳", + description: "person: dark skin tone, white hair", + version: "12.1" + }, { + emoji: "🧑🦲", + description: "person: bald", + version: "12.1" + }, { + emoji: "🧑🏻🦲", + description: "person: light skin tone, bald", + version: "12.1" + }, { + emoji: "🧑🏼🦲", + description: "person: medium-light skin tone, bald", + version: "12.1" + }, { + emoji: "🧑🏽🦲", + description: "person: medium skin tone, bald", + version: "12.1" + }, { + emoji: "🧑🏾🦲", + description: "person: medium-dark skin tone, bald", + version: "12.1" + }, { + emoji: "🧑🏿🦲", + description: "person: dark skin tone, bald", + version: "12.1" + }] + }, { + emoji: "👨", + description: "man", + version: "0.6", + keywords: ["adult", "man"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👨🏻", + description: "man: light skin tone", + version: "1.0" + }, { + emoji: "👨🏼", + description: "man: medium-light skin tone", + version: "1.0" + }, { + emoji: "👨🏽", + description: "man: medium skin tone", + version: "1.0" + }, { + emoji: "👨🏾", + description: "man: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👨🏿", + description: "man: dark skin tone", + version: "1.0" + }, { + emoji: "🧔♂️", + description: "man: beard", + version: "13.1" + }, { + emoji: "🧔🏻♂️", + description: "man: light skin tone, beard", + version: "13.1" + }, { + emoji: "🧔🏼♂️", + description: "man: medium-light skin tone, beard", + version: "13.1" + }, { + emoji: "🧔🏽♂️", + description: "man: medium skin tone, beard", + version: "13.1" + }, { + emoji: "🧔🏾♂️", + description: "man: medium-dark skin tone, beard", + version: "13.1" + }, { + emoji: "🧔🏿♂️", + description: "man: dark skin tone, beard", + version: "13.1" + }, { + emoji: "👨🦰", + description: "man: red hair", + version: "11.0" + }, { + emoji: "👨🏻🦰", + description: "man: light skin tone, red hair", + version: "11.0" + }, { + emoji: "👨🏼🦰", + description: "man: medium-light skin tone, red hair", + version: "11.0" + }, { + emoji: "👨🏽🦰", + description: "man: medium skin tone, red hair", + version: "11.0" + }, { + emoji: "👨🏾🦰", + description: "man: medium-dark skin tone, red hair", + version: "11.0" + }, { + emoji: "👨🏿🦰", + description: "man: dark skin tone, red hair", + version: "11.0" + }, { + emoji: "👨🦱", + description: "man: curly hair", + version: "11.0" + }, { + emoji: "👨🏻🦱", + description: "man: light skin tone, curly hair", + version: "11.0" + }, { + emoji: "👨🏼🦱", + description: "man: medium-light skin tone, curly hair", + version: "11.0" + }, { + emoji: "👨🏽🦱", + description: "man: medium skin tone, curly hair", + version: "11.0" + }, { + emoji: "👨🏾🦱", + description: "man: medium-dark skin tone, curly hair", + version: "11.0" + }, { + emoji: "👨🏿🦱", + description: "man: dark skin tone, curly hair", + version: "11.0" + }, { + emoji: "👨🦳", + description: "man: white hair", + version: "11.0" + }, { + emoji: "👨🏻🦳", + description: "man: light skin tone, white hair", + version: "11.0" + }, { + emoji: "👨🏼🦳", + description: "man: medium-light skin tone, white hair", + version: "11.0" + }, { + emoji: "👨🏽🦳", + description: "man: medium skin tone, white hair", + version: "11.0" + }, { + emoji: "👨🏾🦳", + description: "man: medium-dark skin tone, white hair", + version: "11.0" + }, { + emoji: "👨🏿🦳", + description: "man: dark skin tone, white hair", + version: "11.0" + }, { + emoji: "👨🦲", + description: "man: bald", + version: "11.0" + }, { + emoji: "👨🏻🦲", + description: "man: light skin tone, bald", + version: "11.0" + }, { + emoji: "👨🏼🦲", + description: "man: medium-light skin tone, bald", + version: "11.0" + }, { + emoji: "👨🏽🦲", + description: "man: medium skin tone, bald", + version: "11.0" + }, { + emoji: "👨🏾🦲", + description: "man: medium-dark skin tone, bald", + version: "11.0" + }, { + emoji: "👨🏿🦲", + description: "man: dark skin tone, bald", + version: "11.0" + }, { + emoji: "👱♂️", + description: "man: blond hair", + version: "4.0" + }, { + emoji: "👱🏻♂️", + description: "man: light skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏼♂️", + description: "man: medium-light skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏽♂️", + description: "man: medium skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏾♂️", + description: "man: medium-dark skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏿♂️", + description: "man: dark skin tone, blond hair", + version: "4.0" + }] + }, { + emoji: "👩", + description: "woman", + version: "0.6", + keywords: ["adult", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👩🏻", + description: "woman: light skin tone", + version: "1.0" + }, { + emoji: "👩🏼", + description: "woman: medium-light skin tone", + version: "1.0" + }, { + emoji: "👩🏽", + description: "woman: medium skin tone", + version: "1.0" + }, { + emoji: "👩🏾", + description: "woman: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👩🏿", + description: "woman: dark skin tone", + version: "1.0" + }, { + emoji: "👩🦰", + description: "woman: red hair", + version: "11.0" + }, { + emoji: "👩🏻🦰", + description: "woman: light skin tone, red hair", + version: "11.0" + }, { + emoji: "👩🏼🦰", + description: "woman: medium-light skin tone, red hair", + version: "11.0" + }, { + emoji: "👩🏽🦰", + description: "woman: medium skin tone, red hair", + version: "11.0" + }, { + emoji: "👩🏾🦰", + description: "woman: medium-dark skin tone, red hair", + version: "11.0" + }, { + emoji: "👩🏿🦰", + description: "woman: dark skin tone, red hair", + version: "11.0" + }, { + emoji: "👩🦱", + description: "woman: curly hair", + version: "11.0" + }, { + emoji: "👩🏻🦱", + description: "woman: light skin tone, curly hair", + version: "11.0" + }, { + emoji: "👩🏼🦱", + description: "woman: medium-light skin tone, curly hair", + version: "11.0" + }, { + emoji: "👩🏽🦱", + description: "woman: medium skin tone, curly hair", + version: "11.0" + }, { + emoji: "👩🏾🦱", + description: "woman: medium-dark skin tone, curly hair", + version: "11.0" + }, { + emoji: "👩🏿🦱", + description: "woman: dark skin tone, curly hair", + version: "11.0" + }, { + emoji: "👩🦳", + description: "woman: white hair", + version: "11.0" + }, { + emoji: "👩🏻🦳", + description: "woman: light skin tone, white hair", + version: "11.0" + }, { + emoji: "👩🏼🦳", + description: "woman: medium-light skin tone, white hair", + version: "11.0" + }, { + emoji: "👩🏽🦳", + description: "woman: medium skin tone, white hair", + version: "11.0" + }, { + emoji: "👩🏾🦳", + description: "woman: medium-dark skin tone, white hair", + version: "11.0" + }, { + emoji: "👩🏿🦳", + description: "woman: dark skin tone, white hair", + version: "11.0" + }, { + emoji: "👩🦲", + description: "woman: bald", + version: "11.0" + }, { + emoji: "👩🏻🦲", + description: "woman: light skin tone, bald", + version: "11.0" + }, { + emoji: "👩🏼🦲", + description: "woman: medium-light skin tone, bald", + version: "11.0" + }, { + emoji: "👩🏽🦲", + description: "woman: medium skin tone, bald", + version: "11.0" + }, { + emoji: "👩🏾🦲", + description: "woman: medium-dark skin tone, bald", + version: "11.0" + }, { + emoji: "👩🏿🦲", + description: "woman: dark skin tone, bald", + version: "11.0" + }, { + emoji: "👱♀️", + description: "woman: blond hair", + version: "4.0" + }, { + emoji: "👱🏻♀️", + description: "woman: light skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏼♀️", + description: "woman: medium-light skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏽♀️", + description: "woman: medium skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏾♀️", + description: "woman: medium-dark skin tone, blond hair", + version: "4.0" + }, { + emoji: "👱🏿♀️", + description: "woman: dark skin tone, blond hair", + version: "4.0" + }, { + emoji: "🧔♀️", + description: "woman: beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }, { + emoji: "🧔🏻♀️", + description: "woman: light skin tone, beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }, { + emoji: "🧔🏼♀️", + description: "woman: medium-light skin tone, beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }, { + emoji: "🧔🏽♀️", + description: "woman: medium skin tone, beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }, { + emoji: "🧔🏾♀️", + description: "woman: medium-dark skin tone, beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }, { + emoji: "🧔🏿♀️", + description: "woman: dark skin tone, beard", + version: "13.1", + category: "person-people", + group: "people-body", + subgroup: "person" + }] + }, { + emoji: "🧓", + description: "older person", + version: "5.0", + keywords: ["adult", "gender-neutral", "old", "older person", "unspecified gender"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "🧓🏻", + description: "older person: light skin tone", + version: "5.0" + }, { + emoji: "🧓🏼", + description: "older person: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧓🏽", + description: "older person: medium skin tone", + version: "5.0" + }, { + emoji: "🧓🏾", + description: "older person: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧓🏿", + description: "older person: dark skin tone", + version: "5.0" + }] + }, { + emoji: "👴", + description: "old man", + version: "0.6", + keywords: ["adult", "man", "old"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👴🏻", + description: "old man: light skin tone", + version: "1.0" + }, { + emoji: "👴🏼", + description: "old man: medium-light skin tone", + version: "1.0" + }, { + emoji: "👴🏽", + description: "old man: medium skin tone", + version: "1.0" + }, { + emoji: "👴🏾", + description: "old man: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👴🏿", + description: "old man: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👵", + description: "old woman", + version: "0.6", + keywords: ["adult", "old", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person", + variations: [{ + emoji: "👵🏻", + description: "old woman: light skin tone", + version: "1.0" + }, { + emoji: "👵🏼", + description: "old woman: medium-light skin tone", + version: "1.0" + }, { + emoji: "👵🏽", + description: "old woman: medium skin tone", + version: "1.0" + }, { + emoji: "👵🏾", + description: "old woman: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👵🏿", + description: "old woman: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙍", + description: "person frowning", + version: "0.6", + keywords: ["frown", "gesture", "person frowning"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙍🏻", + description: "person frowning: light skin tone", + version: "1.0" + }, { + emoji: "🙍🏼", + description: "person frowning: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙍🏽", + description: "person frowning: medium skin tone", + version: "1.0" + }, { + emoji: "🙍🏾", + description: "person frowning: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙍🏿", + description: "person frowning: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙍♂️", + description: "man frowning", + version: "4.0", + keywords: ["frowning", "gesture", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙍🏻♂️", + description: "man frowning: light skin tone", + version: "4.0" + }, { + emoji: "🙍🏼♂️", + description: "man frowning: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙍🏽♂️", + description: "man frowning: medium skin tone", + version: "4.0" + }, { + emoji: "🙍🏾♂️", + description: "man frowning: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙍🏿♂️", + description: "man frowning: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙍♀️", + description: "woman frowning", + version: "4.0", + keywords: ["frowning", "gesture", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙍🏻♀️", + description: "woman frowning: light skin tone", + version: "4.0" + }, { + emoji: "🙍🏼♀️", + description: "woman frowning: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙍🏽♀️", + description: "woman frowning: medium skin tone", + version: "4.0" + }, { + emoji: "🙍🏾♀️", + description: "woman frowning: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙍🏿♀️", + description: "woman frowning: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙎", + description: "person pouting", + version: "0.6", + keywords: ["gesture", "person pouting", "pouting"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙎🏻", + description: "person pouting: light skin tone", + version: "1.0" + }, { + emoji: "🙎🏼", + description: "person pouting: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙎🏽", + description: "person pouting: medium skin tone", + version: "1.0" + }, { + emoji: "🙎🏾", + description: "person pouting: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙎🏿", + description: "person pouting: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙎♂️", + description: "man pouting", + version: "4.0", + keywords: ["gesture", "man", "pouting"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙎🏻♂️", + description: "man pouting: light skin tone", + version: "4.0" + }, { + emoji: "🙎🏼♂️", + description: "man pouting: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙎🏽♂️", + description: "man pouting: medium skin tone", + version: "4.0" + }, { + emoji: "🙎🏾♂️", + description: "man pouting: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙎🏿♂️", + description: "man pouting: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙎♀️", + description: "woman pouting", + version: "4.0", + keywords: ["gesture", "pouting", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙎🏻♀️", + description: "woman pouting: light skin tone", + version: "4.0" + }, { + emoji: "🙎🏼♀️", + description: "woman pouting: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙎🏽♀️", + description: "woman pouting: medium skin tone", + version: "4.0" + }, { + emoji: "🙎🏾♀️", + description: "woman pouting: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙎🏿♀️", + description: "woman pouting: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙅", + description: "person gesturing NO", + version: "0.6", + keywords: ["forbidden", "gesture", "hand", "person gesturing NO", "prohibited"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙅🏻", + description: "person gesturing NO: light skin tone", + version: "1.0" + }, { + emoji: "🙅🏼", + description: "person gesturing NO: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙅🏽", + description: "person gesturing NO: medium skin tone", + version: "1.0" + }, { + emoji: "🙅🏾", + description: "person gesturing NO: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙅🏿", + description: "person gesturing NO: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙅♂️", + description: "man gesturing NO", + version: "4.0", + keywords: ["forbidden", "gesture", "hand", "man", "man gesturing NO", "prohibited"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙅🏻♂️", + description: "man gesturing NO: light skin tone", + version: "4.0" + }, { + emoji: "🙅🏼♂️", + description: "man gesturing NO: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙅🏽♂️", + description: "man gesturing NO: medium skin tone", + version: "4.0" + }, { + emoji: "🙅🏾♂️", + description: "man gesturing NO: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙅🏿♂️", + description: "man gesturing NO: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙅♀️", + description: "woman gesturing NO", + version: "4.0", + keywords: ["forbidden", "gesture", "hand", "prohibited", "woman", "woman gesturing NO"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙅🏻♀️", + description: "woman gesturing NO: light skin tone", + version: "4.0" + }, { + emoji: "🙅🏼♀️", + description: "woman gesturing NO: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙅🏽♀️", + description: "woman gesturing NO: medium skin tone", + version: "4.0" + }, { + emoji: "🙅🏾♀️", + description: "woman gesturing NO: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙅🏿♀️", + description: "woman gesturing NO: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙆", + description: "person gesturing OK", + version: "0.6", + keywords: ["gesture", "hand", "OK", "person gesturing OK"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙆🏻", + description: "person gesturing OK: light skin tone", + version: "1.0" + }, { + emoji: "🙆🏼", + description: "person gesturing OK: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙆🏽", + description: "person gesturing OK: medium skin tone", + version: "1.0" + }, { + emoji: "🙆🏾", + description: "person gesturing OK: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙆🏿", + description: "person gesturing OK: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙆♂️", + description: "man gesturing OK", + version: "4.0", + keywords: ["gesture", "hand", "man", "man gesturing OK", "OK"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙆🏻♂️", + description: "man gesturing OK: light skin tone", + version: "4.0" + }, { + emoji: "🙆🏼♂️", + description: "man gesturing OK: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙆🏽♂️", + description: "man gesturing OK: medium skin tone", + version: "4.0" + }, { + emoji: "🙆🏾♂️", + description: "man gesturing OK: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙆🏿♂️", + description: "man gesturing OK: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙆♀️", + description: "woman gesturing OK", + version: "4.0", + keywords: ["gesture", "hand", "OK", "woman", "woman gesturing OK"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙆🏻♀️", + description: "woman gesturing OK: light skin tone", + version: "4.0" + }, { + emoji: "🙆🏼♀️", + description: "woman gesturing OK: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙆🏽♀️", + description: "woman gesturing OK: medium skin tone", + version: "4.0" + }, { + emoji: "🙆🏾♀️", + description: "woman gesturing OK: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙆🏿♀️", + description: "woman gesturing OK: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💁", + description: "person tipping hand", + version: "0.6", + keywords: ["hand", "help", "information", "person tipping hand", "sassy", "tipping"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "💁🏻", + description: "person tipping hand: light skin tone", + version: "1.0" + }, { + emoji: "💁🏼", + description: "person tipping hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "💁🏽", + description: "person tipping hand: medium skin tone", + version: "1.0" + }, { + emoji: "💁🏾", + description: "person tipping hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💁🏿", + description: "person tipping hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "💁♂️", + description: "man tipping hand", + version: "4.0", + keywords: ["man", "man tipping hand", "sassy", "tipping hand"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "💁🏻♂️", + description: "man tipping hand: light skin tone", + version: "4.0" + }, { + emoji: "💁🏼♂️", + description: "man tipping hand: medium-light skin tone", + version: "4.0" + }, { + emoji: "💁🏽♂️", + description: "man tipping hand: medium skin tone", + version: "4.0" + }, { + emoji: "💁🏾♂️", + description: "man tipping hand: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💁🏿♂️", + description: "man tipping hand: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💁♀️", + description: "woman tipping hand", + version: "4.0", + keywords: ["sassy", "tipping hand", "woman", "woman tipping hand"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "💁🏻♀️", + description: "woman tipping hand: light skin tone", + version: "4.0" + }, { + emoji: "💁🏼♀️", + description: "woman tipping hand: medium-light skin tone", + version: "4.0" + }, { + emoji: "💁🏽♀️", + description: "woman tipping hand: medium skin tone", + version: "4.0" + }, { + emoji: "💁🏾♀️", + description: "woman tipping hand: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💁🏿♀️", + description: "woman tipping hand: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙋", + description: "person raising hand", + version: "0.6", + keywords: ["gesture", "hand", "happy", "person raising hand", "raised"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙋🏻", + description: "person raising hand: light skin tone", + version: "1.0" + }, { + emoji: "🙋🏼", + description: "person raising hand: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙋🏽", + description: "person raising hand: medium skin tone", + version: "1.0" + }, { + emoji: "🙋🏾", + description: "person raising hand: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙋🏿", + description: "person raising hand: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙋♂️", + description: "man raising hand", + version: "4.0", + keywords: ["gesture", "man", "man raising hand", "raising hand"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙋🏻♂️", + description: "man raising hand: light skin tone", + version: "4.0" + }, { + emoji: "🙋🏼♂️", + description: "man raising hand: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙋🏽♂️", + description: "man raising hand: medium skin tone", + version: "4.0" + }, { + emoji: "🙋🏾♂️", + description: "man raising hand: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙋🏿♂️", + description: "man raising hand: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙋♀️", + description: "woman raising hand", + version: "4.0", + keywords: ["gesture", "raising hand", "woman", "woman raising hand"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙋🏻♀️", + description: "woman raising hand: light skin tone", + version: "4.0" + }, { + emoji: "🙋🏼♀️", + description: "woman raising hand: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙋🏽♀️", + description: "woman raising hand: medium skin tone", + version: "4.0" + }, { + emoji: "🙋🏾♀️", + description: "woman raising hand: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙋🏿♀️", + description: "woman raising hand: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧏", + description: "deaf person", + version: "12.0", + keywords: ["accessibility", "deaf", "deaf person", "ear", "hear"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🧏🏻", + description: "deaf person: light skin tone", + version: "12.0" + }, { + emoji: "🧏🏼", + description: "deaf person: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧏🏽", + description: "deaf person: medium skin tone", + version: "12.0" + }, { + emoji: "🧏🏾", + description: "deaf person: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧏🏿", + description: "deaf person: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧏♂️", + description: "deaf man", + version: "12.0", + keywords: ["deaf", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🧏🏻♂️", + description: "deaf man: light skin tone", + version: "12.0" + }, { + emoji: "🧏🏼♂️", + description: "deaf man: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧏🏽♂️", + description: "deaf man: medium skin tone", + version: "12.0" + }, { + emoji: "🧏🏾♂️", + description: "deaf man: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧏🏿♂️", + description: "deaf man: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧏♀️", + description: "deaf woman", + version: "12.0", + keywords: ["deaf", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🧏🏻♀️", + description: "deaf woman: light skin tone", + version: "12.0" + }, { + emoji: "🧏🏼♀️", + description: "deaf woman: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧏🏽♀️", + description: "deaf woman: medium skin tone", + version: "12.0" + }, { + emoji: "🧏🏾♀️", + description: "deaf woman: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧏🏿♀️", + description: "deaf woman: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🙇", + description: "person bowing", + version: "0.6", + keywords: ["apology", "bow", "gesture", "person bowing", "sorry"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙇🏻", + description: "person bowing: light skin tone", + version: "1.0" + }, { + emoji: "🙇🏼", + description: "person bowing: medium-light skin tone", + version: "1.0" + }, { + emoji: "🙇🏽", + description: "person bowing: medium skin tone", + version: "1.0" + }, { + emoji: "🙇🏾", + description: "person bowing: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🙇🏿", + description: "person bowing: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🙇♂️", + description: "man bowing", + version: "4.0", + keywords: ["apology", "bowing", "favor", "gesture", "man", "sorry"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙇🏻♂️", + description: "man bowing: light skin tone", + version: "4.0" + }, { + emoji: "🙇🏼♂️", + description: "man bowing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙇🏽♂️", + description: "man bowing: medium skin tone", + version: "4.0" + }, { + emoji: "🙇🏾♂️", + description: "man bowing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙇🏿♂️", + description: "man bowing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🙇♀️", + description: "woman bowing", + version: "4.0", + keywords: ["apology", "bowing", "favor", "gesture", "sorry", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🙇🏻♀️", + description: "woman bowing: light skin tone", + version: "4.0" + }, { + emoji: "🙇🏼♀️", + description: "woman bowing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🙇🏽♀️", + description: "woman bowing: medium skin tone", + version: "4.0" + }, { + emoji: "🙇🏾♀️", + description: "woman bowing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🙇🏿♀️", + description: "woman bowing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤦", + description: "person facepalming", + version: "3.0", + keywords: ["disbelief", "exasperation", "face", "palm", "person facepalming"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤦🏻", + description: "person facepalming: light skin tone", + version: "3.0" + }, { + emoji: "🤦🏼", + description: "person facepalming: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤦🏽", + description: "person facepalming: medium skin tone", + version: "3.0" + }, { + emoji: "🤦🏾", + description: "person facepalming: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤦🏿", + description: "person facepalming: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤦♂️", + description: "man facepalming", + version: "4.0", + keywords: ["disbelief", "exasperation", "facepalm", "man", "man facepalming"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤦🏻♂️", + description: "man facepalming: light skin tone", + version: "4.0" + }, { + emoji: "🤦🏼♂️", + description: "man facepalming: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤦🏽♂️", + description: "man facepalming: medium skin tone", + version: "4.0" + }, { + emoji: "🤦🏾♂️", + description: "man facepalming: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤦🏿♂️", + description: "man facepalming: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤦♀️", + description: "woman facepalming", + version: "4.0", + keywords: ["disbelief", "exasperation", "facepalm", "woman", "woman facepalming"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤦🏻♀️", + description: "woman facepalming: light skin tone", + version: "4.0" + }, { + emoji: "🤦🏼♀️", + description: "woman facepalming: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤦🏽♀️", + description: "woman facepalming: medium skin tone", + version: "4.0" + }, { + emoji: "🤦🏾♀️", + description: "woman facepalming: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤦🏿♀️", + description: "woman facepalming: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤷", + description: "person shrugging", + version: "3.0", + keywords: ["doubt", "ignorance", "indifference", "person shrugging", "shrug"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤷🏻", + description: "person shrugging: light skin tone", + version: "3.0" + }, { + emoji: "🤷🏼", + description: "person shrugging: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤷🏽", + description: "person shrugging: medium skin tone", + version: "3.0" + }, { + emoji: "🤷🏾", + description: "person shrugging: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤷🏿", + description: "person shrugging: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤷♂️", + description: "man shrugging", + version: "4.0", + keywords: ["doubt", "ignorance", "indifference", "man", "man shrugging", "shrug"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤷🏻♂️", + description: "man shrugging: light skin tone", + version: "4.0" + }, { + emoji: "🤷🏼♂️", + description: "man shrugging: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤷🏽♂️", + description: "man shrugging: medium skin tone", + version: "4.0" + }, { + emoji: "🤷🏾♂️", + description: "man shrugging: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤷🏿♂️", + description: "man shrugging: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤷♀️", + description: "woman shrugging", + version: "4.0", + keywords: ["doubt", "ignorance", "indifference", "shrug", "woman", "woman shrugging"], + category: "person-people", + group: "people-body", + subgroup: "person-gesture", + variations: [{ + emoji: "🤷🏻♀️", + description: "woman shrugging: light skin tone", + version: "4.0" + }, { + emoji: "🤷🏼♀️", + description: "woman shrugging: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤷🏽♀️", + description: "woman shrugging: medium skin tone", + version: "4.0" + }, { + emoji: "🤷🏾♀️", + description: "woman shrugging: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤷🏿♀️", + description: "woman shrugging: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑⚕️", + description: "health worker", + version: "12.1", + keywords: ["doctor", "health worker", "healthcare", "nurse", "therapist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻⚕️", + description: "health worker: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼⚕️", + description: "health worker: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽⚕️", + description: "health worker: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾⚕️", + description: "health worker: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿⚕️", + description: "health worker: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨⚕️", + description: "man health worker", + version: "4.0", + keywords: ["doctor", "healthcare", "man", "man health worker", "nurse", "therapist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻⚕️", + description: "man health worker: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼⚕️", + description: "man health worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽⚕️", + description: "man health worker: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾⚕️", + description: "man health worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿⚕️", + description: "man health worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩⚕️", + description: "woman health worker", + version: "4.0", + keywords: ["doctor", "healthcare", "nurse", "therapist", "woman", "woman health worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻⚕️", + description: "woman health worker: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼⚕️", + description: "woman health worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽⚕️", + description: "woman health worker: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾⚕️", + description: "woman health worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿⚕️", + description: "woman health worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🎓", + description: "student", + version: "12.1", + keywords: ["graduate", "student"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🎓", + description: "student: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🎓", + description: "student: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🎓", + description: "student: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🎓", + description: "student: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🎓", + description: "student: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🎓", + description: "man student", + version: "4.0", + keywords: ["graduate", "man", "student"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🎓", + description: "man student: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🎓", + description: "man student: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🎓", + description: "man student: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🎓", + description: "man student: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🎓", + description: "man student: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🎓", + description: "woman student", + version: "4.0", + keywords: ["graduate", "student", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🎓", + description: "woman student: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🎓", + description: "woman student: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🎓", + description: "woman student: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🎓", + description: "woman student: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🎓", + description: "woman student: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🏫", + description: "teacher", + version: "12.1", + keywords: ["instructor", "professor", "teacher"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🏫", + description: "teacher: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🏫", + description: "teacher: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🏫", + description: "teacher: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🏫", + description: "teacher: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🏫", + description: "teacher: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🏫", + description: "man teacher", + version: "4.0", + keywords: ["instructor", "man", "professor", "teacher"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🏫", + description: "man teacher: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🏫", + description: "man teacher: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🏫", + description: "man teacher: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🏫", + description: "man teacher: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🏫", + description: "man teacher: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🏫", + description: "woman teacher", + version: "4.0", + keywords: ["instructor", "professor", "teacher", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🏫", + description: "woman teacher: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🏫", + description: "woman teacher: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🏫", + description: "woman teacher: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🏫", + description: "woman teacher: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🏫", + description: "woman teacher: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑⚖️", + description: "judge", + version: "12.1", + keywords: ["judge", "justice", "scales"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻⚖️", + description: "judge: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼⚖️", + description: "judge: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽⚖️", + description: "judge: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾⚖️", + description: "judge: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿⚖️", + description: "judge: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨⚖️", + description: "man judge", + version: "4.0", + keywords: ["judge", "justice", "man", "scales"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻⚖️", + description: "man judge: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼⚖️", + description: "man judge: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽⚖️", + description: "man judge: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾⚖️", + description: "man judge: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿⚖️", + description: "man judge: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩⚖️", + description: "woman judge", + version: "4.0", + keywords: ["judge", "justice", "scales", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻⚖️", + description: "woman judge: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼⚖️", + description: "woman judge: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽⚖️", + description: "woman judge: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾⚖️", + description: "woman judge: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿⚖️", + description: "woman judge: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🌾", + description: "farmer", + version: "12.1", + keywords: ["farmer", "gardener", "rancher"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🌾", + description: "farmer: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🌾", + description: "farmer: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🌾", + description: "farmer: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🌾", + description: "farmer: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🌾", + description: "farmer: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🌾", + description: "man farmer", + version: "4.0", + keywords: ["farmer", "gardener", "man", "rancher"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🌾", + description: "man farmer: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🌾", + description: "man farmer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🌾", + description: "man farmer: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🌾", + description: "man farmer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🌾", + description: "man farmer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🌾", + description: "woman farmer", + version: "4.0", + keywords: ["farmer", "gardener", "rancher", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🌾", + description: "woman farmer: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🌾", + description: "woman farmer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🌾", + description: "woman farmer: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🌾", + description: "woman farmer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🌾", + description: "woman farmer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🍳", + description: "cook", + version: "12.1", + keywords: ["chef", "cook"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🍳", + description: "cook: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🍳", + description: "cook: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🍳", + description: "cook: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🍳", + description: "cook: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🍳", + description: "cook: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🍳", + description: "man cook", + version: "4.0", + keywords: ["chef", "cook", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🍳", + description: "man cook: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🍳", + description: "man cook: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🍳", + description: "man cook: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🍳", + description: "man cook: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🍳", + description: "man cook: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🍳", + description: "woman cook", + version: "4.0", + keywords: ["chef", "cook", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🍳", + description: "woman cook: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🍳", + description: "woman cook: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🍳", + description: "woman cook: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🍳", + description: "woman cook: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🍳", + description: "woman cook: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🔧", + description: "mechanic", + version: "12.1", + keywords: ["electrician", "mechanic", "plumber", "tradesperson"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🔧", + description: "mechanic: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🔧", + description: "mechanic: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🔧", + description: "mechanic: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🔧", + description: "mechanic: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🔧", + description: "mechanic: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🔧", + description: "man mechanic", + version: "4.0", + keywords: ["electrician", "man", "mechanic", "plumber", "tradesperson"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🔧", + description: "man mechanic: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🔧", + description: "man mechanic: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🔧", + description: "man mechanic: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🔧", + description: "man mechanic: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🔧", + description: "man mechanic: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🔧", + description: "woman mechanic", + version: "4.0", + keywords: ["electrician", "mechanic", "plumber", "tradesperson", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🔧", + description: "woman mechanic: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🔧", + description: "woman mechanic: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🔧", + description: "woman mechanic: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🔧", + description: "woman mechanic: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🔧", + description: "woman mechanic: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🏭", + description: "factory worker", + version: "12.1", + keywords: ["assembly", "factory", "industrial", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🏭", + description: "factory worker: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🏭", + description: "factory worker: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🏭", + description: "factory worker: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🏭", + description: "factory worker: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🏭", + description: "factory worker: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🏭", + description: "man factory worker", + version: "4.0", + keywords: ["assembly", "factory", "industrial", "man", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🏭", + description: "man factory worker: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🏭", + description: "man factory worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🏭", + description: "man factory worker: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🏭", + description: "man factory worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🏭", + description: "man factory worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🏭", + description: "woman factory worker", + version: "4.0", + keywords: ["assembly", "factory", "industrial", "woman", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🏭", + description: "woman factory worker: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🏭", + description: "woman factory worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🏭", + description: "woman factory worker: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🏭", + description: "woman factory worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🏭", + description: "woman factory worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑💼", + description: "office worker", + version: "12.1", + keywords: ["architect", "business", "manager", "office worker", "white-collar"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻💼", + description: "office worker: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼💼", + description: "office worker: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽💼", + description: "office worker: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾💼", + description: "office worker: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿💼", + description: "office worker: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨💼", + description: "man office worker", + version: "4.0", + keywords: ["architect", "business", "man", "man office worker", "manager", "white-collar"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻💼", + description: "man office worker: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼💼", + description: "man office worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽💼", + description: "man office worker: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾💼", + description: "man office worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿💼", + description: "man office worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩💼", + description: "woman office worker", + version: "4.0", + keywords: ["architect", "business", "manager", "white-collar", "woman", "woman office worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻💼", + description: "woman office worker: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼💼", + description: "woman office worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽💼", + description: "woman office worker: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾💼", + description: "woman office worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿💼", + description: "woman office worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🔬", + description: "scientist", + version: "12.1", + keywords: ["biologist", "chemist", "engineer", "physicist", "scientist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🔬", + description: "scientist: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🔬", + description: "scientist: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🔬", + description: "scientist: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🔬", + description: "scientist: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🔬", + description: "scientist: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🔬", + description: "man scientist", + version: "4.0", + keywords: ["biologist", "chemist", "engineer", "man", "physicist", "scientist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🔬", + description: "man scientist: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🔬", + description: "man scientist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🔬", + description: "man scientist: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🔬", + description: "man scientist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🔬", + description: "man scientist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🔬", + description: "woman scientist", + version: "4.0", + keywords: ["biologist", "chemist", "engineer", "physicist", "scientist", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🔬", + description: "woman scientist: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🔬", + description: "woman scientist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🔬", + description: "woman scientist: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🔬", + description: "woman scientist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🔬", + description: "woman scientist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑💻", + description: "technologist", + version: "12.1", + keywords: ["coder", "developer", "inventor", "software", "technologist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻💻", + description: "technologist: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼💻", + description: "technologist: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽💻", + description: "technologist: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾💻", + description: "technologist: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿💻", + description: "technologist: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨💻", + description: "man technologist", + version: "4.0", + keywords: ["coder", "developer", "inventor", "man", "software", "technologist"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻💻", + description: "man technologist: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼💻", + description: "man technologist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽💻", + description: "man technologist: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾💻", + description: "man technologist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿💻", + description: "man technologist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩💻", + description: "woman technologist", + version: "4.0", + keywords: ["coder", "developer", "inventor", "software", "technologist", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻💻", + description: "woman technologist: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼💻", + description: "woman technologist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽💻", + description: "woman technologist: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾💻", + description: "woman technologist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿💻", + description: "woman technologist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🎤", + description: "singer", + version: "12.1", + keywords: ["actor", "entertainer", "rock", "singer", "star"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🎤", + description: "singer: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🎤", + description: "singer: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🎤", + description: "singer: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🎤", + description: "singer: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🎤", + description: "singer: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🎤", + description: "man singer", + version: "4.0", + keywords: ["actor", "entertainer", "man", "rock", "singer", "star"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🎤", + description: "man singer: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🎤", + description: "man singer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🎤", + description: "man singer: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🎤", + description: "man singer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🎤", + description: "man singer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🎤", + description: "woman singer", + version: "4.0", + keywords: ["actor", "entertainer", "rock", "singer", "star", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🎤", + description: "woman singer: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🎤", + description: "woman singer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🎤", + description: "woman singer: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🎤", + description: "woman singer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🎤", + description: "woman singer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🎨", + description: "artist", + version: "12.1", + keywords: ["artist", "palette"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🎨", + description: "artist: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🎨", + description: "artist: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🎨", + description: "artist: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🎨", + description: "artist: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🎨", + description: "artist: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🎨", + description: "man artist", + version: "4.0", + keywords: ["artist", "man", "palette"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🎨", + description: "man artist: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🎨", + description: "man artist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🎨", + description: "man artist: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🎨", + description: "man artist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🎨", + description: "man artist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🎨", + description: "woman artist", + version: "4.0", + keywords: ["artist", "palette", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🎨", + description: "woman artist: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🎨", + description: "woman artist: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🎨", + description: "woman artist: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🎨", + description: "woman artist: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🎨", + description: "woman artist: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑✈️", + description: "pilot", + version: "12.1", + keywords: ["pilot", "plane"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻✈️", + description: "pilot: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼✈️", + description: "pilot: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽✈️", + description: "pilot: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾✈️", + description: "pilot: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿✈️", + description: "pilot: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨✈️", + description: "man pilot", + version: "4.0", + keywords: ["man", "pilot", "plane"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻✈️", + description: "man pilot: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼✈️", + description: "man pilot: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽✈️", + description: "man pilot: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾✈️", + description: "man pilot: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿✈️", + description: "man pilot: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩✈️", + description: "woman pilot", + version: "4.0", + keywords: ["pilot", "plane", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻✈️", + description: "woman pilot: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼✈️", + description: "woman pilot: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽✈️", + description: "woman pilot: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾✈️", + description: "woman pilot: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿✈️", + description: "woman pilot: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🚀", + description: "astronaut", + version: "12.1", + keywords: ["astronaut", "rocket"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🚀", + description: "astronaut: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🚀", + description: "astronaut: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🚀", + description: "astronaut: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🚀", + description: "astronaut: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🚀", + description: "astronaut: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🚀", + description: "man astronaut", + version: "4.0", + keywords: ["astronaut", "man", "rocket"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🚀", + description: "man astronaut: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🚀", + description: "man astronaut: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🚀", + description: "man astronaut: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🚀", + description: "man astronaut: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🚀", + description: "man astronaut: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🚀", + description: "woman astronaut", + version: "4.0", + keywords: ["astronaut", "rocket", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🚀", + description: "woman astronaut: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🚀", + description: "woman astronaut: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🚀", + description: "woman astronaut: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🚀", + description: "woman astronaut: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🚀", + description: "woman astronaut: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🚒", + description: "firefighter", + version: "12.1", + keywords: ["firefighter", "firetruck"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🚒", + description: "firefighter: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🚒", + description: "firefighter: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🚒", + description: "firefighter: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🚒", + description: "firefighter: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🚒", + description: "firefighter: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🚒", + description: "man firefighter", + version: "4.0", + keywords: ["firefighter", "firetruck", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🚒", + description: "man firefighter: light skin tone", + version: "4.0" + }, { + emoji: "👨🏼🚒", + description: "man firefighter: medium-light skin tone", + version: "4.0" + }, { + emoji: "👨🏽🚒", + description: "man firefighter: medium skin tone", + version: "4.0" + }, { + emoji: "👨🏾🚒", + description: "man firefighter: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👨🏿🚒", + description: "man firefighter: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👩🚒", + description: "woman firefighter", + version: "4.0", + keywords: ["firefighter", "firetruck", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🚒", + description: "woman firefighter: light skin tone", + version: "4.0" + }, { + emoji: "👩🏼🚒", + description: "woman firefighter: medium-light skin tone", + version: "4.0" + }, { + emoji: "👩🏽🚒", + description: "woman firefighter: medium skin tone", + version: "4.0" + }, { + emoji: "👩🏾🚒", + description: "woman firefighter: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👩🏿🚒", + description: "woman firefighter: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👮", + description: "police officer", + version: "0.6", + keywords: ["cop", "officer", "police"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👮🏻", + description: "police officer: light skin tone", + version: "1.0" + }, { + emoji: "👮🏼", + description: "police officer: medium-light skin tone", + version: "1.0" + }, { + emoji: "👮🏽", + description: "police officer: medium skin tone", + version: "1.0" + }, { + emoji: "👮🏾", + description: "police officer: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👮🏿", + description: "police officer: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👮♂️", + description: "man police officer", + version: "4.0", + keywords: ["cop", "man", "officer", "police"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👮🏻♂️", + description: "man police officer: light skin tone", + version: "4.0" + }, { + emoji: "👮🏼♂️", + description: "man police officer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👮🏽♂️", + description: "man police officer: medium skin tone", + version: "4.0" + }, { + emoji: "👮🏾♂️", + description: "man police officer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👮🏿♂️", + description: "man police officer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👮♀️", + description: "woman police officer", + version: "4.0", + keywords: ["cop", "officer", "police", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👮🏻♀️", + description: "woman police officer: light skin tone", + version: "4.0" + }, { + emoji: "👮🏼♀️", + description: "woman police officer: medium-light skin tone", + version: "4.0" + }, { + emoji: "👮🏽♀️", + description: "woman police officer: medium skin tone", + version: "4.0" + }, { + emoji: "👮🏾♀️", + description: "woman police officer: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👮🏿♀️", + description: "woman police officer: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🕵️", + description: "detective", + version: "0.7", + keywords: ["detective", "sleuth", "spy"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🕵🏻", + description: "detective: light skin tone", + version: "2.0" + }, { + emoji: "🕵🏼", + description: "detective: medium-light skin tone", + version: "2.0" + }, { + emoji: "🕵🏽", + description: "detective: medium skin tone", + version: "2.0" + }, { + emoji: "🕵🏾", + description: "detective: medium-dark skin tone", + version: "2.0" + }, { + emoji: "🕵🏿", + description: "detective: dark skin tone", + version: "2.0" + }] + }, { + emoji: "🕵️♂️", + description: "man detective", + version: "4.0", + keywords: ["detective", "man", "sleuth", "spy"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🕵🏻♂️", + description: "man detective: light skin tone", + version: "4.0" + }, { + emoji: "🕵🏼♂️", + description: "man detective: medium-light skin tone", + version: "4.0" + }, { + emoji: "🕵🏽♂️", + description: "man detective: medium skin tone", + version: "4.0" + }, { + emoji: "🕵🏾♂️", + description: "man detective: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🕵🏿♂️", + description: "man detective: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🕵️♀️", + description: "woman detective", + version: "4.0", + keywords: ["detective", "sleuth", "spy", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🕵🏻♀️", + description: "woman detective: light skin tone", + version: "4.0" + }, { + emoji: "🕵🏼♀️", + description: "woman detective: medium-light skin tone", + version: "4.0" + }, { + emoji: "🕵🏽♀️", + description: "woman detective: medium skin tone", + version: "4.0" + }, { + emoji: "🕵🏾♀️", + description: "woman detective: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🕵🏿♀️", + description: "woman detective: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💂", + description: "guard", + version: "0.6", + keywords: ["guard"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "💂🏻", + description: "guard: light skin tone", + version: "1.0" + }, { + emoji: "💂🏼", + description: "guard: medium-light skin tone", + version: "1.0" + }, { + emoji: "💂🏽", + description: "guard: medium skin tone", + version: "1.0" + }, { + emoji: "💂🏾", + description: "guard: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💂🏿", + description: "guard: dark skin tone", + version: "1.0" + }] + }, { + emoji: "💂♂️", + description: "man guard", + version: "4.0", + keywords: ["guard", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "💂🏻♂️", + description: "man guard: light skin tone", + version: "4.0" + }, { + emoji: "💂🏼♂️", + description: "man guard: medium-light skin tone", + version: "4.0" + }, { + emoji: "💂🏽♂️", + description: "man guard: medium skin tone", + version: "4.0" + }, { + emoji: "💂🏾♂️", + description: "man guard: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💂🏿♂️", + description: "man guard: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💂♀️", + description: "woman guard", + version: "4.0", + keywords: ["guard", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "💂🏻♀️", + description: "woman guard: light skin tone", + version: "4.0" + }, { + emoji: "💂🏼♀️", + description: "woman guard: medium-light skin tone", + version: "4.0" + }, { + emoji: "💂🏽♀️", + description: "woman guard: medium skin tone", + version: "4.0" + }, { + emoji: "💂🏾♀️", + description: "woman guard: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💂🏿♀️", + description: "woman guard: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🥷", + description: "ninja", + version: "13.0", + keywords: ["fighter", "hidden", "ninja", "stealth"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🥷🏻", + description: "ninja: light skin tone", + version: "13.0" + }, { + emoji: "🥷🏼", + description: "ninja: medium-light skin tone", + version: "13.0" + }, { + emoji: "🥷🏽", + description: "ninja: medium skin tone", + version: "13.0" + }, { + emoji: "🥷🏾", + description: "ninja: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🥷🏿", + description: "ninja: dark skin tone", + version: "13.0" + }] + }, { + emoji: "👷", + description: "construction worker", + version: "0.6", + keywords: ["construction", "hat", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👷🏻", + description: "construction worker: light skin tone", + version: "1.0" + }, { + emoji: "👷🏼", + description: "construction worker: medium-light skin tone", + version: "1.0" + }, { + emoji: "👷🏽", + description: "construction worker: medium skin tone", + version: "1.0" + }, { + emoji: "👷🏾", + description: "construction worker: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👷🏿", + description: "construction worker: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👷♂️", + description: "man construction worker", + version: "4.0", + keywords: ["construction", "man", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👷🏻♂️", + description: "man construction worker: light skin tone", + version: "4.0" + }, { + emoji: "👷🏼♂️", + description: "man construction worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👷🏽♂️", + description: "man construction worker: medium skin tone", + version: "4.0" + }, { + emoji: "👷🏾♂️", + description: "man construction worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👷🏿♂️", + description: "man construction worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👷♀️", + description: "woman construction worker", + version: "4.0", + keywords: ["construction", "woman", "worker"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👷🏻♀️", + description: "woman construction worker: light skin tone", + version: "4.0" + }, { + emoji: "👷🏼♀️", + description: "woman construction worker: medium-light skin tone", + version: "4.0" + }, { + emoji: "👷🏽♀️", + description: "woman construction worker: medium skin tone", + version: "4.0" + }, { + emoji: "👷🏾♀️", + description: "woman construction worker: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👷🏿♀️", + description: "woman construction worker: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🫅", + description: "person with crown", + version: "14.0", + keywords: ["monarch", "noble", "person with crown", "regal", "royalty"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🫅🏻", + description: "person with crown: light skin tone", + version: "14.0" + }, { + emoji: "🫅🏼", + description: "person with crown: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫅🏽", + description: "person with crown: medium skin tone", + version: "14.0" + }, { + emoji: "🫅🏾", + description: "person with crown: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫅🏿", + description: "person with crown: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🤴", + description: "prince", + version: "3.0", + keywords: ["prince"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤴🏻", + description: "prince: light skin tone", + version: "3.0" + }, { + emoji: "🤴🏼", + description: "prince: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤴🏽", + description: "prince: medium skin tone", + version: "3.0" + }, { + emoji: "🤴🏾", + description: "prince: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤴🏿", + description: "prince: dark skin tone", + version: "3.0" + }] + }, { + emoji: "👸", + description: "princess", + version: "0.6", + keywords: ["fairy tale", "fantasy", "princess"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👸🏻", + description: "princess: light skin tone", + version: "1.0" + }, { + emoji: "👸🏼", + description: "princess: medium-light skin tone", + version: "1.0" + }, { + emoji: "👸🏽", + description: "princess: medium skin tone", + version: "1.0" + }, { + emoji: "👸🏾", + description: "princess: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👸🏿", + description: "princess: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👳", + description: "person wearing turban", + version: "0.6", + keywords: ["person wearing turban", "turban"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👳🏻", + description: "person wearing turban: light skin tone", + version: "1.0" + }, { + emoji: "👳🏼", + description: "person wearing turban: medium-light skin tone", + version: "1.0" + }, { + emoji: "👳🏽", + description: "person wearing turban: medium skin tone", + version: "1.0" + }, { + emoji: "👳🏾", + description: "person wearing turban: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👳🏿", + description: "person wearing turban: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👳♂️", + description: "man wearing turban", + version: "4.0", + keywords: ["man", "man wearing turban", "turban"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👳🏻♂️", + description: "man wearing turban: light skin tone", + version: "4.0" + }, { + emoji: "👳🏼♂️", + description: "man wearing turban: medium-light skin tone", + version: "4.0" + }, { + emoji: "👳🏽♂️", + description: "man wearing turban: medium skin tone", + version: "4.0" + }, { + emoji: "👳🏾♂️", + description: "man wearing turban: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👳🏿♂️", + description: "man wearing turban: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👳♀️", + description: "woman wearing turban", + version: "4.0", + keywords: ["turban", "woman", "woman wearing turban"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👳🏻♀️", + description: "woman wearing turban: light skin tone", + version: "4.0" + }, { + emoji: "👳🏼♀️", + description: "woman wearing turban: medium-light skin tone", + version: "4.0" + }, { + emoji: "👳🏽♀️", + description: "woman wearing turban: medium skin tone", + version: "4.0" + }, { + emoji: "👳🏾♀️", + description: "woman wearing turban: medium-dark skin tone", + version: "4.0" + }, { + emoji: "👳🏿♀️", + description: "woman wearing turban: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👲", + description: "person with skullcap", + version: "0.6", + keywords: ["cap", "gua pi mao", "hat", "person", "person with skullcap", "skullcap"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👲🏻", + description: "person with skullcap: light skin tone", + version: "1.0" + }, { + emoji: "👲🏼", + description: "person with skullcap: medium-light skin tone", + version: "1.0" + }, { + emoji: "👲🏽", + description: "person with skullcap: medium skin tone", + version: "1.0" + }, { + emoji: "👲🏾", + description: "person with skullcap: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👲🏿", + description: "person with skullcap: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🧕", + description: "woman with headscarf", + version: "5.0", + keywords: ["headscarf", "hijab", "mantilla", "tichel", "woman with headscarf"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧕🏻", + description: "woman with headscarf: light skin tone", + version: "5.0" + }, { + emoji: "🧕🏼", + description: "woman with headscarf: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧕🏽", + description: "woman with headscarf: medium skin tone", + version: "5.0" + }, { + emoji: "🧕🏾", + description: "woman with headscarf: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧕🏿", + description: "woman with headscarf: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🤵", + description: "person in tuxedo", + version: "3.0", + keywords: ["groom", "person", "person in tuxedo", "tuxedo"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤵🏻", + description: "person in tuxedo: light skin tone", + version: "3.0" + }, { + emoji: "🤵🏼", + description: "person in tuxedo: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤵🏽", + description: "person in tuxedo: medium skin tone", + version: "3.0" + }, { + emoji: "🤵🏾", + description: "person in tuxedo: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤵🏿", + description: "person in tuxedo: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤵♂️", + description: "man in tuxedo", + version: "13.0", + keywords: ["man", "man in tuxedo", "tuxedo"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤵🏻♂️", + description: "man in tuxedo: light skin tone", + version: "13.0" + }, { + emoji: "🤵🏼♂️", + description: "man in tuxedo: medium-light skin tone", + version: "13.0" + }, { + emoji: "🤵🏽♂️", + description: "man in tuxedo: medium skin tone", + version: "13.0" + }, { + emoji: "🤵🏾♂️", + description: "man in tuxedo: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🤵🏿♂️", + description: "man in tuxedo: dark skin tone", + version: "13.0" + }] + }, { + emoji: "🤵♀️", + description: "woman in tuxedo", + version: "13.0", + keywords: ["tuxedo", "woman", "woman in tuxedo"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤵🏻♀️", + description: "woman in tuxedo: light skin tone", + version: "13.0" + }, { + emoji: "🤵🏼♀️", + description: "woman in tuxedo: medium-light skin tone", + version: "13.0" + }, { + emoji: "🤵🏽♀️", + description: "woman in tuxedo: medium skin tone", + version: "13.0" + }, { + emoji: "🤵🏾♀️", + description: "woman in tuxedo: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🤵🏿♀️", + description: "woman in tuxedo: dark skin tone", + version: "13.0" + }] + }, { + emoji: "👰", + description: "person with veil", + version: "0.6", + keywords: ["bride", "person", "person with veil", "veil", "wedding"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👰🏻", + description: "person with veil: light skin tone", + version: "1.0" + }, { + emoji: "👰🏼", + description: "person with veil: medium-light skin tone", + version: "1.0" + }, { + emoji: "👰🏽", + description: "person with veil: medium skin tone", + version: "1.0" + }, { + emoji: "👰🏾", + description: "person with veil: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👰🏿", + description: "person with veil: dark skin tone", + version: "1.0" + }] + }, { + emoji: "👰♂️", + description: "man with veil", + version: "13.0", + keywords: ["man", "man with veil", "veil"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👰🏻♂️", + description: "man with veil: light skin tone", + version: "13.0" + }, { + emoji: "👰🏼♂️", + description: "man with veil: medium-light skin tone", + version: "13.0" + }, { + emoji: "👰🏽♂️", + description: "man with veil: medium skin tone", + version: "13.0" + }, { + emoji: "👰🏾♂️", + description: "man with veil: medium-dark skin tone", + version: "13.0" + }, { + emoji: "👰🏿♂️", + description: "man with veil: dark skin tone", + version: "13.0" + }] + }, { + emoji: "👰♀️", + description: "woman with veil", + version: "13.0", + keywords: ["veil", "woman", "woman with veil"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👰🏻♀️", + description: "woman with veil: light skin tone", + version: "13.0" + }, { + emoji: "👰🏼♀️", + description: "woman with veil: medium-light skin tone", + version: "13.0" + }, { + emoji: "👰🏽♀️", + description: "woman with veil: medium skin tone", + version: "13.0" + }, { + emoji: "👰🏾♀️", + description: "woman with veil: medium-dark skin tone", + version: "13.0" + }, { + emoji: "👰🏿♀️", + description: "woman with veil: dark skin tone", + version: "13.0" + }] + }, { + emoji: "🤰", + description: "pregnant woman", + version: "3.0", + keywords: ["pregnant", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤰🏻", + description: "pregnant woman: light skin tone", + version: "3.0" + }, { + emoji: "🤰🏼", + description: "pregnant woman: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤰🏽", + description: "pregnant woman: medium skin tone", + version: "3.0" + }, { + emoji: "🤰🏾", + description: "pregnant woman: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤰🏿", + description: "pregnant woman: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🫃", + description: "pregnant man", + version: "14.0", + keywords: ["belly", "bloated", "full", "pregnant", "pregnant man"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🫃🏻", + description: "pregnant man: light skin tone", + version: "14.0" + }, { + emoji: "🫃🏼", + description: "pregnant man: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫃🏽", + description: "pregnant man: medium skin tone", + version: "14.0" + }, { + emoji: "🫃🏾", + description: "pregnant man: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫃🏿", + description: "pregnant man: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🫄", + description: "pregnant person", + version: "14.0", + keywords: ["belly", "bloated", "full", "pregnant", "pregnant person"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🫄🏻", + description: "pregnant person: light skin tone", + version: "14.0" + }, { + emoji: "🫄🏼", + description: "pregnant person: medium-light skin tone", + version: "14.0" + }, { + emoji: "🫄🏽", + description: "pregnant person: medium skin tone", + version: "14.0" + }, { + emoji: "🫄🏾", + description: "pregnant person: medium-dark skin tone", + version: "14.0" + }, { + emoji: "🫄🏿", + description: "pregnant person: dark skin tone", + version: "14.0" + }] + }, { + emoji: "🤱", + description: "breast-feeding", + version: "5.0", + keywords: ["baby", "breast", "breast-feeding", "nursing"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🤱🏻", + description: "breast-feeding: light skin tone", + version: "5.0" + }, { + emoji: "🤱🏼", + description: "breast-feeding: medium-light skin tone", + version: "5.0" + }, { + emoji: "🤱🏽", + description: "breast-feeding: medium skin tone", + version: "5.0" + }, { + emoji: "🤱🏾", + description: "breast-feeding: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🤱🏿", + description: "breast-feeding: dark skin tone", + version: "5.0" + }] + }, { + emoji: "👩🍼", + description: "woman feeding baby", + version: "13.0", + keywords: ["baby", "feeding", "nursing", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👩🏻🍼", + description: "woman feeding baby: light skin tone", + version: "13.0" + }, { + emoji: "👩🏼🍼", + description: "woman feeding baby: medium-light skin tone", + version: "13.0" + }, { + emoji: "👩🏽🍼", + description: "woman feeding baby: medium skin tone", + version: "13.0" + }, { + emoji: "👩🏾🍼", + description: "woman feeding baby: medium-dark skin tone", + version: "13.0" + }, { + emoji: "👩🏿🍼", + description: "woman feeding baby: dark skin tone", + version: "13.0" + }] + }, { + emoji: "👨🍼", + description: "man feeding baby", + version: "13.0", + keywords: ["baby", "feeding", "man", "nursing"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "👨🏻🍼", + description: "man feeding baby: light skin tone", + version: "13.0" + }, { + emoji: "👨🏼🍼", + description: "man feeding baby: medium-light skin tone", + version: "13.0" + }, { + emoji: "👨🏽🍼", + description: "man feeding baby: medium skin tone", + version: "13.0" + }, { + emoji: "👨🏾🍼", + description: "man feeding baby: medium-dark skin tone", + version: "13.0" + }, { + emoji: "👨🏿🍼", + description: "man feeding baby: dark skin tone", + version: "13.0" + }] + }, { + emoji: "🧑🍼", + description: "person feeding baby", + version: "13.0", + keywords: ["baby", "feeding", "nursing", "person"], + category: "person-people", + group: "people-body", + subgroup: "person-role", + variations: [{ + emoji: "🧑🏻🍼", + description: "person feeding baby: light skin tone", + version: "13.0" + }, { + emoji: "🧑🏼🍼", + description: "person feeding baby: medium-light skin tone", + version: "13.0" + }, { + emoji: "🧑🏽🍼", + description: "person feeding baby: medium skin tone", + version: "13.0" + }, { + emoji: "🧑🏾🍼", + description: "person feeding baby: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🧑🏿🍼", + description: "person feeding baby: dark skin tone", + version: "13.0" + }] + }, { + emoji: "👼", + description: "baby angel", + version: "0.6", + keywords: ["angel", "baby", "face", "fairy tale", "fantasy"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "👼🏻", + description: "baby angel: light skin tone", + version: "1.0" + }, { + emoji: "👼🏼", + description: "baby angel: medium-light skin tone", + version: "1.0" + }, { + emoji: "👼🏽", + description: "baby angel: medium skin tone", + version: "1.0" + }, { + emoji: "👼🏾", + description: "baby angel: medium-dark skin tone", + version: "1.0" + }, { + emoji: "👼🏿", + description: "baby angel: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🎅", + description: "Santa Claus", + version: "0.6", + keywords: ["celebration", "Christmas", "claus", "father", "santa", "Santa Claus"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🎅🏻", + description: "Santa Claus: light skin tone", + version: "1.0" + }, { + emoji: "🎅🏼", + description: "Santa Claus: medium-light skin tone", + version: "1.0" + }, { + emoji: "🎅🏽", + description: "Santa Claus: medium skin tone", + version: "1.0" + }, { + emoji: "🎅🏾", + description: "Santa Claus: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🎅🏿", + description: "Santa Claus: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🤶", + description: "Mrs. Claus", + version: "3.0", + keywords: ["celebration", "Christmas", "claus", "mother", "Mrs.", "Mrs. Claus"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🤶🏻", + description: "Mrs. Claus: light skin tone", + version: "3.0" + }, { + emoji: "🤶🏼", + description: "Mrs. Claus: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤶🏽", + description: "Mrs. Claus: medium skin tone", + version: "3.0" + }, { + emoji: "🤶🏾", + description: "Mrs. Claus: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤶🏿", + description: "Mrs. Claus: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🧑🎄", + description: "mx claus", + version: "13.0", + keywords: ["Claus", "christmas", "mx claus"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧑🏻🎄", + description: "mx claus: light skin tone", + version: "13.0" + }, { + emoji: "🧑🏼🎄", + description: "mx claus: medium-light skin tone", + version: "13.0" + }, { + emoji: "🧑🏽🎄", + description: "mx claus: medium skin tone", + version: "13.0" + }, { + emoji: "🧑🏾🎄", + description: "mx claus: medium-dark skin tone", + version: "13.0" + }, { + emoji: "🧑🏿🎄", + description: "mx claus: dark skin tone", + version: "13.0" + }] + }, { + emoji: "🦸", + description: "superhero", + version: "11.0", + keywords: ["good", "hero", "heroine", "superhero", "superpower"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦸🏻", + description: "superhero: light skin tone", + version: "11.0" + }, { + emoji: "🦸🏼", + description: "superhero: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦸🏽", + description: "superhero: medium skin tone", + version: "11.0" + }, { + emoji: "🦸🏾", + description: "superhero: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦸🏿", + description: "superhero: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦸♂️", + description: "man superhero", + version: "11.0", + keywords: ["good", "hero", "man", "man superhero", "superpower"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦸🏻♂️", + description: "man superhero: light skin tone", + version: "11.0" + }, { + emoji: "🦸🏼♂️", + description: "man superhero: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦸🏽♂️", + description: "man superhero: medium skin tone", + version: "11.0" + }, { + emoji: "🦸🏾♂️", + description: "man superhero: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦸🏿♂️", + description: "man superhero: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦸♀️", + description: "woman superhero", + version: "11.0", + keywords: ["good", "hero", "heroine", "superpower", "woman", "woman superhero"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦸🏻♀️", + description: "woman superhero: light skin tone", + version: "11.0" + }, { + emoji: "🦸🏼♀️", + description: "woman superhero: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦸🏽♀️", + description: "woman superhero: medium skin tone", + version: "11.0" + }, { + emoji: "🦸🏾♀️", + description: "woman superhero: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦸🏿♀️", + description: "woman superhero: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦹", + description: "supervillain", + version: "11.0", + keywords: ["criminal", "evil", "superpower", "supervillain", "villain"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦹🏻", + description: "supervillain: light skin tone", + version: "11.0" + }, { + emoji: "🦹🏼", + description: "supervillain: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦹🏽", + description: "supervillain: medium skin tone", + version: "11.0" + }, { + emoji: "🦹🏾", + description: "supervillain: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦹🏿", + description: "supervillain: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦹♂️", + description: "man supervillain", + version: "11.0", + keywords: ["criminal", "evil", "man", "man supervillain", "superpower", "villain"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦹🏻♂️", + description: "man supervillain: light skin tone", + version: "11.0" + }, { + emoji: "🦹🏼♂️", + description: "man supervillain: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦹🏽♂️", + description: "man supervillain: medium skin tone", + version: "11.0" + }, { + emoji: "🦹🏾♂️", + description: "man supervillain: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦹🏿♂️", + description: "man supervillain: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🦹♀️", + description: "woman supervillain", + version: "11.0", + keywords: ["criminal", "evil", "superpower", "villain", "woman", "woman supervillain"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🦹🏻♀️", + description: "woman supervillain: light skin tone", + version: "11.0" + }, { + emoji: "🦹🏼♀️", + description: "woman supervillain: medium-light skin tone", + version: "11.0" + }, { + emoji: "🦹🏽♀️", + description: "woman supervillain: medium skin tone", + version: "11.0" + }, { + emoji: "🦹🏾♀️", + description: "woman supervillain: medium-dark skin tone", + version: "11.0" + }, { + emoji: "🦹🏿♀️", + description: "woman supervillain: dark skin tone", + version: "11.0" + }] + }, { + emoji: "🧙", + description: "mage", + version: "5.0", + keywords: ["mage", "sorcerer", "sorceress", "witch", "wizard"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧙🏻", + description: "mage: light skin tone", + version: "5.0" + }, { + emoji: "🧙🏼", + description: "mage: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧙🏽", + description: "mage: medium skin tone", + version: "5.0" + }, { + emoji: "🧙🏾", + description: "mage: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧙🏿", + description: "mage: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧙♂️", + description: "man mage", + version: "5.0", + keywords: ["man mage", "sorcerer", "wizard"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧙🏻♂️", + description: "man mage: light skin tone", + version: "5.0" + }, { + emoji: "🧙🏼♂️", + description: "man mage: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧙🏽♂️", + description: "man mage: medium skin tone", + version: "5.0" + }, { + emoji: "🧙🏾♂️", + description: "man mage: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧙🏿♂️", + description: "man mage: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧙♀️", + description: "woman mage", + version: "5.0", + keywords: ["sorceress", "witch", "woman mage"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧙🏻♀️", + description: "woman mage: light skin tone", + version: "5.0" + }, { + emoji: "🧙🏼♀️", + description: "woman mage: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧙🏽♀️", + description: "woman mage: medium skin tone", + version: "5.0" + }, { + emoji: "🧙🏾♀️", + description: "woman mage: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧙🏿♀️", + description: "woman mage: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧚", + description: "fairy", + version: "5.0", + keywords: ["fairy", "Oberon", "Puck", "Titania"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧚🏻", + description: "fairy: light skin tone", + version: "5.0" + }, { + emoji: "🧚🏼", + description: "fairy: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧚🏽", + description: "fairy: medium skin tone", + version: "5.0" + }, { + emoji: "🧚🏾", + description: "fairy: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧚🏿", + description: "fairy: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧚♂️", + description: "man fairy", + version: "5.0", + keywords: ["man fairy", "Oberon", "Puck"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧚🏻♂️", + description: "man fairy: light skin tone", + version: "5.0" + }, { + emoji: "🧚🏼♂️", + description: "man fairy: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧚🏽♂️", + description: "man fairy: medium skin tone", + version: "5.0" + }, { + emoji: "🧚🏾♂️", + description: "man fairy: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧚🏿♂️", + description: "man fairy: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧚♀️", + description: "woman fairy", + version: "5.0", + keywords: ["Titania", "woman fairy"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧚🏻♀️", + description: "woman fairy: light skin tone", + version: "5.0" + }, { + emoji: "🧚🏼♀️", + description: "woman fairy: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧚🏽♀️", + description: "woman fairy: medium skin tone", + version: "5.0" + }, { + emoji: "🧚🏾♀️", + description: "woman fairy: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧚🏿♀️", + description: "woman fairy: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧛", + description: "vampire", + version: "5.0", + keywords: ["Dracula", "undead", "vampire"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧛🏻", + description: "vampire: light skin tone", + version: "5.0" + }, { + emoji: "🧛🏼", + description: "vampire: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧛🏽", + description: "vampire: medium skin tone", + version: "5.0" + }, { + emoji: "🧛🏾", + description: "vampire: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧛🏿", + description: "vampire: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧛♂️", + description: "man vampire", + version: "5.0", + keywords: ["Dracula", "man vampire", "undead"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧛🏻♂️", + description: "man vampire: light skin tone", + version: "5.0" + }, { + emoji: "🧛🏼♂️", + description: "man vampire: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧛🏽♂️", + description: "man vampire: medium skin tone", + version: "5.0" + }, { + emoji: "🧛🏾♂️", + description: "man vampire: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧛🏿♂️", + description: "man vampire: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧛♀️", + description: "woman vampire", + version: "5.0", + keywords: ["undead", "woman vampire"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧛🏻♀️", + description: "woman vampire: light skin tone", + version: "5.0" + }, { + emoji: "🧛🏼♀️", + description: "woman vampire: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧛🏽♀️", + description: "woman vampire: medium skin tone", + version: "5.0" + }, { + emoji: "🧛🏾♀️", + description: "woman vampire: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧛🏿♀️", + description: "woman vampire: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧜", + description: "merperson", + version: "5.0", + keywords: ["mermaid", "merman", "merperson", "merwoman"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧜🏻", + description: "merperson: light skin tone", + version: "5.0" + }, { + emoji: "🧜🏼", + description: "merperson: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧜🏽", + description: "merperson: medium skin tone", + version: "5.0" + }, { + emoji: "🧜🏾", + description: "merperson: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧜🏿", + description: "merperson: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧜♂️", + description: "merman", + version: "5.0", + keywords: ["merman", "Triton"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧜🏻♂️", + description: "merman: light skin tone", + version: "5.0" + }, { + emoji: "🧜🏼♂️", + description: "merman: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧜🏽♂️", + description: "merman: medium skin tone", + version: "5.0" + }, { + emoji: "🧜🏾♂️", + description: "merman: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧜🏿♂️", + description: "merman: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧜♀️", + description: "mermaid", + version: "5.0", + keywords: ["mermaid", "merwoman"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧜🏻♀️", + description: "mermaid: light skin tone", + version: "5.0" + }, { + emoji: "🧜🏼♀️", + description: "mermaid: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧜🏽♀️", + description: "mermaid: medium skin tone", + version: "5.0" + }, { + emoji: "🧜🏾♀️", + description: "mermaid: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧜🏿♀️", + description: "mermaid: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧝", + description: "elf", + version: "5.0", + keywords: ["elf", "magical"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧝🏻", + description: "elf: light skin tone", + version: "5.0" + }, { + emoji: "🧝🏼", + description: "elf: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧝🏽", + description: "elf: medium skin tone", + version: "5.0" + }, { + emoji: "🧝🏾", + description: "elf: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧝🏿", + description: "elf: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧝♂️", + description: "man elf", + version: "5.0", + keywords: ["magical", "man elf"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧝🏻♂️", + description: "man elf: light skin tone", + version: "5.0" + }, { + emoji: "🧝🏼♂️", + description: "man elf: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧝🏽♂️", + description: "man elf: medium skin tone", + version: "5.0" + }, { + emoji: "🧝🏾♂️", + description: "man elf: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧝🏿♂️", + description: "man elf: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧝♀️", + description: "woman elf", + version: "5.0", + keywords: ["magical", "woman elf"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy", + variations: [{ + emoji: "🧝🏻♀️", + description: "woman elf: light skin tone", + version: "5.0" + }, { + emoji: "🧝🏼♀️", + description: "woman elf: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧝🏽♀️", + description: "woman elf: medium skin tone", + version: "5.0" + }, { + emoji: "🧝🏾♀️", + description: "woman elf: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧝🏿♀️", + description: "woman elf: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧞", + description: "genie", + version: "5.0", + keywords: ["djinn", "genie"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧞♂️", + description: "man genie", + version: "5.0", + keywords: ["djinn", "man genie"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧞♀️", + description: "woman genie", + version: "5.0", + keywords: ["djinn", "woman genie"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧟", + description: "zombie", + version: "5.0", + keywords: ["undead", "walking dead", "zombie"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧟♂️", + description: "man zombie", + version: "5.0", + keywords: ["man zombie", "undead", "walking dead"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧟♀️", + description: "woman zombie", + version: "5.0", + keywords: ["undead", "walking dead", "woman zombie"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "🧌", + description: "troll", + version: "14.0", + keywords: ["fairy tale", "fantasy", "monster", "troll"], + category: "person-people", + group: "people-body", + subgroup: "person-fantasy" + }, { + emoji: "💆", + description: "person getting massage", + version: "0.6", + keywords: ["face", "massage", "person getting massage", "salon"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💆🏻", + description: "person getting massage: light skin tone", + version: "1.0" + }, { + emoji: "💆🏼", + description: "person getting massage: medium-light skin tone", + version: "1.0" + }, { + emoji: "💆🏽", + description: "person getting massage: medium skin tone", + version: "1.0" + }, { + emoji: "💆🏾", + description: "person getting massage: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💆🏿", + description: "person getting massage: dark skin tone", + version: "1.0" + }] + }, { + emoji: "💆♂️", + description: "man getting massage", + version: "4.0", + keywords: ["face", "man", "man getting massage", "massage"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💆🏻♂️", + description: "man getting massage: light skin tone", + version: "4.0" + }, { + emoji: "💆🏼♂️", + description: "man getting massage: medium-light skin tone", + version: "4.0" + }, { + emoji: "💆🏽♂️", + description: "man getting massage: medium skin tone", + version: "4.0" + }, { + emoji: "💆🏾♂️", + description: "man getting massage: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💆🏿♂️", + description: "man getting massage: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💆♀️", + description: "woman getting massage", + version: "4.0", + keywords: ["face", "massage", "woman", "woman getting massage"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💆🏻♀️", + description: "woman getting massage: light skin tone", + version: "4.0" + }, { + emoji: "💆🏼♀️", + description: "woman getting massage: medium-light skin tone", + version: "4.0" + }, { + emoji: "💆🏽♀️", + description: "woman getting massage: medium skin tone", + version: "4.0" + }, { + emoji: "💆🏾♀️", + description: "woman getting massage: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💆🏿♀️", + description: "woman getting massage: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💇", + description: "person getting haircut", + version: "0.6", + keywords: ["barber", "beauty", "haircut", "parlor", "person getting haircut"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💇🏻", + description: "person getting haircut: light skin tone", + version: "1.0" + }, { + emoji: "💇🏼", + description: "person getting haircut: medium-light skin tone", + version: "1.0" + }, { + emoji: "💇🏽", + description: "person getting haircut: medium skin tone", + version: "1.0" + }, { + emoji: "💇🏾", + description: "person getting haircut: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💇🏿", + description: "person getting haircut: dark skin tone", + version: "1.0" + }] + }, { + emoji: "💇♂️", + description: "man getting haircut", + version: "4.0", + keywords: ["haircut", "man", "man getting haircut"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💇🏻♂️", + description: "man getting haircut: light skin tone", + version: "4.0" + }, { + emoji: "💇🏼♂️", + description: "man getting haircut: medium-light skin tone", + version: "4.0" + }, { + emoji: "💇🏽♂️", + description: "man getting haircut: medium skin tone", + version: "4.0" + }, { + emoji: "💇🏾♂️", + description: "man getting haircut: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💇🏿♂️", + description: "man getting haircut: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💇♀️", + description: "woman getting haircut", + version: "4.0", + keywords: ["haircut", "woman", "woman getting haircut"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💇🏻♀️", + description: "woman getting haircut: light skin tone", + version: "4.0" + }, { + emoji: "💇🏼♀️", + description: "woman getting haircut: medium-light skin tone", + version: "4.0" + }, { + emoji: "💇🏽♀️", + description: "woman getting haircut: medium skin tone", + version: "4.0" + }, { + emoji: "💇🏾♀️", + description: "woman getting haircut: medium-dark skin tone", + version: "4.0" + }, { + emoji: "💇🏿♀️", + description: "woman getting haircut: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚶", + description: "person walking", + version: "0.6", + keywords: ["hike", "person walking", "walk", "walking"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🚶🏻", + description: "person walking: light skin tone", + version: "1.0" + }, { + emoji: "🚶🏼", + description: "person walking: medium-light skin tone", + version: "1.0" + }, { + emoji: "🚶🏽", + description: "person walking: medium skin tone", + version: "1.0" + }, { + emoji: "🚶🏾", + description: "person walking: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🚶🏿", + description: "person walking: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🚶♂️", + description: "man walking", + version: "4.0", + keywords: ["hike", "man", "man walking", "walk"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🚶🏻♂️", + description: "man walking: light skin tone", + version: "4.0" + }, { + emoji: "🚶🏼♂️", + description: "man walking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚶🏽♂️", + description: "man walking: medium skin tone", + version: "4.0" + }, { + emoji: "🚶🏾♂️", + description: "man walking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚶🏿♂️", + description: "man walking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚶♀️", + description: "woman walking", + version: "4.0", + keywords: ["hike", "walk", "woman", "woman walking"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🚶🏻♀️", + description: "woman walking: light skin tone", + version: "4.0" + }, { + emoji: "🚶🏼♀️", + description: "woman walking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚶🏽♀️", + description: "woman walking: medium skin tone", + version: "4.0" + }, { + emoji: "🚶🏾♀️", + description: "woman walking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚶🏿♀️", + description: "woman walking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧍", + description: "person standing", + version: "12.0", + keywords: ["person standing", "stand", "standing"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧍🏻", + description: "person standing: light skin tone", + version: "12.0" + }, { + emoji: "🧍🏼", + description: "person standing: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧍🏽", + description: "person standing: medium skin tone", + version: "12.0" + }, { + emoji: "🧍🏾", + description: "person standing: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧍🏿", + description: "person standing: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧍♂️", + description: "man standing", + version: "12.0", + keywords: ["man", "standing"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧍🏻♂️", + description: "man standing: light skin tone", + version: "12.0" + }, { + emoji: "🧍🏼♂️", + description: "man standing: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧍🏽♂️", + description: "man standing: medium skin tone", + version: "12.0" + }, { + emoji: "🧍🏾♂️", + description: "man standing: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧍🏿♂️", + description: "man standing: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧍♀️", + description: "woman standing", + version: "12.0", + keywords: ["standing", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧍🏻♀️", + description: "woman standing: light skin tone", + version: "12.0" + }, { + emoji: "🧍🏼♀️", + description: "woman standing: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧍🏽♀️", + description: "woman standing: medium skin tone", + version: "12.0" + }, { + emoji: "🧍🏾♀️", + description: "woman standing: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧍🏿♀️", + description: "woman standing: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧎", + description: "person kneeling", + version: "12.0", + keywords: ["kneel", "kneeling", "person kneeling"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧎🏻", + description: "person kneeling: light skin tone", + version: "12.0" + }, { + emoji: "🧎🏼", + description: "person kneeling: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧎🏽", + description: "person kneeling: medium skin tone", + version: "12.0" + }, { + emoji: "🧎🏾", + description: "person kneeling: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧎🏿", + description: "person kneeling: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧎♂️", + description: "man kneeling", + version: "12.0", + keywords: ["kneeling", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧎🏻♂️", + description: "man kneeling: light skin tone", + version: "12.0" + }, { + emoji: "🧎🏼♂️", + description: "man kneeling: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧎🏽♂️", + description: "man kneeling: medium skin tone", + version: "12.0" + }, { + emoji: "🧎🏾♂️", + description: "man kneeling: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧎🏿♂️", + description: "man kneeling: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧎♀️", + description: "woman kneeling", + version: "12.0", + keywords: ["kneeling", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧎🏻♀️", + description: "woman kneeling: light skin tone", + version: "12.0" + }, { + emoji: "🧎🏼♀️", + description: "woman kneeling: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧎🏽♀️", + description: "woman kneeling: medium skin tone", + version: "12.0" + }, { + emoji: "🧎🏾♀️", + description: "woman kneeling: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧎🏿♀️", + description: "woman kneeling: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧑🦯", + description: "person with white cane", + version: "12.1", + keywords: ["accessibility", "blind", "person with white cane"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧑🏻🦯", + description: "person with white cane: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🦯", + description: "person with white cane: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🦯", + description: "person with white cane: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🦯", + description: "person with white cane: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🦯", + description: "person with white cane: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🦯", + description: "man with white cane", + version: "12.0", + keywords: ["accessibility", "blind", "man", "man with white cane"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👨🏻🦯", + description: "man with white cane: light skin tone", + version: "12.0" + }, { + emoji: "👨🏼🦯", + description: "man with white cane: medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏽🦯", + description: "man with white cane: medium skin tone", + version: "12.0" + }, { + emoji: "👨🏾🦯", + description: "man with white cane: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👨🏿🦯", + description: "man with white cane: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👩🦯", + description: "woman with white cane", + version: "12.0", + keywords: ["accessibility", "blind", "woman", "woman with white cane"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👩🏻🦯", + description: "woman with white cane: light skin tone", + version: "12.0" + }, { + emoji: "👩🏼🦯", + description: "woman with white cane: medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏽🦯", + description: "woman with white cane: medium skin tone", + version: "12.0" + }, { + emoji: "👩🏾🦯", + description: "woman with white cane: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏿🦯", + description: "woman with white cane: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧑🦼", + description: "person in motorized wheelchair", + version: "12.1", + keywords: ["accessibility", "person in motorized wheelchair", "wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧑🏻🦼", + description: "person in motorized wheelchair: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🦼", + description: "person in motorized wheelchair: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🦼", + description: "person in motorized wheelchair: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🦼", + description: "person in motorized wheelchair: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🦼", + description: "person in motorized wheelchair: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🦼", + description: "man in motorized wheelchair", + version: "12.0", + keywords: ["accessibility", "man", "man in motorized wheelchair", "wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👨🏻🦼", + description: "man in motorized wheelchair: light skin tone", + version: "12.0" + }, { + emoji: "👨🏼🦼", + description: "man in motorized wheelchair: medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏽🦼", + description: "man in motorized wheelchair: medium skin tone", + version: "12.0" + }, { + emoji: "👨🏾🦼", + description: "man in motorized wheelchair: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👨🏿🦼", + description: "man in motorized wheelchair: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👩🦼", + description: "woman in motorized wheelchair", + version: "12.0", + keywords: ["accessibility", "wheelchair", "woman", "woman in motorized wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👩🏻🦼", + description: "woman in motorized wheelchair: light skin tone", + version: "12.0" + }, { + emoji: "👩🏼🦼", + description: "woman in motorized wheelchair: medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏽🦼", + description: "woman in motorized wheelchair: medium skin tone", + version: "12.0" + }, { + emoji: "👩🏾🦼", + description: "woman in motorized wheelchair: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏿🦼", + description: "woman in motorized wheelchair: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🧑🦽", + description: "person in manual wheelchair", + version: "12.1", + keywords: ["accessibility", "person in manual wheelchair", "wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧑🏻🦽", + description: "person in manual wheelchair: light skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🦽", + description: "person in manual wheelchair: medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🦽", + description: "person in manual wheelchair: medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🦽", + description: "person in manual wheelchair: medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🦽", + description: "person in manual wheelchair: dark skin tone", + version: "12.1" + }] + }, { + emoji: "👨🦽", + description: "man in manual wheelchair", + version: "12.0", + keywords: ["accessibility", "man", "man in manual wheelchair", "wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👨🏻🦽", + description: "man in manual wheelchair: light skin tone", + version: "12.0" + }, { + emoji: "👨🏼🦽", + description: "man in manual wheelchair: medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏽🦽", + description: "man in manual wheelchair: medium skin tone", + version: "12.0" + }, { + emoji: "👨🏾🦽", + description: "man in manual wheelchair: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👨🏿🦽", + description: "man in manual wheelchair: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👩🦽", + description: "woman in manual wheelchair", + version: "12.0", + keywords: ["accessibility", "wheelchair", "woman", "woman in manual wheelchair"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "👩🏻🦽", + description: "woman in manual wheelchair: light skin tone", + version: "12.0" + }, { + emoji: "👩🏼🦽", + description: "woman in manual wheelchair: medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏽🦽", + description: "woman in manual wheelchair: medium skin tone", + version: "12.0" + }, { + emoji: "👩🏾🦽", + description: "woman in manual wheelchair: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏿🦽", + description: "woman in manual wheelchair: dark skin tone", + version: "12.0" + }] + }, { + emoji: "🏃", + description: "person running", + version: "0.6", + keywords: ["marathon", "person running", "running"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🏃🏻", + description: "person running: light skin tone", + version: "1.0" + }, { + emoji: "🏃🏼", + description: "person running: medium-light skin tone", + version: "1.0" + }, { + emoji: "🏃🏽", + description: "person running: medium skin tone", + version: "1.0" + }, { + emoji: "🏃🏾", + description: "person running: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🏃🏿", + description: "person running: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🏃♂️", + description: "man running", + version: "4.0", + keywords: ["man", "marathon", "racing", "running"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🏃🏻♂️", + description: "man running: light skin tone", + version: "4.0" + }, { + emoji: "🏃🏼♂️", + description: "man running: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏃🏽♂️", + description: "man running: medium skin tone", + version: "4.0" + }, { + emoji: "🏃🏾♂️", + description: "man running: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏃🏿♂️", + description: "man running: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏃♀️", + description: "woman running", + version: "4.0", + keywords: ["marathon", "racing", "running", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🏃🏻♀️", + description: "woman running: light skin tone", + version: "4.0" + }, { + emoji: "🏃🏼♀️", + description: "woman running: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏃🏽♀️", + description: "woman running: medium skin tone", + version: "4.0" + }, { + emoji: "🏃🏾♀️", + description: "woman running: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏃🏿♀️", + description: "woman running: dark skin tone", + version: "4.0" + }] + }, { + emoji: "💃", + description: "woman dancing", + version: "0.6", + keywords: ["dance", "dancing", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "💃🏻", + description: "woman dancing: light skin tone", + version: "1.0" + }, { + emoji: "💃🏼", + description: "woman dancing: medium-light skin tone", + version: "1.0" + }, { + emoji: "💃🏽", + description: "woman dancing: medium skin tone", + version: "1.0" + }, { + emoji: "💃🏾", + description: "woman dancing: medium-dark skin tone", + version: "1.0" + }, { + emoji: "💃🏿", + description: "woman dancing: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🕺", + description: "man dancing", + version: "3.0", + keywords: ["dance", "dancing", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🕺🏻", + description: "man dancing: light skin tone", + version: "3.0" + }, { + emoji: "🕺🏼", + description: "man dancing: medium-light skin tone", + version: "3.0" + }, { + emoji: "🕺🏽", + description: "man dancing: medium skin tone", + version: "3.0" + }, { + emoji: "🕺🏾", + description: "man dancing: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🕺🏿", + description: "man dancing: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🕴️", + description: "person in suit levitating", + version: "0.7", + keywords: ["business", "person", "person in suit levitating", "suit"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🕴🏻", + description: "person in suit levitating: light skin tone", + version: "4.0" + }, { + emoji: "🕴🏼", + description: "person in suit levitating: medium-light skin tone", + version: "4.0" + }, { + emoji: "🕴🏽", + description: "person in suit levitating: medium skin tone", + version: "4.0" + }, { + emoji: "🕴🏾", + description: "person in suit levitating: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🕴🏿", + description: "person in suit levitating: dark skin tone", + version: "4.0" + }] + }, { + emoji: "👯", + description: "people with bunny ears", + version: "0.6", + keywords: ["bunny ear", "dancer", "partying", "people with bunny ears"], + category: "person-people", + group: "people-body", + subgroup: "person-activity" + }, { + emoji: "👯♂️", + description: "men with bunny ears", + version: "4.0", + keywords: ["bunny ear", "dancer", "men", "men with bunny ears", "partying"], + category: "person-people", + group: "people-body", + subgroup: "person-activity" + }, { + emoji: "👯♀️", + description: "women with bunny ears", + version: "4.0", + keywords: ["bunny ear", "dancer", "partying", "women", "women with bunny ears"], + category: "person-people", + group: "people-body", + subgroup: "person-activity" + }, { + emoji: "🧖", + description: "person in steamy room", + version: "5.0", + keywords: ["person in steamy room", "sauna", "steam room"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧖🏻", + description: "person in steamy room: light skin tone", + version: "5.0" + }, { + emoji: "🧖🏼", + description: "person in steamy room: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧖🏽", + description: "person in steamy room: medium skin tone", + version: "5.0" + }, { + emoji: "🧖🏾", + description: "person in steamy room: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧖🏿", + description: "person in steamy room: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧖♂️", + description: "man in steamy room", + version: "5.0", + keywords: ["man in steamy room", "sauna", "steam room"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧖🏻♂️", + description: "man in steamy room: light skin tone", + version: "5.0" + }, { + emoji: "🧖🏼♂️", + description: "man in steamy room: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧖🏽♂️", + description: "man in steamy room: medium skin tone", + version: "5.0" + }, { + emoji: "🧖🏾♂️", + description: "man in steamy room: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧖🏿♂️", + description: "man in steamy room: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧖♀️", + description: "woman in steamy room", + version: "5.0", + keywords: ["sauna", "steam room", "woman in steamy room"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧖🏻♀️", + description: "woman in steamy room: light skin tone", + version: "5.0" + }, { + emoji: "🧖🏼♀️", + description: "woman in steamy room: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧖🏽♀️", + description: "woman in steamy room: medium skin tone", + version: "5.0" + }, { + emoji: "🧖🏾♀️", + description: "woman in steamy room: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧖🏿♀️", + description: "woman in steamy room: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧗", + description: "person climbing", + version: "5.0", + keywords: ["climber", "person climbing"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧗🏻", + description: "person climbing: light skin tone", + version: "5.0" + }, { + emoji: "🧗🏼", + description: "person climbing: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧗🏽", + description: "person climbing: medium skin tone", + version: "5.0" + }, { + emoji: "🧗🏾", + description: "person climbing: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧗🏿", + description: "person climbing: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧗♂️", + description: "man climbing", + version: "5.0", + keywords: ["climber", "man climbing"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧗🏻♂️", + description: "man climbing: light skin tone", + version: "5.0" + }, { + emoji: "🧗🏼♂️", + description: "man climbing: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧗🏽♂️", + description: "man climbing: medium skin tone", + version: "5.0" + }, { + emoji: "🧗🏾♂️", + description: "man climbing: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧗🏿♂️", + description: "man climbing: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧗♀️", + description: "woman climbing", + version: "5.0", + keywords: ["climber", "woman climbing"], + category: "person-people", + group: "people-body", + subgroup: "person-activity", + variations: [{ + emoji: "🧗🏻♀️", + description: "woman climbing: light skin tone", + version: "5.0" + }, { + emoji: "🧗🏼♀️", + description: "woman climbing: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧗🏽♀️", + description: "woman climbing: medium skin tone", + version: "5.0" + }, { + emoji: "🧗🏾♀️", + description: "woman climbing: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧗🏿♀️", + description: "woman climbing: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🤺", + description: "person fencing", + version: "3.0", + keywords: ["fencer", "fencing", "person fencing", "sword"], + category: "person-people", + group: "people-body", + subgroup: "person-sport" + }, { + emoji: "🏇", + description: "horse racing", + version: "1.0", + keywords: ["horse", "jockey", "racehorse", "racing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏇🏻", + description: "horse racing: light skin tone", + version: "1.0" + }, { + emoji: "🏇🏼", + description: "horse racing: medium-light skin tone", + version: "1.0" + }, { + emoji: "🏇🏽", + description: "horse racing: medium skin tone", + version: "1.0" + }, { + emoji: "🏇🏾", + description: "horse racing: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🏇🏿", + description: "horse racing: dark skin tone", + version: "1.0" + }] + }, { + emoji: "⛷️", + description: "skier", + version: "0.7", + keywords: ["ski", "skier", "snow"], + category: "person-people", + group: "people-body", + subgroup: "person-sport" + }, { + emoji: "🏂", + description: "snowboarder", + version: "0.6", + keywords: ["ski", "snow", "snowboard", "snowboarder"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏂🏻", + description: "snowboarder: light skin tone", + version: "1.0" + }, { + emoji: "🏂🏼", + description: "snowboarder: medium-light skin tone", + version: "1.0" + }, { + emoji: "🏂🏽", + description: "snowboarder: medium skin tone", + version: "1.0" + }, { + emoji: "🏂🏾", + description: "snowboarder: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🏂🏿", + description: "snowboarder: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🏌️", + description: "person golfing", + version: "0.7", + keywords: ["ball", "golf", "person golfing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏌🏻", + description: "person golfing: light skin tone", + version: "4.0" + }, { + emoji: "🏌🏼", + description: "person golfing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏌🏽", + description: "person golfing: medium skin tone", + version: "4.0" + }, { + emoji: "🏌🏾", + description: "person golfing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏌🏿", + description: "person golfing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏌️♂️", + description: "man golfing", + version: "4.0", + keywords: ["golf", "man", "man golfing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏌🏻♂️", + description: "man golfing: light skin tone", + version: "4.0" + }, { + emoji: "🏌🏼♂️", + description: "man golfing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏌🏽♂️", + description: "man golfing: medium skin tone", + version: "4.0" + }, { + emoji: "🏌🏾♂️", + description: "man golfing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏌🏿♂️", + description: "man golfing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏌️♀️", + description: "woman golfing", + version: "4.0", + keywords: ["golf", "woman", "woman golfing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏌🏻♀️", + description: "woman golfing: light skin tone", + version: "4.0" + }, { + emoji: "🏌🏼♀️", + description: "woman golfing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏌🏽♀️", + description: "woman golfing: medium skin tone", + version: "4.0" + }, { + emoji: "🏌🏾♀️", + description: "woman golfing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏌🏿♀️", + description: "woman golfing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏄", + description: "person surfing", + version: "0.6", + keywords: ["person surfing", "surfing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏄🏻", + description: "person surfing: light skin tone", + version: "1.0" + }, { + emoji: "🏄🏼", + description: "person surfing: medium-light skin tone", + version: "1.0" + }, { + emoji: "🏄🏽", + description: "person surfing: medium skin tone", + version: "1.0" + }, { + emoji: "🏄🏾", + description: "person surfing: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🏄🏿", + description: "person surfing: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🏄♂️", + description: "man surfing", + version: "4.0", + keywords: ["man", "surfing"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏄🏻♂️", + description: "man surfing: light skin tone", + version: "4.0" + }, { + emoji: "🏄🏼♂️", + description: "man surfing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏄🏽♂️", + description: "man surfing: medium skin tone", + version: "4.0" + }, { + emoji: "🏄🏾♂️", + description: "man surfing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏄🏿♂️", + description: "man surfing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏄♀️", + description: "woman surfing", + version: "4.0", + keywords: ["surfing", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏄🏻♀️", + description: "woman surfing: light skin tone", + version: "4.0" + }, { + emoji: "🏄🏼♀️", + description: "woman surfing: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏄🏽♀️", + description: "woman surfing: medium skin tone", + version: "4.0" + }, { + emoji: "🏄🏾♀️", + description: "woman surfing: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏄🏿♀️", + description: "woman surfing: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚣", + description: "person rowing boat", + version: "1.0", + keywords: ["boat", "person rowing boat", "rowboat"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚣🏻", + description: "person rowing boat: light skin tone", + version: "1.0" + }, { + emoji: "🚣🏼", + description: "person rowing boat: medium-light skin tone", + version: "1.0" + }, { + emoji: "🚣🏽", + description: "person rowing boat: medium skin tone", + version: "1.0" + }, { + emoji: "🚣🏾", + description: "person rowing boat: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🚣🏿", + description: "person rowing boat: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🚣♂️", + description: "man rowing boat", + version: "4.0", + keywords: ["boat", "man", "man rowing boat", "rowboat"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚣🏻♂️", + description: "man rowing boat: light skin tone", + version: "4.0" + }, { + emoji: "🚣🏼♂️", + description: "man rowing boat: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚣🏽♂️", + description: "man rowing boat: medium skin tone", + version: "4.0" + }, { + emoji: "🚣🏾♂️", + description: "man rowing boat: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚣🏿♂️", + description: "man rowing boat: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚣♀️", + description: "woman rowing boat", + version: "4.0", + keywords: ["boat", "rowboat", "woman", "woman rowing boat"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚣🏻♀️", + description: "woman rowing boat: light skin tone", + version: "4.0" + }, { + emoji: "🚣🏼♀️", + description: "woman rowing boat: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚣🏽♀️", + description: "woman rowing boat: medium skin tone", + version: "4.0" + }, { + emoji: "🚣🏾♀️", + description: "woman rowing boat: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚣🏿♀️", + description: "woman rowing boat: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏊", + description: "person swimming", + version: "0.6", + keywords: ["person swimming", "swim"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏊🏻", + description: "person swimming: light skin tone", + version: "1.0" + }, { + emoji: "🏊🏼", + description: "person swimming: medium-light skin tone", + version: "1.0" + }, { + emoji: "🏊🏽", + description: "person swimming: medium skin tone", + version: "1.0" + }, { + emoji: "🏊🏾", + description: "person swimming: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🏊🏿", + description: "person swimming: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🏊♂️", + description: "man swimming", + version: "4.0", + keywords: ["man", "man swimming", "swim"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏊🏻♂️", + description: "man swimming: light skin tone", + version: "4.0" + }, { + emoji: "🏊🏼♂️", + description: "man swimming: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏊🏽♂️", + description: "man swimming: medium skin tone", + version: "4.0" + }, { + emoji: "🏊🏾♂️", + description: "man swimming: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏊🏿♂️", + description: "man swimming: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏊♀️", + description: "woman swimming", + version: "4.0", + keywords: ["swim", "woman", "woman swimming"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏊🏻♀️", + description: "woman swimming: light skin tone", + version: "4.0" + }, { + emoji: "🏊🏼♀️", + description: "woman swimming: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏊🏽♀️", + description: "woman swimming: medium skin tone", + version: "4.0" + }, { + emoji: "🏊🏾♀️", + description: "woman swimming: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏊🏿♀️", + description: "woman swimming: dark skin tone", + version: "4.0" + }] + }, { + emoji: "⛹️", + description: "person bouncing ball", + version: "0.7", + keywords: ["ball", "person bouncing ball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "⛹🏻", + description: "person bouncing ball: light skin tone", + version: "2.0" + }, { + emoji: "⛹🏼", + description: "person bouncing ball: medium-light skin tone", + version: "2.0" + }, { + emoji: "⛹🏽", + description: "person bouncing ball: medium skin tone", + version: "2.0" + }, { + emoji: "⛹🏾", + description: "person bouncing ball: medium-dark skin tone", + version: "2.0" + }, { + emoji: "⛹🏿", + description: "person bouncing ball: dark skin tone", + version: "2.0" + }] + }, { + emoji: "⛹️♂️", + description: "man bouncing ball", + version: "4.0", + keywords: ["ball", "man", "man bouncing ball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "⛹🏻♂️", + description: "man bouncing ball: light skin tone", + version: "4.0" + }, { + emoji: "⛹🏼♂️", + description: "man bouncing ball: medium-light skin tone", + version: "4.0" + }, { + emoji: "⛹🏽♂️", + description: "man bouncing ball: medium skin tone", + version: "4.0" + }, { + emoji: "⛹🏾♂️", + description: "man bouncing ball: medium-dark skin tone", + version: "4.0" + }, { + emoji: "⛹🏿♂️", + description: "man bouncing ball: dark skin tone", + version: "4.0" + }] + }, { + emoji: "⛹️♀️", + description: "woman bouncing ball", + version: "4.0", + keywords: ["ball", "woman", "woman bouncing ball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "⛹🏻♀️", + description: "woman bouncing ball: light skin tone", + version: "4.0" + }, { + emoji: "⛹🏼♀️", + description: "woman bouncing ball: medium-light skin tone", + version: "4.0" + }, { + emoji: "⛹🏽♀️", + description: "woman bouncing ball: medium skin tone", + version: "4.0" + }, { + emoji: "⛹🏾♀️", + description: "woman bouncing ball: medium-dark skin tone", + version: "4.0" + }, { + emoji: "⛹🏿♀️", + description: "woman bouncing ball: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏋️", + description: "person lifting weights", + version: "0.7", + keywords: ["lifter", "person lifting weights", "weight"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏋🏻", + description: "person lifting weights: light skin tone", + version: "2.0" + }, { + emoji: "🏋🏼", + description: "person lifting weights: medium-light skin tone", + version: "2.0" + }, { + emoji: "🏋🏽", + description: "person lifting weights: medium skin tone", + version: "2.0" + }, { + emoji: "🏋🏾", + description: "person lifting weights: medium-dark skin tone", + version: "2.0" + }, { + emoji: "🏋🏿", + description: "person lifting weights: dark skin tone", + version: "2.0" + }] + }, { + emoji: "🏋️♂️", + description: "man lifting weights", + version: "4.0", + keywords: ["man", "man lifting weights", "weight lifter"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏋🏻♂️", + description: "man lifting weights: light skin tone", + version: "4.0" + }, { + emoji: "🏋🏼♂️", + description: "man lifting weights: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏋🏽♂️", + description: "man lifting weights: medium skin tone", + version: "4.0" + }, { + emoji: "🏋🏾♂️", + description: "man lifting weights: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏋🏿♂️", + description: "man lifting weights: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🏋️♀️", + description: "woman lifting weights", + version: "4.0", + keywords: ["weight lifter", "woman", "woman lifting weights"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🏋🏻♀️", + description: "woman lifting weights: light skin tone", + version: "4.0" + }, { + emoji: "🏋🏼♀️", + description: "woman lifting weights: medium-light skin tone", + version: "4.0" + }, { + emoji: "🏋🏽♀️", + description: "woman lifting weights: medium skin tone", + version: "4.0" + }, { + emoji: "🏋🏾♀️", + description: "woman lifting weights: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🏋🏿♀️", + description: "woman lifting weights: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚴", + description: "person biking", + version: "1.0", + keywords: ["bicycle", "biking", "cyclist", "person biking"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚴🏻", + description: "person biking: light skin tone", + version: "1.0" + }, { + emoji: "🚴🏼", + description: "person biking: medium-light skin tone", + version: "1.0" + }, { + emoji: "🚴🏽", + description: "person biking: medium skin tone", + version: "1.0" + }, { + emoji: "🚴🏾", + description: "person biking: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🚴🏿", + description: "person biking: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🚴♂️", + description: "man biking", + version: "4.0", + keywords: ["bicycle", "biking", "cyclist", "man"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚴🏻♂️", + description: "man biking: light skin tone", + version: "4.0" + }, { + emoji: "🚴🏼♂️", + description: "man biking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚴🏽♂️", + description: "man biking: medium skin tone", + version: "4.0" + }, { + emoji: "🚴🏾♂️", + description: "man biking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚴🏿♂️", + description: "man biking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚴♀️", + description: "woman biking", + version: "4.0", + keywords: ["bicycle", "biking", "cyclist", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚴🏻♀️", + description: "woman biking: light skin tone", + version: "4.0" + }, { + emoji: "🚴🏼♀️", + description: "woman biking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚴🏽♀️", + description: "woman biking: medium skin tone", + version: "4.0" + }, { + emoji: "🚴🏾♀️", + description: "woman biking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚴🏿♀️", + description: "woman biking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚵", + description: "person mountain biking", + version: "1.0", + keywords: ["bicycle", "bicyclist", "bike", "cyclist", "mountain", "person mountain biking"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚵🏻", + description: "person mountain biking: light skin tone", + version: "1.0" + }, { + emoji: "🚵🏼", + description: "person mountain biking: medium-light skin tone", + version: "1.0" + }, { + emoji: "🚵🏽", + description: "person mountain biking: medium skin tone", + version: "1.0" + }, { + emoji: "🚵🏾", + description: "person mountain biking: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🚵🏿", + description: "person mountain biking: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🚵♂️", + description: "man mountain biking", + version: "4.0", + keywords: ["bicycle", "bike", "cyclist", "man", "man mountain biking", "mountain"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚵🏻♂️", + description: "man mountain biking: light skin tone", + version: "4.0" + }, { + emoji: "🚵🏼♂️", + description: "man mountain biking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚵🏽♂️", + description: "man mountain biking: medium skin tone", + version: "4.0" + }, { + emoji: "🚵🏾♂️", + description: "man mountain biking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚵🏿♂️", + description: "man mountain biking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🚵♀️", + description: "woman mountain biking", + version: "4.0", + keywords: ["bicycle", "bike", "biking", "cyclist", "mountain", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🚵🏻♀️", + description: "woman mountain biking: light skin tone", + version: "4.0" + }, { + emoji: "🚵🏼♀️", + description: "woman mountain biking: medium-light skin tone", + version: "4.0" + }, { + emoji: "🚵🏽♀️", + description: "woman mountain biking: medium skin tone", + version: "4.0" + }, { + emoji: "🚵🏾♀️", + description: "woman mountain biking: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🚵🏿♀️", + description: "woman mountain biking: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤸", + description: "person cartwheeling", + version: "3.0", + keywords: ["cartwheel", "gymnastics", "person cartwheeling"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤸🏻", + description: "person cartwheeling: light skin tone", + version: "3.0" + }, { + emoji: "🤸🏼", + description: "person cartwheeling: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤸🏽", + description: "person cartwheeling: medium skin tone", + version: "3.0" + }, { + emoji: "🤸🏾", + description: "person cartwheeling: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤸🏿", + description: "person cartwheeling: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤸♂️", + description: "man cartwheeling", + version: "4.0", + keywords: ["cartwheel", "gymnastics", "man", "man cartwheeling"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤸🏻♂️", + description: "man cartwheeling: light skin tone", + version: "4.0" + }, { + emoji: "🤸🏼♂️", + description: "man cartwheeling: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤸🏽♂️", + description: "man cartwheeling: medium skin tone", + version: "4.0" + }, { + emoji: "🤸🏾♂️", + description: "man cartwheeling: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤸🏿♂️", + description: "man cartwheeling: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤸♀️", + description: "woman cartwheeling", + version: "4.0", + keywords: ["cartwheel", "gymnastics", "woman", "woman cartwheeling"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤸🏻♀️", + description: "woman cartwheeling: light skin tone", + version: "4.0" + }, { + emoji: "🤸🏼♀️", + description: "woman cartwheeling: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤸🏽♀️", + description: "woman cartwheeling: medium skin tone", + version: "4.0" + }, { + emoji: "🤸🏾♀️", + description: "woman cartwheeling: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤸🏿♀️", + description: "woman cartwheeling: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤼", + description: "people wrestling", + version: "3.0", + keywords: ["people wrestling", "wrestle", "wrestler"], + category: "person-people", + group: "people-body", + subgroup: "person-sport" + }, { + emoji: "🤼♂️", + description: "men wrestling", + version: "4.0", + keywords: ["men", "men wrestling", "wrestle"], + category: "person-people", + group: "people-body", + subgroup: "person-sport" + }, { + emoji: "🤼♀️", + description: "women wrestling", + version: "4.0", + keywords: ["women", "women wrestling", "wrestle"], + category: "person-people", + group: "people-body", + subgroup: "person-sport" + }, { + emoji: "🤽", + description: "person playing water polo", + version: "3.0", + keywords: ["person playing water polo", "polo", "water"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤽🏻", + description: "person playing water polo: light skin tone", + version: "3.0" + }, { + emoji: "🤽🏼", + description: "person playing water polo: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤽🏽", + description: "person playing water polo: medium skin tone", + version: "3.0" + }, { + emoji: "🤽🏾", + description: "person playing water polo: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤽🏿", + description: "person playing water polo: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤽♂️", + description: "man playing water polo", + version: "4.0", + keywords: ["man", "man playing water polo", "water polo"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤽🏻♂️", + description: "man playing water polo: light skin tone", + version: "4.0" + }, { + emoji: "🤽🏼♂️", + description: "man playing water polo: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤽🏽♂️", + description: "man playing water polo: medium skin tone", + version: "4.0" + }, { + emoji: "🤽🏾♂️", + description: "man playing water polo: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤽🏿♂️", + description: "man playing water polo: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤽♀️", + description: "woman playing water polo", + version: "4.0", + keywords: ["water polo", "woman", "woman playing water polo"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤽🏻♀️", + description: "woman playing water polo: light skin tone", + version: "4.0" + }, { + emoji: "🤽🏼♀️", + description: "woman playing water polo: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤽🏽♀️", + description: "woman playing water polo: medium skin tone", + version: "4.0" + }, { + emoji: "🤽🏾♀️", + description: "woman playing water polo: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤽🏿♀️", + description: "woman playing water polo: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤾", + description: "person playing handball", + version: "3.0", + keywords: ["ball", "handball", "person playing handball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤾🏻", + description: "person playing handball: light skin tone", + version: "3.0" + }, { + emoji: "🤾🏼", + description: "person playing handball: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤾🏽", + description: "person playing handball: medium skin tone", + version: "3.0" + }, { + emoji: "🤾🏾", + description: "person playing handball: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤾🏿", + description: "person playing handball: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤾♂️", + description: "man playing handball", + version: "4.0", + keywords: ["handball", "man", "man playing handball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤾🏻♂️", + description: "man playing handball: light skin tone", + version: "4.0" + }, { + emoji: "🤾🏼♂️", + description: "man playing handball: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤾🏽♂️", + description: "man playing handball: medium skin tone", + version: "4.0" + }, { + emoji: "🤾🏾♂️", + description: "man playing handball: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤾🏿♂️", + description: "man playing handball: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤾♀️", + description: "woman playing handball", + version: "4.0", + keywords: ["handball", "woman", "woman playing handball"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤾🏻♀️", + description: "woman playing handball: light skin tone", + version: "4.0" + }, { + emoji: "🤾🏼♀️", + description: "woman playing handball: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤾🏽♀️", + description: "woman playing handball: medium skin tone", + version: "4.0" + }, { + emoji: "🤾🏾♀️", + description: "woman playing handball: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤾🏿♀️", + description: "woman playing handball: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤹", + description: "person juggling", + version: "3.0", + keywords: ["balance", "juggle", "multitask", "person juggling", "skill"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤹🏻", + description: "person juggling: light skin tone", + version: "3.0" + }, { + emoji: "🤹🏼", + description: "person juggling: medium-light skin tone", + version: "3.0" + }, { + emoji: "🤹🏽", + description: "person juggling: medium skin tone", + version: "3.0" + }, { + emoji: "🤹🏾", + description: "person juggling: medium-dark skin tone", + version: "3.0" + }, { + emoji: "🤹🏿", + description: "person juggling: dark skin tone", + version: "3.0" + }] + }, { + emoji: "🤹♂️", + description: "man juggling", + version: "4.0", + keywords: ["juggling", "man", "multitask"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤹🏻♂️", + description: "man juggling: light skin tone", + version: "4.0" + }, { + emoji: "🤹🏼♂️", + description: "man juggling: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤹🏽♂️", + description: "man juggling: medium skin tone", + version: "4.0" + }, { + emoji: "🤹🏾♂️", + description: "man juggling: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤹🏿♂️", + description: "man juggling: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🤹♀️", + description: "woman juggling", + version: "4.0", + keywords: ["juggling", "multitask", "woman"], + category: "person-people", + group: "people-body", + subgroup: "person-sport", + variations: [{ + emoji: "🤹🏻♀️", + description: "woman juggling: light skin tone", + version: "4.0" + }, { + emoji: "🤹🏼♀️", + description: "woman juggling: medium-light skin tone", + version: "4.0" + }, { + emoji: "🤹🏽♀️", + description: "woman juggling: medium skin tone", + version: "4.0" + }, { + emoji: "🤹🏾♀️", + description: "woman juggling: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🤹🏿♀️", + description: "woman juggling: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧘", + description: "person in lotus position", + version: "5.0", + keywords: ["meditation", "person in lotus position", "yoga"], + category: "person-people", + group: "people-body", + subgroup: "person-resting", + variations: [{ + emoji: "🧘🏻", + description: "person in lotus position: light skin tone", + version: "5.0" + }, { + emoji: "🧘🏼", + description: "person in lotus position: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧘🏽", + description: "person in lotus position: medium skin tone", + version: "5.0" + }, { + emoji: "🧘🏾", + description: "person in lotus position: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧘🏿", + description: "person in lotus position: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧘♂️", + description: "man in lotus position", + version: "5.0", + keywords: ["man in lotus position", "meditation", "yoga"], + category: "person-people", + group: "people-body", + subgroup: "person-resting", + variations: [{ + emoji: "🧘🏻♂️", + description: "man in lotus position: light skin tone", + version: "5.0" + }, { + emoji: "🧘🏼♂️", + description: "man in lotus position: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧘🏽♂️", + description: "man in lotus position: medium skin tone", + version: "5.0" + }, { + emoji: "🧘🏾♂️", + description: "man in lotus position: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧘🏿♂️", + description: "man in lotus position: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🧘♀️", + description: "woman in lotus position", + version: "5.0", + keywords: ["meditation", "woman in lotus position", "yoga"], + category: "person-people", + group: "people-body", + subgroup: "person-resting", + variations: [{ + emoji: "🧘🏻♀️", + description: "woman in lotus position: light skin tone", + version: "5.0" + }, { + emoji: "🧘🏼♀️", + description: "woman in lotus position: medium-light skin tone", + version: "5.0" + }, { + emoji: "🧘🏽♀️", + description: "woman in lotus position: medium skin tone", + version: "5.0" + }, { + emoji: "🧘🏾♀️", + description: "woman in lotus position: medium-dark skin tone", + version: "5.0" + }, { + emoji: "🧘🏿♀️", + description: "woman in lotus position: dark skin tone", + version: "5.0" + }] + }, { + emoji: "🛀", + description: "person taking bath", + version: "0.6", + keywords: ["bath", "bathtub", "person taking bath"], + category: "person-people", + group: "people-body", + subgroup: "person-resting", + variations: [{ + emoji: "🛀🏻", + description: "person taking bath: light skin tone", + version: "1.0" + }, { + emoji: "🛀🏼", + description: "person taking bath: medium-light skin tone", + version: "1.0" + }, { + emoji: "🛀🏽", + description: "person taking bath: medium skin tone", + version: "1.0" + }, { + emoji: "🛀🏾", + description: "person taking bath: medium-dark skin tone", + version: "1.0" + }, { + emoji: "🛀🏿", + description: "person taking bath: dark skin tone", + version: "1.0" + }] + }, { + emoji: "🛌", + description: "person in bed", + version: "1.0", + keywords: ["good night", "hotel", "person in bed", "sleep"], + category: "person-people", + group: "people-body", + subgroup: "person-resting", + variations: [{ + emoji: "🛌🏻", + description: "person in bed: light skin tone", + version: "4.0" + }, { + emoji: "🛌🏼", + description: "person in bed: medium-light skin tone", + version: "4.0" + }, { + emoji: "🛌🏽", + description: "person in bed: medium skin tone", + version: "4.0" + }, { + emoji: "🛌🏾", + description: "person in bed: medium-dark skin tone", + version: "4.0" + }, { + emoji: "🛌🏿", + description: "person in bed: dark skin tone", + version: "4.0" + }] + }, { + emoji: "🧑🤝🧑", + description: "people holding hands", + version: "12.0", + keywords: ["couple", "hand", "hold", "holding hands", "people holding hands", "person"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "🧑🏻🤝🧑🏻", + description: "people holding hands: light skin tone", + version: "12.0" + }, { + emoji: "🧑🏻🤝🧑🏼", + description: "people holding hands: light skin tone, medium-light skin tone", + version: "12.1" + }, { + emoji: "🧑🏻🤝🧑🏽", + description: "people holding hands: light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏻🤝🧑🏾", + description: "people holding hands: light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏻🤝🧑🏿", + description: "people holding hands: light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🤝🧑🏻", + description: "people holding hands: medium-light skin tone, light skin tone", + version: "12.0" + }, { + emoji: "🧑🏼🤝🧑🏼", + description: "people holding hands: medium-light skin tone", + version: "12.0" + }, { + emoji: "🧑🏼🤝🧑🏽", + description: "people holding hands: medium-light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🤝🧑🏾", + description: "people holding hands: medium-light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏼🤝🧑🏿", + description: "people holding hands: medium-light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🤝🧑🏻", + description: "people holding hands: medium skin tone, light skin tone", + version: "12.0" + }, { + emoji: "🧑🏽🤝🧑🏼", + description: "people holding hands: medium skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "🧑🏽🤝🧑🏽", + description: "people holding hands: medium skin tone", + version: "12.0" + }, { + emoji: "🧑🏽🤝🧑🏾", + description: "people holding hands: medium skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏽🤝🧑🏿", + description: "people holding hands: medium skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏾🤝🧑🏻", + description: "people holding hands: medium-dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "🧑🏾🤝🧑🏼", + description: "people holding hands: medium-dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "🧑🏾🤝🧑🏽", + description: "people holding hands: medium-dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "🧑🏾🤝🧑🏾", + description: "people holding hands: medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧑🏾🤝🧑🏿", + description: "people holding hands: medium-dark skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "🧑🏿🤝🧑🏻", + description: "people holding hands: dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "🧑🏿🤝🧑🏼", + description: "people holding hands: dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "🧑🏿🤝🧑🏽", + description: "people holding hands: dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "🧑🏿🤝🧑🏾", + description: "people holding hands: dark skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "🧑🏿🤝🧑🏿", + description: "people holding hands: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👭", + description: "women holding hands", + version: "1.0", + keywords: ["couple", "hand", "holding hands", "women", "women holding hands"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "👭🏻", + description: "women holding hands: light skin tone", + version: "12.0" + }, { + emoji: "👩🏻🤝👩🏼", + description: "women holding hands: light skin tone, medium-light skin tone", + version: "12.1" + }, { + emoji: "👩🏻🤝👩🏽", + description: "women holding hands: light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "👩🏻🤝👩🏾", + description: "women holding hands: light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👩🏻🤝👩🏿", + description: "women holding hands: light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👩🏼🤝👩🏻", + description: "women holding hands: medium-light skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👭🏼", + description: "women holding hands: medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏼🤝👩🏽", + description: "women holding hands: medium-light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "👩🏼🤝👩🏾", + description: "women holding hands: medium-light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👩🏼🤝👩🏿", + description: "women holding hands: medium-light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👩🏽🤝👩🏻", + description: "women holding hands: medium skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👩🏼", + description: "women holding hands: medium skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👭🏽", + description: "women holding hands: medium skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👩🏾", + description: "women holding hands: medium skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👩🏽🤝👩🏿", + description: "women holding hands: medium skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👩🏾🤝👩🏻", + description: "women holding hands: medium-dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👩🏼", + description: "women holding hands: medium-dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👩🏽", + description: "women holding hands: medium-dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👭🏾", + description: "women holding hands: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👩🏿", + description: "women holding hands: medium-dark skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👩🏿🤝👩🏻", + description: "women holding hands: dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👩🏼", + description: "women holding hands: dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👩🏽", + description: "women holding hands: dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👩🏾", + description: "women holding hands: dark skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👭🏿", + description: "women holding hands: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👫", + description: "woman and man holding hands", + version: "0.6", + keywords: ["couple", "hand", "hold", "holding hands", "man", "woman", "woman and man holding hands"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "👫🏻", + description: "woman and man holding hands: light skin tone", + version: "12.0" + }, { + emoji: "👩🏻🤝👨🏼", + description: "woman and man holding hands: light skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏻🤝👨🏽", + description: "woman and man holding hands: light skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👩🏻🤝👨🏾", + description: "woman and man holding hands: light skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏻🤝👨🏿", + description: "woman and man holding hands: light skin tone, dark skin tone", + version: "12.0" + }, { + emoji: "👩🏼🤝👨🏻", + description: "woman and man holding hands: medium-light skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👫🏼", + description: "woman and man holding hands: medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏼🤝👨🏽", + description: "woman and man holding hands: medium-light skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👩🏼🤝👨🏾", + description: "woman and man holding hands: medium-light skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏼🤝👨🏿", + description: "woman and man holding hands: medium-light skin tone, dark skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👨🏻", + description: "woman and man holding hands: medium skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👨🏼", + description: "woman and man holding hands: medium skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👫🏽", + description: "woman and man holding hands: medium skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👨🏾", + description: "woman and man holding hands: medium skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏽🤝👨🏿", + description: "woman and man holding hands: medium skin tone, dark skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👨🏻", + description: "woman and man holding hands: medium-dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👨🏼", + description: "woman and man holding hands: medium-dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👨🏽", + description: "woman and man holding hands: medium-dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👫🏾", + description: "woman and man holding hands: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👩🏾🤝👨🏿", + description: "woman and man holding hands: medium-dark skin tone, dark skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👨🏻", + description: "woman and man holding hands: dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👨🏼", + description: "woman and man holding hands: dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👨🏽", + description: "woman and man holding hands: dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👩🏿🤝👨🏾", + description: "woman and man holding hands: dark skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👫🏿", + description: "woman and man holding hands: dark skin tone", + version: "12.0" + }] + }, { + emoji: "👬", + description: "men holding hands", + version: "1.0", + keywords: ["couple", "Gemini", "holding hands", "man", "men", "men holding hands", "twins", "zodiac"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "👬🏻", + description: "men holding hands: light skin tone", + version: "12.0" + }, { + emoji: "👨🏻🤝👨🏼", + description: "men holding hands: light skin tone, medium-light skin tone", + version: "12.1" + }, { + emoji: "👨🏻🤝👨🏽", + description: "men holding hands: light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "👨🏻🤝👨🏾", + description: "men holding hands: light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👨🏻🤝👨🏿", + description: "men holding hands: light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👨🏼🤝👨🏻", + description: "men holding hands: medium-light skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👬🏼", + description: "men holding hands: medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏼🤝👨🏽", + description: "men holding hands: medium-light skin tone, medium skin tone", + version: "12.1" + }, { + emoji: "👨🏼🤝👨🏾", + description: "men holding hands: medium-light skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👨🏼🤝👨🏿", + description: "men holding hands: medium-light skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👨🏽🤝👨🏻", + description: "men holding hands: medium skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👨🏽🤝👨🏼", + description: "men holding hands: medium skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👬🏽", + description: "men holding hands: medium skin tone", + version: "12.0" + }, { + emoji: "👨🏽🤝👨🏾", + description: "men holding hands: medium skin tone, medium-dark skin tone", + version: "12.1" + }, { + emoji: "👨🏽🤝👨🏿", + description: "men holding hands: medium skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👨🏾🤝👨🏻", + description: "men holding hands: medium-dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👨🏾🤝👨🏼", + description: "men holding hands: medium-dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏾🤝👨🏽", + description: "men holding hands: medium-dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👬🏾", + description: "men holding hands: medium-dark skin tone", + version: "12.0" + }, { + emoji: "👨🏾🤝👨🏿", + description: "men holding hands: medium-dark skin tone, dark skin tone", + version: "12.1" + }, { + emoji: "👨🏿🤝👨🏻", + description: "men holding hands: dark skin tone, light skin tone", + version: "12.0" + }, { + emoji: "👨🏿🤝👨🏼", + description: "men holding hands: dark skin tone, medium-light skin tone", + version: "12.0" + }, { + emoji: "👨🏿🤝👨🏽", + description: "men holding hands: dark skin tone, medium skin tone", + version: "12.0" + }, { + emoji: "👨🏿🤝👨🏾", + description: "men holding hands: dark skin tone, medium-dark skin tone", + version: "12.0" + }, { + emoji: "👬🏿", + description: "men holding hands: dark skin tone", + version: "12.0" + }] + }, { + emoji: "💏", + description: "kiss", + version: "0.6", + keywords: ["couple", "kiss"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "💏🏻", + description: "kiss: light skin tone", + version: "13.1" + }, { + emoji: "💏🏼", + description: "kiss: medium-light skin tone", + version: "13.1" + }, { + emoji: "💏🏽", + description: "kiss: medium skin tone", + version: "13.1" + }, { + emoji: "💏🏾", + description: "kiss: medium-dark skin tone", + version: "13.1" + }, { + emoji: "💏🏿", + description: "kiss: dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️💋🧑🏼", + description: "kiss: person, person, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️💋🧑🏽", + description: "kiss: person, person, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️💋🧑🏾", + description: "kiss: person, person, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️💋🧑🏿", + description: "kiss: person, person, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️💋🧑🏻", + description: "kiss: person, person, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️💋🧑🏽", + description: "kiss: person, person, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️💋🧑🏾", + description: "kiss: person, person, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️💋🧑🏿", + description: "kiss: person, person, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️💋🧑🏻", + description: "kiss: person, person, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️💋🧑🏼", + description: "kiss: person, person, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️💋🧑🏾", + description: "kiss: person, person, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️💋🧑🏿", + description: "kiss: person, person, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️💋🧑🏻", + description: "kiss: person, person, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️💋🧑🏼", + description: "kiss: person, person, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️💋🧑🏽", + description: "kiss: person, person, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️💋🧑🏿", + description: "kiss: person, person, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️💋🧑🏻", + description: "kiss: person, person, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️💋🧑🏼", + description: "kiss: person, person, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️💋🧑🏽", + description: "kiss: person, person, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️💋🧑🏾", + description: "kiss: person, person, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩❤️💋👨", + description: "kiss: woman, man", + version: "2.0" + }, { + emoji: "👩🏻❤️💋👨🏻", + description: "kiss: woman, man, light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👨🏼", + description: "kiss: woman, man, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👨🏽", + description: "kiss: woman, man, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👨🏾", + description: "kiss: woman, man, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👨🏿", + description: "kiss: woman, man, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👨🏻", + description: "kiss: woman, man, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👨🏼", + description: "kiss: woman, man, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👨🏽", + description: "kiss: woman, man, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👨🏾", + description: "kiss: woman, man, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👨🏿", + description: "kiss: woman, man, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👨🏻", + description: "kiss: woman, man, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👨🏼", + description: "kiss: woman, man, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👨🏽", + description: "kiss: woman, man, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👨🏾", + description: "kiss: woman, man, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👨🏿", + description: "kiss: woman, man, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👨🏻", + description: "kiss: woman, man, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👨🏼", + description: "kiss: woman, man, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👨🏽", + description: "kiss: woman, man, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👨🏾", + description: "kiss: woman, man, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👨🏿", + description: "kiss: woman, man, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👨🏻", + description: "kiss: woman, man, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👨🏼", + description: "kiss: woman, man, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👨🏽", + description: "kiss: woman, man, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👨🏾", + description: "kiss: woman, man, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👨🏿", + description: "kiss: woman, man, dark skin tone", + version: "13.1" + }, { + emoji: "👨❤️💋👨", + description: "kiss: man, man", + version: "2.0" + }, { + emoji: "👨🏻❤️💋👨🏻", + description: "kiss: man, man, light skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️💋👨🏼", + description: "kiss: man, man, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️💋👨🏽", + description: "kiss: man, man, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️💋👨🏾", + description: "kiss: man, man, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️💋👨🏿", + description: "kiss: man, man, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️💋👨🏻", + description: "kiss: man, man, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️💋👨🏼", + description: "kiss: man, man, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️💋👨🏽", + description: "kiss: man, man, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️💋👨🏾", + description: "kiss: man, man, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️💋👨🏿", + description: "kiss: man, man, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️💋👨🏻", + description: "kiss: man, man, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️💋👨🏼", + description: "kiss: man, man, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️💋👨🏽", + description: "kiss: man, man, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️💋👨🏾", + description: "kiss: man, man, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️💋👨🏿", + description: "kiss: man, man, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️💋👨🏻", + description: "kiss: man, man, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️💋👨🏼", + description: "kiss: man, man, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️💋👨🏽", + description: "kiss: man, man, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️💋👨🏾", + description: "kiss: man, man, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️💋👨🏿", + description: "kiss: man, man, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️💋👨🏻", + description: "kiss: man, man, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️💋👨🏼", + description: "kiss: man, man, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️💋👨🏽", + description: "kiss: man, man, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️💋👨🏾", + description: "kiss: man, man, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️💋👨🏿", + description: "kiss: man, man, dark skin tone", + version: "13.1" + }, { + emoji: "👩❤️💋👩", + description: "kiss: woman, woman", + version: "2.0" + }, { + emoji: "👩🏻❤️💋👩🏻", + description: "kiss: woman, woman, light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👩🏼", + description: "kiss: woman, woman, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👩🏽", + description: "kiss: woman, woman, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👩🏾", + description: "kiss: woman, woman, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️💋👩🏿", + description: "kiss: woman, woman, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👩🏻", + description: "kiss: woman, woman, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👩🏼", + description: "kiss: woman, woman, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👩🏽", + description: "kiss: woman, woman, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👩🏾", + description: "kiss: woman, woman, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️💋👩🏿", + description: "kiss: woman, woman, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👩🏻", + description: "kiss: woman, woman, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👩🏼", + description: "kiss: woman, woman, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👩🏽", + description: "kiss: woman, woman, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👩🏾", + description: "kiss: woman, woman, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️💋👩🏿", + description: "kiss: woman, woman, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👩🏻", + description: "kiss: woman, woman, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👩🏼", + description: "kiss: woman, woman, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👩🏽", + description: "kiss: woman, woman, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👩🏾", + description: "kiss: woman, woman, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️💋👩🏿", + description: "kiss: woman, woman, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👩🏻", + description: "kiss: woman, woman, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👩🏼", + description: "kiss: woman, woman, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👩🏽", + description: "kiss: woman, woman, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👩🏾", + description: "kiss: woman, woman, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️💋👩🏿", + description: "kiss: woman, woman, dark skin tone", + version: "13.1" + }] + }, { + emoji: "💑", + description: "couple with heart", + version: "0.6", + keywords: ["couple", "couple with heart", "love"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "💑🏻", + description: "couple with heart: light skin tone", + version: "13.1" + }, { + emoji: "💑🏼", + description: "couple with heart: medium-light skin tone", + version: "13.1" + }, { + emoji: "💑🏽", + description: "couple with heart: medium skin tone", + version: "13.1" + }, { + emoji: "💑🏾", + description: "couple with heart: medium-dark skin tone", + version: "13.1" + }, { + emoji: "💑🏿", + description: "couple with heart: dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️🧑🏼", + description: "couple with heart: person, person, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️🧑🏽", + description: "couple with heart: person, person, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️🧑🏾", + description: "couple with heart: person, person, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏻❤️🧑🏿", + description: "couple with heart: person, person, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️🧑🏻", + description: "couple with heart: person, person, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️🧑🏽", + description: "couple with heart: person, person, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️🧑🏾", + description: "couple with heart: person, person, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏼❤️🧑🏿", + description: "couple with heart: person, person, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️🧑🏻", + description: "couple with heart: person, person, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️🧑🏼", + description: "couple with heart: person, person, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️🧑🏾", + description: "couple with heart: person, person, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏽❤️🧑🏿", + description: "couple with heart: person, person, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️🧑🏻", + description: "couple with heart: person, person, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️🧑🏼", + description: "couple with heart: person, person, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️🧑🏽", + description: "couple with heart: person, person, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏾❤️🧑🏿", + description: "couple with heart: person, person, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️🧑🏻", + description: "couple with heart: person, person, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️🧑🏼", + description: "couple with heart: person, person, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️🧑🏽", + description: "couple with heart: person, person, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "🧑🏿❤️🧑🏾", + description: "couple with heart: person, person, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩❤️👨", + description: "couple with heart: woman, man", + version: "2.0" + }, { + emoji: "👩🏻❤️👨🏻", + description: "couple with heart: woman, man, light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👨🏼", + description: "couple with heart: woman, man, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👨🏽", + description: "couple with heart: woman, man, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👨🏾", + description: "couple with heart: woman, man, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👨🏿", + description: "couple with heart: woman, man, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👨🏻", + description: "couple with heart: woman, man, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👨🏼", + description: "couple with heart: woman, man, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👨🏽", + description: "couple with heart: woman, man, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👨🏾", + description: "couple with heart: woman, man, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👨🏿", + description: "couple with heart: woman, man, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👨🏻", + description: "couple with heart: woman, man, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👨🏼", + description: "couple with heart: woman, man, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👨🏽", + description: "couple with heart: woman, man, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👨🏾", + description: "couple with heart: woman, man, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👨🏿", + description: "couple with heart: woman, man, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👨🏻", + description: "couple with heart: woman, man, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👨🏼", + description: "couple with heart: woman, man, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👨🏽", + description: "couple with heart: woman, man, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👨🏾", + description: "couple with heart: woman, man, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👨🏿", + description: "couple with heart: woman, man, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👨🏻", + description: "couple with heart: woman, man, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👨🏼", + description: "couple with heart: woman, man, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👨🏽", + description: "couple with heart: woman, man, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👨🏾", + description: "couple with heart: woman, man, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👨🏿", + description: "couple with heart: woman, man, dark skin tone", + version: "13.1" + }, { + emoji: "👨❤️👨", + description: "couple with heart: man, man", + version: "2.0" + }, { + emoji: "👨🏻❤️👨🏻", + description: "couple with heart: man, man, light skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️👨🏼", + description: "couple with heart: man, man, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️👨🏽", + description: "couple with heart: man, man, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️👨🏾", + description: "couple with heart: man, man, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏻❤️👨🏿", + description: "couple with heart: man, man, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️👨🏻", + description: "couple with heart: man, man, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️👨🏼", + description: "couple with heart: man, man, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️👨🏽", + description: "couple with heart: man, man, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️👨🏾", + description: "couple with heart: man, man, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏼❤️👨🏿", + description: "couple with heart: man, man, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️👨🏻", + description: "couple with heart: man, man, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️👨🏼", + description: "couple with heart: man, man, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️👨🏽", + description: "couple with heart: man, man, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️👨🏾", + description: "couple with heart: man, man, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏽❤️👨🏿", + description: "couple with heart: man, man, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️👨🏻", + description: "couple with heart: man, man, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️👨🏼", + description: "couple with heart: man, man, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️👨🏽", + description: "couple with heart: man, man, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️👨🏾", + description: "couple with heart: man, man, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏾❤️👨🏿", + description: "couple with heart: man, man, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️👨🏻", + description: "couple with heart: man, man, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️👨🏼", + description: "couple with heart: man, man, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️👨🏽", + description: "couple with heart: man, man, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️👨🏾", + description: "couple with heart: man, man, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👨🏿❤️👨🏿", + description: "couple with heart: man, man, dark skin tone", + version: "13.1" + }, { + emoji: "👩❤️👩", + description: "couple with heart: woman, woman", + version: "2.0" + }, { + emoji: "👩🏻❤️👩🏻", + description: "couple with heart: woman, woman, light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👩🏼", + description: "couple with heart: woman, woman, light skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👩🏽", + description: "couple with heart: woman, woman, light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👩🏾", + description: "couple with heart: woman, woman, light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏻❤️👩🏿", + description: "couple with heart: woman, woman, light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👩🏻", + description: "couple with heart: woman, woman, medium-light skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👩🏼", + description: "couple with heart: woman, woman, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👩🏽", + description: "couple with heart: woman, woman, medium-light skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👩🏾", + description: "couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏼❤️👩🏿", + description: "couple with heart: woman, woman, medium-light skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👩🏻", + description: "couple with heart: woman, woman, medium skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👩🏼", + description: "couple with heart: woman, woman, medium skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👩🏽", + description: "couple with heart: woman, woman, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👩🏾", + description: "couple with heart: woman, woman, medium skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏽❤️👩🏿", + description: "couple with heart: woman, woman, medium skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👩🏻", + description: "couple with heart: woman, woman, medium-dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👩🏼", + description: "couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👩🏽", + description: "couple with heart: woman, woman, medium-dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👩🏾", + description: "couple with heart: woman, woman, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏾❤️👩🏿", + description: "couple with heart: woman, woman, medium-dark skin tone, dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👩🏻", + description: "couple with heart: woman, woman, dark skin tone, light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👩🏼", + description: "couple with heart: woman, woman, dark skin tone, medium-light skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👩🏽", + description: "couple with heart: woman, woman, dark skin tone, medium skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👩🏾", + description: "couple with heart: woman, woman, dark skin tone, medium-dark skin tone", + version: "13.1" + }, { + emoji: "👩🏿❤️👩🏿", + description: "couple with heart: woman, woman, dark skin tone", + version: "13.1" + }] + }, { + emoji: "👪", + description: "family", + version: "0.6", + keywords: ["family"], + category: "person-people", + group: "people-body", + subgroup: "family", + variations: [{ + emoji: "👨👩👦", + description: "family: man, woman, boy", + version: "2.0" + }, { + emoji: "👨👩👧", + description: "family: man, woman, girl", + version: "2.0" + }, { + emoji: "👨👩👧👦", + description: "family: man, woman, girl, boy", + version: "2.0" + }, { + emoji: "👨👩👦👦", + description: "family: man, woman, boy, boy", + version: "2.0" + }, { + emoji: "👨👩👧👧", + description: "family: man, woman, girl, girl", + version: "2.0" + }, { + emoji: "👨👨👦", + description: "family: man, man, boy", + version: "2.0" + }, { + emoji: "👨👨👧", + description: "family: man, man, girl", + version: "2.0" + }, { + emoji: "👨👨👧👦", + description: "family: man, man, girl, boy", + version: "2.0" + }, { + emoji: "👨👨👦👦", + description: "family: man, man, boy, boy", + version: "2.0" + }, { + emoji: "👨👨👧👧", + description: "family: man, man, girl, girl", + version: "2.0" + }, { + emoji: "👩👩👦", + description: "family: woman, woman, boy", + version: "2.0" + }, { + emoji: "👩👩👧", + description: "family: woman, woman, girl", + version: "2.0" + }, { + emoji: "👩👩👧👦", + description: "family: woman, woman, girl, boy", + version: "2.0" + }, { + emoji: "👩👩👦👦", + description: "family: woman, woman, boy, boy", + version: "2.0" + }, { + emoji: "👩👩👧👧", + description: "family: woman, woman, girl, girl", + version: "2.0" + }, { + emoji: "👨👦", + description: "family: man, boy", + version: "4.0" + }, { + emoji: "👨👦👦", + description: "family: man, boy, boy", + version: "4.0" + }, { + emoji: "👨👧", + description: "family: man, girl", + version: "4.0" + }, { + emoji: "👨👧👦", + description: "family: man, girl, boy", + version: "4.0" + }, { + emoji: "👨👧👧", + description: "family: man, girl, girl", + version: "4.0" + }, { + emoji: "👩👦", + description: "family: woman, boy", + version: "4.0" + }, { + emoji: "👩👦👦", + description: "family: woman, boy, boy", + version: "4.0" + }, { + emoji: "👩👧", + description: "family: woman, girl", + version: "4.0" + }, { + emoji: "👩👧👦", + description: "family: woman, girl, boy", + version: "4.0" + }, { + emoji: "👩👧👧", + description: "family: woman, girl, girl", + version: "4.0" + }] + }, { + emoji: "🗣️", + description: "speaking head", + version: "0.7", + keywords: ["face", "head", "silhouette", "speak", "speaking"], + category: "person-people", + group: "people-body", + subgroup: "person-symbol" + }, { + emoji: "👤", + description: "bust in silhouette", + version: "0.6", + keywords: ["bust", "bust in silhouette", "silhouette"], + category: "person-people", + group: "people-body", + subgroup: "person-symbol" + }, { + emoji: "👥", + description: "busts in silhouette", + version: "1.0", + keywords: ["bust", "busts in silhouette", "silhouette"], + category: "person-people", + group: "people-body", + subgroup: "person-symbol" + }, { + emoji: "🫂", + description: "people hugging", + version: "13.0", + keywords: ["goodbye", "hello", "hug", "people hugging", "thanks"], + category: "person-people", + group: "people-body", + subgroup: "person-symbol" + }, { + emoji: "👣", + description: "footprints", + version: "0.6", + keywords: ["clothing", "footprint", "footprints", "print"], + category: "person-people", + group: "people-body", + subgroup: "person-symbol" + }, { + emoji: "🐵", + description: "monkey face", + version: "0.6", + keywords: ["face", "monkey"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐒", + description: "monkey", + version: "0.6", + keywords: ["monkey"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦍", + description: "gorilla", + version: "3.0", + keywords: ["gorilla"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦧", + description: "orangutan", + version: "12.0", + keywords: ["ape", "orangutan"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐶", + description: "dog face", + version: "0.6", + keywords: ["dog", "face", "pet"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐕", + description: "dog", + version: "0.7", + keywords: ["dog", "pet"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦮", + description: "guide dog", + version: "12.0", + keywords: ["accessibility", "blind", "guide", "guide dog"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐕🦺", + description: "service dog", + version: "12.0", + keywords: ["accessibility", "assistance", "dog", "service"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐩", + description: "poodle", + version: "0.6", + keywords: ["dog", "poodle"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐺", + description: "wolf", + version: "0.6", + keywords: ["face", "wolf"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦊", + description: "fox", + version: "3.0", + keywords: ["face", "fox"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦝", + description: "raccoon", + version: "11.0", + keywords: ["curious", "raccoon", "sly"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐱", + description: "cat face", + version: "0.6", + keywords: ["cat", "face", "pet"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐈", + description: "cat", + version: "0.7", + keywords: ["cat", "pet"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐈⬛", + description: "black cat", + version: "13.0", + keywords: ["black", "cat", "unlucky"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦁", + description: "lion", + version: "1.0", + keywords: ["face", "Leo", "lion", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐯", + description: "tiger face", + version: "0.6", + keywords: ["face", "tiger"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐅", + description: "tiger", + version: "1.0", + keywords: ["tiger"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐆", + description: "leopard", + version: "1.0", + keywords: ["leopard"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐴", + description: "horse face", + version: "0.6", + keywords: ["face", "horse"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🫎", + description: "moose", + version: "15.0", + keywords: ["animal", "antlers", "elk", "mammal", "moose"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🫏", + description: "donkey", + version: "15.0", + keywords: ["animal", "ass", "burro", "donkey", "mammal", "mule", "stubborn"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐎", + description: "horse", + version: "0.6", + keywords: ["equestrian", "horse", "racehorse", "racing"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦄", + description: "unicorn", + version: "1.0", + keywords: ["face", "unicorn"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦓", + description: "zebra", + version: "5.0", + keywords: ["stripe", "zebra"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦌", + description: "deer", + version: "3.0", + keywords: ["deer"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦬", + description: "bison", + version: "13.0", + keywords: ["bison", "buffalo", "herd", "wisent"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐮", + description: "cow face", + version: "0.6", + keywords: ["cow", "face"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐂", + description: "ox", + version: "1.0", + keywords: ["bull", "ox", "Taurus", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐃", + description: "water buffalo", + version: "1.0", + keywords: ["buffalo", "water"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐄", + description: "cow", + version: "1.0", + keywords: ["cow"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐷", + description: "pig face", + version: "0.6", + keywords: ["face", "pig"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐖", + description: "pig", + version: "1.0", + keywords: ["pig", "sow"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐗", + description: "boar", + version: "0.6", + keywords: ["boar", "pig"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐽", + description: "pig nose", + version: "0.6", + keywords: ["face", "nose", "pig"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐏", + description: "ram", + version: "1.0", + keywords: ["Aries", "male", "ram", "sheep", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐑", + description: "ewe", + version: "0.6", + keywords: ["ewe", "female", "sheep"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐐", + description: "goat", + version: "1.0", + keywords: ["Capricorn", "goat", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐪", + description: "camel", + version: "1.0", + keywords: ["camel", "dromedary", "hump"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐫", + description: "two-hump camel", + version: "0.6", + keywords: ["bactrian", "camel", "hump", "two-hump camel"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦙", + description: "llama", + version: "11.0", + keywords: ["alpaca", "guanaco", "llama", "vicuña", "wool"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦒", + description: "giraffe", + version: "5.0", + keywords: ["giraffe", "spots"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐘", + description: "elephant", + version: "0.6", + keywords: ["elephant"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦣", + description: "mammoth", + version: "13.0", + keywords: ["extinction", "large", "mammoth", "tusk", "woolly"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦏", + description: "rhinoceros", + version: "3.0", + keywords: ["rhinoceros"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦛", + description: "hippopotamus", + version: "11.0", + keywords: ["hippo", "hippopotamus"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐭", + description: "mouse face", + version: "0.6", + keywords: ["face", "mouse"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐁", + description: "mouse", + version: "1.0", + keywords: ["mouse"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐀", + description: "rat", + version: "1.0", + keywords: ["rat"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐹", + description: "hamster", + version: "0.6", + keywords: ["face", "hamster", "pet"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐰", + description: "rabbit face", + version: "0.6", + keywords: ["bunny", "face", "pet", "rabbit"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐇", + description: "rabbit", + version: "1.0", + keywords: ["bunny", "pet", "rabbit"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐿️", + description: "chipmunk", + version: "0.7", + keywords: ["chipmunk", "squirrel"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦫", + description: "beaver", + version: "13.0", + keywords: ["beaver", "dam"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦔", + description: "hedgehog", + version: "5.0", + keywords: ["hedgehog", "spiny"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦇", + description: "bat", + version: "3.0", + keywords: ["bat", "vampire"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐻", + description: "bear", + version: "0.6", + keywords: ["bear", "face"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐻❄️", + description: "polar bear", + version: "13.0", + keywords: ["arctic", "bear", "polar bear", "white"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐨", + description: "koala", + version: "0.6", + keywords: ["face", "koala", "marsupial"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐼", + description: "panda", + version: "0.6", + keywords: ["face", "panda"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦥", + description: "sloth", + version: "12.0", + keywords: ["lazy", "sloth", "slow"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦦", + description: "otter", + version: "12.0", + keywords: ["fishing", "otter", "playful"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦨", + description: "skunk", + version: "12.0", + keywords: ["skunk", "stink"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦘", + description: "kangaroo", + version: "11.0", + keywords: ["joey", "jump", "kangaroo", "marsupial"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦡", + description: "badger", + version: "11.0", + keywords: ["badger", "honey badger", "pester"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🐾", + description: "paw prints", + version: "0.6", + keywords: ["feet", "paw", "paw prints", "print"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-mammal" + }, { + emoji: "🦃", + description: "turkey", + version: "1.0", + keywords: ["bird", "turkey"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐔", + description: "chicken", + version: "0.6", + keywords: ["bird", "chicken"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐓", + description: "rooster", + version: "1.0", + keywords: ["bird", "rooster"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐣", + description: "hatching chick", + version: "0.6", + keywords: ["baby", "bird", "chick", "hatching"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐤", + description: "baby chick", + version: "0.6", + keywords: ["baby", "bird", "chick"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐥", + description: "front-facing baby chick", + version: "0.6", + keywords: ["baby", "bird", "chick", "front-facing baby chick"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐦", + description: "bird", + version: "0.6", + keywords: ["bird"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐧", + description: "penguin", + version: "0.6", + keywords: ["bird", "penguin"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🕊️", + description: "dove", + version: "0.7", + keywords: ["bird", "dove", "fly", "peace"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦅", + description: "eagle", + version: "3.0", + keywords: ["bird", "eagle"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦆", + description: "duck", + version: "3.0", + keywords: ["bird", "duck"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦢", + description: "swan", + version: "11.0", + keywords: ["bird", "cygnet", "swan", "ugly duckling"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦉", + description: "owl", + version: "3.0", + keywords: ["bird", "owl", "wise"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦤", + description: "dodo", + version: "13.0", + keywords: ["dodo", "extinction", "large", "Mauritius"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🪶", + description: "feather", + version: "13.0", + keywords: ["bird", "feather", "flight", "light", "plumage"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦩", + description: "flamingo", + version: "12.0", + keywords: ["flamboyant", "flamingo", "tropical"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦚", + description: "peacock", + version: "11.0", + keywords: ["bird", "ostentatious", "peacock", "peahen", "proud"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🦜", + description: "parrot", + version: "11.0", + keywords: ["bird", "parrot", "pirate", "talk"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🪽", + description: "wing", + version: "15.0", + keywords: ["angelic", "aviation", "bird", "flying", "mythology", "wing"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐦⬛", + description: "black bird", + version: "15.0", + keywords: ["bird", "black", "crow", "raven", "rook"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🪿", + description: "goose", + version: "15.0", + keywords: ["bird", "fowl", "goose", "honk", "silly"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bird" + }, { + emoji: "🐸", + description: "frog", + version: "0.6", + keywords: ["face", "frog"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-amphibian" + }, { + emoji: "🐊", + description: "crocodile", + version: "1.0", + keywords: ["crocodile"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🐢", + description: "turtle", + version: "0.6", + keywords: ["terrapin", "tortoise", "turtle"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🦎", + description: "lizard", + version: "3.0", + keywords: ["lizard", "reptile"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🐍", + description: "snake", + version: "0.6", + keywords: ["bearer", "Ophiuchus", "serpent", "snake", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🐲", + description: "dragon face", + version: "0.6", + keywords: ["dragon", "face", "fairy tale"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🐉", + description: "dragon", + version: "1.0", + keywords: ["dragon", "fairy tale"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🦕", + description: "sauropod", + version: "5.0", + keywords: ["brachiosaurus", "brontosaurus", "diplodocus", "sauropod"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🦖", + description: "T-Rex", + version: "5.0", + keywords: ["T-Rex", "Tyrannosaurus Rex"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-reptile" + }, { + emoji: "🐳", + description: "spouting whale", + version: "0.6", + keywords: ["face", "spouting", "whale"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐋", + description: "whale", + version: "1.0", + keywords: ["whale"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐬", + description: "dolphin", + version: "0.6", + keywords: ["dolphin", "flipper"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🦭", + description: "seal", + version: "13.0", + keywords: ["sea lion", "seal"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐟", + description: "fish", + version: "0.6", + keywords: ["fish", "Pisces", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐠", + description: "tropical fish", + version: "0.6", + keywords: ["fish", "tropical"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐡", + description: "blowfish", + version: "0.6", + keywords: ["blowfish", "fish"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🦈", + description: "shark", + version: "3.0", + keywords: ["fish", "shark"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐙", + description: "octopus", + version: "0.6", + keywords: ["octopus"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐚", + description: "spiral shell", + version: "0.6", + keywords: ["shell", "spiral"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🪸", + description: "coral", + version: "14.0", + keywords: ["coral", "ocean", "reef"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🪼", + description: "jellyfish", + version: "15.0", + keywords: ["burn", "invertebrate", "jelly", "jellyfish", "marine", "ouch", "stinger"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-marine" + }, { + emoji: "🐌", + description: "snail", + version: "0.6", + keywords: ["snail"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🦋", + description: "butterfly", + version: "3.0", + keywords: ["butterfly", "insect", "pretty"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🐛", + description: "bug", + version: "0.6", + keywords: ["bug", "insect"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🐜", + description: "ant", + version: "0.6", + keywords: ["ant", "insect"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🐝", + description: "honeybee", + version: "0.6", + keywords: ["bee", "honeybee", "insect"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🪲", + description: "beetle", + version: "13.0", + keywords: ["beetle", "bug", "insect"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🐞", + description: "lady beetle", + version: "0.6", + keywords: ["beetle", "insect", "lady beetle", "ladybird", "ladybug"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🦗", + description: "cricket", + version: "5.0", + keywords: ["cricket", "grasshopper"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🪳", + description: "cockroach", + version: "13.0", + keywords: ["cockroach", "insect", "pest", "roach"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🕷️", + description: "spider", + version: "0.7", + keywords: ["insect", "spider"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🕸️", + description: "spider web", + version: "0.7", + keywords: ["spider", "web"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🦂", + description: "scorpion", + version: "1.0", + keywords: ["scorpio", "Scorpio", "scorpion", "zodiac"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🦟", + description: "mosquito", + version: "11.0", + keywords: ["disease", "fever", "malaria", "mosquito", "pest", "virus"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🪰", + description: "fly", + version: "13.0", + keywords: ["disease", "fly", "maggot", "pest", "rotting"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🪱", + description: "worm", + version: "13.0", + keywords: ["annelid", "earthworm", "parasite", "worm"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "🦠", + description: "microbe", + version: "11.0", + keywords: ["amoeba", "bacteria", "microbe", "virus"], + category: "animals-nature", + group: "animals-nature", + subgroup: "animal-bug" + }, { + emoji: "💐", + description: "bouquet", + version: "0.6", + keywords: ["bouquet", "flower"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌸", + description: "cherry blossom", + version: "0.6", + keywords: ["blossom", "cherry", "flower"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "💮", + description: "white flower", + version: "0.6", + keywords: ["flower", "white flower"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🪷", + description: "lotus", + version: "14.0", + keywords: ["Buddhism", "flower", "Hinduism", "lotus", "purity"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🏵️", + description: "rosette", + version: "0.7", + keywords: ["plant", "rosette"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌹", + description: "rose", + version: "0.6", + keywords: ["flower", "rose"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🥀", + description: "wilted flower", + version: "3.0", + keywords: ["flower", "wilted"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌺", + description: "hibiscus", + version: "0.6", + keywords: ["flower", "hibiscus"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌻", + description: "sunflower", + version: "0.6", + keywords: ["flower", "sun", "sunflower"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌼", + description: "blossom", + version: "0.6", + keywords: ["blossom", "flower"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌷", + description: "tulip", + version: "0.6", + keywords: ["flower", "tulip"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🪻", + description: "hyacinth", + version: "15.0", + keywords: ["bluebonnet", "flower", "hyacinth", "lavender", "lupine", "snapdragon"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-flower" + }, { + emoji: "🌱", + description: "seedling", + version: "0.6", + keywords: ["seedling", "young"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🪴", + description: "potted plant", + version: "13.0", + keywords: ["boring", "grow", "house", "nurturing", "plant", "potted plant", "useless"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌲", + description: "evergreen tree", + version: "1.0", + keywords: ["evergreen tree", "tree"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌳", + description: "deciduous tree", + version: "1.0", + keywords: ["deciduous", "shedding", "tree"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌴", + description: "palm tree", + version: "0.6", + keywords: ["palm", "tree"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌵", + description: "cactus", + version: "0.6", + keywords: ["cactus", "plant"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌾", + description: "sheaf of rice", + version: "0.6", + keywords: ["ear", "grain", "rice", "sheaf of rice"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🌿", + description: "herb", + version: "0.6", + keywords: ["herb", "leaf"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "☘️", + description: "shamrock", + version: "1.0", + keywords: ["plant", "shamrock"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍀", + description: "four leaf clover", + version: "0.6", + keywords: ["4", "clover", "four", "four-leaf clover", "leaf"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍁", + description: "maple leaf", + version: "0.6", + keywords: ["falling", "leaf", "maple"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍂", + description: "fallen leaf", + version: "0.6", + keywords: ["fallen leaf", "falling", "leaf"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍃", + description: "leaf fluttering in wind", + version: "0.6", + keywords: ["blow", "flutter", "leaf", "leaf fluttering in wind", "wind"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🪹", + description: "empty nest", + version: "14.0", + keywords: ["empty nest", "nesting"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🪺", + description: "nest with eggs", + version: "14.0", + keywords: ["nest with eggs", "nesting"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍄", + description: "mushroom", + version: "0.6", + keywords: ["mushroom", "toadstool"], + category: "animals-nature", + group: "animals-nature", + subgroup: "plant-other" + }, { + emoji: "🍇", + description: "grapes", + version: "0.6", + keywords: ["fruit", "grape", "grapes"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍈", + description: "melon", + version: "0.6", + keywords: ["fruit", "melon"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍉", + description: "watermelon", + version: "0.6", + keywords: ["fruit", "watermelon"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍊", + description: "tangerine", + version: "0.6", + keywords: ["fruit", "orange", "tangerine"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍋", + description: "lemon", + version: "1.0", + keywords: ["citrus", "fruit", "lemon"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍌", + description: "banana", + version: "0.6", + keywords: ["banana", "fruit"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍍", + description: "pineapple", + version: "0.6", + keywords: ["fruit", "pineapple"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🥭", + description: "mango", + version: "11.0", + keywords: ["fruit", "mango", "tropical"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍎", + description: "red apple", + version: "0.6", + keywords: ["apple", "fruit", "red"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍏", + description: "green apple", + version: "0.6", + keywords: ["apple", "fruit", "green"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍐", + description: "pear", + version: "1.0", + keywords: ["fruit", "pear"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍑", + description: "peach", + version: "0.6", + keywords: ["fruit", "peach"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍒", + description: "cherries", + version: "0.6", + keywords: ["berries", "cherries", "cherry", "fruit", "red"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍓", + description: "strawberry", + version: "0.6", + keywords: ["berry", "fruit", "strawberry"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🫐", + description: "blueberries", + version: "13.0", + keywords: ["berry", "bilberry", "blue", "blueberries", "blueberry"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🥝", + description: "kiwi fruit", + version: "3.0", + keywords: ["food", "fruit", "kiwi"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🍅", + description: "tomato", + version: "0.6", + keywords: ["fruit", "tomato", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🫒", + description: "olive", + version: "13.0", + keywords: ["food", "olive"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🥥", + description: "coconut", + version: "5.0", + keywords: ["coconut", "palm", "piña colada"], + category: "food-drink", + group: "food-drink", + subgroup: "food-fruit" + }, { + emoji: "🥑", + description: "avocado", + version: "3.0", + keywords: ["avocado", "food", "fruit"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🍆", + description: "eggplant", + version: "0.6", + keywords: ["aubergine", "eggplant", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥔", + description: "potato", + version: "3.0", + keywords: ["food", "potato", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥕", + description: "carrot", + version: "3.0", + keywords: ["carrot", "food", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🌽", + description: "ear of corn", + version: "0.6", + keywords: ["corn", "ear", "ear of corn", "maize", "maze"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🌶️", + description: "hot pepper", + version: "0.7", + keywords: ["hot", "pepper"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🫑", + description: "bell pepper", + version: "13.0", + keywords: ["bell pepper", "capsicum", "pepper", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥒", + description: "cucumber", + version: "3.0", + keywords: ["cucumber", "food", "pickle", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥬", + description: "leafy green", + version: "11.0", + keywords: ["bok choy", "cabbage", "kale", "leafy green", "lettuce"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥦", + description: "broccoli", + version: "5.0", + keywords: ["broccoli", "wild cabbage"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🧄", + description: "garlic", + version: "12.0", + keywords: ["flavoring", "garlic"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🧅", + description: "onion", + version: "12.0", + keywords: ["flavoring", "onion"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🥜", + description: "peanuts", + version: "3.0", + keywords: ["food", "nut", "peanut", "peanuts", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🫘", + description: "beans", + version: "14.0", + keywords: ["beans", "food", "kidney", "legume"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🌰", + description: "chestnut", + version: "0.6", + keywords: ["chestnut", "plant"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🫚", + description: "ginger root", + version: "15.0", + keywords: ["beer", "ginger root", "root", "spice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🫛", + description: "pea pod", + version: "15.0", + keywords: ["beans", "edamame", "legume", "pea", "pod", "vegetable"], + category: "food-drink", + group: "food-drink", + subgroup: "food-vegetable" + }, { + emoji: "🍞", + description: "bread", + version: "0.6", + keywords: ["bread", "loaf"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥐", + description: "croissant", + version: "3.0", + keywords: ["bread", "breakfast", "croissant", "food", "french", "roll"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥖", + description: "baguette bread", + version: "3.0", + keywords: ["baguette", "bread", "food", "french"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🫓", + description: "flatbread", + version: "13.0", + keywords: ["arepa", "flatbread", "lavash", "naan", "pita"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥨", + description: "pretzel", + version: "5.0", + keywords: ["pretzel", "twisted"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥯", + description: "bagel", + version: "11.0", + keywords: ["bagel", "bakery", "breakfast", "schmear"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥞", + description: "pancakes", + version: "3.0", + keywords: ["breakfast", "crêpe", "food", "hotcake", "pancake", "pancakes"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🧇", + description: "waffle", + version: "12.0", + keywords: ["breakfast", "indecisive", "iron", "waffle"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🧀", + description: "cheese wedge", + version: "1.0", + keywords: ["cheese", "cheese wedge"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍖", + description: "meat on bone", + version: "0.6", + keywords: ["bone", "meat", "meat on bone"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍗", + description: "poultry leg", + version: "0.6", + keywords: ["bone", "chicken", "drumstick", "leg", "poultry"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥩", + description: "cut of meat", + version: "5.0", + keywords: ["chop", "cut of meat", "lambchop", "porkchop", "steak"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥓", + description: "bacon", + version: "3.0", + keywords: ["bacon", "breakfast", "food", "meat"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍔", + description: "hamburger", + version: "0.6", + keywords: ["burger", "hamburger"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍟", + description: "french fries", + version: "0.6", + keywords: ["french", "fries"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍕", + description: "pizza", + version: "0.6", + keywords: ["cheese", "pizza", "slice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🌭", + description: "hot dog", + version: "1.0", + keywords: ["frankfurter", "hot dog", "hotdog", "sausage"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥪", + description: "sandwich", + version: "5.0", + keywords: ["bread", "sandwich"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🌮", + description: "taco", + version: "1.0", + keywords: ["mexican", "taco"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🌯", + description: "burrito", + version: "1.0", + keywords: ["burrito", "mexican", "wrap"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🫔", + description: "tamale", + version: "13.0", + keywords: ["mexican", "tamale", "wrapped"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥙", + description: "stuffed flatbread", + version: "3.0", + keywords: ["falafel", "flatbread", "food", "gyro", "kebab", "stuffed"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🧆", + description: "falafel", + version: "12.0", + keywords: ["chickpea", "falafel", "meatball"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥚", + description: "egg", + version: "3.0", + keywords: ["breakfast", "egg", "food"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍳", + description: "cooking", + version: "0.6", + keywords: ["breakfast", "cooking", "egg", "frying", "pan"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥘", + description: "shallow pan of food", + version: "3.0", + keywords: ["casserole", "food", "paella", "pan", "shallow", "shallow pan of food"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍲", + description: "pot of food", + version: "0.6", + keywords: ["pot", "pot of food", "stew"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🫕", + description: "fondue", + version: "13.0", + keywords: ["cheese", "chocolate", "fondue", "melted", "pot", "Swiss"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥣", + description: "bowl with spoon", + version: "5.0", + keywords: ["bowl with spoon", "breakfast", "cereal", "congee"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥗", + description: "green salad", + version: "3.0", + keywords: ["food", "green", "salad"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍿", + description: "popcorn", + version: "1.0", + keywords: ["popcorn"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🧈", + description: "butter", + version: "12.0", + keywords: ["butter", "dairy"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🧂", + description: "salt", + version: "11.0", + keywords: ["condiment", "salt", "shaker"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🥫", + description: "canned food", + version: "5.0", + keywords: ["can", "canned food"], + category: "food-drink", + group: "food-drink", + subgroup: "food-prepared" + }, { + emoji: "🍱", + description: "bento box", + version: "0.6", + keywords: ["bento", "box"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍘", + description: "rice cracker", + version: "0.6", + keywords: ["cracker", "rice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍙", + description: "rice ball", + version: "0.6", + keywords: ["ball", "Japanese", "rice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍚", + description: "cooked rice", + version: "0.6", + keywords: ["cooked", "rice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍛", + description: "curry rice", + version: "0.6", + keywords: ["curry", "rice"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍜", + description: "steaming bowl", + version: "0.6", + keywords: ["bowl", "noodle", "ramen", "steaming"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍝", + description: "spaghetti", + version: "0.6", + keywords: ["pasta", "spaghetti"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍠", + description: "roasted sweet potato", + version: "0.6", + keywords: ["potato", "roasted", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍢", + description: "oden", + version: "0.6", + keywords: ["kebab", "oden", "seafood", "skewer", "stick"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍣", + description: "sushi", + version: "0.6", + keywords: ["sushi"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍤", + description: "fried shrimp", + version: "0.6", + keywords: ["fried", "prawn", "shrimp", "tempura"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍥", + description: "fish cake with swirl", + version: "0.6", + keywords: ["cake", "fish", "fish cake with swirl", "pastry", "swirl"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🥮", + description: "moon cake", + version: "11.0", + keywords: ["autumn", "festival", "moon cake", "yuèbǐng"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🍡", + description: "dango", + version: "0.6", + keywords: ["dango", "dessert", "Japanese", "skewer", "stick", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🥟", + description: "dumpling", + version: "5.0", + keywords: ["dumpling", "empanada", "gyōza", "jiaozi", "pierogi", "potsticker"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🥠", + description: "fortune cookie", + version: "5.0", + keywords: ["fortune cookie", "prophecy"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🥡", + description: "takeout box", + version: "5.0", + keywords: ["oyster pail", "takeout box"], + category: "food-drink", + group: "food-drink", + subgroup: "food-asian" + }, { + emoji: "🦀", + description: "crab", + version: "1.0", + keywords: ["Cancer", "crab", "zodiac"], + category: "animals-nature", + group: "food-drink", + subgroup: "food-marine" + }, { + emoji: "🦞", + description: "lobster", + version: "11.0", + keywords: ["bisque", "claws", "lobster", "seafood"], + category: "animals-nature", + group: "food-drink", + subgroup: "food-marine" + }, { + emoji: "🦐", + description: "shrimp", + version: "3.0", + keywords: ["food", "shellfish", "shrimp", "small"], + category: "animals-nature", + group: "food-drink", + subgroup: "food-marine" + }, { + emoji: "🦑", + description: "squid", + version: "3.0", + keywords: ["food", "molusc", "squid"], + category: "animals-nature", + group: "food-drink", + subgroup: "food-marine" + }, { + emoji: "🦪", + description: "oyster", + version: "12.0", + keywords: ["diving", "oyster", "pearl"], + category: "animals-nature", + group: "food-drink", + subgroup: "food-marine" + }, { + emoji: "🍦", + description: "soft ice cream", + version: "0.6", + keywords: ["cream", "dessert", "ice", "icecream", "soft", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍧", + description: "shaved ice", + version: "0.6", + keywords: ["dessert", "ice", "shaved", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍨", + description: "ice cream", + version: "0.6", + keywords: ["cream", "dessert", "ice", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍩", + description: "doughnut", + version: "0.6", + keywords: ["breakfast", "dessert", "donut", "doughnut", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍪", + description: "cookie", + version: "0.6", + keywords: ["cookie", "dessert", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🎂", + description: "birthday cake", + version: "0.6", + keywords: ["birthday", "cake", "celebration", "dessert", "pastry", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍰", + description: "shortcake", + version: "0.6", + keywords: ["cake", "dessert", "pastry", "shortcake", "slice", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🧁", + description: "cupcake", + version: "11.0", + keywords: ["bakery", "cupcake", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🥧", + description: "pie", + version: "5.0", + keywords: ["filling", "pastry", "pie"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍫", + description: "chocolate bar", + version: "0.6", + keywords: ["bar", "chocolate", "dessert", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍬", + description: "candy", + version: "0.6", + keywords: ["candy", "dessert", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍭", + description: "lollipop", + version: "0.6", + keywords: ["candy", "dessert", "lollipop", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍮", + description: "custard", + version: "0.6", + keywords: ["custard", "dessert", "pudding", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍯", + description: "honey pot", + version: "0.6", + keywords: ["honey", "honeypot", "pot", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "food-sweet" + }, { + emoji: "🍼", + description: "baby bottle", + version: "1.0", + keywords: ["baby", "bottle", "drink", "milk"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🥛", + description: "glass of milk", + version: "3.0", + keywords: ["drink", "glass", "glass of milk", "milk"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "☕", + description: "hot beverage", + version: "0.6", + keywords: ["beverage", "coffee", "drink", "hot", "steaming", "tea"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🫖", + description: "teapot", + version: "13.0", + keywords: ["drink", "pot", "tea", "teapot"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍵", + description: "teacup without handle", + version: "0.6", + keywords: ["beverage", "cup", "drink", "tea", "teacup", "teacup without handle"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍶", + description: "sake", + version: "0.6", + keywords: ["bar", "beverage", "bottle", "cup", "drink", "sake"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍾", + description: "bottle with popping cork", + version: "1.0", + keywords: ["bar", "bottle", "bottle with popping cork", "cork", "drink", "popping"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍷", + description: "wine glass", + version: "0.6", + keywords: ["bar", "beverage", "drink", "glass", "wine"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍸", + description: "cocktail glass", + version: "0.6", + keywords: ["bar", "cocktail", "drink", "glass"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍹", + description: "tropical drink", + version: "0.6", + keywords: ["bar", "drink", "tropical"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍺", + description: "beer mug", + version: "0.6", + keywords: ["bar", "beer", "drink", "mug"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🍻", + description: "clinking beer mugs", + version: "0.6", + keywords: ["bar", "beer", "clink", "clinking beer mugs", "drink", "mug"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🥂", + description: "clinking glasses", + version: "3.0", + keywords: ["celebrate", "clink", "clinking glasses", "drink", "glass"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🥃", + description: "tumbler glass", + version: "3.0", + keywords: ["glass", "liquor", "shot", "tumbler", "whisky"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🫗", + description: "pouring liquid", + version: "14.0", + keywords: ["drink", "empty", "glass", "pouring liquid", "spill"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🥤", + description: "cup with straw", + version: "5.0", + keywords: ["cup with straw", "juice", "soda"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🧋", + description: "bubble tea", + version: "13.0", + keywords: ["bubble", "milk", "pearl", "tea"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🧃", + description: "beverage box", + version: "12.0", + keywords: ["beverage", "box", "juice", "straw", "sweet"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🧉", + description: "mate", + version: "12.0", + keywords: ["drink", "mate"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🧊", + description: "ice", + version: "12.0", + keywords: ["cold", "ice", "ice cube", "iceberg"], + category: "food-drink", + group: "food-drink", + subgroup: "drink" + }, { + emoji: "🥢", + description: "chopsticks", + version: "5.0", + keywords: ["chopsticks", "hashi"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🍽️", + description: "fork and knife with plate", + version: "0.7", + keywords: ["cooking", "fork", "fork and knife with plate", "knife", "plate"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🍴", + description: "fork and knife", + version: "0.6", + keywords: ["cooking", "cutlery", "fork", "fork and knife", "knife"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🥄", + description: "spoon", + version: "3.0", + keywords: ["spoon", "tableware"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🔪", + description: "kitchen knife", + version: "0.6", + keywords: ["cooking", "hocho", "kitchen knife", "knife", "tool", "weapon"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🫙", + description: "jar", + version: "14.0", + keywords: ["condiment", "container", "empty", "jar", "sauce", "store"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🏺", + description: "amphora", + version: "1.0", + keywords: ["amphora", "Aquarius", "cooking", "drink", "jug", "zodiac"], + category: "food-drink", + group: "food-drink", + subgroup: "dishware" + }, { + emoji: "🌍", + description: "globe showing Europe-Africa", + version: "0.7", + keywords: ["Africa", "earth", "Europe", "globe", "globe showing Europe-Africa", "world"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🌎", + description: "globe showing Americas", + version: "0.7", + keywords: ["Americas", "earth", "globe", "globe showing Americas", "world"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🌏", + description: "globe showing Asia-Australia", + version: "0.6", + keywords: ["Asia", "Australia", "earth", "globe", "globe showing Asia-Australia", "world"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🌐", + description: "globe with meridians", + version: "1.0", + keywords: ["earth", "globe", "globe with meridians", "meridians", "world"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🗺️", + description: "world map", + version: "0.7", + keywords: ["map", "world"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🗾", + description: "map of Japan", + version: "0.6", + keywords: ["Japan", "map", "map of Japan"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🧭", + description: "compass", + version: "11.0", + keywords: ["compass", "magnetic", "navigation", "orienteering"], + category: "travel-places", + group: "travel-places", + subgroup: "place-map" + }, { + emoji: "🏔️", + description: "snow-capped mountain", + version: "0.7", + keywords: ["cold", "mountain", "snow", "snow-capped mountain"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "⛰️", + description: "mountain", + version: "0.7", + keywords: ["mountain"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🌋", + description: "volcano", + version: "0.6", + keywords: ["eruption", "mountain", "volcano"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🗻", + description: "mount fuji", + version: "0.6", + keywords: ["fuji", "mount fuji", "mountain"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏕️", + description: "camping", + version: "0.7", + keywords: ["camping"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏖️", + description: "beach with umbrella", + version: "0.7", + keywords: ["beach", "beach with umbrella", "umbrella"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏜️", + description: "desert", + version: "0.7", + keywords: ["desert"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏝️", + description: "desert island", + version: "0.7", + keywords: ["desert", "island"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏞️", + description: "national park", + version: "0.7", + keywords: ["national park", "park"], + category: "travel-places", + group: "travel-places", + subgroup: "place-geographic" + }, { + emoji: "🏟️", + description: "stadium", + version: "0.7", + keywords: ["stadium"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏛️", + description: "classical building", + version: "0.7", + keywords: ["classical", "classical building"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏗️", + description: "building construction", + version: "0.7", + keywords: ["building construction", "construction"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🧱", + description: "brick", + version: "11.0", + keywords: ["brick", "bricks", "clay", "mortar", "wall"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🪨", + description: "rock", + version: "13.0", + keywords: ["boulder", "heavy", "rock", "solid", "stone"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🪵", + description: "wood", + version: "13.0", + keywords: ["log", "lumber", "timber", "wood"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🛖", + description: "hut", + version: "13.0", + keywords: ["house", "hut", "roundhouse", "yurt"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏘️", + description: "houses", + version: "0.7", + keywords: ["houses"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏚️", + description: "derelict house", + version: "0.7", + keywords: ["derelict", "house"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏠", + description: "house", + version: "0.6", + keywords: ["home", "house"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏡", + description: "house with garden", + version: "0.6", + keywords: ["garden", "home", "house", "house with garden"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏢", + description: "office building", + version: "0.6", + keywords: ["building", "office building"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏣", + description: "Japanese post office", + version: "0.6", + keywords: ["Japanese", "Japanese post office", "post"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏤", + description: "post office", + version: "1.0", + keywords: ["European", "post", "post office"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏥", + description: "hospital", + version: "0.6", + keywords: ["doctor", "hospital", "medicine"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏦", + description: "bank", + version: "0.6", + keywords: ["bank", "building"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏨", + description: "hotel", + version: "0.6", + keywords: ["building", "hotel"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏩", + description: "love hotel", + version: "0.6", + keywords: ["hotel", "love"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏪", + description: "convenience store", + version: "0.6", + keywords: ["convenience", "store"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏫", + description: "school", + version: "0.6", + keywords: ["building", "school"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏬", + description: "department store", + version: "0.6", + keywords: ["department", "store"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏭", + description: "factory", + version: "0.6", + keywords: ["building", "factory"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏯", + description: "Japanese castle", + version: "0.6", + keywords: ["castle", "Japanese"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🏰", + description: "castle", + version: "0.6", + keywords: ["castle", "European"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "💒", + description: "wedding", + version: "0.6", + keywords: ["chapel", "romance", "wedding"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🗼", + description: "Tokyo tower", + version: "0.6", + keywords: ["Tokyo", "tower"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "🗽", + description: "Statue of Liberty", + version: "0.6", + keywords: ["liberty", "statue", "Statue of Liberty"], + category: "travel-places", + group: "travel-places", + subgroup: "place-building" + }, { + emoji: "⛪", + description: "church", + version: "0.6", + keywords: ["Christian", "church", "cross", "religion"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "🕌", + description: "mosque", + version: "1.0", + keywords: ["islam", "mosque", "Muslim", "religion"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "🛕", + description: "hindu temple", + version: "12.0", + keywords: ["hindu", "temple"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "🕍", + description: "synagogue", + version: "1.0", + keywords: ["Jew", "Jewish", "religion", "synagogue", "temple"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "⛩️", + description: "shinto shrine", + version: "0.7", + keywords: ["religion", "shinto", "shrine"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "🕋", + description: "kaaba", + version: "1.0", + keywords: ["islam", "kaaba", "Muslim", "religion"], + category: "travel-places", + group: "travel-places", + subgroup: "place-religious" + }, { + emoji: "⛲", + description: "fountain", + version: "0.6", + keywords: ["fountain"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "⛺", + description: "tent", + version: "0.6", + keywords: ["camping", "tent"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌁", + description: "foggy", + version: "0.6", + keywords: ["fog", "foggy"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌃", + description: "night with stars", + version: "0.6", + keywords: ["night", "night with stars", "star"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🏙️", + description: "cityscape", + version: "0.7", + keywords: ["city", "cityscape"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌄", + description: "sunrise over mountains", + version: "0.6", + keywords: ["morning", "mountain", "sun", "sunrise", "sunrise over mountains"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌅", + description: "sunrise", + version: "0.6", + keywords: ["morning", "sun", "sunrise"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌆", + description: "cityscape at dusk", + version: "0.6", + keywords: ["city", "cityscape at dusk", "dusk", "evening", "landscape", "sunset"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌇", + description: "sunset", + version: "0.6", + keywords: ["dusk", "sun", "sunset"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🌉", + description: "bridge at night", + version: "0.6", + keywords: ["bridge", "bridge at night", "night"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "♨️", + description: "hot springs", + version: "0.6", + keywords: ["hot", "hotsprings", "springs", "steaming"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🎠", + description: "carousel horse", + version: "0.6", + keywords: ["carousel", "horse"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🛝", + description: "playground slide", + version: "14.0", + keywords: ["amusement park", "play", "playground slide"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🎡", + description: "ferris wheel", + version: "0.6", + keywords: ["amusement park", "ferris", "wheel"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🎢", + description: "roller coaster", + version: "0.6", + keywords: ["amusement park", "coaster", "roller"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "💈", + description: "barber pole", + version: "0.6", + keywords: ["barber", "haircut", "pole"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🎪", + description: "circus tent", + version: "0.6", + keywords: ["circus", "tent"], + category: "travel-places", + group: "travel-places", + subgroup: "place-other" + }, { + emoji: "🚂", + description: "locomotive", + version: "1.0", + keywords: ["engine", "locomotive", "railway", "steam", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚃", + description: "railway car", + version: "0.6", + keywords: ["car", "electric", "railway", "train", "tram", "trolleybus"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚄", + description: "high-speed train", + version: "0.6", + keywords: ["high-speed train", "railway", "shinkansen", "speed", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚅", + description: "bullet train", + version: "0.6", + keywords: ["bullet", "railway", "shinkansen", "speed", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚆", + description: "train", + version: "1.0", + keywords: ["railway", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚇", + description: "metro", + version: "0.6", + keywords: ["metro", "subway"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚈", + description: "light rail", + version: "1.0", + keywords: ["light rail", "railway"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚉", + description: "station", + version: "0.6", + keywords: ["railway", "station", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚊", + description: "tram", + version: "1.0", + keywords: ["tram", "trolleybus"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚝", + description: "monorail", + version: "1.0", + keywords: ["monorail", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚞", + description: "mountain railway", + version: "1.0", + keywords: ["car", "mountain", "railway"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚋", + description: "tram car", + version: "1.0", + keywords: ["car", "tram", "trolleybus"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚌", + description: "bus", + version: "0.6", + keywords: ["bus", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚍", + description: "oncoming bus", + version: "0.7", + keywords: ["bus", "oncoming"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚎", + description: "trolleybus", + version: "1.0", + keywords: ["bus", "tram", "trolley", "trolleybus"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚐", + description: "minibus", + version: "1.0", + keywords: ["bus", "minibus"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚑", + description: "ambulance", + version: "0.6", + keywords: ["ambulance", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚒", + description: "fire engine", + version: "0.6", + keywords: ["engine", "fire", "truck"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚓", + description: "police car", + version: "0.6", + keywords: ["car", "patrol", "police"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚔", + description: "oncoming police car", + version: "0.7", + keywords: ["car", "oncoming", "police"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚕", + description: "taxi", + version: "0.6", + keywords: ["taxi", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚖", + description: "oncoming taxi", + version: "1.0", + keywords: ["oncoming", "taxi"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚗", + description: "automobile", + version: "0.6", + keywords: ["automobile", "car"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚘", + description: "oncoming automobile", + version: "0.7", + keywords: ["automobile", "car", "oncoming"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚙", + description: "sport utility vehicle", + version: "0.6", + keywords: ["recreational", "sport utility", "sport utility vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛻", + description: "pickup truck", + version: "13.0", + keywords: ["pick-up", "pickup", "truck"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚚", + description: "delivery truck", + version: "0.6", + keywords: ["delivery", "truck"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚛", + description: "articulated lorry", + version: "1.0", + keywords: ["articulated lorry", "lorry", "semi", "truck"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚜", + description: "tractor", + version: "1.0", + keywords: ["tractor", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🏎️", + description: "racing car", + version: "0.7", + keywords: ["car", "racing"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🏍️", + description: "motorcycle", + version: "0.7", + keywords: ["motorcycle", "racing"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛵", + description: "motor scooter", + version: "3.0", + keywords: ["motor", "scooter"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🦽", + description: "manual wheelchair", + version: "12.0", + keywords: ["accessibility", "manual wheelchair"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🦼", + description: "motorized wheelchair", + version: "12.0", + keywords: ["accessibility", "motorized wheelchair"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛺", + description: "auto rickshaw", + version: "12.0", + keywords: ["auto rickshaw", "tuk tuk"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚲", + description: "bicycle", + version: "0.6", + keywords: ["bicycle", "bike"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛴", + description: "kick scooter", + version: "3.0", + keywords: ["kick", "scooter"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛹", + description: "skateboard", + version: "11.0", + keywords: ["board", "skateboard"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛼", + description: "roller skate", + version: "13.0", + keywords: ["roller", "skate"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚏", + description: "bus stop", + version: "0.6", + keywords: ["bus", "stop"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛣️", + description: "motorway", + version: "0.7", + keywords: ["highway", "motorway", "road"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛤️", + description: "railway track", + version: "0.7", + keywords: ["railway", "railway track", "train"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛢️", + description: "oil drum", + version: "0.7", + keywords: ["drum", "oil"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "⛽", + description: "fuel pump", + version: "0.6", + keywords: ["diesel", "fuel", "fuelpump", "gas", "pump", "station"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛞", + description: "wheel", + version: "14.0", + keywords: ["circle", "tire", "turn", "wheel"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚨", + description: "police car light", + version: "0.6", + keywords: ["beacon", "car", "light", "police", "revolving"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚥", + description: "horizontal traffic light", + version: "0.6", + keywords: ["horizontal traffic light", "light", "signal", "traffic"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚦", + description: "vertical traffic light", + version: "1.0", + keywords: ["light", "signal", "traffic", "vertical traffic light"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🛑", + description: "stop sign", + version: "3.0", + keywords: ["octagonal", "sign", "stop"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "🚧", + description: "construction", + version: "0.6", + keywords: ["barrier", "construction"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-ground" + }, { + emoji: "⚓", + description: "anchor", + version: "0.6", + keywords: ["anchor", "ship", "tool"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🛟", + description: "ring buoy", + version: "14.0", + keywords: ["float", "life preserver", "life saver", "rescue", "ring buoy", "safety"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "⛵", + description: "sailboat", + version: "0.6", + keywords: ["boat", "resort", "sailboat", "sea", "yacht"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🛶", + description: "canoe", + version: "3.0", + keywords: ["boat", "canoe"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🚤", + description: "speedboat", + version: "0.6", + keywords: ["boat", "speedboat"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🛳️", + description: "passenger ship", + version: "0.7", + keywords: ["passenger", "ship"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "⛴️", + description: "ferry", + version: "0.7", + keywords: ["boat", "ferry", "passenger"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🛥️", + description: "motor boat", + version: "0.7", + keywords: ["boat", "motor boat", "motorboat"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "🚢", + description: "ship", + version: "0.6", + keywords: ["boat", "passenger", "ship"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-water" + }, { + emoji: "✈️", + description: "airplane", + version: "0.6", + keywords: ["aeroplane", "airplane"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛩️", + description: "small airplane", + version: "0.7", + keywords: ["aeroplane", "airplane", "small airplane"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛫", + description: "airplane departure", + version: "1.0", + keywords: ["aeroplane", "airplane", "check-in", "departure", "departures"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛬", + description: "airplane arrival", + version: "1.0", + keywords: ["aeroplane", "airplane", "airplane arrival", "arrivals", "arriving", "landing"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🪂", + description: "parachute", + version: "12.0", + keywords: ["hang-glide", "parachute", "parasail", "skydive"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "💺", + description: "seat", + version: "0.6", + keywords: ["chair", "seat"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🚁", + description: "helicopter", + version: "1.0", + keywords: ["helicopter", "vehicle"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🚟", + description: "suspension railway", + version: "1.0", + keywords: ["railway", "suspension"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🚠", + description: "mountain cableway", + version: "1.0", + keywords: ["cable", "gondola", "mountain", "mountain cableway"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🚡", + description: "aerial tramway", + version: "1.0", + keywords: ["aerial", "cable", "car", "gondola", "tramway"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛰️", + description: "satellite", + version: "0.7", + keywords: ["satellite", "space"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🚀", + description: "rocket", + version: "0.6", + keywords: ["rocket", "space"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛸", + description: "flying saucer", + version: "5.0", + keywords: ["flying saucer", "UFO"], + category: "travel-places", + group: "travel-places", + subgroup: "transport-air" + }, { + emoji: "🛎️", + description: "bellhop bell", + version: "0.7", + keywords: ["bell", "bellhop", "hotel"], + category: "travel-places", + group: "travel-places", + subgroup: "hotel" + }, { + emoji: "🧳", + description: "luggage", + version: "11.0", + keywords: ["luggage", "packing", "travel"], + category: "travel-places", + group: "travel-places", + subgroup: "hotel" + }, { + emoji: "⌛", + description: "hourglass done", + version: "0.6", + keywords: ["hourglass done", "sand", "timer"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "⏳", + description: "hourglass not done", + version: "0.6", + keywords: ["hourglass", "hourglass not done", "sand", "timer"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "⌚", + description: "watch", + version: "0.6", + keywords: ["clock", "watch"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "⏰", + description: "alarm clock", + version: "0.6", + keywords: ["alarm", "clock"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "⏱️", + description: "stopwatch", + version: "1.0", + keywords: ["clock", "stopwatch"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "⏲️", + description: "timer clock", + version: "1.0", + keywords: ["clock", "timer"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕰️", + description: "mantelpiece clock", + version: "0.7", + keywords: ["clock", "mantelpiece clock"], + category: "objects", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕛", + description: "twelve o’clock", + version: "0.6", + keywords: ["00", "12", "12:00", "clock", "o’clock", "twelve"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕧", + description: "twelve-thirty", + version: "0.7", + keywords: ["12", "12:30", "clock", "thirty", "twelve", "twelve-thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕐", + description: "one o’clock", + version: "0.6", + keywords: ["00", "1", "1:00", "clock", "o’clock", "one"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕜", + description: "one-thirty", + version: "0.7", + keywords: ["1", "1:30", "clock", "one", "one-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕑", + description: "two o’clock", + version: "0.6", + keywords: ["00", "2", "2:00", "clock", "o’clock", "two"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕝", + description: "two-thirty", + version: "0.7", + keywords: ["2", "2:30", "clock", "thirty", "two", "two-thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕒", + description: "three o’clock", + version: "0.6", + keywords: ["00", "3", "3:00", "clock", "o’clock", "three"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕞", + description: "three-thirty", + version: "0.7", + keywords: ["3", "3:30", "clock", "thirty", "three", "three-thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕓", + description: "four o’clock", + version: "0.6", + keywords: ["00", "4", "4:00", "clock", "four", "o’clock"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕟", + description: "four-thirty", + version: "0.7", + keywords: ["4", "4:30", "clock", "four", "four-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕔", + description: "five o’clock", + version: "0.6", + keywords: ["00", "5", "5:00", "clock", "five", "o’clock"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕠", + description: "five-thirty", + version: "0.7", + keywords: ["5", "5:30", "clock", "five", "five-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕕", + description: "six o’clock", + version: "0.6", + keywords: ["00", "6", "6:00", "clock", "o’clock", "six"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕡", + description: "six-thirty", + version: "0.7", + keywords: ["6", "6:30", "clock", "six", "six-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕖", + description: "seven o’clock", + version: "0.6", + keywords: ["00", "7", "7:00", "clock", "o’clock", "seven"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕢", + description: "seven-thirty", + version: "0.7", + keywords: ["7", "7:30", "clock", "seven", "seven-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕗", + description: "eight o’clock", + version: "0.6", + keywords: ["00", "8", "8:00", "clock", "eight", "o’clock"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕣", + description: "eight-thirty", + version: "0.7", + keywords: ["8", "8:30", "clock", "eight", "eight-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕘", + description: "nine o’clock", + version: "0.6", + keywords: ["00", "9", "9:00", "clock", "nine", "o’clock"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕤", + description: "nine-thirty", + version: "0.7", + keywords: ["9", "9:30", "clock", "nine", "nine-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕙", + description: "ten o’clock", + version: "0.6", + keywords: ["00", "10", "10:00", "clock", "o’clock", "ten"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕥", + description: "ten-thirty", + version: "0.7", + keywords: ["10", "10:30", "clock", "ten", "ten-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕚", + description: "eleven o’clock", + version: "0.6", + keywords: ["00", "11", "11:00", "clock", "eleven", "o’clock"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🕦", + description: "eleven-thirty", + version: "0.7", + keywords: ["11", "11:30", "clock", "eleven", "eleven-thirty", "thirty"], + category: "symbols", + group: "travel-places", + subgroup: "time" + }, { + emoji: "🌑", + description: "new moon", + version: "0.6", + keywords: ["dark", "moon", "new moon"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌒", + description: "waxing crescent moon", + version: "1.0", + keywords: ["crescent", "moon", "waxing"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌓", + description: "first quarter moon", + version: "0.6", + keywords: ["first quarter moon", "moon", "quarter"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌔", + description: "waxing gibbous moon", + version: "0.6", + keywords: ["gibbous", "moon", "waxing"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌕", + description: "full moon", + version: "0.6", + keywords: ["full", "moon"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌖", + description: "waning gibbous moon", + version: "1.0", + keywords: ["gibbous", "moon", "waning"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌗", + description: "last quarter moon", + version: "1.0", + keywords: ["last quarter moon", "moon", "quarter"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌘", + description: "waning crescent moon", + version: "1.0", + keywords: ["crescent", "moon", "waning"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌙", + description: "crescent moon", + version: "0.6", + keywords: ["crescent", "moon"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌚", + description: "new moon face", + version: "1.0", + keywords: ["face", "moon", "new moon face"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌛", + description: "first quarter moon face", + version: "0.6", + keywords: ["face", "first quarter moon face", "moon", "quarter"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌜", + description: "last quarter moon face", + version: "0.7", + keywords: ["face", "last quarter moon face", "moon", "quarter"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌡️", + description: "thermometer", + version: "0.7", + keywords: ["thermometer", "weather"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☀️", + description: "sun", + version: "0.6", + keywords: ["bright", "rays", "sun", "sunny"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌝", + description: "full moon face", + version: "1.0", + keywords: ["bright", "face", "full", "moon"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌞", + description: "sun with face", + version: "1.0", + keywords: ["bright", "face", "sun", "sun with face"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🪐", + description: "ringed planet", + version: "12.0", + keywords: ["ringed planet", "saturn", "saturnine"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⭐", + description: "star", + version: "0.6", + keywords: ["star"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌟", + description: "glowing star", + version: "0.6", + keywords: ["glittery", "glow", "glowing star", "shining", "sparkle", "star"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌠", + description: "shooting star", + version: "0.6", + keywords: ["falling", "shooting", "star"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌌", + description: "milky way", + version: "0.6", + keywords: ["milky way", "space"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☁️", + description: "cloud", + version: "0.6", + keywords: ["cloud", "weather"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⛅", + description: "sun behind cloud", + version: "0.6", + keywords: ["cloud", "sun", "sun behind cloud"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⛈️", + description: "cloud with lightning and rain", + version: "0.7", + keywords: ["cloud", "cloud with lightning and rain", "rain", "thunder"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌤️", + description: "sun behind small cloud", + version: "0.7", + keywords: ["cloud", "sun", "sun behind small cloud"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌥️", + description: "sun behind large cloud", + version: "0.7", + keywords: ["cloud", "sun", "sun behind large cloud"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌦️", + description: "sun behind rain cloud", + version: "0.7", + keywords: ["cloud", "rain", "sun", "sun behind rain cloud"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌧️", + description: "cloud with rain", + version: "0.7", + keywords: ["cloud", "cloud with rain", "rain"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌨️", + description: "cloud with snow", + version: "0.7", + keywords: ["cloud", "cloud with snow", "cold", "snow"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌩️", + description: "cloud with lightning", + version: "0.7", + keywords: ["cloud", "cloud with lightning", "lightning"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌪️", + description: "tornado", + version: "0.7", + keywords: ["cloud", "tornado", "whirlwind"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌫️", + description: "fog", + version: "0.7", + keywords: ["cloud", "fog"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌬️", + description: "wind face", + version: "0.7", + keywords: ["blow", "cloud", "face", "wind"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌀", + description: "cyclone", + version: "0.6", + keywords: ["cyclone", "dizzy", "hurricane", "twister", "typhoon"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌈", + description: "rainbow", + version: "0.6", + keywords: ["rain", "rainbow"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌂", + description: "closed umbrella", + version: "0.6", + keywords: ["closed umbrella", "clothing", "rain", "umbrella"], + category: "objects", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☂️", + description: "umbrella", + version: "0.7", + keywords: ["clothing", "rain", "umbrella"], + category: "objects", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☔", + description: "umbrella with rain drops", + version: "0.6", + keywords: ["clothing", "drop", "rain", "umbrella", "umbrella with rain drops"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⛱️", + description: "umbrella on ground", + version: "0.7", + keywords: ["rain", "sun", "umbrella", "umbrella on ground"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⚡", + description: "high voltage", + version: "0.6", + keywords: ["danger", "electric", "high voltage", "lightning", "voltage", "zap"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "❄️", + description: "snowflake", + version: "0.6", + keywords: ["cold", "snow", "snowflake"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☃️", + description: "snowman", + version: "0.7", + keywords: ["cold", "snow", "snowman"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "⛄", + description: "snowman without snow", + version: "0.6", + keywords: ["cold", "snow", "snowman", "snowman without snow"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "☄️", + description: "comet", + version: "1.0", + keywords: ["comet", "space"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🔥", + description: "fire", + version: "0.6", + keywords: ["fire", "flame", "tool"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "💧", + description: "droplet", + version: "0.6", + keywords: ["cold", "comic", "drop", "droplet", "sweat"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🌊", + description: "water wave", + version: "0.6", + keywords: ["ocean", "water", "wave"], + category: "animals-nature", + group: "travel-places", + subgroup: "sky-weather" + }, { + emoji: "🎃", + description: "jack-o-lantern", + version: "0.6", + keywords: ["celebration", "halloween", "jack", "jack-o-lantern", "lantern"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎄", + description: "Christmas tree", + version: "0.6", + keywords: ["celebration", "Christmas", "tree"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎆", + description: "fireworks", + version: "0.6", + keywords: ["celebration", "fireworks"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎇", + description: "sparkler", + version: "0.6", + keywords: ["celebration", "fireworks", "sparkle", "sparkler"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🧨", + description: "firecracker", + version: "11.0", + keywords: ["dynamite", "explosive", "firecracker", "fireworks"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "✨", + description: "sparkles", + version: "0.6", + keywords: ["*", "sparkle", "sparkles", "star"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎈", + description: "balloon", + version: "0.6", + keywords: ["balloon", "celebration"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎉", + description: "party popper", + version: "0.6", + keywords: ["celebration", "party", "popper", "tada"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎊", + description: "confetti ball", + version: "0.6", + keywords: ["ball", "celebration", "confetti"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎋", + description: "tanabata tree", + version: "0.6", + keywords: ["banner", "celebration", "Japanese", "tanabata tree", "tree"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎍", + description: "pine decoration", + version: "0.6", + keywords: ["bamboo", "celebration", "Japanese", "pine", "pine decoration"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎎", + description: "Japanese dolls", + version: "0.6", + keywords: ["celebration", "doll", "festival", "Japanese", "Japanese dolls"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎏", + description: "carp streamer", + version: "0.6", + keywords: ["carp", "celebration", "streamer"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎐", + description: "wind chime", + version: "0.6", + keywords: ["bell", "celebration", "chime", "wind"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎑", + description: "moon viewing ceremony", + version: "0.6", + keywords: ["celebration", "ceremony", "moon", "moon viewing ceremony"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🧧", + description: "red envelope", + version: "11.0", + keywords: ["gift", "good luck", "hóngbāo", "lai see", "money", "red envelope"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎀", + description: "ribbon", + version: "0.6", + keywords: ["celebration", "ribbon"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎁", + description: "wrapped gift", + version: "0.6", + keywords: ["box", "celebration", "gift", "present", "wrapped"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎗️", + description: "reminder ribbon", + version: "0.7", + keywords: ["celebration", "reminder", "ribbon"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎟️", + description: "admission tickets", + version: "0.7", + keywords: ["admission", "admission tickets", "ticket"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎫", + description: "ticket", + version: "0.6", + keywords: ["admission", "ticket"], + category: "activities-events", + group: "activities", + subgroup: "event" + }, { + emoji: "🎖️", + description: "military medal", + version: "0.7", + keywords: ["celebration", "medal", "military"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "🏆", + description: "trophy", + version: "0.6", + keywords: ["prize", "trophy"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "🏅", + description: "sports medal", + version: "1.0", + keywords: ["medal", "sports medal"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "🥇", + description: "1st place medal", + version: "3.0", + keywords: ["1st place medal", "first", "gold", "medal"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "🥈", + description: "2nd place medal", + version: "3.0", + keywords: ["2nd place medal", "medal", "second", "silver"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "🥉", + description: "3rd place medal", + version: "3.0", + keywords: ["3rd place medal", "bronze", "medal", "third"], + category: "activities-events", + group: "activities", + subgroup: "award-medal" + }, { + emoji: "⚽", + description: "soccer ball", + version: "0.6", + keywords: ["ball", "football", "soccer"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "⚾", + description: "baseball", + version: "0.6", + keywords: ["ball", "baseball"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥎", + description: "softball", + version: "11.0", + keywords: ["ball", "glove", "softball", "underarm"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏀", + description: "basketball", + version: "0.6", + keywords: ["ball", "basketball", "hoop"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏐", + description: "volleyball", + version: "1.0", + keywords: ["ball", "game", "volleyball"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏈", + description: "american football", + version: "0.6", + keywords: ["american", "ball", "football"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏉", + description: "rugby football", + version: "1.0", + keywords: ["ball", "football", "rugby"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎾", + description: "tennis", + version: "0.6", + keywords: ["ball", "racquet", "tennis"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥏", + description: "flying disc", + version: "11.0", + keywords: ["flying disc", "ultimate"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎳", + description: "bowling", + version: "0.6", + keywords: ["ball", "bowling", "game"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏏", + description: "cricket game", + version: "1.0", + keywords: ["ball", "bat", "cricket game", "game"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏑", + description: "field hockey", + version: "1.0", + keywords: ["ball", "field", "game", "hockey", "stick"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏒", + description: "ice hockey", + version: "1.0", + keywords: ["game", "hockey", "ice", "puck", "stick"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥍", + description: "lacrosse", + version: "11.0", + keywords: ["ball", "goal", "lacrosse", "stick"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏓", + description: "ping pong", + version: "1.0", + keywords: ["ball", "bat", "game", "paddle", "ping pong", "table tennis"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🏸", + description: "badminton", + version: "1.0", + keywords: ["badminton", "birdie", "game", "racquet", "shuttlecock"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥊", + description: "boxing glove", + version: "3.0", + keywords: ["boxing", "glove"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥋", + description: "martial arts uniform", + version: "3.0", + keywords: ["judo", "karate", "martial arts", "martial arts uniform", "taekwondo", "uniform"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥅", + description: "goal net", + version: "3.0", + keywords: ["goal", "net"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "⛳", + description: "flag in hole", + version: "0.6", + keywords: ["flag in hole", "golf", "hole"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "⛸️", + description: "ice skate", + version: "0.7", + keywords: ["ice", "skate"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎣", + description: "fishing pole", + version: "0.6", + keywords: ["fish", "fishing pole", "pole"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🤿", + description: "diving mask", + version: "12.0", + keywords: ["diving", "diving mask", "scuba", "snorkeling"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎽", + description: "running shirt", + version: "0.6", + keywords: ["athletics", "running", "sash", "shirt"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎿", + description: "skis", + version: "0.6", + keywords: ["ski", "skis", "snow"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🛷", + description: "sled", + version: "5.0", + keywords: ["sled", "sledge", "sleigh"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🥌", + description: "curling stone", + version: "5.0", + keywords: ["curling stone", "game", "rock"], + category: "activities-events", + group: "activities", + subgroup: "sport" + }, { + emoji: "🎯", + description: "bullseye", + version: "0.6", + keywords: ["bullseye", "dart", "direct hit", "game", "hit", "target"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪀", + description: "yo-yo", + version: "12.0", + keywords: ["fluctuate", "toy", "yo-yo"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪁", + description: "kite", + version: "12.0", + keywords: ["fly", "kite", "soar"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🔫", + description: "water pistol", + version: "0.6", + keywords: ["gun", "handgun", "pistol", "revolver", "tool", "water", "weapon"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎱", + description: "pool 8 ball", + version: "0.6", + keywords: ["8", "ball", "billiard", "eight", "game", "pool 8 ball"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🔮", + description: "crystal ball", + version: "0.6", + keywords: ["ball", "crystal", "fairy tale", "fantasy", "fortune", "tool"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪄", + description: "magic wand", + version: "13.0", + keywords: ["magic", "magic wand", "witch", "wizard"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎮", + description: "video game", + version: "0.6", + keywords: ["controller", "game", "video game"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🕹️", + description: "joystick", + version: "0.7", + keywords: ["game", "joystick", "video game"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎰", + description: "slot machine", + version: "0.6", + keywords: ["game", "slot", "slot machine"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎲", + description: "game die", + version: "0.6", + keywords: ["dice", "die", "game"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🧩", + description: "puzzle piece", + version: "11.0", + keywords: ["clue", "interlocking", "jigsaw", "piece", "puzzle"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🧸", + description: "teddy bear", + version: "11.0", + keywords: ["plaything", "plush", "stuffed", "teddy bear", "toy"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪅", + description: "piñata", + version: "13.0", + keywords: ["celebration", "party", "piñata"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪩", + description: "mirror ball", + version: "14.0", + keywords: ["dance", "disco", "glitter", "mirror ball", "party"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🪆", + description: "nesting dolls", + version: "13.0", + keywords: ["doll", "nesting", "nesting dolls", "russia"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "♠️", + description: "spade suit", + version: "0.6", + keywords: ["card", "game", "spade suit"], + category: "symbols", + group: "activities", + subgroup: "game" + }, { + emoji: "♥️", + description: "heart suit", + version: "0.6", + keywords: ["card", "game", "heart suit"], + category: "symbols", + group: "activities", + subgroup: "game" + }, { + emoji: "♦️", + description: "diamond suit", + version: "0.6", + keywords: ["card", "diamond suit", "game"], + category: "symbols", + group: "activities", + subgroup: "game" + }, { + emoji: "♣️", + description: "club suit", + version: "0.6", + keywords: ["card", "club suit", "game"], + category: "symbols", + group: "activities", + subgroup: "game" + }, { + emoji: "♟️", + description: "chess pawn", + version: "11.0", + keywords: ["chess", "chess pawn", "dupe", "expendable"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🃏", + description: "joker", + version: "0.6", + keywords: ["card", "game", "joker", "wildcard"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🀄", + description: "mahjong red dragon", + version: "0.6", + keywords: ["game", "mahjong", "mahjong red dragon", "red"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎴", + description: "flower playing cards", + version: "0.6", + keywords: ["card", "flower", "flower playing cards", "game", "Japanese", "playing"], + category: "activities-events", + group: "activities", + subgroup: "game" + }, { + emoji: "🎭", + description: "performing arts", + version: "0.6", + keywords: ["art", "mask", "performing", "performing arts", "theater", "theatre"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🖼️", + description: "framed picture", + version: "0.7", + keywords: ["art", "frame", "framed picture", "museum", "painting", "picture"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🎨", + description: "artist palette", + version: "0.6", + keywords: ["art", "artist palette", "museum", "painting", "palette"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🧵", + description: "thread", + version: "11.0", + keywords: ["needle", "sewing", "spool", "string", "thread"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🪡", + description: "sewing needle", + version: "13.0", + keywords: ["embroidery", "needle", "sewing", "stitches", "sutures", "tailoring"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🧶", + description: "yarn", + version: "11.0", + keywords: ["ball", "crochet", "knit", "yarn"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "🪢", + description: "knot", + version: "13.0", + keywords: ["knot", "rope", "tangled", "tie", "twine", "twist"], + category: "activities-events", + group: "activities", + subgroup: "arts-crafts" + }, { + emoji: "👓", + description: "glasses", + version: "0.6", + keywords: ["clothing", "eye", "eyeglasses", "eyewear", "glasses"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🕶️", + description: "sunglasses", + version: "0.7", + keywords: ["dark", "eye", "eyewear", "glasses", "sunglasses"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🥽", + description: "goggles", + version: "11.0", + keywords: ["eye protection", "goggles", "swimming", "welding"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🥼", + description: "lab coat", + version: "11.0", + keywords: ["doctor", "experiment", "lab coat", "scientist"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🦺", + description: "safety vest", + version: "12.0", + keywords: ["emergency", "safety", "vest"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👔", + description: "necktie", + version: "0.6", + keywords: ["clothing", "necktie", "tie"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👕", + description: "t-shirt", + version: "0.6", + keywords: ["clothing", "shirt", "t-shirt", "tshirt"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👖", + description: "jeans", + version: "0.6", + keywords: ["clothing", "jeans", "pants", "trousers"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🧣", + description: "scarf", + version: "5.0", + keywords: ["neck", "scarf"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🧤", + description: "gloves", + version: "5.0", + keywords: ["gloves", "hand"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🧥", + description: "coat", + version: "5.0", + keywords: ["coat", "jacket"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🧦", + description: "socks", + version: "5.0", + keywords: ["socks", "stocking"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👗", + description: "dress", + version: "0.6", + keywords: ["clothing", "dress"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👘", + description: "kimono", + version: "0.6", + keywords: ["clothing", "kimono"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🥻", + description: "sari", + version: "12.0", + keywords: ["clothing", "dress", "sari"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🩱", + description: "one-piece swimsuit", + version: "12.0", + keywords: ["bathing suit", "one-piece swimsuit"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🩲", + description: "briefs", + version: "12.0", + keywords: ["bathing suit", "briefs", "one-piece", "swimsuit", "underwear"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🩳", + description: "shorts", + version: "12.0", + keywords: ["bathing suit", "pants", "shorts", "underwear"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👙", + description: "bikini", + version: "0.6", + keywords: ["bikini", "clothing", "swim"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👚", + description: "woman’s clothes", + version: "0.6", + keywords: ["clothing", "woman", "woman’s clothes"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🪭", + description: "folding hand fan", + version: "15.0", + keywords: ["cooling", "dance", "fan", "flutter", "folding hand fan", "hot", "shy"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👛", + description: "purse", + version: "0.6", + keywords: ["clothing", "coin", "purse"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👜", + description: "handbag", + version: "0.6", + keywords: ["bag", "clothing", "handbag", "purse"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👝", + description: "clutch bag", + version: "0.6", + keywords: ["bag", "clothing", "clutch bag", "pouch"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🛍️", + description: "shopping bags", + version: "0.7", + keywords: ["bag", "hotel", "shopping", "shopping bags"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🎒", + description: "backpack", + version: "0.6", + keywords: ["backpack", "bag", "rucksack", "satchel", "school"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🩴", + description: "thong sandal", + version: "13.0", + keywords: ["beach sandals", "sandals", "thong sandal", "thong sandals", "thongs", "zōri"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👞", + description: "man’s shoe", + version: "0.6", + keywords: ["clothing", "man", "man’s shoe", "shoe"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👟", + description: "running shoe", + version: "0.6", + keywords: ["athletic", "clothing", "running shoe", "shoe", "sneaker"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🥾", + description: "hiking boot", + version: "11.0", + keywords: ["backpacking", "boot", "camping", "hiking"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🥿", + description: "flat shoe", + version: "11.0", + keywords: ["ballet flat", "flat shoe", "slip-on", "slipper"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👠", + description: "high-heeled shoe", + version: "0.6", + keywords: ["clothing", "heel", "high-heeled shoe", "shoe", "woman"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👡", + description: "woman’s sandal", + version: "0.6", + keywords: ["clothing", "sandal", "shoe", "woman", "woman’s sandal"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🩰", + description: "ballet shoes", + version: "12.0", + keywords: ["ballet", "ballet shoes", "dance"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👢", + description: "woman’s boot", + version: "0.6", + keywords: ["boot", "clothing", "shoe", "woman", "woman’s boot"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🪮", + description: "hair pick", + version: "15.0", + keywords: ["Afro", "comb", "hair", "pick"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👑", + description: "crown", + version: "0.6", + keywords: ["clothing", "crown", "king", "queen"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "👒", + description: "woman’s hat", + version: "0.6", + keywords: ["clothing", "hat", "woman", "woman’s hat"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🎩", + description: "top hat", + version: "0.6", + keywords: ["clothing", "hat", "top", "tophat"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🎓", + description: "graduation cap", + version: "0.6", + keywords: ["cap", "celebration", "clothing", "graduation", "hat"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🧢", + description: "billed cap", + version: "5.0", + keywords: ["baseball cap", "billed cap"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🪖", + description: "military helmet", + version: "13.0", + keywords: ["army", "helmet", "military", "soldier", "warrior"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "⛑️", + description: "rescue worker’s helmet", + version: "0.7", + keywords: ["aid", "cross", "face", "hat", "helmet", "rescue worker’s helmet"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "📿", + description: "prayer beads", + version: "1.0", + keywords: ["beads", "clothing", "necklace", "prayer", "religion"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "💄", + description: "lipstick", + version: "0.6", + keywords: ["cosmetics", "lipstick", "makeup"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "💍", + description: "ring", + version: "0.6", + keywords: ["diamond", "ring"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "💎", + description: "gem stone", + version: "0.6", + keywords: ["diamond", "gem", "gem stone", "jewel"], + category: "objects", + group: "objects", + subgroup: "clothing" + }, { + emoji: "🔇", + description: "muted speaker", + version: "1.0", + keywords: ["mute", "muted speaker", "quiet", "silent", "speaker"], + category: "symbols", + group: "objects", + subgroup: "sound" + }, { + emoji: "🔈", + description: "speaker low volume", + version: "0.7", + keywords: ["soft", "speaker low volume"], + category: "symbols", + group: "objects", + subgroup: "sound" + }, { + emoji: "🔉", + description: "speaker medium volume", + version: "1.0", + keywords: ["medium", "speaker medium volume"], + category: "symbols", + group: "objects", + subgroup: "sound" + }, { + emoji: "🔊", + description: "speaker high volume", + version: "0.6", + keywords: ["loud", "speaker high volume"], + category: "symbols", + group: "objects", + subgroup: "sound" + }, { + emoji: "📢", + description: "loudspeaker", + version: "0.6", + keywords: ["loud", "loudspeaker", "public address"], + category: "objects", + group: "objects", + subgroup: "sound" + }, { + emoji: "📣", + description: "megaphone", + version: "0.6", + keywords: ["cheering", "megaphone"], + category: "objects", + group: "objects", + subgroup: "sound" + }, { + emoji: "📯", + description: "postal horn", + version: "1.0", + keywords: ["horn", "post", "postal"], + category: "objects", + group: "objects", + subgroup: "sound" + }, { + emoji: "🔔", + description: "bell", + version: "0.6", + keywords: ["bell"], + category: "objects", + group: "objects", + subgroup: "sound" + }, { + emoji: "🔕", + description: "bell with slash", + version: "1.0", + keywords: ["bell", "bell with slash", "forbidden", "mute", "quiet", "silent"], + category: "symbols", + group: "objects", + subgroup: "sound" + }, { + emoji: "🎼", + description: "musical score", + version: "0.6", + keywords: ["music", "musical score", "score"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎵", + description: "musical note", + version: "0.6", + keywords: ["music", "musical note", "note"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎶", + description: "musical notes", + version: "0.6", + keywords: ["music", "musical notes", "note", "notes"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎙️", + description: "studio microphone", + version: "0.7", + keywords: ["mic", "microphone", "music", "studio"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎚️", + description: "level slider", + version: "0.7", + keywords: ["level", "music", "slider"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎛️", + description: "control knobs", + version: "0.7", + keywords: ["control", "knobs", "music"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎤", + description: "microphone", + version: "0.6", + keywords: ["karaoke", "mic", "microphone"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎧", + description: "headphone", + version: "0.6", + keywords: ["earbud", "headphone"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "📻", + description: "radio", + version: "0.6", + keywords: ["radio", "video"], + category: "activities-events", + group: "objects", + subgroup: "music" + }, { + emoji: "🎷", + description: "saxophone", + version: "0.6", + keywords: ["instrument", "music", "sax", "saxophone"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🪗", + description: "accordion", + version: "13.0", + keywords: ["accordion", "concertina", "squeeze box"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🎸", + description: "guitar", + version: "0.6", + keywords: ["guitar", "instrument", "music"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🎹", + description: "musical keyboard", + version: "0.6", + keywords: ["instrument", "keyboard", "music", "musical keyboard", "piano"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🎺", + description: "trumpet", + version: "0.6", + keywords: ["instrument", "music", "trumpet"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🎻", + description: "violin", + version: "0.6", + keywords: ["instrument", "music", "violin"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🪕", + description: "banjo", + version: "12.0", + keywords: ["banjo", "music", "stringed"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🥁", + description: "drum", + version: "3.0", + keywords: ["drum", "drumsticks", "music"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🪘", + description: "long drum", + version: "13.0", + keywords: ["beat", "conga", "drum", "long drum", "rhythm"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🪇", + description: "maracas", + version: "15.0", + keywords: ["instrument", "maracas", "music", "percussion", "rattle", "shake"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "🪈", + description: "flute", + version: "15.0", + keywords: ["fife", "flute", "music", "pipe", "recorder", "woodwind"], + category: "activities-events", + group: "objects", + subgroup: "musical-instrument" + }, { + emoji: "📱", + description: "mobile phone", + version: "0.6", + keywords: ["cell", "mobile", "phone", "telephone"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "📲", + description: "mobile phone with arrow", + version: "0.6", + keywords: ["arrow", "cell", "mobile", "mobile phone with arrow", "phone", "receive"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "☎️", + description: "telephone", + version: "0.6", + keywords: ["phone", "telephone"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "📞", + description: "telephone receiver", + version: "0.6", + keywords: ["phone", "receiver", "telephone"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "📟", + description: "pager", + version: "0.6", + keywords: ["pager"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "📠", + description: "fax machine", + version: "0.6", + keywords: ["fax", "fax machine"], + category: "objects", + group: "objects", + subgroup: "phone" + }, { + emoji: "🔋", + description: "battery", + version: "0.6", + keywords: ["battery"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🪫", + description: "low battery", + version: "14.0", + keywords: ["electronic", "low battery", "low energy"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🔌", + description: "electric plug", + version: "0.6", + keywords: ["electric", "electricity", "plug"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "💻", + description: "laptop", + version: "0.6", + keywords: ["computer", "laptop", "pc", "personal"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🖥️", + description: "desktop computer", + version: "0.7", + keywords: ["computer", "desktop"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🖨️", + description: "printer", + version: "0.7", + keywords: ["computer", "printer"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "⌨️", + description: "keyboard", + version: "1.0", + keywords: ["computer", "keyboard"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🖱️", + description: "computer mouse", + version: "0.7", + keywords: ["computer", "computer mouse"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🖲️", + description: "trackball", + version: "0.7", + keywords: ["computer", "trackball"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "💽", + description: "computer disk", + version: "0.6", + keywords: ["computer", "disk", "minidisk", "optical"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "💾", + description: "floppy disk", + version: "0.6", + keywords: ["computer", "disk", "floppy"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "💿", + description: "optical disk", + version: "0.6", + keywords: ["CD", "computer", "disk", "optical"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "📀", + description: "dvd", + version: "0.6", + keywords: ["Blu-ray", "computer", "disk", "dvd", "DVD", "optical"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🧮", + description: "abacus", + version: "11.0", + keywords: ["abacus", "calculation"], + category: "objects", + group: "objects", + subgroup: "computer" + }, { + emoji: "🎥", + description: "movie camera", + version: "0.6", + keywords: ["camera", "cinema", "movie"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🎞️", + description: "film frames", + version: "0.7", + keywords: ["cinema", "film", "frames", "movie"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📽️", + description: "film projector", + version: "0.7", + keywords: ["cinema", "film", "movie", "projector", "video"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🎬", + description: "clapper board", + version: "0.6", + keywords: ["clapper", "clapper board", "movie"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📺", + description: "television", + version: "0.6", + keywords: ["television", "tv", "video"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📷", + description: "camera", + version: "0.6", + keywords: ["camera", "video"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📸", + description: "camera with flash", + version: "1.0", + keywords: ["camera", "camera with flash", "flash", "video"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📹", + description: "video camera", + version: "0.6", + keywords: ["camera", "video"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📼", + description: "videocassette", + version: "0.6", + keywords: ["tape", "vhs", "video", "videocassette"], + category: "activities-events", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🔍", + description: "magnifying glass tilted left", + version: "0.6", + keywords: ["glass", "magnifying", "magnifying glass tilted left", "search", "tool"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🔎", + description: "magnifying glass tilted right", + version: "0.6", + keywords: ["glass", "magnifying", "magnifying glass tilted right", "search", "tool"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🕯️", + description: "candle", + version: "0.7", + keywords: ["candle", "light"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "💡", + description: "light bulb", + version: "0.6", + keywords: ["bulb", "comic", "electric", "idea", "light"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🔦", + description: "flashlight", + version: "0.6", + keywords: ["electric", "flashlight", "light", "tool", "torch"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🏮", + description: "red paper lantern", + version: "0.6", + keywords: ["bar", "lantern", "light", "red", "red paper lantern"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "🪔", + description: "diya lamp", + version: "12.0", + keywords: ["diya", "lamp", "oil"], + category: "objects", + group: "objects", + subgroup: "light-video" + }, { + emoji: "📔", + description: "notebook with decorative cover", + version: "0.6", + keywords: ["book", "cover", "decorated", "notebook", "notebook with decorative cover"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📕", + description: "closed book", + version: "0.6", + keywords: ["book", "closed"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📖", + description: "open book", + version: "0.6", + keywords: ["book", "open"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📗", + description: "green book", + version: "0.6", + keywords: ["book", "green"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📘", + description: "blue book", + version: "0.6", + keywords: ["blue", "book"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📙", + description: "orange book", + version: "0.6", + keywords: ["book", "orange"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📚", + description: "books", + version: "0.6", + keywords: ["book", "books"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📓", + description: "notebook", + version: "0.6", + keywords: ["notebook"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📒", + description: "ledger", + version: "0.6", + keywords: ["ledger", "notebook"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📃", + description: "page with curl", + version: "0.6", + keywords: ["curl", "document", "page", "page with curl"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📜", + description: "scroll", + version: "0.6", + keywords: ["paper", "scroll"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📄", + description: "page facing up", + version: "0.6", + keywords: ["document", "page", "page facing up"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📰", + description: "newspaper", + version: "0.6", + keywords: ["news", "newspaper", "paper"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "🗞️", + description: "rolled-up newspaper", + version: "0.7", + keywords: ["news", "newspaper", "paper", "rolled", "rolled-up newspaper"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "📑", + description: "bookmark tabs", + version: "0.6", + keywords: ["bookmark", "mark", "marker", "tabs"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "🔖", + description: "bookmark", + version: "0.6", + keywords: ["bookmark", "mark"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "🏷️", + description: "label", + version: "0.7", + keywords: ["label"], + category: "objects", + group: "objects", + subgroup: "book-paper" + }, { + emoji: "💰", + description: "money bag", + version: "0.6", + keywords: ["bag", "dollar", "money", "moneybag"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "🪙", + description: "coin", + version: "13.0", + keywords: ["coin", "gold", "metal", "money", "silver", "treasure"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💴", + description: "yen banknote", + version: "0.6", + keywords: ["banknote", "bill", "currency", "money", "note", "yen"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💵", + description: "dollar banknote", + version: "0.6", + keywords: ["banknote", "bill", "currency", "dollar", "money", "note"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💶", + description: "euro banknote", + version: "1.0", + keywords: ["banknote", "bill", "currency", "euro", "money", "note"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💷", + description: "pound banknote", + version: "1.0", + keywords: ["banknote", "bill", "currency", "money", "note", "pound"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💸", + description: "money with wings", + version: "0.6", + keywords: ["banknote", "bill", "fly", "money", "money with wings", "wings"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💳", + description: "credit card", + version: "0.6", + keywords: ["card", "credit", "money"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "🧾", + description: "receipt", + version: "11.0", + keywords: ["accounting", "bookkeeping", "evidence", "proof", "receipt"], + category: "objects", + group: "objects", + subgroup: "money" + }, { + emoji: "💹", + description: "chart increasing with yen", + version: "0.6", + keywords: ["chart", "chart increasing with yen", "graph", "growth", "money", "yen"], + category: "symbols", + group: "objects", + subgroup: "money" + }, { + emoji: "✉️", + description: "envelope", + version: "0.6", + keywords: ["email", "envelope", "letter"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📧", + description: "e-mail", + version: "0.6", + keywords: ["e-mail", "email", "letter", "mail"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📨", + description: "incoming envelope", + version: "0.6", + keywords: ["e-mail", "email", "envelope", "incoming", "letter", "receive"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📩", + description: "envelope with arrow", + version: "0.6", + keywords: ["arrow", "e-mail", "email", "envelope", "envelope with arrow", "outgoing"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📤", + description: "outbox tray", + version: "0.6", + keywords: ["box", "letter", "mail", "outbox", "sent", "tray"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📥", + description: "inbox tray", + version: "0.6", + keywords: ["box", "inbox", "letter", "mail", "receive", "tray"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📦", + description: "package", + version: "0.6", + keywords: ["box", "package", "parcel"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📫", + description: "closed mailbox with raised flag", + version: "0.6", + keywords: ["closed", "closed mailbox with raised flag", "mail", "mailbox", "postbox"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📪", + description: "closed mailbox with lowered flag", + version: "0.6", + keywords: ["closed", "closed mailbox with lowered flag", "lowered", "mail", "mailbox", "postbox"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📬", + description: "open mailbox with raised flag", + version: "0.7", + keywords: ["mail", "mailbox", "open", "open mailbox with raised flag", "postbox"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📭", + description: "open mailbox with lowered flag", + version: "0.7", + keywords: ["lowered", "mail", "mailbox", "open", "open mailbox with lowered flag", "postbox"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "📮", + description: "postbox", + version: "0.6", + keywords: ["mail", "mailbox", "postbox"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "🗳️", + description: "ballot box with ballot", + version: "0.7", + keywords: ["ballot", "ballot box with ballot", "box"], + category: "objects", + group: "objects", + subgroup: "mail" + }, { + emoji: "✏️", + description: "pencil", + version: "0.6", + keywords: ["pencil"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "✒️", + description: "black nib", + version: "0.6", + keywords: ["black nib", "nib", "pen"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "🖋️", + description: "fountain pen", + version: "0.7", + keywords: ["fountain", "pen"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "🖊️", + description: "pen", + version: "0.7", + keywords: ["ballpoint", "pen"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "🖌️", + description: "paintbrush", + version: "0.7", + keywords: ["paintbrush", "painting"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "🖍️", + description: "crayon", + version: "0.7", + keywords: ["crayon"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "📝", + description: "memo", + version: "0.6", + keywords: ["memo", "pencil"], + category: "objects", + group: "objects", + subgroup: "writing" + }, { + emoji: "💼", + description: "briefcase", + version: "0.6", + keywords: ["briefcase"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📁", + description: "file folder", + version: "0.6", + keywords: ["file", "folder"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📂", + description: "open file folder", + version: "0.6", + keywords: ["file", "folder", "open"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗂️", + description: "card index dividers", + version: "0.7", + keywords: ["card", "dividers", "index"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📅", + description: "calendar", + version: "0.6", + keywords: ["calendar", "date"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📆", + description: "tear-off calendar", + version: "0.6", + keywords: ["calendar", "tear-off calendar"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗒️", + description: "spiral notepad", + version: "0.7", + keywords: ["note", "pad", "spiral", "spiral notepad"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗓️", + description: "spiral calendar", + version: "0.7", + keywords: ["calendar", "pad", "spiral"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📇", + description: "card index", + version: "0.6", + keywords: ["card", "index", "rolodex"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📈", + description: "chart increasing", + version: "0.6", + keywords: ["chart", "chart increasing", "graph", "growth", "trend", "upward"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📉", + description: "chart decreasing", + version: "0.6", + keywords: ["chart", "chart decreasing", "down", "graph", "trend"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📊", + description: "bar chart", + version: "0.6", + keywords: ["bar", "chart", "graph"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📋", + description: "clipboard", + version: "0.6", + keywords: ["clipboard"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📌", + description: "pushpin", + version: "0.6", + keywords: ["pin", "pushpin"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📍", + description: "round pushpin", + version: "0.6", + keywords: ["pin", "pushpin", "round pushpin"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📎", + description: "paperclip", + version: "0.6", + keywords: ["paperclip"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🖇️", + description: "linked paperclips", + version: "0.7", + keywords: ["link", "linked paperclips", "paperclip"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📏", + description: "straight ruler", + version: "0.6", + keywords: ["ruler", "straight edge", "straight ruler"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "📐", + description: "triangular ruler", + version: "0.6", + keywords: ["ruler", "set", "triangle", "triangular ruler"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "✂️", + description: "scissors", + version: "0.6", + keywords: ["cutting", "scissors", "tool"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗃️", + description: "card file box", + version: "0.7", + keywords: ["box", "card", "file"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗄️", + description: "file cabinet", + version: "0.7", + keywords: ["cabinet", "file", "filing"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🗑️", + description: "wastebasket", + version: "0.7", + keywords: ["wastebasket"], + category: "objects", + group: "objects", + subgroup: "office" + }, { + emoji: "🔒", + description: "locked", + version: "0.6", + keywords: ["closed", "locked"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🔓", + description: "unlocked", + version: "0.6", + keywords: ["lock", "open", "unlock", "unlocked"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🔏", + description: "locked with pen", + version: "0.6", + keywords: ["ink", "lock", "locked with pen", "nib", "pen", "privacy"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🔐", + description: "locked with key", + version: "0.6", + keywords: ["closed", "key", "lock", "locked with key", "secure"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🔑", + description: "key", + version: "0.6", + keywords: ["key", "lock", "password"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🗝️", + description: "old key", + version: "0.7", + keywords: ["clue", "key", "lock", "old"], + category: "objects", + group: "objects", + subgroup: "lock" + }, { + emoji: "🔨", + description: "hammer", + version: "0.6", + keywords: ["hammer", "tool"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪓", + description: "axe", + version: "12.0", + keywords: ["axe", "chop", "hatchet", "split", "wood"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "⛏️", + description: "pick", + version: "0.7", + keywords: ["mining", "pick", "tool"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "⚒️", + description: "hammer and pick", + version: "1.0", + keywords: ["hammer", "hammer and pick", "pick", "tool"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🛠️", + description: "hammer and wrench", + version: "0.7", + keywords: ["hammer", "hammer and wrench", "spanner", "tool", "wrench"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🗡️", + description: "dagger", + version: "0.7", + keywords: ["dagger", "knife", "weapon"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "⚔️", + description: "crossed swords", + version: "1.0", + keywords: ["crossed", "swords", "weapon"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "💣", + description: "bomb", + version: "0.6", + keywords: ["bomb", "comic"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪃", + description: "boomerang", + version: "13.0", + keywords: ["boomerang", "rebound", "repercussion"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🏹", + description: "bow and arrow", + version: "1.0", + keywords: ["archer", "arrow", "bow", "bow and arrow", "Sagittarius", "zodiac"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🛡️", + description: "shield", + version: "0.7", + keywords: ["shield", "weapon"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪚", + description: "carpentry saw", + version: "13.0", + keywords: ["carpenter", "carpentry saw", "lumber", "saw", "tool"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🔧", + description: "wrench", + version: "0.6", + keywords: ["spanner", "tool", "wrench"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪛", + description: "screwdriver", + version: "13.0", + keywords: ["screw", "screwdriver", "tool"], + category: "activities-events", + group: "objects", + subgroup: "tool" + }, { + emoji: "🔩", + description: "nut and bolt", + version: "0.6", + keywords: ["bolt", "nut", "nut and bolt", "tool"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "⚙️", + description: "gear", + version: "1.0", + keywords: ["cog", "cogwheel", "gear", "tool"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🗜️", + description: "clamp", + version: "0.7", + keywords: ["clamp", "compress", "tool", "vice"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "⚖️", + description: "balance scale", + version: "1.0", + keywords: ["balance", "justice", "Libra", "scale", "zodiac"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🦯", + description: "white cane", + version: "12.0", + keywords: ["accessibility", "blind", "white cane"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🔗", + description: "link", + version: "0.6", + keywords: ["link"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "⛓️", + description: "chains", + version: "0.7", + keywords: ["chain", "chains"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪝", + description: "hook", + version: "13.0", + keywords: ["catch", "crook", "curve", "ensnare", "hook", "selling point"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🧰", + description: "toolbox", + version: "11.0", + keywords: ["chest", "mechanic", "tool", "toolbox"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🧲", + description: "magnet", + version: "11.0", + keywords: ["attraction", "horseshoe", "magnet", "magnetic"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "🪜", + description: "ladder", + version: "13.0", + keywords: ["climb", "ladder", "rung", "step"], + category: "objects", + group: "objects", + subgroup: "tool" + }, { + emoji: "⚗️", + description: "alembic", + version: "1.0", + keywords: ["alembic", "chemistry", "tool"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "🧪", + description: "test tube", + version: "11.0", + keywords: ["chemist", "chemistry", "experiment", "lab", "science", "test tube"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "🧫", + description: "petri dish", + version: "11.0", + keywords: ["bacteria", "biologist", "biology", "culture", "lab", "petri dish"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "🧬", + description: "dna", + version: "11.0", + keywords: ["biologist", "dna", "evolution", "gene", "genetics", "life"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "🔬", + description: "microscope", + version: "1.0", + keywords: ["microscope", "science", "tool"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "🔭", + description: "telescope", + version: "1.0", + keywords: ["science", "telescope", "tool"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "📡", + description: "satellite antenna", + version: "0.6", + keywords: ["antenna", "dish", "satellite"], + category: "objects", + group: "objects", + subgroup: "science" + }, { + emoji: "💉", + description: "syringe", + version: "0.6", + keywords: ["medicine", "needle", "shot", "sick", "syringe"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🩸", + description: "drop of blood", + version: "12.0", + keywords: ["bleed", "blood donation", "drop of blood", "injury", "medicine", "menstruation"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "💊", + description: "pill", + version: "0.6", + keywords: ["doctor", "medicine", "pill", "sick"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🩹", + description: "adhesive bandage", + version: "12.0", + keywords: ["adhesive bandage", "bandage"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🩼", + description: "crutch", + version: "14.0", + keywords: ["cane", "crutch", "disability", "hurt", "mobility aid", "stick"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🩺", + description: "stethoscope", + version: "12.0", + keywords: ["doctor", "heart", "medicine", "stethoscope"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🩻", + description: "x-ray", + version: "14.0", + keywords: ["bones", "doctor", "medical", "skeleton", "x-ray"], + category: "objects", + group: "objects", + subgroup: "medical" + }, { + emoji: "🚪", + description: "door", + version: "0.6", + keywords: ["door"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🛗", + description: "elevator", + version: "13.0", + keywords: ["accessibility", "elevator", "hoist", "lift"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪞", + description: "mirror", + version: "13.0", + keywords: ["mirror", "reflection", "reflector", "speculum"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪟", + description: "window", + version: "13.0", + keywords: ["frame", "fresh air", "opening", "transparent", "view", "window"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🛏️", + description: "bed", + version: "0.7", + keywords: ["bed", "hotel", "sleep"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🛋️", + description: "couch and lamp", + version: "0.7", + keywords: ["couch", "couch and lamp", "hotel", "lamp"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪑", + description: "chair", + version: "12.0", + keywords: ["chair", "seat", "sit"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🚽", + description: "toilet", + version: "0.6", + keywords: ["toilet"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪠", + description: "plunger", + version: "13.0", + keywords: ["force cup", "plumber", "plunger", "suction", "toilet"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🚿", + description: "shower", + version: "1.0", + keywords: ["shower", "water"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🛁", + description: "bathtub", + version: "1.0", + keywords: ["bath", "bathtub"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪤", + description: "mouse trap", + version: "13.0", + keywords: ["bait", "mouse trap", "mousetrap", "snare", "trap"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪒", + description: "razor", + version: "12.0", + keywords: ["razor", "sharp", "shave"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧴", + description: "lotion bottle", + version: "11.0", + keywords: ["lotion", "lotion bottle", "moisturizer", "shampoo", "sunscreen"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧷", + description: "safety pin", + version: "11.0", + keywords: ["diaper", "punk rock", "safety pin"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧹", + description: "broom", + version: "11.0", + keywords: ["broom", "cleaning", "sweeping", "witch"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧺", + description: "basket", + version: "11.0", + keywords: ["basket", "farming", "laundry", "picnic"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧻", + description: "roll of paper", + version: "11.0", + keywords: ["paper towels", "roll of paper", "toilet paper"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪣", + description: "bucket", + version: "13.0", + keywords: ["bucket", "cask", "pail", "vat"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧼", + description: "soap", + version: "11.0", + keywords: ["bar", "bathing", "cleaning", "lather", "soap", "soapdish"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🫧", + description: "bubbles", + version: "14.0", + keywords: ["bubbles", "burp", "clean", "soap", "underwater"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🪥", + description: "toothbrush", + version: "13.0", + keywords: ["bathroom", "brush", "clean", "dental", "hygiene", "teeth", "toothbrush"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧽", + description: "sponge", + version: "11.0", + keywords: ["absorbing", "cleaning", "porous", "sponge"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🧯", + description: "fire extinguisher", + version: "11.0", + keywords: ["extinguish", "fire", "fire extinguisher", "quench"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🛒", + description: "shopping cart", + version: "3.0", + keywords: ["cart", "shopping", "trolley"], + category: "objects", + group: "objects", + subgroup: "household" + }, { + emoji: "🚬", + description: "cigarette", + version: "0.6", + keywords: ["cigarette", "smoking"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "⚰️", + description: "coffin", + version: "1.0", + keywords: ["coffin", "death"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🪦", + description: "headstone", + version: "13.0", + keywords: ["cemetery", "grave", "graveyard", "headstone", "tombstone"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "⚱️", + description: "funeral urn", + version: "1.0", + keywords: ["ashes", "death", "funeral", "urn"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🧿", + description: "nazar amulet", + version: "11.0", + keywords: ["bead", "charm", "evil-eye", "nazar", "nazar amulet", "talisman"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🪬", + description: "hamsa", + version: "14.0", + keywords: ["amulet", "Fatima", "hamsa", "hand", "Mary", "Miriam", "protection"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🗿", + description: "moai", + version: "0.6", + keywords: ["face", "moai", "moyai", "statue"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🪧", + description: "placard", + version: "13.0", + keywords: ["demonstration", "picket", "placard", "protest", "sign"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🪪", + description: "identification card", + version: "14.0", + keywords: ["credentials", "ID", "identification card", "license", "security"], + category: "objects", + group: "objects", + subgroup: "other-object" + }, { + emoji: "🏧", + description: "ATM sign", + version: "0.6", + keywords: ["ATM", "ATM sign", "automated", "bank", "teller"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚮", + description: "litter in bin sign", + version: "1.0", + keywords: ["litter", "litter bin", "litter in bin sign"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚰", + description: "potable water", + version: "1.0", + keywords: ["drinking", "potable", "water"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "♿", + description: "wheelchair symbol", + version: "0.6", + keywords: ["access", "wheelchair symbol"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚹", + description: "men’s room", + version: "0.6", + keywords: ["bathroom", "lavatory", "man", "men’s room", "restroom", "toilet", "WC"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚺", + description: "women’s room", + version: "0.6", + keywords: ["bathroom", "lavatory", "restroom", "toilet", "WC", "woman", "women’s room"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚻", + description: "restroom", + version: "0.6", + keywords: ["bathroom", "lavatory", "restroom", "toilet", "WC"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚼", + description: "baby symbol", + version: "0.6", + keywords: ["baby", "baby symbol", "changing"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🚾", + description: "water closet", + version: "0.6", + keywords: ["bathroom", "closet", "lavatory", "restroom", "toilet", "water", "WC"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🛂", + description: "passport control", + version: "1.0", + keywords: ["control", "passport"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🛃", + description: "customs", + version: "1.0", + keywords: ["customs"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🛄", + description: "baggage claim", + version: "1.0", + keywords: ["baggage", "claim"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "🛅", + description: "left luggage", + version: "1.0", + keywords: ["baggage", "left luggage", "locker", "luggage"], + category: "symbols", + group: "symbols", + subgroup: "transport-sign" + }, { + emoji: "⚠️", + description: "warning", + version: "0.6", + keywords: ["warning"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚸", + description: "children crossing", + version: "1.0", + keywords: ["child", "children crossing", "crossing", "pedestrian", "traffic"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "⛔", + description: "no entry", + version: "0.6", + keywords: ["entry", "forbidden", "no", "not", "prohibited", "traffic"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚫", + description: "prohibited", + version: "0.6", + keywords: ["entry", "forbidden", "no", "not", "prohibited"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚳", + description: "no bicycles", + version: "1.0", + keywords: ["bicycle", "bike", "forbidden", "no", "no bicycles", "prohibited"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚭", + description: "no smoking", + version: "0.6", + keywords: ["forbidden", "no", "not", "prohibited", "smoking"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚯", + description: "no littering", + version: "1.0", + keywords: ["forbidden", "litter", "no", "no littering", "not", "prohibited"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚱", + description: "non-potable water", + version: "1.0", + keywords: ["non-drinking", "non-potable", "water"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🚷", + description: "no pedestrians", + version: "1.0", + keywords: ["forbidden", "no", "no pedestrians", "not", "pedestrian", "prohibited"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "📵", + description: "no mobile phones", + version: "1.0", + keywords: ["cell", "forbidden", "mobile", "no", "no mobile phones", "phone"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "🔞", + description: "no one under eighteen", + version: "0.6", + keywords: ["18", "age restriction", "eighteen", "no one under eighteen", "prohibited", "underage"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "☢️", + description: "radioactive", + version: "1.0", + keywords: ["radioactive", "sign"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "☣️", + description: "biohazard", + version: "1.0", + keywords: ["biohazard", "sign"], + category: "symbols", + group: "symbols", + subgroup: "warning" + }, { + emoji: "⬆️", + description: "up arrow", + version: "0.6", + keywords: ["arrow", "cardinal", "direction", "north", "up arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↗️", + description: "up-right arrow", + version: "0.6", + keywords: ["arrow", "direction", "intercardinal", "northeast", "up-right arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "➡️", + description: "right arrow", + version: "0.6", + keywords: ["arrow", "cardinal", "direction", "east", "right arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↘️", + description: "down-right arrow", + version: "0.6", + keywords: ["arrow", "direction", "down-right arrow", "intercardinal", "southeast"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "⬇️", + description: "down arrow", + version: "0.6", + keywords: ["arrow", "cardinal", "direction", "down", "south"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↙️", + description: "down-left arrow", + version: "0.6", + keywords: ["arrow", "direction", "down-left arrow", "intercardinal", "southwest"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "⬅️", + description: "left arrow", + version: "0.6", + keywords: ["arrow", "cardinal", "direction", "left arrow", "west"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↖️", + description: "up-left arrow", + version: "0.6", + keywords: ["arrow", "direction", "intercardinal", "northwest", "up-left arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↕️", + description: "up-down arrow", + version: "0.6", + keywords: ["arrow", "up-down arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↔️", + description: "left-right arrow", + version: "0.6", + keywords: ["arrow", "left-right arrow"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↩️", + description: "right arrow curving left", + version: "0.6", + keywords: ["arrow", "right arrow curving left"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "↪️", + description: "left arrow curving right", + version: "0.6", + keywords: ["arrow", "left arrow curving right"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "⤴️", + description: "right arrow curving up", + version: "0.6", + keywords: ["arrow", "right arrow curving up"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "⤵️", + description: "right arrow curving down", + version: "0.6", + keywords: ["arrow", "down", "right arrow curving down"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔃", + description: "clockwise vertical arrows", + version: "0.6", + keywords: ["arrow", "clockwise", "clockwise vertical arrows", "reload"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔄", + description: "counterclockwise arrows button", + version: "1.0", + keywords: ["anticlockwise", "arrow", "counterclockwise", "counterclockwise arrows button", "withershins"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔙", + description: "BACK arrow", + version: "0.6", + keywords: ["arrow", "BACK"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔚", + description: "END arrow", + version: "0.6", + keywords: ["arrow", "END"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔛", + description: "ON! arrow", + version: "0.6", + keywords: ["arrow", "mark", "ON", "ON!"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔜", + description: "SOON arrow", + version: "0.6", + keywords: ["arrow", "SOON"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🔝", + description: "TOP arrow", + version: "0.6", + keywords: ["arrow", "TOP", "up"], + category: "symbols", + group: "symbols", + subgroup: "arrow" + }, { + emoji: "🛐", + description: "place of worship", + version: "1.0", + keywords: ["place of worship", "religion", "worship"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "⚛️", + description: "atom symbol", + version: "1.0", + keywords: ["atheist", "atom", "atom symbol"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "🕉️", + description: "om", + version: "0.7", + keywords: ["Hindu", "om", "religion"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "✡️", + description: "star of David", + version: "0.7", + keywords: ["David", "Jew", "Jewish", "religion", "star", "star of David"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "☸️", + description: "wheel of dharma", + version: "0.7", + keywords: ["Buddhist", "dharma", "religion", "wheel", "wheel of dharma"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "☯️", + description: "yin yang", + version: "0.7", + keywords: ["religion", "tao", "taoist", "yang", "yin"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "✝️", + description: "latin cross", + version: "0.7", + keywords: ["Christian", "cross", "latin cross", "religion"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "☦️", + description: "orthodox cross", + version: "1.0", + keywords: ["Christian", "cross", "orthodox cross", "religion"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "☪️", + description: "star and crescent", + version: "0.7", + keywords: ["islam", "Muslim", "religion", "star and crescent"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "☮️", + description: "peace symbol", + version: "1.0", + keywords: ["peace", "peace symbol"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "🕎", + description: "menorah", + version: "1.0", + keywords: ["candelabrum", "candlestick", "menorah", "religion"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "🔯", + description: "dotted six-pointed star", + version: "0.6", + keywords: ["dotted six-pointed star", "fortune", "star"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "🪯", + description: "khanda", + version: "15.0", + keywords: ["khanda", "religion", "Sikh"], + category: "symbols", + group: "symbols", + subgroup: "religion" + }, { + emoji: "♈", + description: "Aries", + version: "0.6", + keywords: ["Aries", "ram", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♉", + description: "Taurus", + version: "0.6", + keywords: ["bull", "ox", "Taurus", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♊", + description: "Gemini", + version: "0.6", + keywords: ["Gemini", "twins", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♋", + description: "Cancer", + version: "0.6", + keywords: ["Cancer", "crab", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♌", + description: "Leo", + version: "0.6", + keywords: ["Leo", "lion", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♍", + description: "Virgo", + version: "0.6", + keywords: ["Virgo", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♎", + description: "Libra", + version: "0.6", + keywords: ["balance", "justice", "Libra", "scales", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♏", + description: "Scorpio", + version: "0.6", + keywords: ["Scorpio", "scorpion", "scorpius", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♐", + description: "Sagittarius", + version: "0.6", + keywords: ["archer", "Sagittarius", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♑", + description: "Capricorn", + version: "0.6", + keywords: ["Capricorn", "goat", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♒", + description: "Aquarius", + version: "0.6", + keywords: ["Aquarius", "bearer", "water", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "♓", + description: "Pisces", + version: "0.6", + keywords: ["fish", "Pisces", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "⛎", + description: "Ophiuchus", + version: "0.6", + keywords: ["bearer", "Ophiuchus", "serpent", "snake", "zodiac"], + category: "symbols", + group: "symbols", + subgroup: "zodiac" + }, { + emoji: "🔀", + description: "shuffle tracks button", + version: "1.0", + keywords: ["arrow", "crossed", "shuffle tracks button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔁", + description: "repeat button", + version: "1.0", + keywords: ["arrow", "clockwise", "repeat", "repeat button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔂", + description: "repeat single button", + version: "1.0", + keywords: ["arrow", "clockwise", "once", "repeat single button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "▶️", + description: "play button", + version: "0.6", + keywords: ["arrow", "play", "play button", "right", "triangle"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏩", + description: "fast-forward button", + version: "0.6", + keywords: ["arrow", "double", "fast", "fast-forward button", "forward"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏭️", + description: "next track button", + version: "0.7", + keywords: ["arrow", "next scene", "next track", "next track button", "triangle"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏯️", + description: "play or pause button", + version: "1.0", + keywords: ["arrow", "pause", "play", "play or pause button", "right", "triangle"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "◀️", + description: "reverse button", + version: "0.6", + keywords: ["arrow", "left", "reverse", "reverse button", "triangle"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏪", + description: "fast reverse button", + version: "0.6", + keywords: ["arrow", "double", "fast reverse button", "rewind"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏮️", + description: "last track button", + version: "0.7", + keywords: ["arrow", "last track button", "previous scene", "previous track", "triangle"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔼", + description: "upwards button", + version: "0.6", + keywords: ["arrow", "button", "upwards button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏫", + description: "fast up button", + version: "0.6", + keywords: ["arrow", "double", "fast up button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔽", + description: "downwards button", + version: "0.6", + keywords: ["arrow", "button", "down", "downwards button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏬", + description: "fast down button", + version: "0.6", + keywords: ["arrow", "double", "down", "fast down button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏸️", + description: "pause button", + version: "0.7", + keywords: ["bar", "double", "pause", "pause button", "vertical"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏹️", + description: "stop button", + version: "0.7", + keywords: ["square", "stop", "stop button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏺️", + description: "record button", + version: "0.7", + keywords: ["circle", "record", "record button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "⏏️", + description: "eject button", + version: "1.0", + keywords: ["eject", "eject button"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🎦", + description: "cinema", + version: "0.6", + keywords: ["camera", "cinema", "film", "movie"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔅", + description: "dim button", + version: "1.0", + keywords: ["brightness", "dim", "dim button", "low"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🔆", + description: "bright button", + version: "1.0", + keywords: ["bright", "bright button", "brightness"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "📶", + description: "antenna bars", + version: "0.6", + keywords: ["antenna", "antenna bars", "bar", "cell", "mobile", "phone"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "🛜", + description: "wireless", + version: "15.0", + keywords: ["computer", "internet", "network", "wireless"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "📳", + description: "vibration mode", + version: "0.6", + keywords: ["cell", "mobile", "mode", "phone", "telephone", "vibration"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "📴", + description: "mobile phone off", + version: "0.6", + keywords: ["cell", "mobile", "off", "phone", "telephone"], + category: "symbols", + group: "symbols", + subgroup: "av-symbol" + }, { + emoji: "♀️", + description: "female sign", + version: "4.0", + keywords: ["female sign", "woman"], + category: "symbols", + group: "symbols", + subgroup: "gender" + }, { + emoji: "♂️", + description: "male sign", + version: "4.0", + keywords: ["male sign", "man"], + category: "symbols", + group: "symbols", + subgroup: "gender" + }, { + emoji: "⚧️", + description: "transgender symbol", + version: "13.0", + keywords: ["transgender", "transgender symbol"], + category: "symbols", + group: "symbols", + subgroup: "gender" + }, { + emoji: "✖️", + description: "multiply", + version: "0.6", + keywords: ["×", "cancel", "multiplication", "multiply", "sign", "x"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "➕", + description: "plus", + version: "0.6", + keywords: ["+", "math", "plus", "sign"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "➖", + description: "minus", + version: "0.6", + keywords: ["-", "−", "math", "minus", "sign"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "➗", + description: "divide", + version: "0.6", + keywords: ["÷", "divide", "division", "math", "sign"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "🟰", + description: "heavy equals sign", + version: "14.0", + keywords: ["equality", "heavy equals sign", "math"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "♾️", + description: "infinity", + version: "11.0", + keywords: ["forever", "infinity", "unbounded", "universal"], + category: "symbols", + group: "symbols", + subgroup: "math" + }, { + emoji: "‼️", + description: "double exclamation mark", + version: "0.6", + keywords: ["!", "!!", "bangbang", "double exclamation mark", "exclamation", "mark"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "⁉️", + description: "exclamation question mark", + version: "0.6", + keywords: ["!", "!?", "?", "exclamation", "interrobang", "mark", "punctuation", "question"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "❓", + description: "red question mark", + version: "0.6", + keywords: ["?", "mark", "punctuation", "question", "red question mark"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "❔", + description: "white question mark", + version: "0.6", + keywords: ["?", "mark", "outlined", "punctuation", "question", "white question mark"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "❕", + description: "white exclamation mark", + version: "0.6", + keywords: ["!", "exclamation", "mark", "outlined", "punctuation", "white exclamation mark"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "❗", + description: "red exclamation mark", + version: "0.6", + keywords: ["!", "exclamation", "mark", "punctuation", "red exclamation mark"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "〰️", + description: "wavy dash", + version: "0.6", + keywords: ["dash", "punctuation", "wavy"], + category: "symbols", + group: "symbols", + subgroup: "punctuation" + }, { + emoji: "💱", + description: "currency exchange", + version: "0.6", + keywords: ["bank", "currency", "exchange", "money"], + category: "symbols", + group: "symbols", + subgroup: "currency" + }, { + emoji: "💲", + description: "heavy dollar sign", + version: "0.6", + keywords: ["currency", "dollar", "heavy dollar sign", "money"], + category: "symbols", + group: "symbols", + subgroup: "currency" + }, { + emoji: "⚕️", + description: "medical symbol", + version: "4.0", + keywords: ["aesculapius", "medical symbol", "medicine", "staff"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "♻️", + description: "recycling symbol", + version: "0.6", + keywords: ["recycle", "recycling symbol"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "⚜️", + description: "fleur-de-lis", + version: "1.0", + keywords: ["fleur-de-lis"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "🔱", + description: "trident emblem", + version: "0.6", + keywords: ["anchor", "emblem", "ship", "tool", "trident"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "📛", + description: "name badge", + version: "0.6", + keywords: ["badge", "name"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "🔰", + description: "Japanese symbol for beginner", + version: "0.6", + keywords: ["beginner", "chevron", "Japanese", "Japanese symbol for beginner", "leaf"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "⭕", + description: "hollow red circle", + version: "0.6", + keywords: ["circle", "hollow red circle", "large", "o", "red"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "✅", + description: "check mark button", + version: "0.6", + keywords: ["✓", "button", "check", "mark"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "☑️", + description: "check box with check", + version: "0.6", + keywords: ["✓", "box", "check", "check box with check"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "✔️", + description: "check mark", + version: "0.6", + keywords: ["✓", "check", "mark"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "❌", + description: "cross mark", + version: "0.6", + keywords: ["×", "cancel", "cross", "mark", "multiplication", "multiply", "x"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "❎", + description: "cross mark button", + version: "0.6", + keywords: ["×", "cross mark button", "mark", "square", "x"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "➰", + description: "curly loop", + version: "0.6", + keywords: ["curl", "curly loop", "loop"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "➿", + description: "double curly loop", + version: "1.0", + keywords: ["curl", "double", "double curly loop", "loop"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "〽️", + description: "part alternation mark", + version: "0.6", + keywords: ["mark", "part", "part alternation mark"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "✳️", + description: "eight-spoked asterisk", + version: "0.6", + keywords: ["*", "asterisk", "eight-spoked asterisk"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "✴️", + description: "eight-pointed star", + version: "0.6", + keywords: ["*", "eight-pointed star", "star"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "❇️", + description: "sparkle", + version: "0.6", + keywords: ["*", "sparkle"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "©️", + description: "copyright", + version: "0.6", + keywords: ["C", "copyright"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "®️", + description: "registered", + version: "0.6", + keywords: ["R", "registered"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "™️", + description: "trade mark", + version: "0.6", + keywords: ["mark", "TM", "trade mark", "trademark"], + category: "symbols", + group: "symbols", + subgroup: "other-symbol" + }, { + emoji: "#️⃣", + description: "keycap: #", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "*️⃣", + description: "keycap: *", + version: "2.0", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "0️⃣", + description: "keycap: 0", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "1️⃣", + description: "keycap: 1", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "2️⃣", + description: "keycap: 2", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "3️⃣", + description: "keycap: 3", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "4️⃣", + description: "keycap: 4", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "5️⃣", + description: "keycap: 5", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "6️⃣", + description: "keycap: 6", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "7️⃣", + description: "keycap: 7", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "8️⃣", + description: "keycap: 8", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "9️⃣", + description: "keycap: 9", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "🔟", + description: "keycap: 10", + version: "0.6", + keywords: ["keycap"], + category: "symbols", + group: "symbols", + subgroup: "keycap" + }, { + emoji: "🔠", + description: "input latin uppercase", + version: "0.6", + keywords: ["ABCD", "input", "latin", "letters", "uppercase"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🔡", + description: "input latin lowercase", + version: "0.6", + keywords: ["abcd", "input", "latin", "letters", "lowercase"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🔢", + description: "input numbers", + version: "0.6", + keywords: ["1234", "input", "numbers"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🔣", + description: "input symbols", + version: "0.6", + keywords: ["〒♪&%", "input", "input symbols"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🔤", + description: "input latin letters", + version: "0.6", + keywords: ["abc", "alphabet", "input", "latin", "letters"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🅰️", + description: "A button (blood type)", + version: "0.6", + keywords: ["A", "A button (blood type)", "blood type"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆎", + description: "AB button (blood type)", + version: "0.6", + keywords: ["AB", "AB button (blood type)", "blood type"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🅱️", + description: "B button (blood type)", + version: "0.6", + keywords: ["B", "B button (blood type)", "blood type"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆑", + description: "CL button", + version: "0.6", + keywords: ["CL", "CL button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆒", + description: "COOL button", + version: "0.6", + keywords: ["COOL", "COOL button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆓", + description: "FREE button", + version: "0.6", + keywords: ["FREE", "FREE button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "ℹ️", + description: "information", + version: "0.6", + keywords: ["i", "information"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆔", + description: "ID button", + version: "0.6", + keywords: ["ID", "ID button", "identity"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "Ⓜ️", + description: "circled M", + version: "0.6", + keywords: ["circle", "circled M", "M"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆕", + description: "NEW button", + version: "0.6", + keywords: ["NEW", "NEW button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆖", + description: "NG button", + version: "0.6", + keywords: ["NG", "NG button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🅾️", + description: "O button (blood type)", + version: "0.6", + keywords: ["blood type", "O", "O button (blood type)"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆗", + description: "OK button", + version: "0.6", + keywords: ["OK", "OK button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🅿️", + description: "P button", + version: "0.6", + keywords: ["P", "P button", "parking"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆘", + description: "SOS button", + version: "0.6", + keywords: ["help", "SOS", "SOS button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆙", + description: "UP! button", + version: "0.6", + keywords: ["mark", "UP", "UP!", "UP! button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🆚", + description: "VS button", + version: "0.6", + keywords: ["versus", "VS", "VS button"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈁", + description: "Japanese “here” button", + version: "0.6", + keywords: ["“here”", "Japanese", "Japanese “here” button", "katakana", "ココ"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈂️", + description: "Japanese “service charge” button", + version: "0.6", + keywords: ["“service charge”", "Japanese", "Japanese “service charge” button", "katakana", "サ"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈷️", + description: "Japanese “monthly amount” button", + version: "0.6", + keywords: ["“monthly amount”", "ideograph", "Japanese", "Japanese “monthly amount” button", "月"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈶", + description: "Japanese “not free of charge” button", + version: "0.6", + keywords: ["“not free of charge”", "ideograph", "Japanese", "Japanese “not free of charge” button", "有"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈯", + description: "Japanese “reserved” button", + version: "0.6", + keywords: ["“reserved”", "ideograph", "Japanese", "Japanese “reserved” button", "指"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🉐", + description: "Japanese “bargain” button", + version: "0.6", + keywords: ["“bargain”", "ideograph", "Japanese", "Japanese “bargain” button", "得"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈹", + description: "Japanese “discount” button", + version: "0.6", + keywords: ["“discount”", "ideograph", "Japanese", "Japanese “discount” button", "割"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈚", + description: "Japanese “free of charge” button", + version: "0.6", + keywords: ["“free of charge”", "ideograph", "Japanese", "Japanese “free of charge” button", "無"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈲", + description: "Japanese “prohibited” button", + version: "0.6", + keywords: ["“prohibited”", "ideograph", "Japanese", "Japanese “prohibited” button", "禁"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🉑", + description: "Japanese “acceptable” button", + version: "0.6", + keywords: ["“acceptable”", "ideograph", "Japanese", "Japanese “acceptable” button", "可"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈸", + description: "Japanese “application” button", + version: "0.6", + keywords: ["“application”", "ideograph", "Japanese", "Japanese “application” button", "申"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈴", + description: "Japanese “passing grade” button", + version: "0.6", + keywords: ["“passing grade”", "ideograph", "Japanese", "Japanese “passing grade” button", "合"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈳", + description: "Japanese “vacancy” button", + version: "0.6", + keywords: ["“vacancy”", "ideograph", "Japanese", "Japanese “vacancy” button", "空"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "㊗️", + description: "Japanese “congratulations” button", + version: "0.6", + keywords: ["“congratulations”", "ideograph", "Japanese", "Japanese “congratulations” button", "祝"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "㊙️", + description: "Japanese “secret” button", + version: "0.6", + keywords: ["“secret”", "ideograph", "Japanese", "Japanese “secret” button", "秘"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈺", + description: "Japanese “open for business” button", + version: "0.6", + keywords: ["“open for business”", "ideograph", "Japanese", "Japanese “open for business” button", "営"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🈵", + description: "Japanese “no vacancy” button", + version: "0.6", + keywords: ["“no vacancy”", "ideograph", "Japanese", "Japanese “no vacancy” button", "満"], + category: "symbols", + group: "symbols", + subgroup: "alphanum" + }, { + emoji: "🔴", + description: "red circle", + version: "0.6", + keywords: ["circle", "geometric", "red"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟠", + description: "orange circle", + version: "12.0", + keywords: ["circle", "orange"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟡", + description: "yellow circle", + version: "12.0", + keywords: ["circle", "yellow"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟢", + description: "green circle", + version: "12.0", + keywords: ["circle", "green"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔵", + description: "blue circle", + version: "0.6", + keywords: ["blue", "circle", "geometric"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟣", + description: "purple circle", + version: "12.0", + keywords: ["circle", "purple"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟤", + description: "brown circle", + version: "12.0", + keywords: ["brown", "circle"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "⚫", + description: "black circle", + version: "0.6", + keywords: ["black circle", "circle", "geometric"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "⚪", + description: "white circle", + version: "0.6", + keywords: ["circle", "geometric", "white circle"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟥", + description: "red square", + version: "12.0", + keywords: ["red", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟧", + description: "orange square", + version: "12.0", + keywords: ["orange", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟨", + description: "yellow square", + version: "12.0", + keywords: ["square", "yellow"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟩", + description: "green square", + version: "12.0", + keywords: ["green", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟦", + description: "blue square", + version: "12.0", + keywords: ["blue", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟪", + description: "purple square", + version: "12.0", + keywords: ["purple", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🟫", + description: "brown square", + version: "12.0", + keywords: ["brown", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "⬛", + description: "black large square", + version: "0.6", + keywords: ["black large square", "geometric", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "⬜", + description: "white large square", + version: "0.6", + keywords: ["geometric", "square", "white large square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "◼️", + description: "black medium square", + version: "0.6", + keywords: ["black medium square", "geometric", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "◻️", + description: "white medium square", + version: "0.6", + keywords: ["geometric", "square", "white medium square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "◾", + description: "black medium-small square", + version: "0.6", + keywords: ["black medium-small square", "geometric", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "◽", + description: "white medium-small square", + version: "0.6", + keywords: ["geometric", "square", "white medium-small square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "▪️", + description: "black small square", + version: "0.6", + keywords: ["black small square", "geometric", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "▫️", + description: "white small square", + version: "0.6", + keywords: ["geometric", "square", "white small square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔶", + description: "large orange diamond", + version: "0.6", + keywords: ["diamond", "geometric", "large orange diamond", "orange"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔷", + description: "large blue diamond", + version: "0.6", + keywords: ["blue", "diamond", "geometric", "large blue diamond"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔸", + description: "small orange diamond", + version: "0.6", + keywords: ["diamond", "geometric", "orange", "small orange diamond"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔹", + description: "small blue diamond", + version: "0.6", + keywords: ["blue", "diamond", "geometric", "small blue diamond"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔺", + description: "red triangle pointed up", + version: "0.6", + keywords: ["geometric", "red", "red triangle pointed up"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔻", + description: "red triangle pointed down", + version: "0.6", + keywords: ["down", "geometric", "red", "red triangle pointed down"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "💠", + description: "diamond with a dot", + version: "0.6", + keywords: ["comic", "diamond", "diamond with a dot", "geometric", "inside"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔘", + description: "radio button", + version: "0.6", + keywords: ["button", "geometric", "radio"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔳", + description: "white square button", + version: "0.6", + keywords: ["button", "geometric", "outlined", "square", "white square button"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🔲", + description: "black square button", + version: "0.6", + keywords: ["black square button", "button", "geometric", "square"], + category: "symbols", + group: "symbols", + subgroup: "geometric" + }, { + emoji: "🏁", + description: "chequered flag", + version: "0.6", + keywords: ["checkered", "chequered", "chequered flag", "racing"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🚩", + description: "triangular flag", + version: "0.6", + keywords: ["post", "triangular flag"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🎌", + description: "crossed flags", + version: "0.6", + keywords: ["celebration", "cross", "crossed", "crossed flags", "Japanese"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🏴", + description: "black flag", + version: "1.0", + keywords: ["black flag", "waving"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🏳️", + description: "white flag", + version: "0.7", + keywords: ["waving", "white flag"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🏳️🌈", + description: "rainbow flag", + version: "4.0", + keywords: ["pride", "rainbow", "rainbow flag"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🏳️⚧️", + description: "transgender flag", + version: "13.0", + keywords: ["flag", "light blue", "pink", "transgender", "white"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🏴☠️", + description: "pirate flag", + version: "11.0", + keywords: ["Jolly Roger", "pirate", "pirate flag", "plunder", "treasure"], + category: "flags", + group: "flags", + subgroup: "flag" + }, { + emoji: "🇦🇨", + description: "flag: Ascension Island", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇩", + description: "flag: Andorra", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇪", + description: "flag: United Arab Emirates", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇫", + description: "flag: Afghanistan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇬", + description: "flag: Antigua & Barbuda", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇮", + description: "flag: Anguilla", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇱", + description: "flag: Albania", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇲", + description: "flag: Armenia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇴", + description: "flag: Angola", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇶", + description: "flag: Antarctica", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇷", + description: "flag: Argentina", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇸", + description: "flag: American Samoa", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇹", + description: "flag: Austria", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇺", + description: "flag: Australia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇼", + description: "flag: Aruba", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇽", + description: "flag: Åland Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇦🇿", + description: "flag: Azerbaijan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇦", + description: "flag: Bosnia & Herzegovina", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇧", + description: "flag: Barbados", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇩", + description: "flag: Bangladesh", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇪", + description: "flag: Belgium", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇫", + description: "flag: Burkina Faso", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇬", + description: "flag: Bulgaria", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇭", + description: "flag: Bahrain", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇮", + description: "flag: Burundi", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇯", + description: "flag: Benin", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇱", + description: "flag: St. Barthélemy", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇲", + description: "flag: Bermuda", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇳", + description: "flag: Brunei", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇴", + description: "flag: Bolivia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇶", + description: "flag: Caribbean Netherlands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇷", + description: "flag: Brazil", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇸", + description: "flag: Bahamas", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇹", + description: "flag: Bhutan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇻", + description: "flag: Bouvet Island", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇼", + description: "flag: Botswana", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇾", + description: "flag: Belarus", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇧🇿", + description: "flag: Belize", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇦", + description: "flag: Canada", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇨", + description: "flag: Cocos (Keeling) Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇩", + description: "flag: Congo - Kinshasa", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇫", + description: "flag: Central African Republic", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇬", + description: "flag: Congo - Brazzaville", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇭", + description: "flag: Switzerland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇮", + description: "flag: Côte d’Ivoire", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇰", + description: "flag: Cook Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇱", + description: "flag: Chile", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇲", + description: "flag: Cameroon", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇳", + description: "flag: China", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇴", + description: "flag: Colombia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇵", + description: "flag: Clipperton Island", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇷", + description: "flag: Costa Rica", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇺", + description: "flag: Cuba", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇻", + description: "flag: Cape Verde", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇼", + description: "flag: Curaçao", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇽", + description: "flag: Christmas Island", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇾", + description: "flag: Cyprus", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇨🇿", + description: "flag: Czechia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇪", + description: "flag: Germany", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇬", + description: "flag: Diego Garcia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇯", + description: "flag: Djibouti", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇰", + description: "flag: Denmark", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇲", + description: "flag: Dominica", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇴", + description: "flag: Dominican Republic", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇩🇿", + description: "flag: Algeria", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇦", + description: "flag: Ceuta & Melilla", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇨", + description: "flag: Ecuador", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇪", + description: "flag: Estonia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇬", + description: "flag: Egypt", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇭", + description: "flag: Western Sahara", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇷", + description: "flag: Eritrea", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇸", + description: "flag: Spain", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇹", + description: "flag: Ethiopia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇪🇺", + description: "flag: European Union", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇮", + description: "flag: Finland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇯", + description: "flag: Fiji", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇰", + description: "flag: Falkland Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇲", + description: "flag: Micronesia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇴", + description: "flag: Faroe Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇫🇷", + description: "flag: France", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇦", + description: "flag: Gabon", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇧", + description: "flag: United Kingdom", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇩", + description: "flag: Grenada", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇪", + description: "flag: Georgia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇫", + description: "flag: French Guiana", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇬", + description: "flag: Guernsey", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇭", + description: "flag: Ghana", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇮", + description: "flag: Gibraltar", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇱", + description: "flag: Greenland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇲", + description: "flag: Gambia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇳", + description: "flag: Guinea", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇵", + description: "flag: Guadeloupe", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇶", + description: "flag: Equatorial Guinea", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇷", + description: "flag: Greece", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇸", + description: "flag: South Georgia & South Sandwich Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇹", + description: "flag: Guatemala", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇺", + description: "flag: Guam", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇼", + description: "flag: Guinea-Bissau", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇬🇾", + description: "flag: Guyana", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇰", + description: "flag: Hong Kong SAR China", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇲", + description: "flag: Heard & McDonald Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇳", + description: "flag: Honduras", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇷", + description: "flag: Croatia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇹", + description: "flag: Haiti", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇭🇺", + description: "flag: Hungary", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇨", + description: "flag: Canary Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇩", + description: "flag: Indonesia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇪", + description: "flag: Ireland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇱", + description: "flag: Israel", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇲", + description: "flag: Isle of Man", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇳", + description: "flag: India", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇴", + description: "flag: British Indian Ocean Territory", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇶", + description: "flag: Iraq", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇷", + description: "flag: Iran", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇸", + description: "flag: Iceland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇮🇹", + description: "flag: Italy", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇯🇪", + description: "flag: Jersey", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇯🇲", + description: "flag: Jamaica", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇯🇴", + description: "flag: Jordan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇯🇵", + description: "flag: Japan", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇪", + description: "flag: Kenya", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇬", + description: "flag: Kyrgyzstan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇭", + description: "flag: Cambodia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇮", + description: "flag: Kiribati", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇲", + description: "flag: Comoros", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇳", + description: "flag: St. Kitts & Nevis", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇵", + description: "flag: North Korea", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇷", + description: "flag: South Korea", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇼", + description: "flag: Kuwait", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇾", + description: "flag: Cayman Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇰🇿", + description: "flag: Kazakhstan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇦", + description: "flag: Laos", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇧", + description: "flag: Lebanon", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇨", + description: "flag: St. Lucia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇮", + description: "flag: Liechtenstein", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇰", + description: "flag: Sri Lanka", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇷", + description: "flag: Liberia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇸", + description: "flag: Lesotho", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇹", + description: "flag: Lithuania", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇺", + description: "flag: Luxembourg", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇻", + description: "flag: Latvia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇱🇾", + description: "flag: Libya", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇦", + description: "flag: Morocco", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇨", + description: "flag: Monaco", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇩", + description: "flag: Moldova", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇪", + description: "flag: Montenegro", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇫", + description: "flag: St. Martin", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇬", + description: "flag: Madagascar", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇭", + description: "flag: Marshall Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇰", + description: "flag: North Macedonia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇱", + description: "flag: Mali", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇲", + description: "flag: Myanmar (Burma)", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇳", + description: "flag: Mongolia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇴", + description: "flag: Macao SAR China", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇵", + description: "flag: Northern Mariana Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇶", + description: "flag: Martinique", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇷", + description: "flag: Mauritania", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇸", + description: "flag: Montserrat", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇹", + description: "flag: Malta", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇺", + description: "flag: Mauritius", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇻", + description: "flag: Maldives", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇼", + description: "flag: Malawi", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇽", + description: "flag: Mexico", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇾", + description: "flag: Malaysia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇲🇿", + description: "flag: Mozambique", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇦", + description: "flag: Namibia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇨", + description: "flag: New Caledonia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇪", + description: "flag: Niger", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇫", + description: "flag: Norfolk Island", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇬", + description: "flag: Nigeria", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇮", + description: "flag: Nicaragua", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇱", + description: "flag: Netherlands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇴", + description: "flag: Norway", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇵", + description: "flag: Nepal", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇷", + description: "flag: Nauru", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇺", + description: "flag: Niue", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇳🇿", + description: "flag: New Zealand", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇴🇲", + description: "flag: Oman", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇦", + description: "flag: Panama", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇪", + description: "flag: Peru", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇫", + description: "flag: French Polynesia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇬", + description: "flag: Papua New Guinea", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇭", + description: "flag: Philippines", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇰", + description: "flag: Pakistan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇱", + description: "flag: Poland", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇲", + description: "flag: St. Pierre & Miquelon", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇳", + description: "flag: Pitcairn Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇷", + description: "flag: Puerto Rico", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇸", + description: "flag: Palestinian Territories", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇹", + description: "flag: Portugal", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇼", + description: "flag: Palau", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇵🇾", + description: "flag: Paraguay", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇶🇦", + description: "flag: Qatar", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇷🇪", + description: "flag: Réunion", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇷🇴", + description: "flag: Romania", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇷🇸", + description: "flag: Serbia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇷🇺", + description: "flag: Russia", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇷🇼", + description: "flag: Rwanda", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇦", + description: "flag: Saudi Arabia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇧", + description: "flag: Solomon Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇨", + description: "flag: Seychelles", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇩", + description: "flag: Sudan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇪", + description: "flag: Sweden", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇬", + description: "flag: Singapore", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇭", + description: "flag: St. Helena", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇮", + description: "flag: Slovenia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇯", + description: "flag: Svalbard & Jan Mayen", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇰", + description: "flag: Slovakia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇱", + description: "flag: Sierra Leone", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇲", + description: "flag: San Marino", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇳", + description: "flag: Senegal", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇴", + description: "flag: Somalia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇷", + description: "flag: Suriname", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇸", + description: "flag: South Sudan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇹", + description: "flag: São Tomé & Príncipe", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇻", + description: "flag: El Salvador", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇽", + description: "flag: Sint Maarten", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇾", + description: "flag: Syria", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇸🇿", + description: "flag: Eswatini", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇦", + description: "flag: Tristan da Cunha", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇨", + description: "flag: Turks & Caicos Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇩", + description: "flag: Chad", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇫", + description: "flag: French Southern Territories", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇬", + description: "flag: Togo", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇭", + description: "flag: Thailand", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇯", + description: "flag: Tajikistan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇰", + description: "flag: Tokelau", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇱", + description: "flag: Timor-Leste", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇲", + description: "flag: Turkmenistan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇳", + description: "flag: Tunisia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇴", + description: "flag: Tonga", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇷", + description: "flag: Turkey", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇹", + description: "flag: Trinidad & Tobago", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇻", + description: "flag: Tuvalu", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇼", + description: "flag: Taiwan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇹🇿", + description: "flag: Tanzania", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇦", + description: "flag: Ukraine", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇬", + description: "flag: Uganda", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇲", + description: "flag: U.S. Outlying Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇳", + description: "flag: United Nations", + version: "4.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇸", + description: "flag: United States", + version: "0.6", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇾", + description: "flag: Uruguay", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇺🇿", + description: "flag: Uzbekistan", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇦", + description: "flag: Vatican City", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇨", + description: "flag: St. Vincent & Grenadines", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇪", + description: "flag: Venezuela", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇬", + description: "flag: British Virgin Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇮", + description: "flag: U.S. Virgin Islands", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇳", + description: "flag: Vietnam", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇻🇺", + description: "flag: Vanuatu", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇼🇫", + description: "flag: Wallis & Futuna", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇼🇸", + description: "flag: Samoa", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇽🇰", + description: "flag: Kosovo", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇾🇪", + description: "flag: Yemen", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇾🇹", + description: "flag: Mayotte", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇿🇦", + description: "flag: South Africa", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇿🇲", + description: "flag: Zambia", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🇿🇼", + description: "flag: Zimbabwe", + version: "2.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "country-flag" + }, { + emoji: "🏴", + description: "flag: England", + version: "5.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "subdivision-flag" + }, { + emoji: "🏴", + description: "flag: Scotland", + version: "5.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "subdivision-flag" + }, { + emoji: "🏴", + description: "flag: Wales", + version: "5.0", + keywords: ["flag"], + category: "flags", + group: "flags", + subgroup: "subdivision-flag" + }], + n = ["0.6", "0.7", "1.0", "2.0", "3.0", "4.0", "5.0", "11.0", "12.0", "12.1", "13.0", "13.1", "14.0", "15.0"], + s = new Map; + + function t(o) { + return o ? (function(o) { + var e; + o.versionAbove && (o.version || (o.version = []), o.version = o.version.concat((e = o.versionAbove, n.filter((o => parseFloat(o) > parseFloat(e))))), delete o.versionAbove); + const i = ["category", "group", "subgroup", "version"]; + if (!o || "object" != typeof o) throw new Error("You can't filter emojis with \"" + o + "\" - Use an object, like \"{category: ['flags', 'symbols']}\" instead"); + for (const e in o) { + if (!i.includes(e)) throw new Error("You can't filter emojis with key \"" + e + '" - Try "category", "group", "subgroup", "version", or "versionAbove" instead'); + if (!(o[e] instanceof Array)) throw new Error("You can't filter emojis with value \"" + o[e] + '" for key "' + e + "\" - Use an array, like \"['flags', 'symbols']\" instead") + } + }(o), function(o, e) { + const i = []; + for (const r of o) { + let o = !1; + for (const i in e) + if (e[i].includes(r[i])) { + o = !0; + break + } if (!o) { + if (e.version && (!s.has(r) && r.variations && s.set(r, r.variations), s.has(r))) { + const o = []; + for (const i of s.get(r)) e.version.includes(i.version) || o.push(i); + r.variations = o.length ? o : void 0 + } + i.push(r) + } + } + return i + }(r, o)) : r + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3696.6c1688b5380783cd9763.bundle.js b/mp-core/3696.6c1688b5380783cd9763.bundle.js new file mode 100644 index 0000000..b75d2e5 --- /dev/null +++ b/mp-core/3696.6c1688b5380783cd9763.bundle.js @@ -0,0 +1,41 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3696], { + 73696: (e, s, n) => { + n.r(s), n.d(s, { + default: () => r + }); + var i = n(62371); + class r { + id = "core.render.ambient-occlusion"; + name = "Ambient Occlusion"; + description = "Adds ambient occlusion to the scene."; + version = "1.0.0"; + requires = []; + provides = ["ambientOcclusion"]; + onLoad() {} + ssaoeffect = { + blendFunction: i.YQ.MULTIPLY, + samples: 8, + rings: 3, + distanceThreshold: .05, + distanceFalloff: .03, + rangeThreshold: .5, + rangeFalloff: .15, + luminanceInfluence: .9, + radius: .5, + scale: .5, + bias: .1, + resolutionScale: 1 + }; + isEnabled = !0; + $renderer_getPipelineEffects(e) { + if (!this.isEnabled) return []; + let s = new i.bn(e, void 0, this.ssaoeffect); + return s.priority = -10, [s] + } + $renderer_getPipelinePasses(e) {} + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3738.c59e2f8c80659da8b79d.bundle.js b/mp-core/3738.c59e2f8c80659da8b79d.bundle.js new file mode 100644 index 0000000..553268f --- /dev/null +++ b/mp-core/3738.c59e2f8c80659da8b79d.bundle.js @@ -0,0 +1,661 @@ +/*! For license information please see 3738.c59e2f8c80659da8b79d.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3738], { + 40001: (e, t, n) => { + n.d(t, { + Lm: () => a, + U8: () => i, + lk: () => s, + sN: () => o + }); + var r = n(67294); + const s = e => r.createElement(r.Fragment, null, r.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, r.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? r.createElement("img", { + draggable: "false", + src: n(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), r.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + a = e => { + let [t, s] = r.useState(!!e.openByDefault); + return !1 === e.visible ? r.createElement(r.Fragment, null) : r.createElement(r.Fragment, null, r.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => s(!t) + }, r.createElement("img", { + draggable: "false", + src: n(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), r.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? r.createElement("img", { + draggable: "false", + src: n(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + o = e => { + let [t, s] = r.useState(!1); + return r.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => s(!0), + onPointerLeave: e => s(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? r.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||n(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||n(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : r.createElement("img", { + draggable: "false", + src: e.icon || n(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), r.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + i = e => r.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, r.createElement("img", { + src: n(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), r.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 43738: (e, t, n) => { + n.r(t), n.d(t, { + default: () => l + }); + var r = n(67294), + s = (n(20745), n(40001)); + class a extends r.PureComponent { + state = { + text: "", + messages: [] + }; + messageRef = r.createRef(); + componentDidMount() { + this.props.plugin.addEventListener("updated.messages", this.onMessagesUpdated), this.onMessagesUpdated() + } + componentWillUnmount() { + this.props.plugin.removeEventListener("updated.messages", this.onMessagesUpdated) + } + onMessagesUpdated = () => { + this.setState({ + messages: this.props.plugin.messages + }, (() => { + this.messageRef.current && (this.messageRef.current.scrollTop = this.messageRef.current.scrollHeight) + })), this.forceUpdate() + }; + onInputKeyDown(e) { + "Escape" == e.key ? metapress.menubar.closePanel() : "Enter" == e.key && (metapress.chat.sendMessage(this.state.text), this.setState({ + text: "" + })) + } + render = () => r.createElement(s.lk, { + title: "Chat", + onClose: () => metapress.menubar.closePanel() + }, r.createElement("div", { + ref: this.messageRef, + style: { + position: "relative", + top: "5px", + width: "100%", + height: "calc(100% - 80px)", + overflowY: "auto" + } + }, r.createElement("div", { + style: { + left: 0, + width: "100%", + padding: 20, + boxSizing: "border-box" + } + }, this.state.messages.map((e => r.createElement(o, { + key: e.id, + message: e + }))))), r.createElement("div", { + ref: e => this.inputField = e, + style: { + position: "absolute", + bottom: 20, + left: 20, + width: "calc(100% - 40px)", + height: 44, + backgroundColor: "#0A0A0A", + borderRadius: 22, + border: "1px solid rgba(255, 255, 255, 0.1)", + boxSizing: "border-box", + display: "flex", + alignItems: "center" + } + }, r.createElement("input", { + autoFocus: !0, + value: this.state.text, + onChange: e => this.setState({ + text: e.target.value + }), + onKeyDown: e => this.onInputKeyDown(e), + style: { + height: "100%", + padding: "0px 20px", + fontSize: 13, + flex: "1 1 auto", + background: "none", + border: "none", + outline: "none", + color: "white" + }, + placeholder: "Digite uma mensagem..." + }))) + } + const o = e => r.createElement("div", { + style: { + margin: 10, + lineHeight: "1.5" + } + }, r.createElement("b", null, e.message.username), ": ", e.message.text); + var i = n(28721); + class l extends EventTarget { + id = "core.feature.chat"; + name = "Chat"; + description = "Lets users chat to each other in the environment."; + version = "1.0.0"; + requires = ["entities", "menubar", "messaging"]; + provides = ["chat"]; + messages = []; + personalID = (0, i.Z)(); + idNameCache = {}; + onLoad() { + metapress.entities.add({ + id: "chat.menu", + type: "menubar.item", + name: "Chat", + description: "Can be used to send text messages to people in the world.", + is_panel: !0, + icon: n(6952), + onClick: () => this.toggleUI() + }) + } + $onIncomingMessage(e) { + "chat:msg" == e.name && this.onChatIncoming(e) + } + toggleUI() { + metapress.menubar.toggleReactPanel("chat.menu", (() => r.createElement(a, { + plugin: this + }))) + } + openUI() { + metapress.menubar.openReactPanel("chat.menu", (() => r.createElement(a, { + plugin: this + }))) + } + sendMessage(e) { + if (e = e?.trim(), !e) return; + let t = (0, i.Z)(); + metapress.messaging.send("global", "chat:msg", { + username: metapress.profile.get("name") || "Guest", + text: e, + id: t, + personalID: this.personalID + }), this.messages.push({ + username: "Você", + text: e, + sent: !0, + id: t + }), this.dispatchEvent(new CustomEvent("updated.messages", { + messages: this.messages + })) + } + onChatIncoming(e) { + this.messages.push(e.data), this.messages = this.messages.slice(-50), null != e.data.personalID && (this.idNameCache[e.data.personalID] = e.data.username, this.messages = this.messages.map((t => (t.personalID === e.data.personalID && t.username != this.idNameCache[e.data.personalID] && (t.username = this.idNameCache[e.data.personalID]), t)))), this.dispatchEvent(new CustomEvent("updated.messages", { + messages: this.messages + })), metapress.menubar.toasts.show({ + buttonID: "chat.menu", + text: `${e.data.username}: ${e.data.text}` + }), new Audio(n(20106)).play() + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:sendMessage`, + type: "action", + name: "Chat - Send message", + tags: "send message, chat, send chat, send text message, send text, send message to everyone, send message to world, tell everyone, tell everybody, broadcast message", + content: "\n This action can be used to send a text message to everyone in the world. The message will be displayed in the chat window for everyone.\n Assistant instruction: The value is the text to send.\n ", + action: e => { + if (!e.value) throw new Error("Cannot send empty message."); + return this.openUI(), this.sendMessage(e.value), "Message successfully sent to everyone in the world." + } + }] + } + }, + 72408: (e, t) => { + var n = Symbol.for("react.element"), + r = Symbol.for("react.portal"), + s = Symbol.for("react.fragment"), + a = Symbol.for("react.strict_mode"), + o = Symbol.for("react.profiler"), + i = Symbol.for("react.provider"), + l = Symbol.for("react.context"), + u = Symbol.for("react.forward_ref"), + c = Symbol.for("react.suspense"), + p = Symbol.for("react.memo"), + d = Symbol.for("react.lazy"), + f = Symbol.iterator, + m = { + isMounted: function() { + return !1 + }, + enqueueForceUpdate: function() {}, + enqueueReplaceState: function() {}, + enqueueSetState: function() {} + }, + h = Object.assign, + g = {}; + + function y(e, t, n) { + this.props = e, this.context = t, this.refs = g, this.updater = n || m + } + + function b() {} + + function v(e, t, n) { + this.props = e, this.context = t, this.refs = g, this.updater = n || m + } + y.prototype.isReactComponent = {}, y.prototype.setState = function(e, t) { + if ("object" != typeof e && "function" != typeof e && null != e) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); + this.updater.enqueueSetState(this, e, t, "setState") + }, y.prototype.forceUpdate = function(e) { + this.updater.enqueueForceUpdate(this, e, "forceUpdate") + }, b.prototype = y.prototype; + var x = v.prototype = new b; + x.constructor = v, h(x, y.prototype), x.isPureReactComponent = !0; + var E = Array.isArray, + w = Object.prototype.hasOwnProperty, + k = { + current: null + }, + S = { + key: !0, + ref: !0, + __self: !0, + __source: !0 + }; + + function _(e, t, r) { + var s, a = {}, + o = null, + i = null; + if (null != t) + for (s in void 0 !== t.ref && (i = t.ref), void 0 !== t.key && (o = "" + t.key), t) w.call(t, s) && !S.hasOwnProperty(s) && (a[s] = t[s]); + var l = arguments.length - 2; + if (1 === l) a.children = r; + else if (1 < l) { + for (var u = Array(l), c = 0; c < l; c++) u[c] = arguments[c + 2]; + a.children = u + } + if (e && e.defaultProps) + for (s in l = e.defaultProps) void 0 === a[s] && (a[s] = l[s]); + return { + $$typeof: n, + type: e, + key: o, + ref: i, + props: a, + _owner: k.current + } + } + + function C(e) { + return "object" == typeof e && null !== e && e.$$typeof === n + } + var R = /\/+/g; + + function I(e, t) { + return "object" == typeof e && null !== e && null != e.key ? function(e) { + var t = { + "=": "=0", + ":": "=2" + }; + return "$" + e.replace(/[=:]/g, (function(e) { + return t[e] + })) + }("" + e.key) : t.toString(36) + } + + function $(e, t, s, a, o) { + var i = typeof e; + "undefined" !== i && "boolean" !== i || (e = null); + var l = !1; + if (null === e) l = !0; + else switch (i) { + case "string": + case "number": + l = !0; + break; + case "object": + switch (e.$$typeof) { + case n: + case r: + l = !0 + } + } + if (l) return o = o(l = e), e = "" === a ? "." + I(l, 0) : a, E(o) ? (s = "", null != e && (s = e.replace(R, "$&/") + "/"), $(o, t, s, "", (function(e) { + return e + }))) : null != o && (C(o) && (o = function(e, t) { + return { + $$typeof: n, + type: e.type, + key: t, + ref: e.ref, + props: e.props, + _owner: e._owner + } + }(o, s + (!o.key || l && l.key === o.key ? "" : ("" + o.key).replace(R, "$&/") + "/") + e)), t.push(o)), 1; + if (l = 0, a = "" === a ? "." : a + ":", E(e)) + for (var u = 0; u < e.length; u++) { + var c = a + I(i = e[u], u); + l += $(i, t, s, c, o) + } else if (c = function(e) { + return null === e || "object" != typeof e ? null : "function" == typeof(e = f && e[f] || e["@@iterator"]) ? e : null + }(e), "function" == typeof c) + for (e = c.call(e), u = 0; !(i = e.next()).done;) l += $(i = i.value, t, s, c = a + I(i, u++), o); + else if ("object" === i) throw t = String(e), Error("Objects are not valid as a React child (found: " + ("[object Object]" === t ? "object with keys {" + Object.keys(e).join(", ") + "}" : t) + "). If you meant to render a collection of children, use an array instead."); + return l + } + + function D(e, t, n) { + if (null == e) return e; + var r = [], + s = 0; + return $(e, r, "", "", (function(e) { + return t.call(n, e, s++) + })), r + } + + function P(e) { + if (-1 === e._status) { + var t = e._result; + (t = t()).then((function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 1, e._result = t) + }), (function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 2, e._result = t) + })), -1 === e._status && (e._status = 0, e._result = t) + } + if (1 === e._status) return e._result.default; + throw e._result + } + var M = { + current: null + }, + j = { + transition: null + }, + U = { + ReactCurrentDispatcher: M, + ReactCurrentBatchConfig: j, + ReactCurrentOwner: k + }; + t.Children = { + map: D, + forEach: function(e, t, n) { + D(e, (function() { + t.apply(this, arguments) + }), n) + }, + count: function(e) { + var t = 0; + return D(e, (function() { + t++ + })), t + }, + toArray: function(e) { + return D(e, (function(e) { + return e + })) || [] + }, + only: function(e) { + if (!C(e)) throw Error("React.Children.only expected to receive a single React element child."); + return e + } + }, t.Component = y, t.Fragment = s, t.Profiler = o, t.PureComponent = v, t.StrictMode = a, t.Suspense = c, t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = U, t.cloneElement = function(e, t, r) { + if (null == e) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + e + "."); + var s = h({}, e.props), + a = e.key, + o = e.ref, + i = e._owner; + if (null != t) { + if (void 0 !== t.ref && (o = t.ref, i = k.current), void 0 !== t.key && (a = "" + t.key), e.type && e.type.defaultProps) var l = e.type.defaultProps; + for (u in t) w.call(t, u) && !S.hasOwnProperty(u) && (s[u] = void 0 === t[u] && void 0 !== l ? l[u] : t[u]) + } + var u = arguments.length - 2; + if (1 === u) s.children = r; + else if (1 < u) { + l = Array(u); + for (var c = 0; c < u; c++) l[c] = arguments[c + 2]; + s.children = l + } + return { + $$typeof: n, + type: e.type, + key: a, + ref: o, + props: s, + _owner: i + } + }, t.createContext = function(e) { + return (e = { + $$typeof: l, + _currentValue: e, + _currentValue2: e, + _threadCount: 0, + Provider: null, + Consumer: null, + _defaultValue: null, + _globalName: null + }).Provider = { + $$typeof: i, + _context: e + }, e.Consumer = e + }, t.createElement = _, t.createFactory = function(e) { + var t = _.bind(null, e); + return t.type = e, t + }, t.createRef = function() { + return { + current: null + } + }, t.forwardRef = function(e) { + return { + $$typeof: u, + render: e + } + }, t.isValidElement = C, t.lazy = function(e) { + return { + $$typeof: d, + _payload: { + _status: -1, + _result: e + }, + _init: P + } + }, t.memo = function(e, t) { + return { + $$typeof: p, + type: e, + compare: void 0 === t ? null : t + } + }, t.startTransition = function(e) { + var t = j.transition; + j.transition = {}; + try { + e() + } finally { + j.transition = t + } + }, t.unstable_act = function() { + throw Error("act(...) is not supported in production builds of React.") + }, t.useCallback = function(e, t) { + return M.current.useCallback(e, t) + }, t.useContext = function(e) { + return M.current.useContext(e) + }, t.useDebugValue = function() {}, t.useDeferredValue = function(e) { + return M.current.useDeferredValue(e) + }, t.useEffect = function(e, t) { + return M.current.useEffect(e, t) + }, t.useId = function() { + return M.current.useId() + }, t.useImperativeHandle = function(e, t, n) { + return M.current.useImperativeHandle(e, t, n) + }, t.useInsertionEffect = function(e, t) { + return M.current.useInsertionEffect(e, t) + }, t.useLayoutEffect = function(e, t) { + return M.current.useLayoutEffect(e, t) + }, t.useMemo = function(e, t) { + return M.current.useMemo(e, t) + }, t.useReducer = function(e, t, n) { + return M.current.useReducer(e, t, n) + }, t.useRef = function(e) { + return M.current.useRef(e) + }, t.useState = function(e) { + return M.current.useState(e) + }, t.useSyncExternalStore = function(e, t, n) { + return M.current.useSyncExternalStore(e, t, n) + }, t.useTransition = function() { + return M.current.useTransition() + }, t.version = "18.2.0" + }, + 67294: (e, t, n) => { + e.exports = n(72408) + }, + 40313: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 42728: (e, t, n) => { + e.exports = n.p + "mp-core/close.9b4e57a8512d18bd5a68.svg" + }, + 83203: (e, t, n) => { + e.exports = n.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, n) => { + e.exports = n.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, n) => { + e.exports = n.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 6952: (e, t, n) => { + e.exports = n.p + "mp-core/chat.d95b7c8c8375f41cf073.svg" + }, + 20106: (e, t, n) => { + e.exports = n.p + "mp-core/ping.66af2694e1280aa7a6ab.mp3" + } + } +]); \ No newline at end of file diff --git a/mp-core/3738.c59e2f8c80659da8b79d.bundle.js.LICENSE.txt b/mp-core/3738.c59e2f8c80659da8b79d.bundle.js.LICENSE.txt new file mode 100644 index 0000000..e932783 --- /dev/null +++ b/mp-core/3738.c59e2f8c80659da8b79d.bundle.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/mp-core/3746.8ad1d79106a94847bcac.bundle.js b/mp-core/3746.8ad1d79106a94847bcac.bundle.js new file mode 100644 index 0000000..83cf705 --- /dev/null +++ b/mp-core/3746.8ad1d79106a94847bcac.bundle.js @@ -0,0 +1,680 @@ +/*! For license information please see 3746.8ad1d79106a94847bcac.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3746], { + 40001: (e, t, n) => { + n.d(t, { + Lm: () => i, + U8: () => a, + lk: () => o, + sN: () => s + }); + var r = n(67294); + const o = e => r.createElement(r.Fragment, null, r.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, r.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? r.createElement("img", { + draggable: "false", + src: n(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), r.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + i = e => { + let [t, o] = r.useState(!!e.openByDefault); + return !1 === e.visible ? r.createElement(r.Fragment, null) : r.createElement(r.Fragment, null, r.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => o(!t) + }, r.createElement("img", { + draggable: "false", + src: n(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), r.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? r.createElement("img", { + draggable: "false", + src: n(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + s = e => { + let [t, o] = r.useState(!1); + return r.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => o(!0), + onPointerLeave: e => o(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? r.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||n(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||n(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : r.createElement("img", { + draggable: "false", + src: e.icon || n(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), r.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + a = e => r.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, r.createElement("img", { + src: n(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), r.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 46839: (e, t, n) => { + n.d(t, { + Z: () => r + }); + const r = { + appVersion: n(4147).i8, + colors: { + darkGrey: "#272727", + black: "#1a1a1a" + } + } + }, + 63746: (e, t, n) => { + n.r(t), n.d(t, { + default: () => s + }); + var r = n(67294), + o = n(40001), + i = n(66729); + class s { + id = "core.ui.action"; + name = "Action Panel"; + description = "This displays an action menu containing different actions that a user can execute"; + version = "1.0.0"; + requires = ["menubar", "entities"]; + provides = []; + items = []; + tooltip = null; + menuIndex = null; + onLoad() { + this.tooltip = new i.u + } + $loader_onEnterWorld() { + if (this.items = metapress.entities.all.filter((e => "avatar.action.item" === e.type)), 0 === this.items.length) return; + metapress.entities.add({ + id: "core.ui.action.menu", + type: "menubar.item", + name: "Actions", + icon: n(92698), + onClick: () => this.toggleMenu() + }); + const e = metapress.entities.all.filter((e => "menubar.item" == e.type)); + e.sort(((e, t) => (e.order || 0) - (t.order || 0))), this.menuIndex = e.findIndex((e => "core.ui.action.menu" === e.id)) + 1 + } + toggleMenu() { + return "core.ui.action.menu" == metapress.menubar.openPanelID ? metapress.menubar.closePanel() : metapress.menubar.openReactPanel("core.ui.action.menu", (() => r.createElement(a, { + plugin: this + }))) + } + } + class a extends r.Component { + state = { + showShortcut: !1 + }; + _keyCache = {}; + componentDidMount() { + window.addEventListener("keyup", this.onKeyUp), window.addEventListener("keydown", this.onKeyDown) + } + componentWillUnmount() { + window.removeEventListener("keyup", this.onKeyUp), window.removeEventListener("keydown", this.onKeyDown) + } + onKeyDown = e => { + (e.ctrlKey || e.metaKey || "Control" === e.key || "Meta" === e.key) && this.setState({ + showShortcut: !0 + }), (e.code?.startsWith?.("Digit") ? parseInt(e.code.slice(5)) : null) === this.props.plugin.menuIndex && document.addEventListener("keydown", (t => { + const n = t.code?.startsWith?.("Digit") ? parseInt(t.code.slice(5)) : null; + null != n && n <= this.props.plugin.items.length && (this._keyCache[e.code + t.code] = !0, this.onSelectAction(this.props.plugin.items[n - 1])) + })) + }; + onKeyUp = e => { + if ("Control" !== e.key && "Meta" !== e.key) { + if (e.code && e.code.startsWith("Digit")) { + const t = "Digit" + this.props.plugin.menuIndex + e.code; + this._keyCache[t] = !1 + } + } else this.setState({ + showShortcut: !1 + }) + }; + onSelectAction(e) { + e.onClick(), this.props.plugin.tooltip.hide(), metapress.menubar.closePanel() + } + render() { + return r.createElement(o.lk, { + title: "Actions", + onClose: () => metapress.menubar.closePanel() + }, r.createElement("div", { + style: { + display: "flex", + gap: "14px 8px", + flexWrap: "wrap", + marginTop: 14, + alignItems: "center", + justifyContent: "space-evenly" + } + }, this.props.plugin.items.map(((e, t) => r.createElement(l, { + key: e.id, + index: t, + action: e, + showShortcut: this.state.showShortcut, + onClick: t => this.onSelectAction(e), + tooltip: this.props.plugin.tooltip + }))))) + } + } + const l = e => { + let [t, n] = r.useState(!1); + const o = e.action.name || "none", + i = e.action.icon; + return r.createElement("div", { + onMouseEnter: t => (t => { + n(!0); + let r = t.target.getBoundingClientRect(), + i = metapress.contentDiv.getBoundingClientRect(), + s = r.x + r.width - i.x, + a = r.y + r.height / 2 - i.y; + e.tooltip.show(s, a, o) + })(t), + onMouseLeave: t => (n(!1), void e.tooltip.hide()), + onClick: e.onClick, + style: { + display: "flex", + flexDirection: "column", + position: "relative", + transform: t ? "scale(1.1)" : null, + transition: "all 0.2s ease", + alignItems: "center", + cursor: "pointer" + } + }, e.showShortcut ? r.createElement("div", { + style: { + display: "flex", + position: "absolute", + right: 3, + fontSize: 11, + fontFamily: "monospace", + color: "#9e9e9e", + justifyContent: "center", + alignItems: "center" + } + }, e.index + 1) : null, r.createElement("div", { + style: { + display: "flex", + width: 70, + height: 70, + backgroundColor: t ? "rgba(102,102,102,0.8)" : "rgba(102,102,102,0.5)", + borderRadius: "6px", + justifyContent: "center", + alignItems: "center" + } + }, r.createElement("img", { + draggable: "false", + src: i, + style: { + width: "60%", + height: "60%" + } + }))) + } + }, + 66729: (e, t, n) => { + n.d(t, { + u: () => o + }); + var r = n(46839); + class o { + constructor() { + this.div = document.createElement("div"), this.div.id = "metapress-menubar-tooltip-container", this.div.style.cssText = "position: absolute; top: 100px; left: 100px; display: none; z-index: 100; ", metapress.contentDiv.appendChild(this.div), this._x = 100, this._y = 100, this.div.innerHTML = `\n \n \x3c!-- Background + text --\x3e\n \n My text here\n \n\n \x3c!-- Chevron --\x3e\n \n \n \n \n ` + } + get x() { + return this._x + } + get y() { + return this._y + } + show(e, t, n) { + this._x = e, this._y = t, this.div.style.cssText += `display: block; left: ${this.x+10}px; top: ${this.y-22}px; `, this.div.querySelector("#metapress-menubar-tooltip-text").innerText = n + } + hide() { + this.div.style.cssText += "display: none; " + } + } + }, + 72408: (e, t) => { + var n = Symbol.for("react.element"), + r = Symbol.for("react.portal"), + o = Symbol.for("react.fragment"), + i = Symbol.for("react.strict_mode"), + s = Symbol.for("react.profiler"), + a = Symbol.for("react.provider"), + l = Symbol.for("react.context"), + c = Symbol.for("react.forward_ref"), + u = Symbol.for("react.suspense"), + p = Symbol.for("react.memo"), + d = Symbol.for("react.lazy"), + f = Symbol.iterator, + m = { + isMounted: function() { + return !1 + }, + enqueueForceUpdate: function() {}, + enqueueReplaceState: function() {}, + enqueueSetState: function() {} + }, + h = Object.assign, + y = {}; + + function g(e, t, n) { + this.props = e, this.context = t, this.refs = y, this.updater = n || m + } + + function x() {} + + function b(e, t, n) { + this.props = e, this.context = t, this.refs = y, this.updater = n || m + } + g.prototype.isReactComponent = {}, g.prototype.setState = function(e, t) { + if ("object" != typeof e && "function" != typeof e && null != e) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); + this.updater.enqueueSetState(this, e, t, "setState") + }, g.prototype.forceUpdate = function(e) { + this.updater.enqueueForceUpdate(this, e, "forceUpdate") + }, x.prototype = g.prototype; + var v = b.prototype = new x; + v.constructor = b, h(v, g.prototype), v.isPureReactComponent = !0; + var k = Array.isArray, + w = Object.prototype.hasOwnProperty, + E = { + current: null + }, + _ = { + key: !0, + ref: !0, + __self: !0, + __source: !0 + }; + + function S(e, t, r) { + var o, i = {}, + s = null, + a = null; + if (null != t) + for (o in void 0 !== t.ref && (a = t.ref), void 0 !== t.key && (s = "" + t.key), t) w.call(t, o) && !_.hasOwnProperty(o) && (i[o] = t[o]); + var l = arguments.length - 2; + if (1 === l) i.children = r; + else if (1 < l) { + for (var c = Array(l), u = 0; u < l; u++) c[u] = arguments[u + 2]; + i.children = c + } + if (e && e.defaultProps) + for (o in l = e.defaultProps) void 0 === i[o] && (i[o] = l[o]); + return { + $$typeof: n, + type: e, + key: s, + ref: a, + props: i, + _owner: E.current + } + } + + function C(e) { + return "object" == typeof e && null !== e && e.$$typeof === n + } + var R = /\/+/g; + + function $(e, t) { + return "object" == typeof e && null !== e && null != e.key ? function(e) { + var t = { + "=": "=0", + ":": "=2" + }; + return "$" + e.replace(/[=:]/g, (function(e) { + return t[e] + })) + }("" + e.key) : t.toString(36) + } + + function I(e, t, o, i, s) { + var a = typeof e; + "undefined" !== a && "boolean" !== a || (e = null); + var l = !1; + if (null === e) l = !0; + else switch (a) { + case "string": + case "number": + l = !0; + break; + case "object": + switch (e.$$typeof) { + case n: + case r: + l = !0 + } + } + if (l) return s = s(l = e), e = "" === i ? "." + $(l, 0) : i, k(s) ? (o = "", null != e && (o = e.replace(R, "$&/") + "/"), I(s, t, o, "", (function(e) { + return e + }))) : null != s && (C(s) && (s = function(e, t) { + return { + $$typeof: n, + type: e.type, + key: t, + ref: e.ref, + props: e.props, + _owner: e._owner + } + }(s, o + (!s.key || l && l.key === s.key ? "" : ("" + s.key).replace(R, "$&/") + "/") + e)), t.push(s)), 1; + if (l = 0, i = "" === i ? "." : i + ":", k(e)) + for (var c = 0; c < e.length; c++) { + var u = i + $(a = e[c], c); + l += I(a, t, o, u, s) + } else if (u = function(e) { + return null === e || "object" != typeof e ? null : "function" == typeof(e = f && e[f] || e["@@iterator"]) ? e : null + }(e), "function" == typeof u) + for (e = u.call(e), c = 0; !(a = e.next()).done;) l += I(a = a.value, t, o, u = i + $(a, c++), s); + else if ("object" === a) throw t = String(e), Error("Objects are not valid as a React child (found: " + ("[object Object]" === t ? "object with keys {" + Object.keys(e).join(", ") + "}" : t) + "). If you meant to render a collection of children, use an array instead."); + return l + } + + function P(e, t, n) { + if (null == e) return e; + var r = [], + o = 0; + return I(e, r, "", "", (function(e) { + return t.call(n, e, o++) + })), r + } + + function j(e) { + if (-1 === e._status) { + var t = e._result; + (t = t()).then((function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 1, e._result = t) + }), (function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 2, e._result = t) + })), -1 === e._status && (e._status = 0, e._result = t) + } + if (1 === e._status) return e._result.default; + throw e._result + } + var D = { + current: null + }, + M = { + transition: null + }, + O = { + ReactCurrentDispatcher: D, + ReactCurrentBatchConfig: M, + ReactCurrentOwner: E + }; + t.Children = { + map: P, + forEach: function(e, t, n) { + P(e, (function() { + t.apply(this, arguments) + }), n) + }, + count: function(e) { + var t = 0; + return P(e, (function() { + t++ + })), t + }, + toArray: function(e) { + return P(e, (function(e) { + return e + })) || [] + }, + only: function(e) { + if (!C(e)) throw Error("React.Children.only expected to receive a single React element child."); + return e + } + }, t.Component = g, t.Fragment = o, t.Profiler = s, t.PureComponent = b, t.StrictMode = i, t.Suspense = u, t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = O, t.cloneElement = function(e, t, r) { + if (null == e) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + e + "."); + var o = h({}, e.props), + i = e.key, + s = e.ref, + a = e._owner; + if (null != t) { + if (void 0 !== t.ref && (s = t.ref, a = E.current), void 0 !== t.key && (i = "" + t.key), e.type && e.type.defaultProps) var l = e.type.defaultProps; + for (c in t) w.call(t, c) && !_.hasOwnProperty(c) && (o[c] = void 0 === t[c] && void 0 !== l ? l[c] : t[c]) + } + var c = arguments.length - 2; + if (1 === c) o.children = r; + else if (1 < c) { + l = Array(c); + for (var u = 0; u < c; u++) l[u] = arguments[u + 2]; + o.children = l + } + return { + $$typeof: n, + type: e.type, + key: i, + ref: s, + props: o, + _owner: a + } + }, t.createContext = function(e) { + return (e = { + $$typeof: l, + _currentValue: e, + _currentValue2: e, + _threadCount: 0, + Provider: null, + Consumer: null, + _defaultValue: null, + _globalName: null + }).Provider = { + $$typeof: a, + _context: e + }, e.Consumer = e + }, t.createElement = S, t.createFactory = function(e) { + var t = S.bind(null, e); + return t.type = e, t + }, t.createRef = function() { + return { + current: null + } + }, t.forwardRef = function(e) { + return { + $$typeof: c, + render: e + } + }, t.isValidElement = C, t.lazy = function(e) { + return { + $$typeof: d, + _payload: { + _status: -1, + _result: e + }, + _init: j + } + }, t.memo = function(e, t) { + return { + $$typeof: p, + type: e, + compare: void 0 === t ? null : t + } + }, t.startTransition = function(e) { + var t = M.transition; + M.transition = {}; + try { + e() + } finally { + M.transition = t + } + }, t.unstable_act = function() { + throw Error("act(...) is not supported in production builds of React.") + }, t.useCallback = function(e, t) { + return D.current.useCallback(e, t) + }, t.useContext = function(e) { + return D.current.useContext(e) + }, t.useDebugValue = function() {}, t.useDeferredValue = function(e) { + return D.current.useDeferredValue(e) + }, t.useEffect = function(e, t) { + return D.current.useEffect(e, t) + }, t.useId = function() { + return D.current.useId() + }, t.useImperativeHandle = function(e, t, n) { + return D.current.useImperativeHandle(e, t, n) + }, t.useInsertionEffect = function(e, t) { + return D.current.useInsertionEffect(e, t) + }, t.useLayoutEffect = function(e, t) { + return D.current.useLayoutEffect(e, t) + }, t.useMemo = function(e, t) { + return D.current.useMemo(e, t) + }, t.useReducer = function(e, t, n) { + return D.current.useReducer(e, t, n) + }, t.useRef = function(e) { + return D.current.useRef(e) + }, t.useState = function(e) { + return D.current.useState(e) + }, t.useSyncExternalStore = function(e, t, n) { + return D.current.useSyncExternalStore(e, t, n) + }, t.useTransition = function() { + return D.current.useTransition() + }, t.version = "18.2.0" + }, + 67294: (e, t, n) => { + e.exports = n(72408) + }, + 40313: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 42728: (e, t, n) => { + e.exports = n.p + "mp-core/close.9b4e57a8512d18bd5a68.svg" + }, + 83203: (e, t, n) => { + e.exports = n.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, n) => { + e.exports = n.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, n) => { + e.exports = n.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 92698: (e, t, n) => { + e.exports = n.p + "mp-core/action-icon.113c08f6bce5443b1030.png" + }, + 4147: e => { + e.exports = { + i8: "VerseWeb 1.0 BETA" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/3746.8ad1d79106a94847bcac.bundle.js.LICENSE.txt b/mp-core/3746.8ad1d79106a94847bcac.bundle.js.LICENSE.txt new file mode 100644 index 0000000..e932783 --- /dev/null +++ b/mp-core/3746.8ad1d79106a94847bcac.bundle.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/mp-core/3756.1ee9b05d9ce7a6207aa0.bundle.js b/mp-core/3756.1ee9b05d9ce7a6207aa0.bundle.js new file mode 100644 index 0000000..8563b38 --- /dev/null +++ b/mp-core/3756.1ee9b05d9ce7a6207aa0.bundle.js @@ -0,0 +1,87 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [3756], { + 3756: (t, e, i) => { + i.r(e), i.d(e, { + default: () => s + }); + class s { + id = "core.integration.webdav"; + name = "WebDAV Integration"; + description = "Handles integration with a WebDAV-enabled server."; + version = "1.0.0"; + requires = []; + provides = ["webdav", "storage"]; + get publicURL() { + return this.config.publicURL || this.joinPath(this.config.url, this.config.basePath) + } + onLoad() { + if (!this.config.url) throw { + message: "Not configured.", + cancelled: !0 + } + } + joinPath(...t) { + let e = t[0]; + for (let i = 1; i < t.length; i++) t[i] && (e = e.replace(/\/+$/, "") + "/" + t[i].replace(/^\/+/, "")); + return e + } + get canEdit() { + return void 0 !== this.config.canEdit && null !== this.config.canEdit ? this.config.canEdit : !(!this.config.username || !this.config.password) + } + async uploadFile(t, e) { + if (!t) throw new Error("contentDirectory must be set."); + if (!e) throw new Error("You must specify a file to upload."); + if (!(e instanceof File)) throw new Error("File must be a valid File instance."); + const i = new r({ + url: this.config.url, + username: this.config.username, + password: this.config.password + }); + return await i.putFileContents(this.joinPath(this.config.basePath, t, e.name), e, !0), await this.getFileURL(t, e.name) + } + async getFileURL(t, e) { + return this.joinPath(this.publicURL, t, e) + } + } + class r { + constructor(t) { + if (this.opts = t, !this.opts.url) throw new Error("You must specify a URL for the WebDAV server."); + this.opts.url.endsWith("/") || (this.opts.url += "/") + } + async createDirectory(t, e = !1) { + t = (t = t.replace(/^\/+/, "")).replace(/\/+$/, ""); + let i = await fetch(this.opts.url + t + "/", { + method: "MKCOL", + headers: { + Authorization: "Basic " + btoa(this.opts.username + ":" + this.opts.password) + } + }); + if (409 == i.status && e) { + let e = t.split("/").slice(0, -1).join("/"); + if (e == t) throw new Error("Failed to create directory, the root path does not exist."); + return await this.createDirectory(e, !0), void await this.createDirectory(t, !1) + } + if (405 != i.status) { + if (409 == i.status) throw new Error("Failed to create directory, the parent path does not exist."); + if (!i.ok) throw new Error(`Failed to create directory: ${i.status} ${i.statusText}`) + } + } + async putFileContents(t, e, i = !0) { + if (t = (t = t.replace(/^\/+/, "")).replace(/\/+$/, ""), i) { + let e = t.split("/").slice(0, -1).join("/"); + e && e != t && await this.createDirectory(e, !0) + } + let s = await fetch(this.opts.url + t, { + method: "PUT", + body: e, + headers: { + Authorization: "Basic " + btoa(this.opts.username + ":" + this.opts.password) + } + }); + if (!s.ok) throw new Error(`Failed to write file: ${s.status} ${s.statusText}`) + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/4025.62f778212dd8d973e15e.bundle.js b/mp-core/4025.62f778212dd8d973e15e.bundle.js new file mode 100644 index 0000000..467a264 --- /dev/null +++ b/mp-core/4025.62f778212dd8d973e15e.bundle.js @@ -0,0 +1,155 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4025], { + 21611: (e, t, i) => { + "use strict"; + i.d(t, { + Z: () => h, + a: () => d + }); + var s = i(38853), + n = i.n(s), + a = i(28721), + o = i(99477), + r = i(25108); + const d = { + Connecting: "connecting", + Connected: "connected", + Closed: "closed" + }; + let c = 1; + class h { + id = ""; + instanceID = ""; + isInitiator = !1; + p2p = null; + state = d.Connecting; + plugin = null; + index = c++; + audioPlayer = null; + user = null; + constructor(e, t, i) { + this.plugin = e, this.user = t, this.instanceID = t.instanceID, this.isInitiator = !i, this.id = i ? i.connectionID : (0, a.Z)(), this.micNode = metapress.audio.context.createMediaStreamDestination(), metapress.audio.inputNode.connect(this.micNode), this.p2p = new(n())({ + objectMode: !0, + channelConfig: { + ordered: !1 + }, + initiator: this.isInitiator, + stream: this.micNode.stream, + config: { + iceServers: metapress.p2p.iceServers + } + }), this.p2p.on("connect", this.onConnect.bind(this)), this.p2p.on("close", this.onClose.bind(this)), this.p2p.on("signal", this.onOutgoingSignal.bind(this)), this.p2p.on("data", this.onData.bind(this)), this.p2p.on("error", this.onError.bind(this)), this.p2p.on("stream", this.onStream.bind(this)), this.connectTimeout = setTimeout((() => { + r.debug(`[MetaPress > P2P Audio #${this.index}] Audio connection timed out`), this.onClose() + }), 15e3), this.pingTimer = setInterval(this.doPing.bind(this), 2e3) + } + getEntityID() { + return metapress.entities.all.find((e => e.instanceID == this.instanceID && "avatar" == e.type))?.id + } + onConnect() { + clearTimeout(this.connectTimeout), this.state = d.Connected, metapress.plugins.sendEvent("p2p_peerConnected", this) + } + onClose() { + this.p2p && (clearTimeout(this.connectTimeout), clearTimeout(this.pingTimer), this.state = d.Closed, this.p2p.destroy(), this.p2p = null, this.plugin.connections = this.plugin.connections.filter((e => e != this)), this.micNode && metapress.audio.inputNode.disconnect(this.micNode), this.micNode = null, this.audioPlayer?.removeFromParent(), this.audioPlayer = null, this.chromeHackPlayer && (this.chromeHackPlayer.srcObject = null), this.chromeHackPlayer = null, metapress.plugins.sendEvent("p2p_peerDisconnected", this)) + } + onError(e) { + r.debug(`[MetaPress > P2P Audio #${this.index}] Audio connection error: connection=${this.id} error=${e.message}`) + } + onOutgoingSignal(e) { + metapress.messaging.send(this.instanceID, "audio.p2p.users.signal", { + connectionID: this.id, + instanceID: metapress.instanceID, + data: e, + advertisement: metapress.avatars.getAdvertisementPacket() + }) + } + onIncomingSignal(e) { + e.connectionID == this.id && this.p2p.signal(e.data) + } + doPing() { + this.state == d.Connected && (this.lastPingTime = Date.now(), this.lastPingID = (this.lastPingID || 0) + 1, this.send({ + action: "ping", + data: this.lastPingID + })) + } + sendEvent(e, t) { + if (this.state != d.Connected) return !1; + this.send({ + action: "event", + name: e, + data: t + }) + } + send(e) { + this.p2p.send(JSON.stringify(e)) + } + onData(e) { + let t = JSON.parse(e); + if ("ping" == t.action) this.send({ + action: "pong", + data: t.data + }); + else if ("pong" == t.action) this.ping = Date.now() - this.lastPingTime; + else if ("sync" == t.action) { + delete t.fields.id, delete t.fields.instanceID, delete t.fields.type, delete t.fields.isPubSubAvatar; + let e = this.getEntityID(); + e && metapress.entities.update(e, t.fields) + } else "advertise" == t.action ? metapress.avatars.onAdvertisementPacketReceived(t, this.user.instanceID) : "event" == t.action && metapress.plugins.sendEvent("p2p_event_" + t.name, this, t.data) + } + onStream(e) { + this.audioPlayer?.removeFromParent(), this.chromeHackPlayer && (this.chromeHackPlayer.srcObject = null), this.audioPlayer = new o.PositionalAudio(metapress.audio.listener), this.audioPlayer.setDistanceModel("linear"), this.audioPlayer.setRefDistance(1), this.audioPlayer.setMaxDistance(10), this.audioPlayer.setMediaStreamSource(e), metapress.renderer.scene.add(this.audioPlayer), this.chromeHackPlayer = new Audio, this.chromeHackPlayer.srcObject = e, this.chromeHackPlayer.muted = !0 + } + get debugText() { + let e = metapress.renderer.camera.position, + t = this.user ? Math.sqrt((this.user.x - e.x) ** 2 + (this.user.y - e.y) ** 2 + (this.user.z - e.z) ** 2) : void 0; + return `#${String(this.index).padStart(4,"0")}: ${this.state} distance=${t?.toFixed(0)||"?"}m ping=${this.ping?.toFixed(0)??"?"}ms user=${this.instanceID}` + } + } + }, + 45604: (e, t, i) => { + "use strict"; + i.r(t), i.d(t, { + default: () => n + }); + var s = i(21611); + class n { + id = "core.networking.etherealStorage"; + name = "Ethereal Storage"; + description = "Provides a temporary key/value and data storage system that is tied to individual users."; + version = "1.0.0"; + requires = ["p2p"]; + provides = ["etherealStorage"]; + fieldData = []; + data = {}; + onLoad() { + for (let e of this.fieldData) + if (void 0 !== e.data && null !== e.data) + for (let t of metapress.p2p.connections) t.state == s.a.Connected && t.sendEvent("etherealStorage_item", e) + } + $p2p_event_etherealStorage_item(e, t) { + let i = this.fieldData.findIndex((e => e.name == t.name)); + if (-1 != i) { + if (this.fieldData[i].time > t.time) return; + this.fieldData.splice(i, 1) + } + this.fieldData.push(t), this.data[t.name] = t.data, metapress.plugins.sendEvent("etherealStorage_itemUpdated", t) + } + $p2p_peerConnected(e) { + for (let t of this.fieldData) void 0 !== t.data && null !== t.data && e.sendEvent("etherealStorage_item", t) + } + set(e, t) { + let i = this.fieldData.findIndex((t => t.name == e)); - 1 != i && this.fieldData.splice(i, 1); + let n = { + name: e, + data: t, + time: Date.now(), + owner: metapress.instanceID + }; + this.fieldData.push(n), this.data[e] = t, metapress.plugins.sendEvent("etherealStorage_itemUpdated", n); + for (let e of metapress.p2p.connections) e.state == s.a.Connected && e.sendEvent("etherealStorage_item", n) + } + } + }, + 52361: () => {}, + 94616: () => {} + } +]); \ No newline at end of file diff --git a/mp-core/4079.104642eee2beaf1f3f3f.bundle.js b/mp-core/4079.104642eee2beaf1f3f3f.bundle.js new file mode 100644 index 0000000..905bd44 --- /dev/null +++ b/mp-core/4079.104642eee2beaf1f3f3f.bundle.js @@ -0,0 +1,301 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4079], { + 46839: (e, t, o) => { + o.d(t, { + Z: () => i + }); + const i = { + appVersion: o(4147).i8, + colors: { + darkGrey: "#272727", + black: "#1a1a1a" + } + } + }, + 4079: (e, t, o) => { + o.r(t), o.d(t, { + default: () => c + }); + var i = o(67294), + n = o(20745), + l = o(46839), + s = o(32589), + a = o(71884), + r = o(25108); + class c { + id = "core.ui.dialogs"; + name = "Dialogs"; + description = "Shows popup dialog windows."; + requires = []; + provides = ["dialogs"]; + iconSize = 70; + dialogs = []; + show(e) { + let t = document.createElement("div"); + t.className = "metapress-dialog", metapress.contentDiv.appendChild(t); + let o = n.createRoot(t), + l = { + id: THREE.MathUtils.generateUUID(), + _closeHandler: () => r.warn("[Dialogs] Close called before component was rendered!"), + isClosed: !1, + options: e, + close: async () => { + const i = metapress.button?.div; + i && e?.hideMetaverseButton && (i.style.cssText = null), l.isClosed = !0, await new Promise((e => setTimeout(e, 1))), await l._closeHandler(), this.dialogs = this.dialogs.filter((e => e.id != l.id)), o.unmount(), t.remove() + } + }; + o.render(i.createElement(d, { + handler: l, + options: e + })), metapress.plugins.sendEvent("dialogs_didShow", l); + const s = metapress.button?.div; + return s && e?.hideMetaverseButton && (s.style.cssText = "bottom: -42px;"), this.dialogs.push(l), l + } + closeAll() { + for (let e in this.dialogs) this.dialogs[e].isClosed || this.dialogs[e].close(); + this.dialogs = [] + } + get useDialog() { + return g + } + async alert(e) { + "string" == typeof e && (e = { + text: e + }), "error" == e.icon && (e.icon = o(52586)), "warn" == e.icon && (e.icon = o(91858)), "warning" == e.icon && (e.icon = o(91858)), "info" == e.icon && (e.icon = o(95005)), "information" == e.icon && (e.icon = o(95005)), "success" == e.icon && (e.icon = o(87952)), "question" == e.icon && (e.icon = o(82663)), void 0 === e.icon && (e.icon = o(95005)); + let t = this.show({ + width: 500, + height: "auto", + noHeader: !0, + content: i.createElement("div", null, e.icon ? i.createElement("img", { + draggable: "false", + src: e.icon, + style: { + display: "block", + height: this.iconSize, + margin: "30px auto 20px auto" + } + }) : null, i.createElement("div", { + style: { + fontSize: 18, + fontWeight: "bold", + textAlign: "center", + margin: "20px 40px 5px 40px" + } + }, e.title), i.createElement("div", { + style: { + fontSize: 14, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5 + } + }, i.createElement(a.U, { + children: e.text + })), i.createElement(s.zx, { + title: "Close", + onClick: () => t.close() + }), i.createElement("div", { + style: { + height: 5 + } + })) + }); + for (; !t.isClosed;) await new Promise((e => setTimeout(e, 250))) + } + async confirm(e) { + "string" == typeof e && (e = { + text: e + }), "error" == e.icon && (e.icon = o(52586)), "warn" == e.icon && (e.icon = o(91858)), "warning" == e.icon && (e.icon = o(91858)), "info" == e.icon && (e.icon = o(95005)), "information" == e.icon && (e.icon = o(95005)), "success" == e.icon && (e.icon = o(87952)), "question" == e.icon && (e.icon = o(82663)), void 0 === e.icon && (e.icon = o(82663)); + let t = null, + n = this.show({ + width: 500, + height: "auto", + noHeader: !0, + noDismiss: !0, + content: i.createElement("div", null, e.icon ? i.createElement("img", { + draggable: "false", + src: e.icon, + style: { + display: "block", + height: this.iconSize, + margin: "30px auto 20px auto" + } + }) : null, i.createElement("div", { + style: { + fontSize: 18, + fontWeight: "bold", + textAlign: "center", + margin: "20px 40px 5px 40px" + } + }, e.title), i.createElement("div", { + style: { + fontSize: 14, + textAlign: "center", + lineHeight: "1.5", + margin: "0px 40px 20px 40px", + opacity: .5 + } + }, i.createElement(a.U, { + children: e.text + })), i.createElement(s.aW, null, i.createElement(s.ek, { + title: "OK", + onClick: () => { + t = !0, n.close() + } + }), i.createElement(s.ek, { + title: "Cancel", + onClick: () => { + t = !1, n.close() + } + })), i.createElement("div", { + style: { + height: 5 + } + })) + }); + for (; !n.isClosed;) await new Promise((e => setTimeout(e, 250))); + return t + } + } + const d = e => { + const [t, n] = i.useState(!1); + (0, i.useEffect)((() => { + setTimeout((() => n(!0)), 1) + }), []), e.handler._closeHandler = async () => { + r.debug("[Dialogs] Closing..."), n(!1), await new Promise((e => setTimeout(e, 750))) + }; + let s = null; + s = e.options?.content ? e.options.content : e.options?.url ? i.createElement("iframe", { + src: e.options.url, + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + background: "none", + outline: "none", + border: "none", + margin: 0, + padding: 0 + } + }) : i.createElement("div", null, "No content was provided."); + let a = null; + return a = e.options?.noHeader ? i.createElement("div", { + style: { + flex: "1", + position: "relative", + overflowY: "auto" + } + }, s) : i.createElement(i.Fragment, null, i.createElement("div", { + style: { + display: "flex", + height: 40, + flex: "0 0 auto", + flexDirection: "row", + alignItems: "center", + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, i.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.options?.title || ""), i.createElement(p, { + icon: o(42728), + enabled: !0, + onClick: e.handler.close, + title: "Close" + }), i.createElement("div", { + style: { + width: 10, + flex: "0 0 auto" + } + })), i.createElement("div", { + style: { + flex: "1", + position: "relative", + overflowY: "auto" + } + }, s)), i.createElement(u.Provider, { + value: e.handler + }, i.createElement("div", { + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + zIndex: 10, + display: "flex", + alignItems: "center", + justifyContent: "center", + backgroundColor: "rgba(0, 0, 0, 0.4)", + opacity: t ? 1 : 0, + transition: "opacity 0.25s", + pointerEvents: t ? "auto" : "none" + }, + onClick: t => { + e.options?.noDismiss || t.target === t.currentTarget && (t.preventDefault(), e.handler.close()) + } + }, i.createElement("div", { + style: { + width: "auto" == e.options?.width ? "auto" : "calc(100% - 20px)", + height: "auto" == e.options?.height ? "auto" : "calc(100% - 30px)", + maxWidth: "auto" == e.options?.width ? "calc(100% - 20px)" : e.options?.width || 600, + maxHeight: "auto" == e.options?.height ? "calc(100% - 30px)" : e.options?.height || 800, + overflow: "auto", + backgroundColor: l.Z.colors.darkGrey, + borderRadius: 10, + boxShadow: `0 0.4rem 0 0 ${l.Z.colors.black}, 0 0 10px 0px rgba(0, 0, 0, 0.6)`, + display: "flex", + flexDirection: "column", + alignItems: "stretch", + justifyContent: "stretch", + transform: t ? "translateY(0px)" : "translateY(50px)", + transition: "transform 0.5s" + } + }, a))) + }, + p = e => i.createElement("div", { + style: Object.assign({ + width: 24, + height: "100%", + flex: "0 0 auto", + opacity: e.enabled ? 1 : .4, + cursor: "pointer", + backgroundSize: "contain", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + backgroundImage: `url(${e.icon})` + }, e.style), + onClick: e.onClick, + title: e.title + }), + u = (0, i.createContext)(null), + g = () => (0, i.useContext)(u) + }, + 52586: (e, t, o) => { + e.exports = o.p + "mp-core/error.26d2fb4f8ac4def89ee9.svg" + }, + 95005: (e, t, o) => { + e.exports = o.p + "mp-core/info.0c158f002afb308dc5a7.svg" + }, + 82663: (e, t, o) => { + e.exports = o.p + "mp-core/question.6d37354afd90bd7bf1ff.svg" + }, + 87952: (e, t, o) => { + e.exports = o.p + "mp-core/success.6b6350a4feeebacef223.svg" + }, + 91858: (e, t, o) => { + e.exports = o.p + "mp-core/warning.dc8f3656c194cb1b13dc.svg" + }, + 4147: e => { + e.exports = { + i8: "VerseWeb 1.0 BETA" + } + } + } +]); \ No newline at end of file diff --git a/mp-core/4142.c8ef6b51843f25edb294.bundle.js b/mp-core/4142.c8ef6b51843f25edb294.bundle.js new file mode 100644 index 0000000..39e8153 --- /dev/null +++ b/mp-core/4142.c8ef6b51843f25edb294.bundle.js @@ -0,0 +1,52 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4142], { + 84142: (e, t, s) => { + s.r(t), s.d(t, { + default: () => r + }); + class r { + id = "core.render.raycast"; + name = "Raycasting"; + description = "Allows for raycasting within the scene."; + version = "1.0.0"; + provides = ["raycast"]; + requires = ["renderer", "entities"]; + onLoad() { + this.raycaster = new THREE.Raycaster, this.raycaster.near = .2, this.v2a = new THREE.Vector2 + } + get clickableObjects() { + if (this._clickableObjects && Date.now() - this._clickableObjectsLastUpdate < 1e3) return this._clickableObjects; + this._clickableObjects = []; + for (let e of metapress.entities.renderers) e.object && e.onClick && (this._clickableObjects.includes(e.object) || this._clickableObjects.push(e.object)); + for (let e of metapress.entities.modifiers) e.renderer?.object && e.onClick && (this._clickableObjects.includes(e.renderer.object) || this._clickableObjects.push(e.renderer.object)); + return this._clickableObjectsLastUpdate = Date.now(), this._clickableObjects + } + get physicalObjects() { + if (this._physicalObjects && Date.now() - this._physicalObjectsLastUpdate < 1e3) return this._physicalObjects; + this._physicalObjects = []; + let e = metapress.camera?.isFirstPerson || metapress.vr?.isActive, + t = metapress.camera.attachedEntityRenderer?.container, + s = (e, t) => { + if (!1 !== t(e)) + for (let r = 0; r < e.children.length; r++) s(e.children[r], t) + }; + return s(metapress.renderer.scene, (s => !1 !== s.isPhysicalObject && !1 !== s.entityRenderer?.entity?.physical && (!e || s != t) && (!s.geometry || void(this._physicalObjects.includes(s) || this._physicalObjects.push(s))))), this._physicalObjectsLastUpdate = Date.now(), this._physicalObjects + } + atScreenCoordinates(e, t, s = 1 / 0, r = null, i = !1, c = !1) { + let a = metapress.renderer.canvas.getBoundingClientRect(); + this.v2a.x = (e - a.left) / a.width * 2 - 1, this.v2a.y = -(t - a.top) / a.height * 2 + 1, this.raycaster.setFromCamera(this.v2a, metapress.renderer.camera), this.raycaster.far = s; + let n = this.raycaster.intersectObjects(r || this.physicalObjects, i); + if (!c) + for (let e = 0; e < n.length; e++) + if (n[e].entityRenderer = metapress.entities.rendererFromObject3D(n[e].object), n[e].entity = n[e].entityRenderer?.entity, n[e].entity) return n[e]; + for (let e = 0; e < n.length; e++) n[e].entityRenderer = metapress.entities.rendererFromObject3D(n[e].object), n[e].entity = n[e].entityRenderer?.entity, n[e].entity || (n.splice(e, 1), e--); + return n + } + clickableAtScreenCoordinates(e, t, s = 1 / 0) { + return this.atScreenCoordinates(e, t, s, this.clickableObjects, !0) + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/4148.dd6eef45d0b3aecad38f.bundle.js b/mp-core/4148.dd6eef45d0b3aecad38f.bundle.js new file mode 100644 index 0000000..9ec476d --- /dev/null +++ b/mp-core/4148.dd6eef45d0b3aecad38f.bundle.js @@ -0,0 +1,97 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4148], { + 94148: (e, t, s) => { + s.r(t), s.d(t, { + default: () => a + }); + class a { + id = "core.nametags"; + name = "Nametags"; + description = "Renders a nametag above user heads."; + version = "1.0.0"; + requires = ["renderer", "raycast", "avatars", "profile"]; + provides = ["nametags"]; + onLoad() { + document.addEventListener("mousemove", this.onMouseUpdate.bind(this), !1), document.addEventListener("mouseenter", this.onMouseUpdate.bind(this), !1), this.positionTimer = setInterval(this.updatePosition.bind(this), 500), this.v3d = new THREE.Vector3 + } + onUnload() { + document.removeEventListener("mousemove", this.onMouseUpdate), document.removeEventListener("mouseenter", this.onMouseUpdate), clearInterval(this.updatePosition) + } + async create(e, t, a, n) { + if (this.hoverOwner == n || this.creatingNametag) return; + this.creatingNametag = !0; + let i = " " + e + " "; + this.showingCanvas && metapress.contentDiv.removeChild(this.showingCanvas), this.showingCanvas = null; + let r = document.getElementsByClassName("usernametag"); + for (let e of r) metapress.contentDiv.removeChild(e); + let o = document.createElement("canvas"), + h = o.getContext("2d"); + h.textAlign = "left", h.font = "50 24px sans-serif", o.width = h.measureText(i).width, e.length < 5 && (i = " " + i + " ", o.width *= 1.2), o.style.width = o.width + "px", o.height = 32, o.style.height = o.height + "px", o.style.position = "absolute", o.style.zIndex = 999, o.style.top = a - 2 * o.height + "px", o.style.left = t - o.width / 2 + "px", o.style.borderRadius = "50px", o.className = "usernametag", h.font = "50 8px sans-serif", h.scale(2, 2), h.fillStyle = "white", h.fillText(i, o.width / 10, 11), h.globalAlpha = .8, h.globalCompositeOperation = "destination-over", h.fillStyle = "black", h.fillRect(0, 0, o.width, o.height); + let l = await new Promise(((e, t) => { + let a = new Image; + a.src = s(69003), a.onload = () => e(a), a.onerror = () => t(new Error("unable to load image.")) + })); + h.globalAlpha = 1, h.globalCompositeOperation = "source-over", h.fillStyle = "white", h.drawImage(l, 5, 2, 12, 12), this.hoverOwner = n, this.hoverUserName = e, this.showingCanvas = o, metapress.contentDiv.appendChild(o), this.creatingNametag = !1 + } + updateCanvas(e, t, s) { + let a = e.style.top.substring(0, e.style.top.length - 2), + n = e.style.left.substring(0, e.style.left.length - 2), + i = s - 2 * e.height, + r = t - e.width / 2, + o = parseFloat(i) - parseFloat(a), + h = parseFloat(r) - parseFloat(n); + e.style.transform = `translate(${h}px,${o}px)` + } + async doHoveringCheck() { + let e = null, + t = null; + if (t = document.pointerLockElement ? metapress.raycast.atScreenCoordinates(metapress.renderer.canvasRect.width / 2, metapress.renderer.canvasRect.height / 2) : metapress.raycast.atScreenCoordinates(this.mouseX, this.mouseY), t?.entityRenderer) { + if (e = t?.entityRenderer?.entity?.owner, e) { + let t = this.getUserName(e), + s = this.toScreenPosition(e); + t && s && this.create(t, s.x, s.y, e) + } else { + this.showingCanvas && metapress.contentDiv.removeChild(this.showingCanvas), this.showingCanvas = null, this.hoverOwner = null; + let e = document.getElementsByClassName("usernametag"); + for (let t of e) metapress.contentDiv.removeChild(t) + } + this.hoveringTimer = null + } else { + this.checkingHover = !1, this.showingCanvas && metapress.contentDiv.removeChild(this.showingCanvas), this.showingCanvas = null, this.hoveringTimer = null, this.hoverOwner = null; + let e = document.getElementsByClassName("usernametag"); + for (let t of e) metapress.contentDiv.removeChild(t) + } + } + onMouseUpdate(e) { + this.hoveringTimer || (this.hoveringTimer = setTimeout((() => this.doHoveringCheck()), 250)), document.pointerLockElement ? (this.mouseX = metapress.renderer.canvasRect.width / 2 + metapress.renderer.canvasRect.left, this.mouseY = metapress.renderer.canvasRect.height / 2 + metapress.renderer.canvasRect.top) : (this.mouseX = e.pageX, this.mouseY = e.pageY) + } + getUserName(e) { + return metapress.avatars.users.find((t => t.instanceID == e))?.name + } + toScreenPosition(e) { + let t = metapress.avatars.users.find((t => t.instanceID == e)); + this.v3d || (this.v3d = new THREE.Vector3); + let s = metapress.renderer.canvas; + if (!t?.avatarEntity) return null; + let a = t.avatarEntity.x, + n = t.avatarEntity.y + t.avatarEntity.avatar_height, + i = t.avatarEntity.z; + return this.v3d.set(a, n, i), this.v3d.project(metapress.renderer.camera), this.v3d.x = Math.round((this.v3d.x + 1) * s.width / 2), this.v3d.y = Math.round((1 - this.v3d.y) * s.height / 2), { + x: this.v3d.x, + y: this.v3d.y + } + } + updatePosition() { + if (this.showingCanvas && this.hoverOwner && this.hoverUserName) { + let e = this.toScreenPosition(this.hoverOwner); + e && this.updateCanvas(this.showingCanvas, e.x, e.y) + } + } + } + }, + 69003: (e, t, s) => { + e.exports = s.p + "mp-core/avatar-default.18641ec0b2a9915caf50.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/4162.410558a96e2cd1c99b72.bundle.js b/mp-core/4162.410558a96e2cd1c99b72.bundle.js new file mode 100644 index 0000000..196c8bd --- /dev/null +++ b/mp-core/4162.410558a96e2cd1c99b72.bundle.js @@ -0,0 +1,4671 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4162], { + 4162: (A, I, g) => { + g.d(I, { + ZP: () => PI, + zH: () => CI + }); + var C = g(25108); + let B; + const Q = new Array(32).fill(void 0); + + function E(A) { + return Q[A] + } + Q.push(void 0, null, !0, !1); + let i = Q.length; + + function D(A) { + const I = E(A); + return function(A) { + A < 36 || (Q[A] = i, i = A) + }(A), I + } + + function o(A) { + i === Q.length && Q.push(Q.length + 1); + const I = i; + return i = Q[I], Q[I] = A, I + } + + function G(A) { + return null == A + } + let w = new Float64Array; + + function k() { + return 0 === w.byteLength && (w = new Float64Array(B.memory.buffer)), w + } + let S = new Int32Array; + + function a() { + return 0 === S.byteLength && (S = new Int32Array(B.memory.buffer)), S + } + const M = new TextDecoder("utf-8", { + ignoreBOM: !0, + fatal: !0 + }); + M.decode(); + let K = new Uint8Array; + + function y(A, I) { + return M.decode((0 === K.byteLength && (K = new Uint8Array(B.memory.buffer)), K).subarray(A, A + I)) + } + + function J(A, I) { + if (!(A instanceof I)) throw new Error(`expected instance of ${I.name}`); + return A.ptr + } + let U = new Float32Array; + + function h() { + return 0 === U.byteLength && (U = new Float32Array(B.memory.buffer)), U + } + let N = 32; + + function F(A) { + if (1 == N) throw new Error("out of js stack"); + return Q[--N] = A, N + } + + function q(A, I) { + return h().subarray(A / 4, A / 4 + I) + } + let R = new Uint32Array; + + function s() { + return 0 === R.byteLength && (R = new Uint32Array(B.memory.buffer)), R + } + let c = 0; + + function Y(A, I) { + const g = I(4 * A.length); + return h().set(A, g / 4), c = A.length, g + } + + function L(A, I) { + const g = I(4 * A.length); + return s().set(A, g / 4), c = A.length, g + } + + function H(A, I) { + try { + return A.apply(this, I) + } catch (A) { + B.__wbindgen_exn_store(o(A)) + } + } + Object.freeze({ + Revolute: 0, + 0: "Revolute", + Fixed: 1, + 1: "Fixed", + Prismatic: 2, + 2: "Prismatic", + Spherical: 3, + 3: "Spherical", + Generic: 4, + 4: "Generic" + }), Object.freeze({ + AccelerationBased: 0, + 0: "AccelerationBased", + ForceBased: 1, + 1: "ForceBased" + }); + const l = Object.freeze({ + X: 0, + 0: "X", + Y: 1, + 1: "Y", + Z: 2, + 2: "Z", + AngX: 3, + 3: "AngX", + AngY: 4, + 4: "AngY", + AngZ: 5, + 5: "AngZ" + }); + Object.freeze({ + Dynamic: 0, + 0: "Dynamic", + Fixed: 1, + 1: "Fixed", + KinematicPositionBased: 2, + 2: "KinematicPositionBased", + KinematicVelocityBased: 3, + 3: "KinematicVelocityBased" + }), Object.freeze({ + Vertex: 0, + 0: "Vertex", + Edge: 1, + 1: "Edge", + Face: 2, + 2: "Face", + Unknown: 3, + 3: "Unknown" + }), Object.freeze({ + Ball: 0, + 0: "Ball", + Cuboid: 1, + 1: "Cuboid", + Capsule: 2, + 2: "Capsule", + Segment: 3, + 3: "Segment", + Polyline: 4, + 4: "Polyline", + Triangle: 5, + 5: "Triangle", + TriMesh: 6, + 6: "TriMesh", + HeightField: 7, + 7: "HeightField", + Compound: 8, + 8: "Compound", + ConvexPolyhedron: 9, + 9: "ConvexPolyhedron", + Cylinder: 10, + 10: "Cylinder", + Cone: 11, + 11: "Cone", + RoundCuboid: 12, + 12: "RoundCuboid", + RoundTriangle: 13, + 13: "RoundTriangle", + RoundCylinder: 14, + 14: "RoundCylinder", + RoundCone: 15, + 15: "RoundCone", + RoundConvexPolyhedron: 16, + 16: "RoundConvexPolyhedron", + HalfSpace: 17, + 17: "HalfSpace" + }); + class t { + static __wrap(A) { + const I = Object.create(t.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawbroadphase_free(A) + } + constructor() { + const A = B.rawbroadphase_new(); + return t.__wrap(A) + } + } + class p { + static __wrap(A) { + const I = Object.create(p.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawccdsolver_free(A) + } + constructor() { + const A = B.rawccdsolver_new(); + return p.__wrap(A) + } + } + class e { + static __wrap(A) { + const I = Object.create(e.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawcharactercollision_free(A) + } + constructor() { + const A = B.rawcharactercollision_new(); + return e.__wrap(A) + } + handle() { + return B.rawcharactercollision_handle(this.ptr) + } + translationApplied() { + const A = B.rawcharactercollision_translationApplied(this.ptr); + return oA.__wrap(A) + } + translationRemaining() { + const A = B.rawcharactercollision_translationRemaining(this.ptr); + return oA.__wrap(A) + } + toi() { + return B.rawcharactercollision_toi(this.ptr) + } + worldWitness1() { + const A = B.rawcharactercollision_worldWitness1(this.ptr); + return oA.__wrap(A) + } + worldWitness2() { + const A = B.rawcharactercollision_worldWitness2(this.ptr); + return oA.__wrap(A) + } + worldNormal1() { + const A = B.rawcharactercollision_worldNormal1(this.ptr); + return oA.__wrap(A) + } + worldNormal2() { + const A = B.rawcharactercollision_worldNormal2(this.ptr); + return oA.__wrap(A) + } + } + class r { + static __wrap(A) { + const I = Object.create(r.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawcolliderset_free(A) + } + coTranslation(A) { + const I = B.rawcolliderset_coTranslation(this.ptr, A); + return oA.__wrap(I) + } + coRotation(A) { + const I = B.rawcolliderset_coRotation(this.ptr, A); + return gA.__wrap(I) + } + coSetTranslation(A, I, g, C) { + B.rawcolliderset_coSetTranslation(this.ptr, A, I, g, C) + } + coSetTranslationWrtParent(A, I, g, C) { + B.rawcolliderset_coSetTranslationWrtParent(this.ptr, A, I, g, C) + } + coSetRotation(A, I, g, C, Q) { + B.rawcolliderset_coSetRotation(this.ptr, A, I, g, C, Q) + } + coSetRotationWrtParent(A, I, g, C, Q) { + B.rawcolliderset_coSetRotationWrtParent(this.ptr, A, I, g, C, Q) + } + coIsSensor(A) { + return 0 !== B.rawcolliderset_coIsSensor(this.ptr, A) + } + coShapeType(A) { + return B.rawcolliderset_coShapeType(this.ptr, A) >>> 0 + } + coHalfspaceNormal(A) { + const I = B.rawcolliderset_coHalfspaceNormal(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + coHalfExtents(A) { + const I = B.rawcolliderset_coHalfExtents(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + coSetHalfExtents(A, I) { + J(I, oA), B.rawcolliderset_coSetHalfExtents(this.ptr, A, I.ptr) + } + coRadius(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coRadius(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = h()[C / 4 + 1]; + return 0 === I ? void 0 : g + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coSetRadius(A, I) { + B.rawcolliderset_coSetRadius(this.ptr, A, I) + } + coHalfHeight(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coHalfHeight(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = h()[C / 4 + 1]; + return 0 === I ? void 0 : g + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coSetHalfHeight(A, I) { + B.rawcolliderset_coSetHalfHeight(this.ptr, A, I) + } + coRoundRadius(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coRoundRadius(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = h()[C / 4 + 1]; + return 0 === I ? void 0 : g + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coSetRoundRadius(A, I) { + B.rawcolliderset_coSetRoundRadius(this.ptr, A, I) + } + coVertices(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coVertices(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = a()[C / 4 + 1]; + let Q; + return 0 !== I && (Q = q(I, g).slice(), B.__wbindgen_free(I, 4 * g)), Q + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coIndices(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coIndices(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = a()[C / 4 + 1]; + let Q; + return 0 !== I && (Q = function(A, I) { + return s().subarray(A / 4, A / 4 + I) + }(I, g).slice(), B.__wbindgen_free(I, 4 * g)), Q + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coHeightfieldHeights(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coHeightfieldHeights(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = a()[C / 4 + 1]; + let Q; + return 0 !== I && (Q = q(I, g).slice(), B.__wbindgen_free(I, 4 * g)), Q + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coHeightfieldScale(A) { + const I = B.rawcolliderset_coHeightfieldScale(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + coHeightfieldNRows(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coHeightfieldNRows(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = a()[C / 4 + 1]; + return 0 === I ? void 0 : g >>> 0 + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coHeightfieldNCols(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coHeightfieldNCols(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = a()[C / 4 + 1]; + return 0 === I ? void 0 : g >>> 0 + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coParent(A) { + try { + const C = B.__wbindgen_add_to_stack_pointer(-16); + B.rawcolliderset_coParent(C, this.ptr, A); + var I = a()[C / 4 + 0], + g = k()[C / 8 + 1]; + return 0 === I ? void 0 : g + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + coSetEnabled(A, I) { + B.rawcolliderset_coSetEnabled(this.ptr, A, I) + } + coIsEnabled(A) { + return 0 !== B.rawcolliderset_coIsEnabled(this.ptr, A) + } + coFriction(A) { + return B.rawcolliderset_coFriction(this.ptr, A) + } + coRestitution(A) { + return B.rawcolliderset_coRestitution(this.ptr, A) + } + coDensity(A) { + return B.rawcolliderset_coDensity(this.ptr, A) + } + coMass(A) { + return B.rawcolliderset_coMass(this.ptr, A) + } + coVolume(A) { + return B.rawcolliderset_coVolume(this.ptr, A) + } + coCollisionGroups(A) { + return B.rawcolliderset_coCollisionGroups(this.ptr, A) >>> 0 + } + coSolverGroups(A) { + return B.rawcolliderset_coSolverGroups(this.ptr, A) >>> 0 + } + coActiveHooks(A) { + return B.rawcolliderset_coActiveHooks(this.ptr, A) >>> 0 + } + coActiveCollisionTypes(A) { + return B.rawcolliderset_coActiveCollisionTypes(this.ptr, A) + } + coActiveEvents(A) { + return B.rawcolliderset_coActiveEvents(this.ptr, A) >>> 0 + } + coContactForceEventThreshold(A) { + return B.rawcolliderset_coContactForceEventThreshold(this.ptr, A) + } + coContainsPoint(A, I) { + return J(I, oA), 0 !== B.rawcolliderset_coContainsPoint(this.ptr, A, I.ptr) + } + coCastShape(A, I, g, C, Q, E, i, D) { + J(I, oA), J(g, QA), J(C, oA), J(Q, gA), J(E, oA); + const o = B.rawcolliderset_coCastShape(this.ptr, A, I.ptr, g.ptr, C.ptr, Q.ptr, E.ptr, i, D); + return 0 === o ? void 0 : DA.__wrap(o) + } + coCastCollider(A, I, g, C, Q, E) { + J(I, oA), J(C, oA); + const i = B.rawcolliderset_coCastCollider(this.ptr, A, I.ptr, g, C.ptr, Q, E); + return 0 === i ? void 0 : EA.__wrap(i) + } + coIntersectsShape(A, I, g, C) { + return J(I, QA), J(g, oA), J(C, gA), 0 !== B.rawcolliderset_coIntersectsShape(this.ptr, A, I.ptr, g.ptr, C.ptr) + } + coContactShape(A, I, g, C, Q) { + J(I, QA), J(g, oA), J(C, gA); + const E = B.rawcolliderset_coContactShape(this.ptr, A, I.ptr, g.ptr, C.ptr, Q); + return 0 === E ? void 0 : iA.__wrap(E) + } + coContactCollider(A, I, g) { + const C = B.rawcolliderset_coContactCollider(this.ptr, A, I, g); + return 0 === C ? void 0 : iA.__wrap(C) + } + coProjectPoint(A, I, g) { + J(I, oA); + const C = B.rawcolliderset_coProjectPoint(this.ptr, A, I.ptr, g); + return u.__wrap(C) + } + coIntersectsRay(A, I, g, C) { + return J(I, oA), J(g, oA), 0 !== B.rawcolliderset_coIntersectsRay(this.ptr, A, I.ptr, g.ptr, C) + } + coCastRay(A, I, g, C, Q) { + return J(I, oA), J(g, oA), B.rawcolliderset_coCastRay(this.ptr, A, I.ptr, g.ptr, C, Q) + } + coCastRayAndGetNormal(A, I, g, C, Q) { + J(I, oA), J(g, oA); + const E = B.rawcolliderset_coCastRayAndGetNormal(this.ptr, A, I.ptr, g.ptr, C, Q); + return 0 === E ? void 0 : AA.__wrap(E) + } + coSetSensor(A, I) { + B.rawcolliderset_coSetSensor(this.ptr, A, I) + } + coSetRestitution(A, I) { + B.rawcolliderset_coSetRestitution(this.ptr, A, I) + } + coSetFriction(A, I) { + B.rawcolliderset_coSetFriction(this.ptr, A, I) + } + coFrictionCombineRule(A) { + return B.rawcolliderset_coFrictionCombineRule(this.ptr, A) >>> 0 + } + coSetFrictionCombineRule(A, I) { + B.rawcolliderset_coSetFrictionCombineRule(this.ptr, A, I) + } + coRestitutionCombineRule(A) { + return B.rawcolliderset_coRestitutionCombineRule(this.ptr, A) >>> 0 + } + coSetRestitutionCombineRule(A, I) { + B.rawcolliderset_coSetRestitutionCombineRule(this.ptr, A, I) + } + coSetCollisionGroups(A, I) { + B.rawcolliderset_coSetCollisionGroups(this.ptr, A, I) + } + coSetSolverGroups(A, I) { + B.rawcolliderset_coSetSolverGroups(this.ptr, A, I) + } + coSetActiveHooks(A, I) { + B.rawcolliderset_coSetActiveHooks(this.ptr, A, I) + } + coSetActiveEvents(A, I) { + B.rawcolliderset_coSetActiveEvents(this.ptr, A, I) + } + coSetActiveCollisionTypes(A, I) { + B.rawcolliderset_coSetActiveCollisionTypes(this.ptr, A, I) + } + coSetShape(A, I) { + J(I, QA), B.rawcolliderset_coSetShape(this.ptr, A, I.ptr) + } + coSetContactForceEventThreshold(A, I) { + B.rawcolliderset_coSetContactForceEventThreshold(this.ptr, A, I) + } + coSetDensity(A, I) { + B.rawcolliderset_coSetDensity(this.ptr, A, I) + } + coSetMass(A, I) { + B.rawcolliderset_coSetMass(this.ptr, A, I) + } + coSetMassProperties(A, I, g, C, Q) { + J(g, oA), J(C, oA), J(Q, gA), B.rawcolliderset_coSetMassProperties(this.ptr, A, I, g.ptr, C.ptr, Q.ptr) + } + constructor() { + const A = B.rawcolliderset_new(); + return r.__wrap(A) + } + len() { + return B.rawcolliderset_len(this.ptr) >>> 0 + } + contains(A) { + return 0 !== B.rawcolliderset_contains(this.ptr, A) + } + createCollider(A, I, g, C, Q, E, i, D, o, G, w, S, M, K, y, U, h, N, F, q, R, s, c, Y) { + try { + const l = B.__wbindgen_add_to_stack_pointer(-16); + J(I, QA), J(g, oA), J(C, gA), J(i, oA), J(D, oA), J(o, gA), J(Y, IA), B.rawcolliderset_createCollider(l, this.ptr, A, I.ptr, g.ptr, C.ptr, Q, E, i.ptr, D.ptr, o.ptr, G, w, S, M, K, y, U, h, N, F, q, R, s, c, Y.ptr); + var L = a()[l / 4 + 0], + H = k()[l / 8 + 1]; + return 0 === L ? void 0 : H + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + remove(A, I, g, C) { + J(I, f), J(g, IA), B.rawcolliderset_remove(this.ptr, A, I.ptr, g.ptr, C) + } + isHandleValid(A) { + return 0 !== B.rawcolliderset_contains(this.ptr, A) + } + forEachColliderHandle(A) { + try { + B.rawcolliderset_forEachColliderHandle(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + } + class d { + static __wrap(A) { + const I = Object.create(d.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawcontactforceevent_free(A) + } + collider1() { + return B.rawcharactercollision_handle(this.ptr) + } + collider2() { + return B.rawcontactforceevent_collider2(this.ptr) + } + total_force() { + const A = B.rawcontactforceevent_total_force(this.ptr); + return oA.__wrap(A) + } + total_force_magnitude() { + return B.rawcontactforceevent_total_force_magnitude(this.ptr) + } + max_force_direction() { + const A = B.rawcontactforceevent_max_force_direction(this.ptr); + return oA.__wrap(A) + } + max_force_magnitude() { + return B.rawcontactforceevent_max_force_magnitude(this.ptr) + } + } + class T { + static __wrap(A) { + const I = Object.create(T.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawcontactmanifold_free(A) + } + normal() { + const A = B.rawcontactmanifold_normal(this.ptr); + return oA.__wrap(A) + } + local_n1() { + const A = B.rawcontactmanifold_local_n1(this.ptr); + return oA.__wrap(A) + } + local_n2() { + const A = B.rawcontactmanifold_local_n2(this.ptr); + return oA.__wrap(A) + } + subshape1() { + return B.rawcontactmanifold_subshape1(this.ptr) >>> 0 + } + subshape2() { + return B.rawcontactmanifold_subshape2(this.ptr) >>> 0 + } + num_contacts() { + return B.rawcontactmanifold_num_contacts(this.ptr) >>> 0 + } + contact_local_p1(A) { + const I = B.rawcontactmanifold_contact_local_p1(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + contact_local_p2(A) { + const I = B.rawcontactmanifold_contact_local_p2(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + contact_dist(A) { + return B.rawcontactmanifold_contact_dist(this.ptr, A) + } + contact_fid1(A) { + return B.rawcontactmanifold_contact_fid1(this.ptr, A) >>> 0 + } + contact_fid2(A) { + return B.rawcontactmanifold_contact_fid2(this.ptr, A) >>> 0 + } + contact_impulse(A) { + return B.rawcontactmanifold_contact_impulse(this.ptr, A) + } + contact_tangent_impulse_x(A) { + return B.rawcontactmanifold_contact_tangent_impulse_x(this.ptr, A) + } + contact_tangent_impulse_y(A) { + return B.rawcontactmanifold_contact_tangent_impulse_y(this.ptr, A) + } + num_solver_contacts() { + return B.rawcontactmanifold_num_solver_contacts(this.ptr) >>> 0 + } + solver_contact_point(A) { + const I = B.rawcontactmanifold_solver_contact_point(this.ptr, A); + return 0 === I ? void 0 : oA.__wrap(I) + } + solver_contact_dist(A) { + return B.rawcontactmanifold_solver_contact_dist(this.ptr, A) + } + solver_contact_friction(A) { + return B.rawcontactmanifold_solver_contact_friction(this.ptr, A) + } + solver_contact_restitution(A) { + return B.rawcontactmanifold_solver_contact_restitution(this.ptr, A) + } + solver_contact_tangent_velocity(A) { + const I = B.rawcontactmanifold_solver_contact_tangent_velocity(this.ptr, A); + return oA.__wrap(I) + } + } + class O { + static __wrap(A) { + const I = Object.create(O.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawcontactpair_free(A) + } + collider1() { + return B.rawcontactpair_collider1(this.ptr) + } + collider2() { + return B.rawcontactpair_collider2(this.ptr) + } + numContactManifolds() { + return B.rawcontactpair_numContactManifolds(this.ptr) >>> 0 + } + contactManifold(A) { + const I = B.rawcontactpair_contactManifold(this.ptr, A); + return 0 === I ? void 0 : T.__wrap(I) + } + } + class n { + static __wrap(A) { + const I = Object.create(n.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawdebugrenderpipeline_free(A) + } + constructor() { + const A = B.rawdebugrenderpipeline_new(); + return n.__wrap(A) + } + vertices() { + return D(B.rawdebugrenderpipeline_vertices(this.ptr)) + } + colors() { + return D(B.rawdebugrenderpipeline_colors(this.ptr)) + } + render(A, I, g, C, Q) { + J(A, IA), J(I, r), J(g, j), J(C, X), J(Q, V), B.rawdebugrenderpipeline_render(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr) + } + } + class Z { + static __wrap(A) { + const I = Object.create(Z.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawdeserializedworld_free(A) + } + takeGravity() { + const A = B.rawdeserializedworld_takeGravity(this.ptr); + return 0 === A ? void 0 : oA.__wrap(A) + } + takeIntegrationParameters() { + const A = B.rawdeserializedworld_takeIntegrationParameters(this.ptr); + return 0 === A ? void 0 : x.__wrap(A) + } + takeIslandManager() { + const A = B.rawdeserializedworld_takeIslandManager(this.ptr); + return 0 === A ? void 0 : f.__wrap(A) + } + takeBroadPhase() { + const A = B.rawdeserializedworld_takeBroadPhase(this.ptr); + return 0 === A ? void 0 : t.__wrap(A) + } + takeNarrowPhase() { + const A = B.rawdeserializedworld_takeNarrowPhase(this.ptr); + return 0 === A ? void 0 : V.__wrap(A) + } + takeBodies() { + const A = B.rawdeserializedworld_takeBodies(this.ptr); + return 0 === A ? void 0 : IA.__wrap(A) + } + takeColliders() { + const A = B.rawdeserializedworld_takeColliders(this.ptr); + return 0 === A ? void 0 : r.__wrap(A) + } + takeImpulseJoints() { + const A = B.rawdeserializedworld_takeImpulseJoints(this.ptr); + return 0 === A ? void 0 : j.__wrap(A) + } + takeMultibodyJoints() { + const A = B.rawdeserializedworld_takeMultibodyJoints(this.ptr); + return 0 === A ? void 0 : X.__wrap(A) + } + } + class b { + static __wrap(A) { + const I = Object.create(b.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_raweventqueue_free(A) + } + constructor(A) { + const I = B.raweventqueue_new(A); + return b.__wrap(I) + } + drainCollisionEvents(A) { + try { + B.raweventqueue_drainCollisionEvents(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + drainContactForceEvents(A) { + try { + B.raweventqueue_drainContactForceEvents(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + clear() { + B.raweventqueue_clear(this.ptr) + } + } + class W { + static __wrap(A) { + const I = Object.create(W.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawgenericjoint_free(A) + } + static spherical(A, I) { + J(A, oA), J(I, oA); + const g = B.rawgenericjoint_spherical(A.ptr, I.ptr); + return W.__wrap(g) + } + static prismatic(A, I, g, C, Q, E) { + J(A, oA), J(I, oA), J(g, oA); + const i = B.rawgenericjoint_prismatic(A.ptr, I.ptr, g.ptr, C, Q, E); + return 0 === i ? void 0 : W.__wrap(i) + } + static fixed(A, I, g, C) { + J(A, oA), J(I, gA), J(g, oA), J(C, gA); + const Q = B.rawgenericjoint_fixed(A.ptr, I.ptr, g.ptr, C.ptr); + return W.__wrap(Q) + } + static revolute(A, I, g) { + J(A, oA), J(I, oA), J(g, oA); + const C = B.rawgenericjoint_revolute(A.ptr, I.ptr, g.ptr); + return 0 === C ? void 0 : W.__wrap(C) + } + } + class j { + static __wrap(A) { + const I = Object.create(j.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawimpulsejointset_free(A) + } + jointType(A) { + return B.rawimpulsejointset_jointType(this.ptr, A) >>> 0 + } + jointBodyHandle1(A) { + return B.rawimpulsejointset_jointBodyHandle1(this.ptr, A) + } + jointBodyHandle2(A) { + return B.rawimpulsejointset_jointBodyHandle2(this.ptr, A) + } + jointFrameX1(A) { + const I = B.rawimpulsejointset_jointFrameX1(this.ptr, A); + return gA.__wrap(I) + } + jointFrameX2(A) { + const I = B.rawimpulsejointset_jointFrameX2(this.ptr, A); + return gA.__wrap(I) + } + jointAnchor1(A) { + const I = B.rawimpulsejointset_jointAnchor1(this.ptr, A); + return oA.__wrap(I) + } + jointAnchor2(A) { + const I = B.rawimpulsejointset_jointAnchor2(this.ptr, A); + return oA.__wrap(I) + } + jointSetAnchor1(A, I) { + J(I, oA), B.rawimpulsejointset_jointSetAnchor1(this.ptr, A, I.ptr) + } + jointSetAnchor2(A, I) { + J(I, oA), B.rawimpulsejointset_jointSetAnchor2(this.ptr, A, I.ptr) + } + jointContactsEnabled(A) { + return 0 !== B.rawimpulsejointset_jointContactsEnabled(this.ptr, A) + } + jointSetContactsEnabled(A, I) { + B.rawimpulsejointset_jointSetContactsEnabled(this.ptr, A, I) + } + jointLimitsEnabled(A, I) { + return 0 !== B.rawimpulsejointset_jointLimitsEnabled(this.ptr, A, I) + } + jointLimitsMin(A, I) { + return B.rawimpulsejointset_jointLimitsMin(this.ptr, A, I) + } + jointLimitsMax(A, I) { + return B.rawimpulsejointset_jointLimitsMax(this.ptr, A, I) + } + jointSetLimits(A, I, g, C) { + B.rawimpulsejointset_jointSetLimits(this.ptr, A, I, g, C) + } + jointConfigureMotorModel(A, I, g) { + B.rawimpulsejointset_jointConfigureMotorModel(this.ptr, A, I, g) + } + jointConfigureMotorVelocity(A, I, g, C) { + B.rawimpulsejointset_jointConfigureMotorVelocity(this.ptr, A, I, g, C) + } + jointConfigureMotorPosition(A, I, g, C, Q) { + B.rawimpulsejointset_jointConfigureMotorPosition(this.ptr, A, I, g, C, Q) + } + jointConfigureMotor(A, I, g, C, Q, E) { + B.rawimpulsejointset_jointConfigureMotor(this.ptr, A, I, g, C, Q, E) + } + constructor() { + const A = B.rawimpulsejointset_new(); + return j.__wrap(A) + } + createJoint(A, I, g, C) { + return J(A, W), B.rawimpulsejointset_createJoint(this.ptr, A.ptr, I, g, C) + } + remove(A, I) { + B.rawimpulsejointset_remove(this.ptr, A, I) + } + len() { + return B.rawimpulsejointset_len(this.ptr) >>> 0 + } + contains(A) { + return 0 !== B.rawimpulsejointset_contains(this.ptr, A) + } + forEachJointHandle(A) { + try { + B.rawimpulsejointset_forEachJointHandle(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + forEachJointAttachedToRigidBody(A, I) { + try { + B.rawimpulsejointset_forEachJointAttachedToRigidBody(this.ptr, A, F(I)) + } finally { + Q[N++] = void 0 + } + } + } + class x { + static __wrap(A) { + const I = Object.create(x.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawintegrationparameters_free(A) + } + constructor() { + const A = B.rawintegrationparameters_new(); + return x.__wrap(A) + } + get dt() { + return B.rawintegrationparameters_dt(this.ptr) + } + get erp() { + return B.rawcharactercollision_toi(this.ptr) + } + get allowedLinearError() { + return B.rawintegrationparameters_allowedLinearError(this.ptr) + } + get predictionDistance() { + return B.rawintegrationparameters_predictionDistance(this.ptr) + } + get maxVelocityIterations() { + return B.rawintegrationparameters_maxVelocityIterations(this.ptr) >>> 0 + } + get maxVelocityFrictionIterations() { + return B.rawintegrationparameters_maxVelocityFrictionIterations(this.ptr) >>> 0 + } + get maxStabilizationIterations() { + return B.rawintegrationparameters_maxStabilizationIterations(this.ptr) >>> 0 + } + get minIslandSize() { + return B.rawintegrationparameters_minIslandSize(this.ptr) >>> 0 + } + get maxCcdSubsteps() { + return B.rawintegrationparameters_maxCcdSubsteps(this.ptr) >>> 0 + } + set dt(A) { + B.rawintegrationparameters_set_dt(this.ptr, A) + } + set erp(A) { + B.rawintegrationparameters_set_erp(this.ptr, A) + } + set allowedLinearError(A) { + B.rawintegrationparameters_set_allowedLinearError(this.ptr, A) + } + set predictionDistance(A) { + B.rawintegrationparameters_set_predictionDistance(this.ptr, A) + } + set maxVelocityIterations(A) { + B.rawintegrationparameters_set_maxVelocityIterations(this.ptr, A) + } + set maxVelocityFrictionIterations(A) { + B.rawintegrationparameters_set_maxVelocityFrictionIterations(this.ptr, A) + } + set maxStabilizationIterations(A) { + B.rawintegrationparameters_set_maxStabilizationIterations(this.ptr, A) + } + set minIslandSize(A) { + B.rawintegrationparameters_set_minIslandSize(this.ptr, A) + } + set maxCcdSubsteps(A) { + B.rawintegrationparameters_set_maxCcdSubsteps(this.ptr, A) + } + } + class f { + static __wrap(A) { + const I = Object.create(f.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawislandmanager_free(A) + } + constructor() { + const A = B.rawislandmanager_new(); + return f.__wrap(A) + } + forEachActiveRigidBodyHandle(A) { + try { + B.rawislandmanager_forEachActiveRigidBodyHandle(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + } + class m { + static __wrap(A) { + const I = Object.create(m.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawkinematiccharactercontroller_free(A) + } + constructor(A) { + const I = B.rawkinematiccharactercontroller_new(A); + return m.__wrap(I) + } + up() { + const A = B.rawkinematiccharactercontroller_up(this.ptr); + return oA.__wrap(A) + } + setUp(A) { + J(A, oA), B.rawkinematiccharactercontroller_setUp(this.ptr, A.ptr) + } + offset() { + return B.rawkinematiccharactercontroller_offset(this.ptr) + } + setOffset(A) { + B.rawkinematiccharactercontroller_setOffset(this.ptr, A) + } + slideEnabled() { + return 0 !== B.rawkinematiccharactercontroller_slideEnabled(this.ptr) + } + setSlideEnabled(A) { + B.rawkinematiccharactercontroller_setSlideEnabled(this.ptr, A) + } + autostepMaxHeight() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawkinematiccharactercontroller_autostepMaxHeight(g, this.ptr); + var A = a()[g / 4 + 0], + I = h()[g / 4 + 1]; + return 0 === A ? void 0 : I + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + autostepMinWidth() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawkinematiccharactercontroller_autostepMinWidth(g, this.ptr); + var A = a()[g / 4 + 0], + I = h()[g / 4 + 1]; + return 0 === A ? void 0 : I + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + autostepIncludesDynamicBodies() { + const A = B.rawkinematiccharactercontroller_autostepIncludesDynamicBodies(this.ptr); + return 16777215 === A ? void 0 : 0 !== A + } + autostepEnabled() { + return 0 !== B.rawkinematiccharactercontroller_autostepEnabled(this.ptr) + } + enableAutostep(A, I, g) { + B.rawkinematiccharactercontroller_enableAutostep(this.ptr, A, I, g) + } + disableAutostep() { + B.rawkinematiccharactercontroller_disableAutostep(this.ptr) + } + maxSlopeClimbAngle() { + return B.rawkinematiccharactercontroller_maxSlopeClimbAngle(this.ptr) + } + setMaxSlopeClimbAngle(A) { + B.rawkinematiccharactercontroller_setMaxSlopeClimbAngle(this.ptr, A) + } + minSlopeSlideAngle() { + return B.rawkinematiccharactercontroller_minSlopeSlideAngle(this.ptr) + } + setMinSlopeSlideAngle(A) { + B.rawkinematiccharactercontroller_setMinSlopeSlideAngle(this.ptr, A) + } + snapToGroundDistance() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawkinematiccharactercontroller_snapToGroundDistance(g, this.ptr); + var A = a()[g / 4 + 0], + I = h()[g / 4 + 1]; + return 0 === A ? void 0 : I + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + enableSnapToGround(A) { + B.rawkinematiccharactercontroller_enableSnapToGround(this.ptr, A) + } + disableSnapToGround() { + B.rawkinematiccharactercontroller_disableSnapToGround(this.ptr) + } + snapToGroundEnabled() { + return 0 !== B.rawkinematiccharactercontroller_snapToGroundEnabled(this.ptr) + } + computeColliderMovement(A, I, g, C, E, i, D, o, w, k, S) { + try { + J(I, IA), J(g, r), J(C, v), J(i, oA), B.rawkinematiccharactercontroller_computeColliderMovement(this.ptr, A, I.ptr, g.ptr, C.ptr, E, i.ptr, D, !G(o), G(o) ? 0 : o, w, !G(k), G(k) ? 0 : k, F(S)) + } finally { + Q[N++] = void 0 + } + } + computedMovement() { + const A = B.rawkinematiccharactercontroller_computedMovement(this.ptr); + return oA.__wrap(A) + } + computedGrounded() { + return 0 !== B.rawkinematiccharactercontroller_computedGrounded(this.ptr) + } + numComputedCollisions() { + return B.rawkinematiccharactercontroller_numComputedCollisions(this.ptr) >>> 0 + } + computedCollision(A, I) { + return J(I, e), 0 !== B.rawkinematiccharactercontroller_computedCollision(this.ptr, A, I.ptr) + } + } + class X { + static __wrap(A) { + const I = Object.create(X.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawmultibodyjointset_free(A) + } + jointType(A) { + return B.rawmultibodyjointset_jointType(this.ptr, A) >>> 0 + } + jointFrameX1(A) { + const I = B.rawmultibodyjointset_jointFrameX1(this.ptr, A); + return gA.__wrap(I) + } + jointFrameX2(A) { + const I = B.rawmultibodyjointset_jointFrameX2(this.ptr, A); + return gA.__wrap(I) + } + jointAnchor1(A) { + const I = B.rawmultibodyjointset_jointAnchor1(this.ptr, A); + return oA.__wrap(I) + } + jointAnchor2(A) { + const I = B.rawmultibodyjointset_jointAnchor2(this.ptr, A); + return oA.__wrap(I) + } + jointContactsEnabled(A) { + return 0 !== B.rawmultibodyjointset_jointContactsEnabled(this.ptr, A) + } + jointSetContactsEnabled(A, I) { + B.rawmultibodyjointset_jointSetContactsEnabled(this.ptr, A, I) + } + jointLimitsEnabled(A, I) { + return 0 !== B.rawmultibodyjointset_jointLimitsEnabled(this.ptr, A, I) + } + jointLimitsMin(A, I) { + return B.rawmultibodyjointset_jointLimitsMin(this.ptr, A, I) + } + jointLimitsMax(A, I) { + return B.rawmultibodyjointset_jointLimitsMax(this.ptr, A, I) + } + constructor() { + const A = B.rawmultibodyjointset_new(); + return X.__wrap(A) + } + createJoint(A, I, g, C) { + return J(A, W), B.rawmultibodyjointset_createJoint(this.ptr, A.ptr, I, g, C) + } + remove(A, I) { + B.rawmultibodyjointset_remove(this.ptr, A, I) + } + contains(A) { + return 0 !== B.rawmultibodyjointset_contains(this.ptr, A) + } + forEachJointHandle(A) { + try { + B.rawmultibodyjointset_forEachJointHandle(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + forEachJointAttachedToRigidBody(A, I) { + try { + B.rawmultibodyjointset_forEachJointAttachedToRigidBody(this.ptr, A, F(I)) + } finally { + Q[N++] = void 0 + } + } + } + class V { + static __wrap(A) { + const I = Object.create(V.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawnarrowphase_free(A) + } + constructor() { + const A = B.rawnarrowphase_new(); + return V.__wrap(A) + } + contacts_with(A, I) { + B.rawnarrowphase_contacts_with(this.ptr, A, o(I)) + } + contact_pair(A, I) { + const g = B.rawnarrowphase_contact_pair(this.ptr, A, I); + return 0 === g ? void 0 : O.__wrap(g) + } + intersections_with(A, I) { + B.rawnarrowphase_intersections_with(this.ptr, A, o(I)) + } + intersection_pair(A, I) { + return 0 !== B.rawnarrowphase_intersection_pair(this.ptr, A, I) + } + } + class P { + static __wrap(A) { + const I = Object.create(P.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawphysicspipeline_free(A) + } + constructor() { + const A = B.rawphysicspipeline_new(); + return P.__wrap(A) + } + step(A, I, g, C, Q, E, i, D, o, G) { + J(A, oA), J(I, x), J(g, f), J(C, t), J(Q, V), J(E, IA), J(i, r), J(D, j), J(o, X), J(G, p), B.rawphysicspipeline_step(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr, E.ptr, i.ptr, D.ptr, o.ptr, G.ptr) + } + stepWithEvents(A, I, g, C, Q, E, i, D, G, w, k, S, a, M) { + J(A, oA), J(I, x), J(g, f), J(C, t), J(Q, V), J(E, IA), J(i, r), J(D, j), J(G, X), J(w, p), J(k, b), B.rawphysicspipeline_stepWithEvents(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr, E.ptr, i.ptr, D.ptr, G.ptr, w.ptr, k.ptr, o(S), o(a), o(M)) + } + } + class z { + static __wrap(A) { + const I = Object.create(z.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawpointcolliderprojection_free(A) + } + colliderHandle() { + return B.rawpointcolliderprojection_colliderHandle(this.ptr) + } + point() { + const A = B.rawkinematiccharactercontroller_computedMovement(this.ptr); + return oA.__wrap(A) + } + isInside() { + return 0 !== B.rawkinematiccharactercontroller_computedGrounded(this.ptr) + } + featureType() { + return B.rawpointcolliderprojection_featureType(this.ptr) >>> 0 + } + featureId() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawpointcolliderprojection_featureId(g, this.ptr); + var A = a()[g / 4 + 0], + I = a()[g / 4 + 1]; + return 0 === A ? void 0 : I >>> 0 + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + } + class u { + static __wrap(A) { + const I = Object.create(u.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawpointprojection_free(A) + } + point() { + const A = B.rawkinematiccharactercontroller_computedMovement(this.ptr); + return oA.__wrap(A) + } + isInside() { + return 0 !== B.rawkinematiccharactercontroller_computedGrounded(this.ptr) + } + } + class v { + static __wrap(A) { + const I = Object.create(v.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawquerypipeline_free(A) + } + constructor() { + const A = B.rawquerypipeline_new(); + return v.__wrap(A) + } + update(A, I) { + J(A, IA), J(I, r), B.rawquerypipeline_update(this.ptr, A.ptr, I.ptr) + } + castRay(A, I, g, C, E, i, D, o, w, k, S) { + try { + J(A, IA), J(I, r), J(g, oA), J(C, oA); + const a = B.rawquerypipeline_castRay(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E, i, D, !G(o), G(o) ? 0 : o, !G(w), G(w) ? 0 : w, !G(k), G(k) ? 0 : k, F(S)); + return 0 === a ? void 0 : $.__wrap(a) + } finally { + Q[N++] = void 0 + } + } + castRayAndGetNormal(A, I, g, C, E, i, D, o, w, k, S) { + try { + J(A, IA), J(I, r), J(g, oA), J(C, oA); + const a = B.rawquerypipeline_castRayAndGetNormal(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E, i, D, !G(o), G(o) ? 0 : o, !G(w), G(w) ? 0 : w, !G(k), G(k) ? 0 : k, F(S)); + return 0 === a ? void 0 : _.__wrap(a) + } finally { + Q[N++] = void 0 + } + } + intersectionsWithRay(A, I, g, C, E, i, D, o, w, k, S, a) { + try { + J(A, IA), J(I, r), J(g, oA), J(C, oA), B.rawquerypipeline_intersectionsWithRay(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E, i, F(D), o, !G(w), G(w) ? 0 : w, !G(k), G(k) ? 0 : k, !G(S), G(S) ? 0 : S, F(a)) + } finally { + Q[N++] = void 0, Q[N++] = void 0 + } + } + intersectionWithShape(A, I, g, C, E, i, D, o, w, S) { + try { + const y = B.__wbindgen_add_to_stack_pointer(-16); + J(A, IA), J(I, r), J(g, oA), J(C, gA), J(E, QA), B.rawquerypipeline_intersectionWithShape(y, this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E.ptr, i, !G(D), G(D) ? 0 : D, !G(o), G(o) ? 0 : o, !G(w), G(w) ? 0 : w, F(S)); + var M = a()[y / 4 + 0], + K = k()[y / 8 + 1]; + return 0 === M ? void 0 : K + } finally { + B.__wbindgen_add_to_stack_pointer(16), Q[N++] = void 0 + } + } + projectPoint(A, I, g, C, E, i, D, o, w) { + try { + J(A, IA), J(I, r), J(g, oA); + const k = B.rawquerypipeline_projectPoint(this.ptr, A.ptr, I.ptr, g.ptr, C, E, !G(i), G(i) ? 0 : i, !G(D), G(D) ? 0 : D, !G(o), G(o) ? 0 : o, F(w)); + return 0 === k ? void 0 : z.__wrap(k) + } finally { + Q[N++] = void 0 + } + } + projectPointAndGetFeature(A, I, g, C, E, i, D, o) { + try { + J(A, IA), J(I, r), J(g, oA); + const w = B.rawquerypipeline_projectPointAndGetFeature(this.ptr, A.ptr, I.ptr, g.ptr, C, !G(E), G(E) ? 0 : E, !G(i), G(i) ? 0 : i, !G(D), G(D) ? 0 : D, F(o)); + return 0 === w ? void 0 : z.__wrap(w) + } finally { + Q[N++] = void 0 + } + } + intersectionsWithPoint(A, I, g, C, E, i, D, o, w) { + try { + J(A, IA), J(I, r), J(g, oA), B.rawquerypipeline_intersectionsWithPoint(this.ptr, A.ptr, I.ptr, g.ptr, F(C), E, !G(i), G(i) ? 0 : i, !G(D), G(D) ? 0 : D, !G(o), G(o) ? 0 : o, F(w)) + } finally { + Q[N++] = void 0, Q[N++] = void 0 + } + } + castShape(A, I, g, C, E, i, D, o, w, k, S, a, M) { + try { + J(A, IA), J(I, r), J(g, oA), J(C, gA), J(E, oA), J(i, QA); + const K = B.rawquerypipeline_castShape(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E.ptr, i.ptr, D, o, w, !G(k), G(k) ? 0 : k, !G(S), G(S) ? 0 : S, !G(a), G(a) ? 0 : a, F(M)); + return 0 === K ? void 0 : EA.__wrap(K) + } finally { + Q[N++] = void 0 + } + } + intersectionsWithShape(A, I, g, C, E, i, D, o, w, k, S) { + try { + J(A, IA), J(I, r), J(g, oA), J(C, gA), J(E, QA), B.rawquerypipeline_intersectionsWithShape(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, E.ptr, F(i), D, !G(o), G(o) ? 0 : o, !G(w), G(w) ? 0 : w, !G(k), G(k) ? 0 : k, F(S)) + } finally { + Q[N++] = void 0, Q[N++] = void 0 + } + } + collidersWithAabbIntersectingAabb(A, I, g) { + try { + J(A, oA), J(I, oA), B.rawquerypipeline_collidersWithAabbIntersectingAabb(this.ptr, A.ptr, I.ptr, F(g)) + } finally { + Q[N++] = void 0 + } + } + } + class _ { + static __wrap(A) { + const I = Object.create(_.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawraycolliderintersection_free(A) + } + colliderHandle() { + return B.rawcharactercollision_handle(this.ptr) + } + normal() { + const A = B.rawraycolliderintersection_normal(this.ptr); + return oA.__wrap(A) + } + toi() { + return B.rawraycolliderintersection_toi(this.ptr) + } + featureType() { + return B.rawraycolliderintersection_featureType(this.ptr) >>> 0 + } + featureId() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawraycolliderintersection_featureId(g, this.ptr); + var A = a()[g / 4 + 0], + I = a()[g / 4 + 1]; + return 0 === A ? void 0 : I >>> 0 + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + } + class $ { + static __wrap(A) { + const I = Object.create($.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawraycollidertoi_free(A) + } + colliderHandle() { + return B.rawcharactercollision_handle(this.ptr) + } + toi() { + return B.rawcharactercollision_toi(this.ptr) + } + } + class AA { + static __wrap(A) { + const I = Object.create(AA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawrayintersection_free(A) + } + normal() { + const A = B.rawcharactercollision_worldWitness1(this.ptr); + return oA.__wrap(A) + } + toi() { + return B.rawcharactercollision_toi(this.ptr) + } + featureType() { + return B.rawrayintersection_featureType(this.ptr) >>> 0 + } + featureId() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.rawrayintersection_featureId(g, this.ptr); + var A = a()[g / 4 + 0], + I = a()[g / 4 + 1]; + return 0 === A ? void 0 : I >>> 0 + } finally { + B.__wbindgen_add_to_stack_pointer(16) + } + } + } + class IA { + static __wrap(A) { + const I = Object.create(IA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawrigidbodyset_free(A) + } + rbTranslation(A) { + const I = B.rawrigidbodyset_rbTranslation(this.ptr, A); + return oA.__wrap(I) + } + rbRotation(A) { + const I = B.rawrigidbodyset_rbRotation(this.ptr, A); + return gA.__wrap(I) + } + rbSleep(A) { + B.rawrigidbodyset_rbSleep(this.ptr, A) + } + rbIsSleeping(A) { + return 0 !== B.rawrigidbodyset_rbIsSleeping(this.ptr, A) + } + rbIsMoving(A) { + return 0 !== B.rawrigidbodyset_rbIsMoving(this.ptr, A) + } + rbNextTranslation(A) { + const I = B.rawrigidbodyset_rbNextTranslation(this.ptr, A); + return oA.__wrap(I) + } + rbNextRotation(A) { + const I = B.rawrigidbodyset_rbNextRotation(this.ptr, A); + return gA.__wrap(I) + } + rbSetTranslation(A, I, g, C, Q) { + B.rawrigidbodyset_rbSetTranslation(this.ptr, A, I, g, C, Q) + } + rbSetRotation(A, I, g, C, Q, E) { + B.rawrigidbodyset_rbSetRotation(this.ptr, A, I, g, C, Q, E) + } + rbSetLinvel(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbSetLinvel(this.ptr, A, I.ptr, g) + } + rbSetAngvel(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbSetAngvel(this.ptr, A, I.ptr, g) + } + rbSetNextKinematicTranslation(A, I, g, C) { + B.rawrigidbodyset_rbSetNextKinematicTranslation(this.ptr, A, I, g, C) + } + rbSetNextKinematicRotation(A, I, g, C, Q) { + B.rawrigidbodyset_rbSetNextKinematicRotation(this.ptr, A, I, g, C, Q) + } + rbRecomputeMassPropertiesFromColliders(A, I) { + J(I, r), B.rawrigidbodyset_rbRecomputeMassPropertiesFromColliders(this.ptr, A, I.ptr) + } + rbSetAdditionalMass(A, I, g) { + B.rawrigidbodyset_rbSetAdditionalMass(this.ptr, A, I, g) + } + rbSetAdditionalMassProperties(A, I, g, C, Q, E) { + J(g, oA), J(C, oA), J(Q, gA), B.rawrigidbodyset_rbSetAdditionalMassProperties(this.ptr, A, I, g.ptr, C.ptr, Q.ptr, E) + } + rbLinvel(A) { + const I = B.rawrigidbodyset_rbLinvel(this.ptr, A); + return oA.__wrap(I) + } + rbAngvel(A) { + const I = B.rawrigidbodyset_rbAngvel(this.ptr, A); + return oA.__wrap(I) + } + rbLockTranslations(A, I, g) { + B.rawrigidbodyset_rbLockTranslations(this.ptr, A, I, g) + } + rbSetEnabledTranslations(A, I, g, C, Q) { + B.rawrigidbodyset_rbSetEnabledTranslations(this.ptr, A, I, g, C, Q) + } + rbLockRotations(A, I, g) { + B.rawrigidbodyset_rbLockRotations(this.ptr, A, I, g) + } + rbSetEnabledRotations(A, I, g, C, Q) { + B.rawrigidbodyset_rbSetEnabledRotations(this.ptr, A, I, g, C, Q) + } + rbDominanceGroup(A) { + return B.rawrigidbodyset_rbDominanceGroup(this.ptr, A) + } + rbSetDominanceGroup(A, I) { + B.rawrigidbodyset_rbSetDominanceGroup(this.ptr, A, I) + } + rbEnableCcd(A, I) { + B.rawrigidbodyset_rbEnableCcd(this.ptr, A, I) + } + rbMass(A) { + return B.rawrigidbodyset_rbMass(this.ptr, A) + } + rbInvMass(A) { + return B.rawrigidbodyset_rbInvMass(this.ptr, A) + } + rbEffectiveInvMass(A) { + const I = B.rawrigidbodyset_rbEffectiveInvMass(this.ptr, A); + return oA.__wrap(I) + } + rbLocalCom(A) { + const I = B.rawrigidbodyset_rbLocalCom(this.ptr, A); + return oA.__wrap(I) + } + rbWorldCom(A) { + const I = B.rawrigidbodyset_rbWorldCom(this.ptr, A); + return oA.__wrap(I) + } + rbInvPrincipalInertiaSqrt(A) { + const I = B.rawrigidbodyset_rbInvPrincipalInertiaSqrt(this.ptr, A); + return oA.__wrap(I) + } + rbPrincipalInertiaLocalFrame(A) { + const I = B.rawrigidbodyset_rbPrincipalInertiaLocalFrame(this.ptr, A); + return gA.__wrap(I) + } + rbPrincipalInertia(A) { + const I = B.rawrigidbodyset_rbPrincipalInertia(this.ptr, A); + return oA.__wrap(I) + } + rbEffectiveWorldInvInertiaSqrt(A) { + const I = B.rawrigidbodyset_rbEffectiveWorldInvInertiaSqrt(this.ptr, A); + return CA.__wrap(I) + } + rbEffectiveAngularInertia(A) { + const I = B.rawrigidbodyset_rbEffectiveAngularInertia(this.ptr, A); + return CA.__wrap(I) + } + rbWakeUp(A) { + B.rawrigidbodyset_rbWakeUp(this.ptr, A) + } + rbIsCcdEnabled(A) { + return 0 !== B.rawrigidbodyset_rbIsCcdEnabled(this.ptr, A) + } + rbNumColliders(A) { + return B.rawrigidbodyset_rbNumColliders(this.ptr, A) >>> 0 + } + rbCollider(A, I) { + return B.rawrigidbodyset_rbCollider(this.ptr, A, I) + } + rbBodyType(A) { + return B.rawrigidbodyset_rbBodyType(this.ptr, A) >>> 0 + } + rbSetBodyType(A, I, g) { + B.rawrigidbodyset_rbSetBodyType(this.ptr, A, I, g) + } + rbIsFixed(A) { + return 0 !== B.rawrigidbodyset_rbIsFixed(this.ptr, A) + } + rbIsKinematic(A) { + return 0 !== B.rawrigidbodyset_rbIsKinematic(this.ptr, A) + } + rbIsDynamic(A) { + return 0 !== B.rawrigidbodyset_rbIsDynamic(this.ptr, A) + } + rbLinearDamping(A) { + return B.rawrigidbodyset_rbLinearDamping(this.ptr, A) + } + rbAngularDamping(A) { + return B.rawrigidbodyset_rbAngularDamping(this.ptr, A) + } + rbSetLinearDamping(A, I) { + B.rawrigidbodyset_rbSetLinearDamping(this.ptr, A, I) + } + rbSetAngularDamping(A, I) { + B.rawrigidbodyset_rbSetAngularDamping(this.ptr, A, I) + } + rbSetEnabled(A, I) { + B.rawrigidbodyset_rbSetEnabled(this.ptr, A, I) + } + rbIsEnabled(A) { + return 0 !== B.rawrigidbodyset_rbIsEnabled(this.ptr, A) + } + rbGravityScale(A) { + return B.rawrigidbodyset_rbGravityScale(this.ptr, A) + } + rbSetGravityScale(A, I, g) { + B.rawrigidbodyset_rbSetGravityScale(this.ptr, A, I, g) + } + rbResetForces(A, I) { + B.rawrigidbodyset_rbResetForces(this.ptr, A, I) + } + rbResetTorques(A, I) { + B.rawrigidbodyset_rbResetTorques(this.ptr, A, I) + } + rbAddForce(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbAddForce(this.ptr, A, I.ptr, g) + } + rbApplyImpulse(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbApplyImpulse(this.ptr, A, I.ptr, g) + } + rbAddTorque(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbAddTorque(this.ptr, A, I.ptr, g) + } + rbApplyTorqueImpulse(A, I, g) { + J(I, oA), B.rawrigidbodyset_rbApplyTorqueImpulse(this.ptr, A, I.ptr, g) + } + rbAddForceAtPoint(A, I, g, C) { + J(I, oA), J(g, oA), B.rawrigidbodyset_rbAddForceAtPoint(this.ptr, A, I.ptr, g.ptr, C) + } + rbApplyImpulseAtPoint(A, I, g, C) { + J(I, oA), J(g, oA), B.rawrigidbodyset_rbApplyImpulseAtPoint(this.ptr, A, I.ptr, g.ptr, C) + } + rbUserData(A) { + return B.rawrigidbodyset_rbUserData(this.ptr, A) >>> 0 + } + rbSetUserData(A, I) { + B.rawrigidbodyset_rbSetUserData(this.ptr, A, I) + } + constructor() { + const A = B.rawrigidbodyset_new(); + return IA.__wrap(A) + } + createRigidBody(A, I, g, C, Q, E, i, D, o, G, w, k, S, a, M, K, y, U, h, N, F, q, R, s) { + return J(I, oA), J(g, gA), J(i, oA), J(D, oA), J(o, oA), J(G, oA), J(w, gA), B.rawrigidbodyset_createRigidBody(this.ptr, A, I.ptr, g.ptr, C, Q, E, i.ptr, D.ptr, o.ptr, G.ptr, w.ptr, k, S, a, M, K, y, U, h, N, F, q, R, s) + } + remove(A, I, g, C, Q) { + J(I, f), J(g, r), J(C, j), J(Q, X), B.rawrigidbodyset_remove(this.ptr, A, I.ptr, g.ptr, C.ptr, Q.ptr) + } + len() { + return B.rawrigidbodyset_len(this.ptr) >>> 0 + } + contains(A) { + return 0 !== B.rawrigidbodyset_contains(this.ptr, A) + } + forEachRigidBodyHandle(A) { + try { + B.rawrigidbodyset_forEachRigidBodyHandle(this.ptr, F(A)) + } finally { + Q[N++] = void 0 + } + } + propagateModifiedBodyPositionsToColliders(A) { + J(A, r), B.rawrigidbodyset_propagateModifiedBodyPositionsToColliders(this.ptr, A.ptr) + } + } + class gA { + static __wrap(A) { + const I = Object.create(gA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawrotation_free(A) + } + constructor(A, I, g, C) { + const Q = B.rawrotation_new(A, I, g, C); + return gA.__wrap(Q) + } + static identity() { + const A = B.rawrotation_identity(); + return gA.__wrap(A) + } + get x() { + return B.rawintegrationparameters_dt(this.ptr) + } + get y() { + return B.rawrotation_y(this.ptr) + } + get z() { + return B.rawcharactercollision_toi(this.ptr) + } + get w() { + return B.rawrotation_w(this.ptr) + } + } + class CA { + static __wrap(A) { + const I = Object.create(CA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawsdpmatrix3_free(A) + } + elements() { + return D(B.rawsdpmatrix3_elements(this.ptr)) + } + } + class BA { + static __wrap(A) { + const I = Object.create(BA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawserializationpipeline_free(A) + } + constructor() { + const A = B.rawserializationpipeline_new(); + return BA.__wrap(A) + } + serializeAll(A, I, g, C, Q, E, i, o, G) { + return J(A, oA), J(I, x), J(g, f), J(C, t), J(Q, V), J(E, IA), J(i, r), J(o, j), J(G, X), D(B.rawserializationpipeline_serializeAll(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr, E.ptr, i.ptr, o.ptr, G.ptr)) + } + deserializeAll(A) { + const I = B.rawserializationpipeline_deserializeAll(this.ptr, o(A)); + return 0 === I ? void 0 : Z.__wrap(I) + } + } + class QA { + static __wrap(A) { + const I = Object.create(QA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawshape_free(A) + } + static cuboid(A, I, g) { + const C = B.rawshape_cuboid(A, I, g); + return QA.__wrap(C) + } + static roundCuboid(A, I, g, C) { + const Q = B.rawshape_roundCuboid(A, I, g, C); + return QA.__wrap(Q) + } + static ball(A) { + const I = B.rawshape_ball(A); + return QA.__wrap(I) + } + static halfspace(A) { + J(A, oA); + const I = B.rawshape_halfspace(A.ptr); + return QA.__wrap(I) + } + static capsule(A, I) { + const g = B.rawshape_capsule(A, I); + return QA.__wrap(g) + } + static cylinder(A, I) { + const g = B.rawshape_cylinder(A, I); + return QA.__wrap(g) + } + static roundCylinder(A, I, g) { + const C = B.rawshape_roundCylinder(A, I, g); + return QA.__wrap(C) + } + static cone(A, I) { + const g = B.rawshape_cone(A, I); + return QA.__wrap(g) + } + static roundCone(A, I, g) { + const C = B.rawshape_roundCone(A, I, g); + return QA.__wrap(C) + } + static polyline(A, I) { + const g = Y(A, B.__wbindgen_malloc), + C = c, + Q = L(I, B.__wbindgen_malloc), + E = c, + i = B.rawshape_polyline(g, C, Q, E); + return QA.__wrap(i) + } + static trimesh(A, I) { + const g = Y(A, B.__wbindgen_malloc), + C = c, + Q = L(I, B.__wbindgen_malloc), + E = c, + i = B.rawshape_trimesh(g, C, Q, E); + return QA.__wrap(i) + } + static heightfield(A, I, g, C) { + const Q = Y(g, B.__wbindgen_malloc), + E = c; + J(C, oA); + const i = B.rawshape_heightfield(A, I, Q, E, C.ptr); + return QA.__wrap(i) + } + static segment(A, I) { + J(A, oA), J(I, oA); + const g = B.rawshape_segment(A.ptr, I.ptr); + return QA.__wrap(g) + } + static triangle(A, I, g) { + J(A, oA), J(I, oA), J(g, oA); + const C = B.rawshape_triangle(A.ptr, I.ptr, g.ptr); + return QA.__wrap(C) + } + static roundTriangle(A, I, g, C) { + J(A, oA), J(I, oA), J(g, oA); + const Q = B.rawshape_roundTriangle(A.ptr, I.ptr, g.ptr, C); + return QA.__wrap(Q) + } + static convexHull(A) { + const I = Y(A, B.__wbindgen_malloc), + g = c, + C = B.rawshape_convexHull(I, g); + return 0 === C ? void 0 : QA.__wrap(C) + } + static roundConvexHull(A, I) { + const g = Y(A, B.__wbindgen_malloc), + C = c, + Q = B.rawshape_roundConvexHull(g, C, I); + return 0 === Q ? void 0 : QA.__wrap(Q) + } + static convexMesh(A, I) { + const g = Y(A, B.__wbindgen_malloc), + C = c, + Q = L(I, B.__wbindgen_malloc), + E = c, + i = B.rawshape_convexMesh(g, C, Q, E); + return 0 === i ? void 0 : QA.__wrap(i) + } + static roundConvexMesh(A, I, g) { + const C = Y(A, B.__wbindgen_malloc), + Q = c, + E = L(I, B.__wbindgen_malloc), + i = c, + D = B.rawshape_roundConvexMesh(C, Q, E, i, g); + return 0 === D ? void 0 : QA.__wrap(D) + } + castShape(A, I, g, C, Q, E, i, D, o) { + J(A, oA), J(I, gA), J(g, oA), J(C, QA), J(Q, oA), J(E, gA), J(i, oA); + const G = B.rawshape_castShape(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr, E.ptr, i.ptr, D, o); + return 0 === G ? void 0 : DA.__wrap(G) + } + intersectsShape(A, I, g, C, Q) { + return J(A, oA), J(I, gA), J(g, QA), J(C, oA), J(Q, gA), 0 !== B.rawshape_intersectsShape(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr) + } + contactShape(A, I, g, C, Q, E) { + J(A, oA), J(I, gA), J(g, QA), J(C, oA), J(Q, gA); + const i = B.rawshape_contactShape(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q.ptr, E); + return 0 === i ? void 0 : iA.__wrap(i) + } + containsPoint(A, I, g) { + return J(A, oA), J(I, gA), J(g, oA), 0 !== B.rawshape_containsPoint(this.ptr, A.ptr, I.ptr, g.ptr) + } + projectPoint(A, I, g, C) { + J(A, oA), J(I, gA), J(g, oA); + const Q = B.rawshape_projectPoint(this.ptr, A.ptr, I.ptr, g.ptr, C); + return u.__wrap(Q) + } + intersectsRay(A, I, g, C, Q) { + return J(A, oA), J(I, gA), J(g, oA), J(C, oA), 0 !== B.rawshape_intersectsRay(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q) + } + castRay(A, I, g, C, Q, E) { + return J(A, oA), J(I, gA), J(g, oA), J(C, oA), B.rawshape_castRay(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q, E) + } + castRayAndGetNormal(A, I, g, C, Q, E) { + J(A, oA), J(I, gA), J(g, oA), J(C, oA); + const i = B.rawshape_castRayAndGetNormal(this.ptr, A.ptr, I.ptr, g.ptr, C.ptr, Q, E); + return 0 === i ? void 0 : AA.__wrap(i) + } + } + class EA { + static __wrap(A) { + const I = Object.create(EA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawshapecollidertoi_free(A) + } + colliderHandle() { + return B.rawcharactercollision_handle(this.ptr) + } + toi() { + return B.rawcharactercollision_toi(this.ptr) + } + witness1() { + const A = B.rawcharactercollision_worldWitness1(this.ptr); + return oA.__wrap(A) + } + witness2() { + const A = B.rawshapecollidertoi_witness2(this.ptr); + return oA.__wrap(A) + } + normal1() { + const A = B.rawcharactercollision_worldNormal1(this.ptr); + return oA.__wrap(A) + } + normal2() { + const A = B.rawshapecollidertoi_normal2(this.ptr); + return oA.__wrap(A) + } + } + class iA { + static __wrap(A) { + const I = Object.create(iA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawshapecontact_free(A) + } + distance() { + return B.rawshapecontact_distance(this.ptr) + } + point1() { + const A = B.rawkinematiccharactercontroller_computedMovement(this.ptr); + return oA.__wrap(A) + } + point2() { + const A = B.rawcharactercollision_worldWitness1(this.ptr); + return oA.__wrap(A) + } + normal1() { + const A = B.rawshapecollidertoi_witness2(this.ptr); + return oA.__wrap(A) + } + normal2() { + const A = B.rawcharactercollision_worldNormal1(this.ptr); + return oA.__wrap(A) + } + } + class DA { + static __wrap(A) { + const I = Object.create(DA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawshapetoi_free(A) + } + toi() { + return B.rawintegrationparameters_dt(this.ptr) + } + witness1() { + const A = B.rawshapetoi_witness1(this.ptr); + return oA.__wrap(A) + } + witness2() { + const A = B.rawcontactforceevent_total_force(this.ptr); + return oA.__wrap(A) + } + normal1() { + const A = B.rawshapetoi_normal1(this.ptr); + return oA.__wrap(A) + } + normal2() { + const A = B.rawshapetoi_normal2(this.ptr); + return oA.__wrap(A) + } + } + class oA { + static __wrap(A) { + const I = Object.create(oA.prototype); + return I.ptr = A, I + } + __destroy_into_raw() { + const A = this.ptr; + return this.ptr = 0, A + } + free() { + const A = this.__destroy_into_raw(); + B.__wbg_rawvector_free(A) + } + static zero() { + const A = B.rawvector_zero(); + return oA.__wrap(A) + } + constructor(A, I, g) { + const C = B.rawvector_new(A, I, g); + return oA.__wrap(C) + } + get x() { + return B.rawintegrationparameters_dt(this.ptr) + } + set x(A) { + B.rawintegrationparameters_set_dt(this.ptr, A) + } + get y() { + return B.rawrotation_y(this.ptr) + } + set y(A) { + B.rawvector_set_y(this.ptr, A) + } + get z() { + return B.rawcharactercollision_toi(this.ptr) + } + set z(A) { + B.rawintegrationparameters_set_erp(this.ptr, A) + } + xyz() { + const A = B.rawvector_xyz(this.ptr); + return oA.__wrap(A) + } + yxz() { + const A = B.rawvector_yxz(this.ptr); + return oA.__wrap(A) + } + zxy() { + const A = B.rawvector_zxy(this.ptr); + return oA.__wrap(A) + } + xzy() { + const A = B.rawvector_xzy(this.ptr); + return oA.__wrap(A) + } + yzx() { + const A = B.rawvector_yzx(this.ptr); + return oA.__wrap(A) + } + zyx() { + const A = B.rawvector_zyx(this.ptr); + return oA.__wrap(A) + } + } + async function GA(A) { + void 0 === A && (A = new URL("rapier_wasm3d_bg.wasm", "")); + const I = function() { + const A = { + wbg: {} + }; + return A.wbg.__wbindgen_object_drop_ref = function(A) { + D(A) + }, A.wbg.__wbindgen_number_new = function(A) { + return o(A) + }, A.wbg.__wbindgen_number_get = function(A, I) { + const g = E(I), + C = "number" == typeof g ? g : void 0; + k()[A / 8 + 1] = G(C) ? 0 : C, a()[A / 4 + 0] = !G(C) + }, A.wbg.__wbindgen_boolean_get = function(A) { + const I = E(A); + return "boolean" == typeof I ? I ? 1 : 0 : 2 + }, A.wbg.__wbindgen_is_function = function(A) { + return "function" == typeof E(A) + }, A.wbg.__wbg_rawraycolliderintersection_new = function(A) { + return o(_.__wrap(A)) + }, A.wbg.__wbg_rawcontactforceevent_new = function(A) { + return o(d.__wrap(A)) + }, A.wbg.__wbg_call_168da88779e35f61 = function() { + return H((function(A, I, g) { + return o(E(A).call(E(I), E(g))) + }), arguments) + }, A.wbg.__wbg_call_3999bee59e9f7719 = function() { + return H((function(A, I, g, C) { + return o(E(A).call(E(I), E(g), E(C))) + }), arguments) + }, A.wbg.__wbg_call_e1f72c051cdab859 = function() { + return H((function(A, I, g, C, B) { + return o(E(A).call(E(I), E(g), E(C), E(B))) + }), arguments) + }, A.wbg.__wbg_bind_10dfe70e95d2a480 = function(A, I, g, C) { + return o(E(A).bind(E(I), E(g), E(C))) + }, A.wbg.__wbg_buffer_3f3d764d4747d564 = function(A) { + return o(E(A).buffer) + }, A.wbg.__wbg_newwithbyteoffsetandlength_d9aa266703cb98be = function(A, I, g) { + return o(new Uint8Array(E(A), I >>> 0, g >>> 0)) + }, A.wbg.__wbg_new_8c3f0052272a457a = function(A) { + return o(new Uint8Array(E(A))) + }, A.wbg.__wbg_set_83db9690f9353e79 = function(A, I, g) { + E(A).set(E(I), g >>> 0) + }, A.wbg.__wbg_length_9e1ae1900cb0fbd5 = function(A) { + return E(A).length + }, A.wbg.__wbg_newwithbyteoffsetandlength_be22e5fcf4f69ab4 = function(A, I, g) { + return o(new Float32Array(E(A), I >>> 0, g >>> 0)) + }, A.wbg.__wbg_set_0e0314cf6675c1b9 = function(A, I, g) { + E(A).set(E(I), g >>> 0) + }, A.wbg.__wbg_length_9a2deed95d22668d = function(A) { + return E(A).length + }, A.wbg.__wbg_newwithlength_a7168e4a1e8f5e12 = function(A) { + return o(new Float32Array(A >>> 0)) + }, A.wbg.__wbindgen_throw = function(A, I) { + throw new Error(y(A, I)) + }, A.wbg.__wbindgen_memory = function() { + return o(B.memory) + }, A + }(); + ("string" == typeof A || "function" == typeof Request && A instanceof Request || "function" == typeof URL && A instanceof URL) && (A = fetch(A)); + const { + instance: g, + module: Q + } = await async function(A, I) { + if ("function" == typeof Response && A instanceof Response) { + if ("function" == typeof WebAssembly.instantiateStreaming) try { + return await WebAssembly.instantiateStreaming(A, I) + } catch (I) { + if ("application/wasm" == A.headers.get("Content-Type")) throw I; + C.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", I) + } + const g = await A.arrayBuffer(); + return await WebAssembly.instantiate(g, I) + } { + const g = await WebAssembly.instantiate(A, I); + return g instanceof WebAssembly.Instance ? { + instance: g, + module: A + } : g + } + }(await A, I); + return function(A, I) { + return B = A.exports, GA.__wbindgen_wasm_module = I, U = new Float32Array, w = new Float64Array, S = new Int32Array, R = new Uint32Array, K = new Uint8Array, B + }(g, Q) + } + class wA { + constructor(A, I, g) { + this.x = A, this.y = I, this.z = g + } + } + class kA { + static new(A, I, g) { + return new wA(A, I, g) + } + static intoRaw(A) { + return new oA(A.x, A.y, A.z) + } + static zeros() { + return kA.new(0, 0, 0) + } + static fromRaw(A) { + if (!A) return null; + let I = kA.new(A.x, A.y, A.z); + return A.free(), I + } + static copy(A, I) { + A.x = I.x, A.y = I.y, A.z = I.z + } + } + class SA { + constructor(A, I, g, C) { + this.x = A, this.y = I, this.z = g, this.w = C + } + } + class aA { + static identity() { + return new SA(0, 0, 0, 1) + } + static fromRaw(A) { + if (!A) return null; + let I = new SA(A.x, A.y, A.z, A.w); + return A.free(), I + } + static intoRaw(A) { + return new gA(A.x, A.y, A.z, A.w) + } + static copy(A, I) { + A.x = I.x, A.y = I.y, A.z = I.z, A.w = I.w + } + } + class MA { + constructor(A) { + this.elements = A + } + get m11() { + return this.elements[0] + } + get m12() { + return this.elements[1] + } + get m21() { + return this.m12 + } + get m13() { + return this.elements[2] + } + get m31() { + return this.m13 + } + get m22() { + return this.elements[3] + } + get m23() { + return this.elements[4] + } + get m32() { + return this.m23 + } + get m33() { + return this.elements[5] + } + } + class KA { + static fromRaw(A) { + const I = new MA(A.elements()); + return A.free(), I + } + } + var yA, JA, UA, hA, NA, FA, qA, RA, sA, cA, YA, LA; + ! function(A) { + A[A.Dynamic = 0] = "Dynamic", A[A.Fixed = 1] = "Fixed", A[A.KinematicPositionBased = 2] = "KinematicPositionBased", A[A.KinematicVelocityBased = 3] = "KinematicVelocityBased" + }(yA || (yA = {})); + class HA { + constructor(A, I, g) { + this.rawSet = A, this.colliderSet = I, this.handle = g + } + finalizeDeserialization(A) { + this.colliderSet = A + } + isValid() { + return this.rawSet.contains(this.handle) + } + lockTranslations(A, I) { + return this.rawSet.rbLockTranslations(this.handle, A, I) + } + lockRotations(A, I) { + return this.rawSet.rbLockRotations(this.handle, A, I) + } + setEnabledTranslations(A, I, g, C) { + return this.rawSet.rbSetEnabledTranslations(this.handle, A, I, g, C) + } + restrictTranslations(A, I, g, C) { + this.setEnabledTranslations(A, I, g, C) + } + setEnabledRotations(A, I, g, C) { + return this.rawSet.rbSetEnabledRotations(this.handle, A, I, g, C) + } + restrictRotations(A, I, g, C) { + this.setEnabledRotations(A, I, g, C) + } + dominanceGroup() { + return this.rawSet.rbDominanceGroup(this.handle) + } + setDominanceGroup(A) { + this.rawSet.rbSetDominanceGroup(this.handle, A) + } + enableCcd(A) { + this.rawSet.rbEnableCcd(this.handle, A) + } + translation() { + let A = this.rawSet.rbTranslation(this.handle); + return kA.fromRaw(A) + } + rotation() { + let A = this.rawSet.rbRotation(this.handle); + return aA.fromRaw(A) + } + nextTranslation() { + let A = this.rawSet.rbNextTranslation(this.handle); + return kA.fromRaw(A) + } + nextRotation() { + let A = this.rawSet.rbNextRotation(this.handle); + return aA.fromRaw(A) + } + setTranslation(A, I) { + this.rawSet.rbSetTranslation(this.handle, A.x, A.y, A.z, I) + } + setLinvel(A, I) { + let g = kA.intoRaw(A); + this.rawSet.rbSetLinvel(this.handle, g, I), g.free() + } + gravityScale() { + return this.rawSet.rbGravityScale(this.handle) + } + setGravityScale(A, I) { + this.rawSet.rbSetGravityScale(this.handle, A, I) + } + setRotation(A, I) { + this.rawSet.rbSetRotation(this.handle, A.x, A.y, A.z, A.w, I) + } + setAngvel(A, I) { + let g = kA.intoRaw(A); + this.rawSet.rbSetAngvel(this.handle, g, I), g.free() + } + setNextKinematicTranslation(A) { + this.rawSet.rbSetNextKinematicTranslation(this.handle, A.x, A.y, A.z) + } + setNextKinematicRotation(A) { + this.rawSet.rbSetNextKinematicRotation(this.handle, A.x, A.y, A.z, A.w) + } + linvel() { + return kA.fromRaw(this.rawSet.rbLinvel(this.handle)) + } + angvel() { + return kA.fromRaw(this.rawSet.rbAngvel(this.handle)) + } + mass() { + return this.rawSet.rbMass(this.handle) + } + effectiveInvMass() { + return kA.fromRaw(this.rawSet.rbEffectiveInvMass(this.handle)) + } + invMass() { + return this.rawSet.rbInvMass(this.handle) + } + localCom() { + return kA.fromRaw(this.rawSet.rbLocalCom(this.handle)) + } + worldCom() { + return kA.fromRaw(this.rawSet.rbWorldCom(this.handle)) + } + invPrincipalInertiaSqrt() { + return kA.fromRaw(this.rawSet.rbInvPrincipalInertiaSqrt(this.handle)) + } + principalInertia() { + return kA.fromRaw(this.rawSet.rbPrincipalInertia(this.handle)) + } + principalInertiaLocalFrame() { + return aA.fromRaw(this.rawSet.rbPrincipalInertiaLocalFrame(this.handle)) + } + effectiveWorldInvInertiaSqrt() { + return KA.fromRaw(this.rawSet.rbEffectiveWorldInvInertiaSqrt(this.handle)) + } + effectiveAngularInertia() { + return KA.fromRaw(this.rawSet.rbEffectiveAngularInertia(this.handle)) + } + sleep() { + this.rawSet.rbSleep(this.handle) + } + wakeUp() { + this.rawSet.rbWakeUp(this.handle) + } + isCcdEnabled() { + return this.rawSet.rbIsCcdEnabled(this.handle) + } + numColliders() { + return this.rawSet.rbNumColliders(this.handle) + } + collider(A) { + return this.colliderSet.get(this.rawSet.rbCollider(this.handle, A)) + } + setEnabled(A) { + this.rawSet.rbSetEnabled(this.handle, A) + } + isEnabled() { + return this.rawSet.rbIsEnabled(this.handle) + } + bodyType() { + return this.rawSet.rbBodyType(this.handle) + } + setBodyType(A, I) { + return this.rawSet.rbSetBodyType(this.handle, A, I) + } + isSleeping() { + return this.rawSet.rbIsSleeping(this.handle) + } + isMoving() { + return this.rawSet.rbIsMoving(this.handle) + } + isFixed() { + return this.rawSet.rbIsFixed(this.handle) + } + isKinematic() { + return this.rawSet.rbIsKinematic(this.handle) + } + isDynamic() { + return this.rawSet.rbIsDynamic(this.handle) + } + linearDamping() { + return this.rawSet.rbLinearDamping(this.handle) + } + angularDamping() { + return this.rawSet.rbAngularDamping(this.handle) + } + setLinearDamping(A) { + this.rawSet.rbSetLinearDamping(this.handle, A) + } + recomputeMassPropertiesFromColliders() { + this.rawSet.rbRecomputeMassPropertiesFromColliders(this.handle, this.colliderSet.raw) + } + setAdditionalMass(A, I) { + this.rawSet.rbSetAdditionalMass(this.handle, A, I) + } + setAdditionalMassProperties(A, I, g, C, B) { + let Q = kA.intoRaw(I), + E = kA.intoRaw(g), + i = aA.intoRaw(C); + this.rawSet.rbSetAdditionalMassProperties(this.handle, A, Q, E, i, B), Q.free(), E.free(), i.free() + } + setAngularDamping(A) { + this.rawSet.rbSetAngularDamping(this.handle, A) + } + resetForces(A) { + this.rawSet.rbResetForces(this.handle, A) + } + resetTorques(A) { + this.rawSet.rbResetTorques(this.handle, A) + } + addForce(A, I) { + const g = kA.intoRaw(A); + this.rawSet.rbAddForce(this.handle, g, I), g.free() + } + applyImpulse(A, I) { + const g = kA.intoRaw(A); + this.rawSet.rbApplyImpulse(this.handle, g, I), g.free() + } + addTorque(A, I) { + const g = kA.intoRaw(A); + this.rawSet.rbAddTorque(this.handle, g, I), g.free() + } + applyTorqueImpulse(A, I) { + const g = kA.intoRaw(A); + this.rawSet.rbApplyTorqueImpulse(this.handle, g, I), g.free() + } + addForceAtPoint(A, I, g) { + const C = kA.intoRaw(A), + B = kA.intoRaw(I); + this.rawSet.rbAddForceAtPoint(this.handle, C, B, g), C.free(), B.free() + } + applyImpulseAtPoint(A, I, g) { + const C = kA.intoRaw(A), + B = kA.intoRaw(I); + this.rawSet.rbApplyImpulseAtPoint(this.handle, C, B, g), C.free(), B.free() + } + } + class lA { + constructor(A) { + this.enabled = !0, this.status = A, this.translation = kA.zeros(), this.rotation = aA.identity(), this.gravityScale = 1, this.linvel = kA.zeros(), this.mass = 0, this.massOnly = !1, this.centerOfMass = kA.zeros(), this.translationsEnabledX = !0, this.translationsEnabledY = !0, this.angvel = kA.zeros(), this.principalAngularInertia = kA.zeros(), this.angularInertiaLocalFrame = aA.identity(), this.translationsEnabledZ = !0, this.rotationsEnabledX = !0, this.rotationsEnabledY = !0, this.rotationsEnabledZ = !0, this.linearDamping = 0, this.angularDamping = 0, this.canSleep = !0, this.sleeping = !1, this.ccdEnabled = !1, this.dominanceGroup = 0 + } + static dynamic() { + return new lA(yA.Dynamic) + } + static kinematicPositionBased() { + return new lA(yA.KinematicPositionBased) + } + static kinematicVelocityBased() { + return new lA(yA.KinematicVelocityBased) + } + static fixed() { + return new lA(yA.Fixed) + } + static newDynamic() { + return new lA(yA.Dynamic) + } + static newKinematicPositionBased() { + return new lA(yA.KinematicPositionBased) + } + static newKinematicVelocityBased() { + return new lA(yA.KinematicVelocityBased) + } + static newStatic() { + return new lA(yA.Fixed) + } + setDominanceGroup(A) { + return this.dominanceGroup = A, this + } + setEnabled(A) { + return this.enabled = A, this + } + setTranslation(A, I, g) { + if ("number" != typeof A || "number" != typeof I || "number" != typeof g) throw TypeError("The translation components must be numbers."); + return this.translation = { + x: A, + y: I, + z: g + }, this + } + setRotation(A) { + return aA.copy(this.rotation, A), this + } + setGravityScale(A) { + return this.gravityScale = A, this + } + setAdditionalMass(A) { + return this.mass = A, this.massOnly = !0, this + } + setLinvel(A, I, g) { + if ("number" != typeof A || "number" != typeof I || "number" != typeof g) throw TypeError("The linvel components must be numbers."); + return this.linvel = { + x: A, + y: I, + z: g + }, this + } + setAngvel(A) { + return kA.copy(this.angvel, A), this + } + setAdditionalMassProperties(A, I, g, C) { + return this.mass = A, kA.copy(this.centerOfMass, I), kA.copy(this.principalAngularInertia, g), aA.copy(this.angularInertiaLocalFrame, C), this.massOnly = !1, this + } + enabledTranslations(A, I, g) { + return this.translationsEnabledX = A, this.translationsEnabledY = I, this.translationsEnabledZ = g, this + } + restrictTranslations(A, I, g) { + return this.enabledTranslations(A, I, g) + } + lockTranslations() { + return this.enabledTranslations(!1, !1, !1) + } + enabledRotations(A, I, g) { + return this.rotationsEnabledX = A, this.rotationsEnabledY = I, this.rotationsEnabledZ = g, this + } + restrictRotations(A, I, g) { + return this.enabledRotations(A, I, g) + } + lockRotations() { + return this.restrictRotations(!1, !1, !1) + } + setLinearDamping(A) { + return this.linearDamping = A, this + } + setAngularDamping(A) { + return this.angularDamping = A, this + } + setCanSleep(A) { + return this.canSleep = A, this + } + setSleeping(A) { + return this.sleeping = A, this + } + setCcdEnabled(A) { + return this.ccdEnabled = A, this + } + setUserData(A) { + return this.userData = A, this + } + } + class tA { + constructor() { + this.fconv = new Float64Array(1), this.uconv = new Uint32Array(this.fconv.buffer), this.data = new Array, this.size = 0 + } + set(A, I) { + let g = this.index(A); + for (; this.data.length <= g;) this.data.push(null); + null == this.data[g] && (this.size += 1), this.data[g] = I + } + len() { + return this.size + } + delete(A) { + let I = this.index(A); + I < this.data.length && (null != this.data[I] && (this.size -= 1), this.data[I] = null) + } + clear() { + this.data = new Array + } + get(A) { + let I = this.index(A); + return I < this.data.length ? this.data[I] : null + } + forEach(A) { + for (const I of this.data) null != I && A(I) + } + getAll() { + return this.data.filter((A => null != A)) + } + index(A) { + return this.fconv[0] = A, this.uconv[0] + } + } + class pA { + constructor(A) { + this.raw = A || new IA, this.map = new tA, A && A.forEachRigidBodyHandle((I => { + this.map.set(I, new HA(A, null, I)) + })) + } + free() { + this.raw && this.raw.free(), this.raw = void 0, this.map && this.map.clear(), this.map = void 0 + } + finalizeDeserialization(A) { + this.map.forEach((I => I.finalizeDeserialization(A))) + } + createRigidBody(A, I) { + let g = kA.intoRaw(I.translation), + C = aA.intoRaw(I.rotation), + B = kA.intoRaw(I.linvel), + Q = kA.intoRaw(I.centerOfMass), + E = kA.intoRaw(I.angvel), + i = kA.intoRaw(I.principalAngularInertia), + D = aA.intoRaw(I.angularInertiaLocalFrame), + o = this.raw.createRigidBody(I.enabled, g, C, I.gravityScale, I.mass, I.massOnly, Q, B, E, i, D, I.translationsEnabledX, I.translationsEnabledY, I.translationsEnabledZ, I.rotationsEnabledX, I.rotationsEnabledY, I.rotationsEnabledZ, I.linearDamping, I.angularDamping, I.status, I.canSleep, I.sleeping, I.ccdEnabled, I.dominanceGroup); + g.free(), C.free(), B.free(), Q.free(), E.free(), i.free(), D.free(); + const G = new HA(this.raw, A, o); + return G.userData = I.userData, this.map.set(o, G), G + } + remove(A, I, g, C, B) { + for (let I = 0; I < this.raw.rbNumColliders(A); I += 1) g.unmap(this.raw.rbCollider(A, I)); + C.forEachJointHandleAttachedToRigidBody(A, (A => C.unmap(A))), B.forEachJointHandleAttachedToRigidBody(A, (A => B.unmap(A))), this.raw.remove(A, I.raw, g.raw, C.raw, B.raw), this.map.delete(A) + } + len() { + return this.map.len() + } + contains(A) { + return null != this.get(A) + } + get(A) { + return this.map.get(A) + } + forEach(A) { + this.map.forEach(A) + } + forEachActiveRigidBody(A, I) { + A.forEachActiveRigidBodyHandle((A => { + I(this.get(A)) + })) + } + getAll() { + return this.map.getAll() + } + } + class eA { + constructor(A) { + this.raw = A || new x + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + get dt() { + return this.raw.dt + } + get erp() { + return this.raw.erp + } + get allowedLinearError() { + return this.raw.allowedLinearError + } + get predictionDistance() { + return this.raw.predictionDistance + } + get maxVelocityIterations() { + return this.raw.maxVelocityIterations + } + get maxVelocityFrictionIterations() { + return this.raw.maxVelocityFrictionIterations + } + get maxStabilizationIterations() { + return this.raw.maxStabilizationIterations + } + get minIslandSize() { + return this.raw.minIslandSize + } + get maxCcdSubsteps() { + return this.raw.maxCcdSubsteps + } + set dt(A) { + this.raw.dt = A + } + set erp(A) { + this.raw.erp = A + } + set allowedLinearError(A) { + this.raw.allowedLinearError = A + } + set predictionDistance(A) { + this.raw.predictionDistance = A + } + set maxVelocityIterations(A) { + this.raw.maxVelocityIterations = A + } + set maxVelocityFrictionIterations(A) { + this.raw.maxVelocityFrictionIterations = A + } + set maxStabilizationIterations(A) { + this.raw.maxStabilizationIterations = A + } + set minIslandSize(A) { + this.raw.minIslandSize = A + } + set maxCcdSubsteps(A) { + this.raw.maxCcdSubsteps = A + } + }! function(A) { + A[A.Revolute = 0] = "Revolute", A[A.Fixed = 1] = "Fixed", A[A.Prismatic = 2] = "Prismatic", A[A.Spherical = 3] = "Spherical" + }(JA || (JA = {})), + function(A) { + A[A.AccelerationBased = 0] = "AccelerationBased", A[A.ForceBased = 1] = "ForceBased" + }(UA || (UA = {})); + class rA { + constructor(A, I, g) { + this.rawSet = A, this.bodySet = I, this.handle = g + } + static newTyped(A, I, g) { + switch (A.jointType(g)) { + case JA.Revolute: + return new nA(A, I, g); + case JA.Prismatic: + return new OA(A, I, g); + case JA.Fixed: + return new TA(A, I, g); + case JA.Spherical: + return new ZA(A, I, g); + default: + return new rA(A, I, g) + } + } + finalizeDeserialization(A) { + this.bodySet = A + } + isValid() { + return this.rawSet.contains(this.handle) + } + body1() { + return this.bodySet.get(this.rawSet.jointBodyHandle1(this.handle)) + } + body2() { + return this.bodySet.get(this.rawSet.jointBodyHandle2(this.handle)) + } + type() { + return this.rawSet.jointType(this.handle) + } + frameX1() { + return aA.fromRaw(this.rawSet.jointFrameX1(this.handle)) + } + frameX2() { + return aA.fromRaw(this.rawSet.jointFrameX2(this.handle)) + } + anchor1() { + return kA.fromRaw(this.rawSet.jointAnchor1(this.handle)) + } + anchor2() { + return kA.fromRaw(this.rawSet.jointAnchor2(this.handle)) + } + setAnchor1(A) { + const I = kA.intoRaw(A); + this.rawSet.jointSetAnchor1(this.handle, I), I.free() + } + setAnchor2(A) { + const I = kA.intoRaw(A); + this.rawSet.jointSetAnchor2(this.handle, I), I.free() + } + setContactsEnabled(A) { + this.rawSet.jointSetContactsEnabled(this.handle, A) + } + contactsEnabled() { + return this.rawSet.jointContactsEnabled(this.handle) + } + } + class dA extends rA { + limitsEnabled() { + return this.rawSet.jointLimitsEnabled(this.handle, this.rawAxis()) + } + limitsMin() { + return this.rawSet.jointLimitsMin(this.handle, this.rawAxis()) + } + limitsMax() { + return this.rawSet.jointLimitsMax(this.handle, this.rawAxis()) + } + setLimits(A, I) { + this.rawSet.jointSetLimits(this.handle, this.rawAxis(), A, I) + } + configureMotorModel(A) { + this.rawSet.jointConfigureMotorModel(this.handle, this.rawAxis(), A) + } + configureMotorVelocity(A, I) { + this.rawSet.jointConfigureMotorVelocity(this.handle, this.rawAxis(), A, I) + } + configureMotorPosition(A, I, g) { + this.rawSet.jointConfigureMotorPosition(this.handle, this.rawAxis(), A, I, g) + } + configureMotor(A, I, g, C) { + this.rawSet.jointConfigureMotor(this.handle, this.rawAxis(), A, I, g, C) + } + } + class TA extends rA {} + class OA extends dA { + rawAxis() { + return l.X + } + } + class nA extends dA { + rawAxis() { + return l.AngX + } + } + class ZA extends rA {} + class bA { + constructor() {} + static fixed(A, I, g, C) { + let B = new bA; + return B.anchor1 = A, B.anchor2 = g, B.frame1 = I, B.frame2 = C, B.jointType = JA.Fixed, B + } + static spherical(A, I) { + let g = new bA; + return g.anchor1 = A, g.anchor2 = I, g.jointType = JA.Spherical, g + } + static prismatic(A, I, g) { + let C = new bA; + return C.anchor1 = A, C.anchor2 = I, C.axis = g, C.jointType = JA.Prismatic, C + } + static revolute(A, I, g) { + let C = new bA; + return C.anchor1 = A, C.anchor2 = I, C.axis = g, C.jointType = JA.Revolute, C + } + intoRaw() { + let A, I, g = kA.intoRaw(this.anchor1), + C = kA.intoRaw(this.anchor2), + B = !1, + Q = 0, + E = 0; + switch (this.jointType) { + case JA.Fixed: + let i = aA.intoRaw(this.frame1), + D = aA.intoRaw(this.frame2); + I = W.fixed(g, i, C, D), i.free(), D.free(); + break; + case JA.Prismatic: + A = kA.intoRaw(this.axis), this.limitsEnabled && (B = !0, Q = this.limits[0], E = this.limits[1]), I = W.prismatic(g, C, A, B, Q, E), A.free(); + break; + case JA.Spherical: + I = W.spherical(g, C); + break; + case JA.Revolute: + A = kA.intoRaw(this.axis), I = W.revolute(g, C, A), A.free() + } + return g.free(), C.free(), I + } + } + class WA { + constructor(A) { + this.raw = A || new j, this.map = new tA, A && A.forEachJointHandle((I => { + this.map.set(I, rA.newTyped(A, null, I)) + })) + } + free() { + this.raw && this.raw.free(), this.raw = void 0, this.map && this.map.clear(), this.map = void 0 + } + finalizeDeserialization(A) { + this.map.forEach((I => I.finalizeDeserialization(A))) + } + createJoint(A, I, g, C, B) { + const Q = I.intoRaw(), + E = this.raw.createJoint(Q, g, C, B); + Q.free(); + let i = rA.newTyped(this.raw, A, E); + return this.map.set(E, i), i + } + remove(A, I) { + this.raw.remove(A, I), this.unmap(A) + } + forEachJointHandleAttachedToRigidBody(A, I) { + this.raw.forEachJointAttachedToRigidBody(A, I) + } + unmap(A) { + this.map.delete(A) + } + len() { + return this.map.len() + } + contains(A) { + return null != this.get(A) + } + get(A) { + return this.map.get(A) + } + forEach(A) { + this.map.forEach(A) + } + getAll() { + return this.map.getAll() + } + } + class jA { + constructor(A, I) { + this.rawSet = A, this.handle = I + } + static newTyped(A, I) { + switch (A.jointType(I)) { + case JA.Revolute: + return new XA(A, I); + case JA.Prismatic: + return new mA(A, I); + case JA.Fixed: + return new fA(A, I); + case JA.Spherical: + return new VA(A, I); + default: + return new jA(A, I) + } + } + isValid() { + return this.rawSet.contains(this.handle) + } + setContactsEnabled(A) { + this.rawSet.jointSetContactsEnabled(this.handle, A) + } + contactsEnabled() { + return this.rawSet.jointContactsEnabled(this.handle) + } + } + class xA extends jA {} + class fA extends jA {} + class mA extends xA { + rawAxis() { + return l.X + } + } + class XA extends xA { + rawAxis() { + return l.AngX + } + } + class VA extends jA {} + class PA { + constructor(A) { + this.raw = A || new X, this.map = new tA, A && A.forEachJointHandle((A => { + this.map.set(A, jA.newTyped(this.raw, A)) + })) + } + free() { + this.raw && this.raw.free(), this.raw = void 0, this.map && this.map.clear(), this.map = void 0 + } + createJoint(A, I, g, C) { + const B = A.intoRaw(), + Q = this.raw.createJoint(B, I, g, C); + B.free(); + let E = jA.newTyped(this.raw, Q); + return this.map.set(Q, E), E + } + remove(A, I) { + this.raw.remove(A, I), this.map.delete(A) + } + unmap(A) { + this.map.delete(A) + } + len() { + return this.map.len() + } + contains(A) { + return null != this.get(A) + } + get(A) { + return this.map.get(A) + } + forEach(A) { + this.map.forEach(A) + } + forEachJointHandleAttachedToRigidBody(A, I) { + this.raw.forEachJointAttachedToRigidBody(A, I) + } + getAll() { + return this.map.getAll() + } + }! function(A) { + A[A.Average = 0] = "Average", A[A.Min = 1] = "Min", A[A.Multiply = 2] = "Multiply", A[A.Max = 3] = "Max" + }(hA || (hA = {})); + class zA { + constructor(A) { + this.raw = A || new p + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + } + class uA { + constructor(A) { + this.raw = A || new f + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + forEachActiveRigidBodyHandle(A) { + this.raw.forEachActiveRigidBodyHandle(A) + } + } + class vA { + constructor(A) { + this.raw = A || new t + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + } + class _A { + constructor(A) { + this.raw = A || new V, this.tempManifold = new $A(null) + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + contactsWith(A, I) { + this.raw.contacts_with(A, I) + } + intersectionsWith(A, I) { + this.raw.intersections_with(A, I) + } + contactPair(A, I, g) { + const C = this.raw.contact_pair(A, I); + if (C) { + const I = C.collider1() != A; + let B; + for (B = 0; B < C.numContactManifolds(); ++B) this.tempManifold.raw = C.contactManifold(B), this.tempManifold.raw && g(this.tempManifold, I), this.tempManifold.free(); + C.free() + } + } + intersectionPair(A, I) { + return this.raw.intersection_pair(A, I) + } + } + class $A { + constructor(A) { + this.raw = A + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + normal() { + return kA.fromRaw(this.raw.normal()) + } + localNormal1() { + return kA.fromRaw(this.raw.local_n1()) + } + localNormal2() { + return kA.fromRaw(this.raw.local_n2()) + } + subshape1() { + return this.raw.subshape1() + } + subshape2() { + return this.raw.subshape2() + } + numContacts() { + return this.raw.num_contacts() + } + localContactPoint1(A) { + return kA.fromRaw(this.raw.contact_local_p1(A)) + } + localContactPoint2(A) { + return kA.fromRaw(this.raw.contact_local_p2(A)) + } + contactDist(A) { + return this.raw.contact_dist(A) + } + contactFid1(A) { + return this.raw.contact_fid1(A) + } + contactFid2(A) { + return this.raw.contact_fid2(A) + } + contactImpulse(A) { + return this.raw.contact_impulse(A) + } + contactTangentImpulseX(A) { + return this.raw.contact_tangent_impulse_x(A) + } + contactTangentImpulseY(A) { + return this.raw.contact_tangent_impulse_y(A) + } + numSolverContacts() { + return this.raw.num_solver_contacts() + } + solverContactPoint(A) { + return kA.fromRaw(this.raw.solver_contact_point(A)) + } + solverContactDist(A) { + return this.raw.solver_contact_dist(A) + } + solverContactFriction(A) { + return this.raw.solver_contact_friction(A) + } + solverContactRestitution(A) { + return this.raw.solver_contact_restitution(A) + } + solverContactTangentVelocity(A) { + return kA.fromRaw(this.raw.solver_contact_tangent_velocity(A)) + } + } + class AI { + constructor(A, I, g, C, B) { + this.distance = A, this.point1 = I, this.point2 = g, this.normal1 = C, this.normal2 = B + } + static fromRaw(A) { + if (!A) return null; + const I = new AI(A.distance(), kA.fromRaw(A.point1()), kA.fromRaw(A.point2()), kA.fromRaw(A.normal1()), kA.fromRaw(A.normal2())); + return A.free(), I + } + }! function(A) { + A[A.Vertex = 0] = "Vertex", A[A.Edge = 1] = "Edge", A[A.Face = 2] = "Face", A[A.Unknown = 3] = "Unknown" + }(NA || (NA = {})); + class II { + constructor(A, I) { + this.point = A, this.isInside = I + } + static fromRaw(A) { + if (!A) return null; + const I = new II(kA.fromRaw(A.point()), A.isInside()); + return A.free(), I + } + } + class gI { + constructor(A, I, g, C, B) { + this.featureType = NA.Unknown, this.featureId = void 0, this.collider = A, this.point = I, this.isInside = g, void 0 !== B && (this.featureId = B), void 0 !== C && (this.featureType = C) + } + static fromRaw(A, I) { + if (!I) return null; + const g = new gI(A.get(I.colliderHandle()), kA.fromRaw(I.point()), I.isInside(), I.featureType(), I.featureId()); + return I.free(), g + } + } + class CI { + constructor(A, I) { + this.origin = A, this.dir = I + } + pointAt(A) { + return { + x: this.origin.x + this.dir.x * A, + y: this.origin.y + this.dir.y * A, + z: this.origin.z + this.dir.z * A + } + } + } + class BI { + constructor(A, I, g, C) { + this.featureType = NA.Unknown, this.featureId = void 0, this.toi = A, this.normal = I, void 0 !== C && (this.featureId = C), void 0 !== g && (this.featureType = g) + } + static fromRaw(A) { + if (!A) return null; + const I = new BI(A.toi(), kA.fromRaw(A.normal()), A.featureType(), A.featureId()); + return A.free(), I + } + } + class QI { + constructor(A, I, g, C, B) { + this.featureType = NA.Unknown, this.featureId = void 0, this.collider = A, this.toi = I, this.normal = g, void 0 !== B && (this.featureId = B), void 0 !== C && (this.featureType = C) + } + static fromRaw(A, I) { + if (!I) return null; + const g = new QI(A.get(I.colliderHandle()), I.toi(), kA.fromRaw(I.normal()), I.featureType(), I.featureId()); + return I.free(), g + } + } + class EI { + constructor(A, I) { + this.collider = A, this.toi = I + } + static fromRaw(A, I) { + if (!I) return null; + const g = new EI(A.get(I.colliderHandle()), I.toi()); + return I.free(), g + } + } + class iI { + constructor(A, I, g, C, B) { + this.toi = A, this.witness1 = I, this.witness2 = g, this.normal1 = C, this.normal2 = B + } + static fromRaw(A, I) { + if (!I) return null; + const g = new iI(I.toi(), kA.fromRaw(I.witness1()), kA.fromRaw(I.witness2()), kA.fromRaw(I.normal1()), kA.fromRaw(I.normal2())); + return I.free(), g + } + } + class DI extends iI { + constructor(A, I, g, C, B, Q) { + super(I, g, C, B, Q), this.collider = A + } + static fromRaw(A, I) { + if (!I) return null; + const g = new DI(A.get(I.colliderHandle()), I.toi(), kA.fromRaw(I.witness1()), kA.fromRaw(I.witness2()), kA.fromRaw(I.normal1()), kA.fromRaw(I.normal2())); + return I.free(), g + } + } + class oI { + static fromRaw(A, I) { + const g = A.coShapeType(I); + let C, B, Q, E, i, D, o; + switch (g) { + case FA.Ball: + return new GI(A.coRadius(I)); + case FA.Cuboid: + return C = A.coHalfExtents(I), new kI(C.x, C.y, C.z); + case FA.RoundCuboid: + return C = A.coHalfExtents(I), B = A.coRoundRadius(I), new SI(C.x, C.y, C.z, B); + case FA.Capsule: + return i = A.coHalfHeight(I), D = A.coRadius(I), new aI(i, D); + case FA.Segment: + return Q = A.coVertices(I), new MI(kA.new(Q[0], Q[1], Q[2]), kA.new(Q[3], Q[4], Q[5])); + case FA.Polyline: + return Q = A.coVertices(I), E = A.coIndices(I), new JI(Q, E); + case FA.Triangle: + return Q = A.coVertices(I), new KI(kA.new(Q[0], Q[1], Q[2]), kA.new(Q[3], Q[4], Q[5]), kA.new(Q[6], Q[7], Q[8])); + case FA.RoundTriangle: + return Q = A.coVertices(I), B = A.coRoundRadius(I), new yI(kA.new(Q[0], Q[1], Q[2]), kA.new(Q[3], Q[4], Q[5]), kA.new(Q[6], Q[7], Q[8]), B); + case FA.HalfSpace: + return o = kA.fromRaw(A.coHalfspaceNormal(I)), new wI(o); + case FA.TriMesh: + return Q = A.coVertices(I), E = A.coIndices(I), new UI(Q, E); + case FA.HeightField: + const G = A.coHeightfieldScale(I), + w = A.coHeightfieldHeights(I), + k = A.coHeightfieldNRows(I), + S = A.coHeightfieldNCols(I); + return new FI(k, S, w, G); + case FA.ConvexPolyhedron: + return Q = A.coVertices(I), E = A.coIndices(I), new hI(Q, E); + case FA.RoundConvexPolyhedron: + return Q = A.coVertices(I), E = A.coIndices(I), B = A.coRoundRadius(I), new NI(Q, E, B); + case FA.Cylinder: + return i = A.coHalfHeight(I), D = A.coRadius(I), new qI(i, D); + case FA.RoundCylinder: + return i = A.coHalfHeight(I), D = A.coRadius(I), B = A.coRoundRadius(I), new RI(i, D, B); + case FA.Cone: + return i = A.coHalfHeight(I), D = A.coRadius(I), new sI(i, D); + case FA.RoundCone: + return i = A.coHalfHeight(I), D = A.coRadius(I), B = A.coRoundRadius(I), new cI(i, D, B); + default: + throw new Error("unknown shape type: " + g) + } + } + castShape(A, I, g, C, B, Q, E, i, D) { + let o = kA.intoRaw(A), + G = aA.intoRaw(I), + w = kA.intoRaw(g), + k = kA.intoRaw(B), + S = aA.intoRaw(Q), + a = kA.intoRaw(E), + M = this.intoRaw(), + K = C.intoRaw(), + y = iI.fromRaw(null, M.castShape(o, G, w, K, k, S, a, i, D)); + return o.free(), G.free(), w.free(), k.free(), S.free(), a.free(), M.free(), K.free(), y + } + intersectsShape(A, I, g, C, B) { + let Q = kA.intoRaw(A), + E = aA.intoRaw(I), + i = kA.intoRaw(C), + D = aA.intoRaw(B), + o = this.intoRaw(), + G = g.intoRaw(), + w = o.intersectsShape(Q, E, G, i, D); + return Q.free(), E.free(), i.free(), D.free(), o.free(), G.free(), w + } + contactShape(A, I, g, C, B, Q) { + let E = kA.intoRaw(A), + i = aA.intoRaw(I), + D = kA.intoRaw(C), + o = aA.intoRaw(B), + G = this.intoRaw(), + w = g.intoRaw(), + k = AI.fromRaw(G.contactShape(E, i, w, D, o, Q)); + return E.free(), i.free(), D.free(), o.free(), G.free(), w.free(), k + } + containsPoint(A, I, g) { + let C = kA.intoRaw(A), + B = aA.intoRaw(I), + Q = kA.intoRaw(g), + E = this.intoRaw(), + i = E.containsPoint(C, B, Q); + return C.free(), B.free(), Q.free(), E.free(), i + } + projectPoint(A, I, g, C) { + let B = kA.intoRaw(A), + Q = aA.intoRaw(I), + E = kA.intoRaw(g), + i = this.intoRaw(), + D = II.fromRaw(i.projectPoint(B, Q, E, C)); + return B.free(), Q.free(), E.free(), i.free(), D + } + intersectsRay(A, I, g, C) { + let B = kA.intoRaw(I), + Q = aA.intoRaw(g), + E = kA.intoRaw(A.origin), + i = kA.intoRaw(A.dir), + D = this.intoRaw(), + o = D.intersectsRay(B, Q, E, i, C); + return B.free(), Q.free(), E.free(), i.free(), D.free(), o + } + castRay(A, I, g, C, B) { + let Q = kA.intoRaw(I), + E = aA.intoRaw(g), + i = kA.intoRaw(A.origin), + D = kA.intoRaw(A.dir), + o = this.intoRaw(), + G = o.castRay(Q, E, i, D, C, B); + return Q.free(), E.free(), i.free(), D.free(), o.free(), G + } + castRayAndGetNormal(A, I, g, C, B) { + let Q = kA.intoRaw(I), + E = aA.intoRaw(g), + i = kA.intoRaw(A.origin), + D = kA.intoRaw(A.dir), + o = this.intoRaw(), + G = BI.fromRaw(o.castRayAndGetNormal(Q, E, i, D, C, B)); + return Q.free(), E.free(), i.free(), D.free(), o.free(), G + } + }! function(A) { + A[A.Ball = 0] = "Ball", A[A.Cuboid = 1] = "Cuboid", A[A.Capsule = 2] = "Capsule", A[A.Segment = 3] = "Segment", A[A.Polyline = 4] = "Polyline", A[A.Triangle = 5] = "Triangle", A[A.TriMesh = 6] = "TriMesh", A[A.HeightField = 7] = "HeightField", A[A.ConvexPolyhedron = 9] = "ConvexPolyhedron", A[A.Cylinder = 10] = "Cylinder", A[A.Cone = 11] = "Cone", A[A.RoundCuboid = 12] = "RoundCuboid", A[A.RoundTriangle = 13] = "RoundTriangle", A[A.RoundCylinder = 14] = "RoundCylinder", A[A.RoundCone = 15] = "RoundCone", A[A.RoundConvexPolyhedron = 16] = "RoundConvexPolyhedron", A[A.HalfSpace = 17] = "HalfSpace" + }(FA || (FA = {})); + class GI extends oI { + constructor(A) { + super(), this.type = FA.Ball, this.radius = A + } + intoRaw() { + return QA.ball(this.radius) + } + } + class wI extends oI { + constructor(A) { + super(), this.type = FA.HalfSpace, this.normal = A + } + intoRaw() { + let A = kA.intoRaw(this.normal), + I = QA.halfspace(A); + return A.free(), I + } + } + class kI extends oI { + constructor(A, I, g) { + super(), this.type = FA.Cuboid, this.halfExtents = kA.new(A, I, g) + } + intoRaw() { + return QA.cuboid(this.halfExtents.x, this.halfExtents.y, this.halfExtents.z) + } + } + class SI extends oI { + constructor(A, I, g, C) { + super(), this.type = FA.RoundCuboid, this.halfExtents = kA.new(A, I, g), this.borderRadius = C + } + intoRaw() { + return QA.roundCuboid(this.halfExtents.x, this.halfExtents.y, this.halfExtents.z, this.borderRadius) + } + } + class aI extends oI { + constructor(A, I) { + super(), this.type = FA.Capsule, this.halfHeight = A, this.radius = I + } + intoRaw() { + return QA.capsule(this.halfHeight, this.radius) + } + } + class MI extends oI { + constructor(A, I) { + super(), this.type = FA.Segment, this.a = A, this.b = I + } + intoRaw() { + let A = kA.intoRaw(this.a), + I = kA.intoRaw(this.b), + g = QA.segment(A, I); + return A.free(), I.free(), g + } + } + class KI extends oI { + constructor(A, I, g) { + super(), this.type = FA.Triangle, this.a = A, this.b = I, this.c = g + } + intoRaw() { + let A = kA.intoRaw(this.a), + I = kA.intoRaw(this.b), + g = kA.intoRaw(this.c), + C = QA.triangle(A, I, g); + return A.free(), I.free(), g.free(), C + } + } + class yI extends oI { + constructor(A, I, g, C) { + super(), this.type = FA.RoundTriangle, this.a = A, this.b = I, this.c = g, this.borderRadius = C + } + intoRaw() { + let A = kA.intoRaw(this.a), + I = kA.intoRaw(this.b), + g = kA.intoRaw(this.c), + C = QA.roundTriangle(A, I, g, this.borderRadius); + return A.free(), I.free(), g.free(), C + } + } + class JI extends oI { + constructor(A, I) { + super(), this.type = FA.Polyline, this.vertices = A, this.indices = null != I ? I : new Uint32Array(0) + } + intoRaw() { + return QA.polyline(this.vertices, this.indices) + } + } + class UI extends oI { + constructor(A, I) { + super(), this.type = FA.TriMesh, this.vertices = A, this.indices = I + } + intoRaw() { + return QA.trimesh(this.vertices, this.indices) + } + } + class hI extends oI { + constructor(A, I) { + super(), this.type = FA.ConvexPolyhedron, this.vertices = A, this.indices = I + } + intoRaw() { + return this.indices ? QA.convexMesh(this.vertices, this.indices) : QA.convexHull(this.vertices) + } + } + class NI extends oI { + constructor(A, I, g) { + super(), this.type = FA.RoundConvexPolyhedron, this.vertices = A, this.indices = I, this.borderRadius = g + } + intoRaw() { + return this.indices ? QA.roundConvexMesh(this.vertices, this.indices, this.borderRadius) : QA.roundConvexHull(this.vertices, this.borderRadius) + } + } + class FI extends oI { + constructor(A, I, g, C) { + super(), this.type = FA.HeightField, this.nrows = A, this.ncols = I, this.heights = g, this.scale = C + } + intoRaw() { + let A = kA.intoRaw(this.scale), + I = QA.heightfield(this.nrows, this.ncols, this.heights, A); + return A.free(), I + } + } + class qI extends oI { + constructor(A, I) { + super(), this.type = FA.Cylinder, this.halfHeight = A, this.radius = I + } + intoRaw() { + return QA.cylinder(this.halfHeight, this.radius) + } + } + class RI extends oI { + constructor(A, I, g) { + super(), this.type = FA.RoundCylinder, this.borderRadius = g, this.halfHeight = A, this.radius = I + } + intoRaw() { + return QA.roundCylinder(this.halfHeight, this.radius, this.borderRadius) + } + } + class sI extends oI { + constructor(A, I) { + super(), this.type = FA.Cone, this.halfHeight = A, this.radius = I + } + intoRaw() { + return QA.cone(this.halfHeight, this.radius) + } + } + class cI extends oI { + constructor(A, I, g) { + super(), this.type = FA.RoundCone, this.halfHeight = A, this.radius = I, this.borderRadius = g + } + intoRaw() { + return QA.roundCone(this.halfHeight, this.radius, this.borderRadius) + } + }! function(A) { + A[A.DYNAMIC_DYNAMIC = 1] = "DYNAMIC_DYNAMIC", A[A.DYNAMIC_KINEMATIC = 12] = "DYNAMIC_KINEMATIC", A[A.DYNAMIC_FIXED = 2] = "DYNAMIC_FIXED", A[A.KINEMATIC_KINEMATIC = 52224] = "KINEMATIC_KINEMATIC", A[A.KINEMATIC_FIXED = 8704] = "KINEMATIC_FIXED", A[A.FIXED_FIXED = 32] = "FIXED_FIXED", A[A.DEFAULT = 15] = "DEFAULT", A[A.ALL = 60943] = "ALL" + }(qA || (qA = {})); + class YI { + constructor(A, I, g, C) { + this.colliderSet = A, this.handle = I, this._parent = g, this._shape = C + } + finalizeDeserialization(A) { + null != this.handle && (this._parent = A.get(this.colliderSet.raw.coParent(this.handle))) + } + ensureShapeIsCached() { + this._shape || (this._shape = oI.fromRaw(this.colliderSet.raw, this.handle)) + } + get shape() { + return this.ensureShapeIsCached(), this._shape + } + isValid() { + return this.colliderSet.raw.contains(this.handle) + } + translation() { + return kA.fromRaw(this.colliderSet.raw.coTranslation(this.handle)) + } + rotation() { + return aA.fromRaw(this.colliderSet.raw.coRotation(this.handle)) + } + isSensor() { + return this.colliderSet.raw.coIsSensor(this.handle) + } + setSensor(A) { + this.colliderSet.raw.coSetSensor(this.handle, A) + } + setShape(A) { + let I = A.intoRaw(); + this.colliderSet.raw.coSetShape(this.handle, I), I.free(), this._shape = A + } + setEnabled(A) { + this.colliderSet.raw.coSetEnabled(this.handle, A) + } + isEnabled() { + return this.colliderSet.raw.coIsEnabled(this.handle) + } + setRestitution(A) { + this.colliderSet.raw.coSetRestitution(this.handle, A) + } + setFriction(A) { + this.colliderSet.raw.coSetFriction(this.handle, A) + } + frictionCombineRule() { + return this.colliderSet.raw.coFrictionCombineRule(this.handle) + } + setFrictionCombineRule(A) { + this.colliderSet.raw.coSetFrictionCombineRule(this.handle, A) + } + restitutionCombineRule() { + return this.colliderSet.raw.coRestitutionCombineRule(this.handle) + } + setRestitutionCombineRule(A) { + this.colliderSet.raw.coSetRestitutionCombineRule(this.handle, A) + } + setCollisionGroups(A) { + this.colliderSet.raw.coSetCollisionGroups(this.handle, A) + } + setSolverGroups(A) { + this.colliderSet.raw.coSetSolverGroups(this.handle, A) + } + activeHooks() { + return this.colliderSet.raw.coActiveHooks(this.handle) + } + setActiveHooks(A) { + this.colliderSet.raw.coSetActiveHooks(this.handle, A) + } + activeEvents() { + return this.colliderSet.raw.coActiveEvents(this.handle) + } + setActiveEvents(A) { + this.colliderSet.raw.coSetActiveEvents(this.handle, A) + } + activeCollisionTypes() { + return this.colliderSet.raw.coActiveCollisionTypes(this.handle) + } + setContactForceEventThreshold(A) { + return this.colliderSet.raw.coSetContactForceEventThreshold(this.handle, A) + } + contactForceEventThreshold() { + return this.colliderSet.raw.coContactForceEventThreshold(this.handle) + } + setActiveCollisionTypes(A) { + this.colliderSet.raw.coSetActiveCollisionTypes(this.handle, A) + } + setDensity(A) { + this.colliderSet.raw.coSetDensity(this.handle, A) + } + setMass(A) { + this.colliderSet.raw.coSetMass(this.handle, A) + } + setMassProperties(A, I, g, C) { + let B = kA.intoRaw(I), + Q = kA.intoRaw(g), + E = aA.intoRaw(C); + this.colliderSet.raw.coSetMassProperties(this.handle, A, B, Q, E), B.free(), Q.free(), E.free() + } + setTranslation(A) { + this.colliderSet.raw.coSetTranslation(this.handle, A.x, A.y, A.z) + } + setTranslationWrtParent(A) { + this.colliderSet.raw.coSetTranslationWrtParent(this.handle, A.x, A.y, A.z) + } + setRotation(A) { + this.colliderSet.raw.coSetRotation(this.handle, A.x, A.y, A.z, A.w) + } + setRotationWrtParent(A) { + this.colliderSet.raw.coSetRotationWrtParent(this.handle, A.x, A.y, A.z, A.w) + } + shapeType() { + return this.colliderSet.raw.coShapeType(this.handle) + } + halfExtents() { + return kA.fromRaw(this.colliderSet.raw.coHalfExtents(this.handle)) + } + setHalfExtents(A) { + const I = kA.intoRaw(A); + this.colliderSet.raw.coSetHalfExtents(this.handle, I) + } + radius() { + return this.colliderSet.raw.coRadius(this.handle) + } + setRadius(A) { + this.colliderSet.raw.coSetRadius(this.handle, A) + } + roundRadius() { + return this.colliderSet.raw.coRoundRadius(this.handle) + } + setRoundRadius(A) { + this.colliderSet.raw.coSetRoundRadius(this.handle, A) + } + halfHeight() { + return this.colliderSet.raw.coHalfHeight(this.handle) + } + setHalfHeight(A) { + this.colliderSet.raw.coSetHalfHeight(this.handle, A) + } + vertices() { + return this.colliderSet.raw.coVertices(this.handle) + } + indices() { + return this.colliderSet.raw.coIndices(this.handle) + } + heightfieldHeights() { + return this.colliderSet.raw.coHeightfieldHeights(this.handle) + } + heightfieldScale() { + let A = this.colliderSet.raw.coHeightfieldScale(this.handle); + return kA.fromRaw(A) + } + heightfieldNRows() { + return this.colliderSet.raw.coHeightfieldNRows(this.handle) + } + heightfieldNCols() { + return this.colliderSet.raw.coHeightfieldNCols(this.handle) + } + parent() { + return this._parent + } + friction() { + return this.colliderSet.raw.coFriction(this.handle) + } + restitution() { + return this.colliderSet.raw.coRestitution(this.handle) + } + density() { + return this.colliderSet.raw.coDensity(this.handle) + } + mass() { + return this.colliderSet.raw.coMass(this.handle) + } + volume() { + return this.colliderSet.raw.coVolume(this.handle) + } + collisionGroups() { + return this.colliderSet.raw.coCollisionGroups(this.handle) + } + solverGroups() { + return this.colliderSet.raw.coSolverGroups(this.handle) + } + containsPoint(A) { + let I = kA.intoRaw(A), + g = this.colliderSet.raw.coContainsPoint(this.handle, I); + return I.free(), g + } + projectPoint(A, I) { + let g = kA.intoRaw(A), + C = II.fromRaw(this.colliderSet.raw.coProjectPoint(this.handle, g, I)); + return g.free(), C + } + intersectsRay(A, I) { + let g = kA.intoRaw(A.origin), + C = kA.intoRaw(A.dir), + B = this.colliderSet.raw.coIntersectsRay(this.handle, g, C, I); + return g.free(), C.free(), B + } + castShape(A, I, g, C, B, Q, E) { + let i = kA.intoRaw(A), + D = kA.intoRaw(g), + o = aA.intoRaw(C), + G = kA.intoRaw(B), + w = I.intoRaw(), + k = iI.fromRaw(this.colliderSet, this.colliderSet.raw.coCastShape(this.handle, i, w, D, o, G, Q, E)); + return i.free(), D.free(), o.free(), G.free(), w.free(), k + } + castCollider(A, I, g, C, B) { + let Q = kA.intoRaw(A), + E = kA.intoRaw(g), + i = DI.fromRaw(this.colliderSet, this.colliderSet.raw.coCastCollider(this.handle, Q, I.handle, E, C, B)); + return Q.free(), E.free(), i + } + intersectsShape(A, I, g) { + let C = kA.intoRaw(I), + B = aA.intoRaw(g), + Q = A.intoRaw(), + E = this.colliderSet.raw.coIntersectsShape(this.handle, Q, C, B); + return C.free(), B.free(), Q.free(), E + } + contactShape(A, I, g, C) { + let B = kA.intoRaw(I), + Q = aA.intoRaw(g), + E = A.intoRaw(), + i = AI.fromRaw(this.colliderSet.raw.coContactShape(this.handle, E, B, Q, C)); + return B.free(), Q.free(), E.free(), i + } + contactCollider(A, I) { + return AI.fromRaw(this.colliderSet.raw.coContactCollider(this.handle, A.handle, I)) + } + castRay(A, I, g) { + let C = kA.intoRaw(A.origin), + B = kA.intoRaw(A.dir), + Q = this.colliderSet.raw.coCastRay(this.handle, C, B, I, g); + return C.free(), B.free(), Q + } + castRayAndGetNormal(A, I, g) { + let C = kA.intoRaw(A.origin), + B = kA.intoRaw(A.dir), + Q = BI.fromRaw(this.colliderSet.raw.coCastRayAndGetNormal(this.handle, C, B, I, g)); + return C.free(), B.free(), Q + } + }! function(A) { + A[A.Density = 0] = "Density", A[A.Mass = 1] = "Mass", A[A.MassProps = 2] = "MassProps" + }(RA || (RA = {})); + class LI { + constructor(A) { + this.enabled = !0, this.shape = A, this.massPropsMode = RA.Density, this.density = 1, this.friction = .5, this.restitution = 0, this.rotation = aA.identity(), this.translation = kA.zeros(), this.isSensor = !1, this.collisionGroups = 4294967295, this.solverGroups = 4294967295, this.frictionCombineRule = hA.Average, this.restitutionCombineRule = hA.Average, this.activeCollisionTypes = qA.DEFAULT, this.activeEvents = 0, this.activeHooks = 0, this.mass = 0, this.centerOfMass = kA.zeros(), this.contactForceEventThreshold = 0, this.principalAngularInertia = kA.zeros(), this.angularInertiaLocalFrame = aA.identity() + } + static ball(A) { + const I = new GI(A); + return new LI(I) + } + static capsule(A, I) { + const g = new aI(A, I); + return new LI(g) + } + static segment(A, I) { + const g = new MI(A, I); + return new LI(g) + } + static triangle(A, I, g) { + const C = new KI(A, I, g); + return new LI(C) + } + static roundTriangle(A, I, g, C) { + const B = new yI(A, I, g, C); + return new LI(B) + } + static polyline(A, I) { + const g = new JI(A, I); + return new LI(g) + } + static trimesh(A, I) { + const g = new UI(A, I); + return new LI(g) + } + static cuboid(A, I, g) { + const C = new kI(A, I, g); + return new LI(C) + } + static roundCuboid(A, I, g, C) { + const B = new SI(A, I, g, C); + return new LI(B) + } + static heightfield(A, I, g, C) { + const B = new FI(A, I, g, C); + return new LI(B) + } + static cylinder(A, I) { + const g = new qI(A, I); + return new LI(g) + } + static roundCylinder(A, I, g) { + const C = new RI(A, I, g); + return new LI(C) + } + static cone(A, I) { + const g = new sI(A, I); + return new LI(g) + } + static roundCone(A, I, g) { + const C = new cI(A, I, g); + return new LI(C) + } + static convexHull(A) { + const I = new hI(A, null); + return new LI(I) + } + static convexMesh(A, I) { + const g = new hI(A, I); + return new LI(g) + } + static roundConvexHull(A, I) { + const g = new NI(A, null, I); + return new LI(g) + } + static roundConvexMesh(A, I, g) { + const C = new NI(A, I, g); + return new LI(C) + } + setTranslation(A, I, g) { + if ("number" != typeof A || "number" != typeof I || "number" != typeof g) throw TypeError("The translation components must be numbers."); + return this.translation = { + x: A, + y: I, + z: g + }, this + } + setRotation(A) { + return aA.copy(this.rotation, A), this + } + setSensor(A) { + return this.isSensor = A, this + } + setEnabled(A) { + return this.enabled = A, this + } + setDensity(A) { + return this.massPropsMode = RA.Density, this.density = A, this + } + setMass(A) { + return this.massPropsMode = RA.Mass, this.mass = A, this + } + setMassProperties(A, I, g, C) { + return this.massPropsMode = RA.MassProps, this.mass = A, kA.copy(this.centerOfMass, I), kA.copy(this.principalAngularInertia, g), aA.copy(this.angularInertiaLocalFrame, C), this + } + setRestitution(A) { + return this.restitution = A, this + } + setFriction(A) { + return this.friction = A, this + } + setFrictionCombineRule(A) { + return this.frictionCombineRule = A, this + } + setRestitutionCombineRule(A) { + return this.restitutionCombineRule = A, this + } + setCollisionGroups(A) { + return this.collisionGroups = A, this + } + setSolverGroups(A) { + return this.solverGroups = A, this + } + setActiveHooks(A) { + return this.activeHooks = A, this + } + setActiveEvents(A) { + return this.activeEvents = A, this + } + setActiveCollisionTypes(A) { + return this.activeCollisionTypes = A, this + } + setContactForceEventThreshold(A) { + return this.contactForceEventThreshold = A, this + } + } + class HI { + constructor(A) { + this.raw = A || new r, this.map = new tA, A && A.forEachColliderHandle((A => { + this.map.set(A, new YI(this, A, null)) + })) + } + free() { + this.raw && this.raw.free(), this.raw = void 0, this.map && this.map.clear(), this.map = void 0 + } + castClosure(A) { + return I => A ? A(this.get(I)) : void 0 + } + finalizeDeserialization(A) { + this.map.forEach((I => I.finalizeDeserialization(A))) + } + createCollider(A, I, g) { + let C = null != g && null != g; + if (C && isNaN(g)) throw Error("Cannot create a collider with a parent rigid-body handle that is not a number."); + let B = I.shape.intoRaw(), + Q = kA.intoRaw(I.translation), + E = aA.intoRaw(I.rotation), + i = kA.intoRaw(I.centerOfMass), + D = kA.intoRaw(I.principalAngularInertia), + o = aA.intoRaw(I.angularInertiaLocalFrame), + G = this.raw.createCollider(I.enabled, B, Q, E, I.massPropsMode, I.mass, i, D, o, I.density, I.friction, I.restitution, I.frictionCombineRule, I.restitutionCombineRule, I.isSensor, I.collisionGroups, I.solverGroups, I.activeCollisionTypes, I.activeHooks, I.activeEvents, I.contactForceEventThreshold, C, C ? g : 0, A.raw); + B.free(), Q.free(), E.free(), i.free(), D.free(), o.free(); + let w = C ? A.get(g) : null, + k = new YI(this, G, w, I.shape); + return this.map.set(G, k), k + } + remove(A, I, g, C) { + this.raw.remove(A, I.raw, g.raw, C), this.unmap(A) + } + unmap(A) { + this.map.delete(A) + } + get(A) { + return this.map.get(A) + } + len() { + return this.map.len() + } + contains(A) { + return null != this.get(A) + } + forEach(A) { + this.map.forEach(A) + } + getAll() { + return this.map.getAll() + } + } + class lI { + constructor(A) { + this.raw = A || new P + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + step(A, I, g, C, B, Q, E, i, D, o, G, w) { + let k = kA.intoRaw(A); + G ? this.raw.stepWithEvents(k, I.raw, g.raw, C.raw, B.raw, Q.raw, E.raw, i.raw, D.raw, o.raw, G.raw, w, w ? w.filterContactPair : null, w ? w.filterIntersectionPair : null) : this.raw.step(k, I.raw, g.raw, C.raw, B.raw, Q.raw, E.raw, i.raw, D.raw, o.raw), k.free() + } + }! function(A) { + A[A.EXCLUDE_FIXED = 1] = "EXCLUDE_FIXED", A[A.EXCLUDE_KINEMATIC = 2] = "EXCLUDE_KINEMATIC", A[A.EXCLUDE_DYNAMIC = 4] = "EXCLUDE_DYNAMIC", A[A.EXCLUDE_SENSORS = 8] = "EXCLUDE_SENSORS", A[A.EXCLUDE_SOLIDS = 16] = "EXCLUDE_SOLIDS", A[A.ONLY_DYNAMIC = 3] = "ONLY_DYNAMIC", A[A.ONLY_KINEMATIC = 5] = "ONLY_KINEMATIC", A[A.ONLY_FIXED = 6] = "ONLY_FIXED" + }(sA || (sA = {})); + class tI { + constructor(A) { + this.raw = A || new v + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + update(A, I) { + this.raw.update(A.raw, I.raw) + } + castRay(A, I, g, C, B, Q, E, i, D, o) { + let G = kA.intoRaw(g.origin), + w = kA.intoRaw(g.dir), + k = EI.fromRaw(I, this.raw.castRay(A.raw, I.raw, G, w, C, B, Q, E, i, D, o)); + return G.free(), w.free(), k + } + castRayAndGetNormal(A, I, g, C, B, Q, E, i, D, o) { + let G = kA.intoRaw(g.origin), + w = kA.intoRaw(g.dir), + k = QI.fromRaw(I, this.raw.castRayAndGetNormal(A.raw, I.raw, G, w, C, B, Q, E, i, D, o)); + return G.free(), w.free(), k + } + intersectionsWithRay(A, I, g, C, B, Q, E, i, D, o, G) { + let w = kA.intoRaw(g.origin), + k = kA.intoRaw(g.dir); + this.raw.intersectionsWithRay(A.raw, I.raw, w, k, C, B, (A => Q(QI.fromRaw(I, A))), E, i, D, o, G), w.free(), k.free() + } + intersectionWithShape(A, I, g, C, B, Q, E, i, D, o) { + let G = kA.intoRaw(g), + w = aA.intoRaw(C), + k = B.intoRaw(), + S = this.raw.intersectionWithShape(A.raw, I.raw, G, w, k, Q, E, i, D, o); + return G.free(), w.free(), k.free(), S + } + projectPoint(A, I, g, C, B, Q, E, i, D) { + let o = kA.intoRaw(g), + G = gI.fromRaw(I, this.raw.projectPoint(A.raw, I.raw, o, C, B, Q, E, i, D)); + return o.free(), G + } + projectPointAndGetFeature(A, I, g, C, B, Q, E, i) { + let D = kA.intoRaw(g), + o = gI.fromRaw(I, this.raw.projectPointAndGetFeature(A.raw, I.raw, D, C, B, Q, E, i)); + return D.free(), o + } + intersectionsWithPoint(A, I, g, C, B, Q, E, i, D) { + let o = kA.intoRaw(g); + this.raw.intersectionsWithPoint(A.raw, I.raw, o, C, B, Q, E, i, D), o.free() + } + castShape(A, I, g, C, B, Q, E, i, D, o, G, w, k) { + let S = kA.intoRaw(g), + a = aA.intoRaw(C), + M = kA.intoRaw(B), + K = Q.intoRaw(), + y = DI.fromRaw(I, this.raw.castShape(A.raw, I.raw, S, a, M, K, E, i, D, o, G, w, k)); + return S.free(), a.free(), M.free(), K.free(), y + } + intersectionsWithShape(A, I, g, C, B, Q, E, i, D, o, G) { + let w = kA.intoRaw(g), + k = aA.intoRaw(C), + S = B.intoRaw(); + this.raw.intersectionsWithShape(A.raw, I.raw, w, k, S, Q, E, i, D, o, G), w.free(), k.free(), S.free() + } + collidersWithAabbIntersectingAabb(A, I, g) { + let C = kA.intoRaw(A), + B = kA.intoRaw(I); + this.raw.collidersWithAabbIntersectingAabb(C, B, g), C.free(), B.free() + } + } + class pI { + constructor(A) { + this.raw = A || new BA + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + serializeAll(A, I, g, C, B, Q, E, i, D) { + let o = kA.intoRaw(A); + const G = this.raw.serializeAll(o, I.raw, g.raw, C.raw, B.raw, Q.raw, E.raw, i.raw, D.raw); + return o.free(), G + } + deserializeAll(A) { + return OI.fromRaw(this.raw.deserializeAll(A)) + } + } + class eI { + constructor(A, I) { + this.vertices = A, this.colors = I + } + } + class rI { + constructor(A) { + this.raw = A || new n + } + free() { + this.raw && this.raw.free(), this.raw = void 0, this.vertices = void 0, this.colors = void 0 + } + render(A, I, g, C, B) { + this.raw.render(A.raw, I.raw, g.raw, C.raw, B.raw), this.vertices = this.raw.vertices(), this.colors = this.raw.colors() + } + } + class dI {} + class TI { + constructor(A, I, g, C, B) { + this.params = I, this.bodies = g, this.colliders = C, this.queries = B, this.raw = new m(A), this.rawCharacterCollision = new e, this._applyImpulsesToDynamicBodies = !1, this._characterMass = null + } + free() { + this.raw && (this.raw.free(), this.rawCharacterCollision.free()), this.raw = void 0, this.rawCharacterCollision = void 0 + } + up() { + return this.raw.up() + } + setUp(A) { + let I = kA.intoRaw(A); + return this.raw.setUp(I) + } + applyImpulsesToDynamicBodies() { + return this._applyImpulsesToDynamicBodies + } + setApplyImpulsesToDynamicBodies(A) { + this._applyImpulsesToDynamicBodies = A + } + characterMass() { + return this._characterMass + } + setCharacterMass(A) { + this._characterMass = A + } + offset() { + return this.raw.offset() + } + setOffset(A) { + this.raw.setOffset(A) + } + slideEnabled() { + return this.raw.slideEnabled() + } + setSlideEnabled(A) { + this.raw.setSlideEnabled(A) + } + autostepMaxHeight() { + return this.raw.autostepMaxHeight() + } + autostepMinWidth() { + return this.raw.autostepMinWidth() + } + autostepIncludesDynamicBodies() { + return this.raw.autostepIncludesDynamicBodies() + } + autostepEnabled() { + return this.raw.autostepEnabled() + } + enableAutostep(A, I, g) { + this.raw.enableAutostep(A, I, g) + } + disableAutostep() { + return this.raw.disableAutostep() + } + maxSlopeClimbAngle() { + return this.raw.maxSlopeClimbAngle() + } + setMaxSlopeClimbAngle(A) { + this.raw.setMaxSlopeClimbAngle(A) + } + minSlopeSlideAngle() { + return this.raw.minSlopeSlideAngle() + } + setMinSlopeSlideAngle(A) { + this.raw.setMinSlopeSlideAngle(A) + } + snapToGroundDistance() { + return this.raw.snapToGroundDistance() + } + enableSnapToGround(A) { + this.raw.enableSnapToGround(A) + } + disableSnapToGround() { + this.raw.disableSnapToGround() + } + snapToGroundEnabled() { + return this.raw.snapToGroundEnabled() + } + computeColliderMovement(A, I, g, C, B) { + let Q = kA.intoRaw(I); + this.raw.computeColliderMovement(this.params.dt, this.bodies.raw, this.colliders.raw, this.queries.raw, A.handle, Q, this._applyImpulsesToDynamicBodies, this._characterMass, g, C, this.colliders.castClosure(B)), Q.free() + } + computedMovement() { + return kA.fromRaw(this.raw.computedMovement()) + } + computedGrounded() { + return this.raw.computedGrounded() + } + numComputedCollisions() { + return this.raw.numComputedCollisions() + } + computedCollision(A, I) { + if (this.raw.computedCollision(A, this.rawCharacterCollision)) { + let A = this.rawCharacterCollision; + return (I = null != I ? I : new dI).translationApplied = kA.fromRaw(A.translationApplied()), I.translationRemaining = kA.fromRaw(A.translationRemaining()), I.toi = A.toi(), I.witness1 = kA.fromRaw(A.worldWitness1()), I.witness2 = kA.fromRaw(A.worldWitness2()), I.normal1 = kA.fromRaw(A.worldNormal1()), I.normal2 = kA.fromRaw(A.worldNormal2()), I.collider = this.colliders.get(A.handle()), I + } + return null + } + } + class OI { + constructor(A, I, g, C, B, Q, E, i, D, o, G, w, k, S) { + this.gravity = A, this.integrationParameters = new eA(I), this.islands = new uA(g), this.broadPhase = new vA(C), this.narrowPhase = new _A(B), this.bodies = new pA(Q), this.colliders = new HI(E), this.impulseJoints = new WA(i), this.multibodyJoints = new PA(D), this.ccdSolver = new zA(o), this.queryPipeline = new tI(G), this.physicsPipeline = new lI(w), this.serializationPipeline = new pI(k), this.debugRenderPipeline = new rI(S), this.characterControllers = new Set, this.impulseJoints.finalizeDeserialization(this.bodies), this.bodies.finalizeDeserialization(this.colliders), this.colliders.finalizeDeserialization(this.bodies) + } + free() { + this.integrationParameters.free(), this.islands.free(), this.broadPhase.free(), this.narrowPhase.free(), this.bodies.free(), this.colliders.free(), this.impulseJoints.free(), this.multibodyJoints.free(), this.ccdSolver.free(), this.queryPipeline.free(), this.physicsPipeline.free(), this.serializationPipeline.free(), this.debugRenderPipeline.free(), this.characterControllers.forEach((A => A.free())), this.integrationParameters = void 0, this.islands = void 0, this.broadPhase = void 0, this.narrowPhase = void 0, this.bodies = void 0, this.colliders = void 0, this.ccdSolver = void 0, this.impulseJoints = void 0, this.multibodyJoints = void 0, this.queryPipeline = void 0, this.physicsPipeline = void 0, this.serializationPipeline = void 0, this.debugRenderPipeline = void 0, this.characterControllers = void 0 + } + static fromRaw(A) { + return A ? new OI(kA.fromRaw(A.takeGravity()), A.takeIntegrationParameters(), A.takeIslandManager(), A.takeBroadPhase(), A.takeNarrowPhase(), A.takeBodies(), A.takeColliders(), A.takeImpulseJoints(), A.takeMultibodyJoints()) : null + } + takeSnapshot() { + return this.serializationPipeline.serializeAll(this.gravity, this.integrationParameters, this.islands, this.broadPhase, this.narrowPhase, this.bodies, this.colliders, this.impulseJoints, this.multibodyJoints) + } + static restoreSnapshot(A) { + return (new pI).deserializeAll(A) + } + debugRender() { + return this.debugRenderPipeline.render(this.bodies, this.colliders, this.impulseJoints, this.multibodyJoints, this.narrowPhase), new eI(this.debugRenderPipeline.vertices, this.debugRenderPipeline.colors) + } + step(A, I) { + this.physicsPipeline.step(this.gravity, this.integrationParameters, this.islands, this.broadPhase, this.narrowPhase, this.bodies, this.colliders, this.impulseJoints, this.multibodyJoints, this.ccdSolver, A, I), this.queryPipeline.update(this.bodies, this.colliders) + } + propagateModifiedBodyPositionsToColliders() { + this.bodies.raw.propagateModifiedBodyPositionsToColliders(this.colliders.raw) + } + updateSceneQueries() { + this.propagateModifiedBodyPositionsToColliders(), this.queryPipeline.update(this.bodies, this.colliders) + } + get timestep() { + return this.integrationParameters.dt + } + set timestep(A) { + this.integrationParameters.dt = A + } + get maxVelocityIterations() { + return this.integrationParameters.maxVelocityIterations + } + set maxVelocityIterations(A) { + this.integrationParameters.maxVelocityIterations = A + } + get maxVelocityFrictionIterations() { + return this.integrationParameters.maxVelocityFrictionIterations + } + set maxVelocityFrictionIterations(A) { + this.integrationParameters.maxVelocityFrictionIterations = A + } + get maxStabilizationIterations() { + return this.integrationParameters.maxStabilizationIterations + } + set maxStabilizationIterations(A) { + this.integrationParameters.maxStabilizationIterations = A + } + createRigidBody(A) { + return this.bodies.createRigidBody(this.colliders, A) + } + createCharacterController(A) { + let I = new TI(A, this.integrationParameters, this.bodies, this.colliders, this.queryPipeline); + return this.characterControllers.add(I), I + } + removeCharacterController(A) { + this.characterControllers.delete(A), A.free() + } + createCollider(A, I) { + let g = I ? I.handle : void 0; + return this.colliders.createCollider(this.bodies, A, g) + } + createImpulseJoint(A, I, g, C) { + return this.impulseJoints.createJoint(this.bodies, A, I.handle, g.handle, C) + } + createMultibodyJoint(A, I, g, C) { + return this.multibodyJoints.createJoint(A, I.handle, g.handle, C) + } + getRigidBody(A) { + return this.bodies.get(A) + } + getCollider(A) { + return this.colliders.get(A) + } + getImpulseJoint(A) { + return this.impulseJoints.get(A) + } + getMultibodyJoint(A) { + return this.multibodyJoints.get(A) + } + removeRigidBody(A) { + this.bodies && this.bodies.remove(A.handle, this.islands, this.colliders, this.impulseJoints, this.multibodyJoints) + } + removeCollider(A, I) { + this.colliders && this.colliders.remove(A.handle, this.islands, this.bodies, I) + } + removeImpulseJoint(A, I) { + this.impulseJoints && this.impulseJoints.remove(A.handle, I) + } + removeMultibodyJoint(A, I) { + this.impulseJoints && this.multibodyJoints.remove(A.handle, I) + } + forEachCollider(A) { + this.colliders.forEach(A) + } + forEachRigidBody(A) { + this.bodies.forEach(A) + } + forEachActiveRigidBody(A) { + this.bodies.forEachActiveRigidBody(this.islands, A) + } + castRay(A, I, g, C, B, Q, E, i) { + return this.queryPipeline.castRay(this.bodies, this.colliders, A, I, g, C, B, Q ? Q.handle : null, E ? E.handle : null, this.colliders.castClosure(i)) + } + castRayAndGetNormal(A, I, g, C, B, Q, E, i) { + return this.queryPipeline.castRayAndGetNormal(this.bodies, this.colliders, A, I, g, C, B, Q ? Q.handle : null, E ? E.handle : null, this.colliders.castClosure(i)) + } + intersectionsWithRay(A, I, g, C, B, Q, E, i, D) { + this.queryPipeline.intersectionsWithRay(this.bodies, this.colliders, A, I, g, C, B, Q, E ? E.handle : null, i ? i.handle : null, this.colliders.castClosure(D)) + } + intersectionWithShape(A, I, g, C, B, Q, E, i) { + let D = this.queryPipeline.intersectionWithShape(this.bodies, this.colliders, A, I, g, C, B, Q ? Q.handle : null, E ? E.handle : null, this.colliders.castClosure(i)); + return null != D ? this.colliders.get(D) : null + } + projectPoint(A, I, g, C, B, Q, E) { + return this.queryPipeline.projectPoint(this.bodies, this.colliders, A, I, g, C, B ? B.handle : null, Q ? Q.handle : null, this.colliders.castClosure(E)) + } + projectPointAndGetFeature(A, I, g, C, B, Q) { + return this.queryPipeline.projectPointAndGetFeature(this.bodies, this.colliders, A, I, g, C ? C.handle : null, B ? B.handle : null, this.colliders.castClosure(Q)) + } + intersectionsWithPoint(A, I, g, C, B, Q, E) { + this.queryPipeline.intersectionsWithPoint(this.bodies, this.colliders, A, this.colliders.castClosure(I), g, C, B ? B.handle : null, Q ? Q.handle : null, this.colliders.castClosure(E)) + } + castShape(A, I, g, C, B, Q, E, i, D, o, G) { + return this.queryPipeline.castShape(this.bodies, this.colliders, A, I, g, C, B, Q, E, i, D ? D.handle : null, o ? o.handle : null, this.colliders.castClosure(G)) + } + intersectionsWithShape(A, I, g, C, B, Q, E, i, D) { + this.queryPipeline.intersectionsWithShape(this.bodies, this.colliders, A, I, g, this.colliders.castClosure(C), B, Q, E ? E.handle : null, i ? i.handle : null, this.colliders.castClosure(D)) + } + collidersWithAabbIntersectingAabb(A, I, g) { + this.queryPipeline.collidersWithAabbIntersectingAabb(A, I, this.colliders.castClosure(g)) + } + contactsWith(A, I) { + this.narrowPhase.contactsWith(A.handle, this.colliders.castClosure(I)) + } + intersectionsWith(A, I) { + this.narrowPhase.intersectionsWith(A.handle, this.colliders.castClosure(I)) + } + contactPair(A, I, g) { + this.narrowPhase.contactPair(A.handle, I.handle, g) + } + intersectionPair(A, I) { + return this.narrowPhase.intersectionPair(A.handle, I.handle) + } + }! function(A) { + A[A.COLLISION_EVENTS = 1] = "COLLISION_EVENTS", A[A.CONTACT_FORCE_EVENTS = 2] = "CONTACT_FORCE_EVENTS" + }(cA || (cA = {})); + class nI { + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + collider1() { + return this.raw.collider1() + } + collider2() { + return this.raw.collider2() + } + totalForce() { + return kA.fromRaw(this.raw.total_force()) + } + totalForceMagnitude() { + return this.raw.total_force_magnitude() + } + maxForceDirection() { + return kA.fromRaw(this.raw.max_force_direction()) + } + maxForceMagnitude() { + return this.raw.max_force_magnitude() + } + }! function(A) { + A[A.FILTER_CONTACT_PAIRS = 1] = "FILTER_CONTACT_PAIRS", A[A.FILTER_INTERSECTION_PAIRS = 2] = "FILTER_INTERSECTION_PAIRS" + }(YA || (YA = {})), + function(A) { + A[A.EMPTY = 0] = "EMPTY", A[A.COMPUTE_IMPULSE = 1] = "COMPUTE_IMPULSE" + }(LA || (LA = {})); + for (var ZI = { + byteLength: function(A) { + var I = XI(A), + g = I[0], + C = I[1]; + return 3 * (g + C) / 4 - C + }, + toByteArray: function(A) { + var I, g, C = XI(A), + B = C[0], + Q = C[1], + E = new jI(function(A, I, g) { + return 3 * (I + g) / 4 - g + }(0, B, Q)), + i = 0, + D = Q > 0 ? B - 4 : B; + for (g = 0; g < D; g += 4) I = WI[A.charCodeAt(g)] << 18 | WI[A.charCodeAt(g + 1)] << 12 | WI[A.charCodeAt(g + 2)] << 6 | WI[A.charCodeAt(g + 3)], E[i++] = I >> 16 & 255, E[i++] = I >> 8 & 255, E[i++] = 255 & I; + return 2 === Q && (I = WI[A.charCodeAt(g)] << 2 | WI[A.charCodeAt(g + 1)] >> 4, E[i++] = 255 & I), 1 === Q && (I = WI[A.charCodeAt(g)] << 10 | WI[A.charCodeAt(g + 1)] << 4 | WI[A.charCodeAt(g + 2)] >> 2, E[i++] = I >> 8 & 255, E[i++] = 255 & I), E + }, + fromByteArray: function(A) { + for (var I, g = A.length, C = g % 3, B = [], Q = 16383, E = 0, i = g - C; E < i; E += Q) B.push(VI(A, E, E + Q > i ? i : E + Q)); + return 1 === C ? (I = A[g - 1], B.push(bI[I >> 2] + bI[I << 4 & 63] + "==")) : 2 === C && (I = (A[g - 2] << 8) + A[g - 1], B.push(bI[I >> 10] + bI[I >> 4 & 63] + bI[I << 2 & 63] + "=")), B.join("") + } + }, bI = [], WI = [], jI = "undefined" != typeof Uint8Array ? Uint8Array : Array, xI = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", fI = 0, mI = xI.length; fI < mI; ++fI) bI[fI] = xI[fI], WI[xI.charCodeAt(fI)] = fI; + + function XI(A) { + var I = A.length; + if (I % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); + var g = A.indexOf("="); + return -1 === g && (g = I), [g, g === I ? 0 : 4 - g % 4] + } + + function VI(A, I, g) { + for (var C, B, Q = [], E = I; E < g; E += 3) C = (A[E] << 16 & 16711680) + (A[E + 1] << 8 & 65280) + (255 & A[E + 2]), Q.push(bI[(B = C) >> 18 & 63] + bI[B >> 12 & 63] + bI[B >> 6 & 63] + bI[63 & B]); + return Q.join("") + } + WI["-".charCodeAt(0)] = 62, WI["_".charCodeAt(0)] = 63; + var PI = Object.freeze({ + __proto__: null, + version: function() { + return function() { + try { + const g = B.__wbindgen_add_to_stack_pointer(-16); + B.version(g); + var A = a()[g / 4 + 0], + I = a()[g / 4 + 1]; + return y(A, I) + } finally { + B.__wbindgen_add_to_stack_pointer(16), B.__wbindgen_free(A, I) + } + }() + }, + Vector3: wA, + VectorOps: kA, + Quaternion: SA, + RotationOps: aA, + SdpMatrix3: MA, + SdpMatrix3Ops: KA, + get RigidBodyType() { + return yA + }, + RigidBody: HA, + RigidBodyDesc: lA, + RigidBodySet: pA, + IntegrationParameters: eA, + get JointType() { + return JA + }, + get MotorModel() { + return UA + }, + ImpulseJoint: rA, + UnitImpulseJoint: dA, + FixedImpulseJoint: TA, + PrismaticImpulseJoint: OA, + RevoluteImpulseJoint: nA, + SphericalImpulseJoint: ZA, + JointData: bA, + ImpulseJointSet: WA, + MultibodyJoint: jA, + UnitMultibodyJoint: xA, + FixedMultibodyJoint: fA, + PrismaticMultibodyJoint: mA, + RevoluteMultibodyJoint: XA, + SphericalMultibodyJoint: VA, + MultibodyJointSet: PA, + get CoefficientCombineRule() { + return hA + }, + CCDSolver: zA, + IslandManager: uA, + BroadPhase: vA, + NarrowPhase: _A, + TempContactManifold: $A, + Shape: oI, + get ShapeType() { + return FA + }, + Ball: GI, + HalfSpace: wI, + Cuboid: kI, + RoundCuboid: SI, + Capsule: aI, + Segment: MI, + Triangle: KI, + RoundTriangle: yI, + Polyline: JI, + TriMesh: UI, + ConvexPolyhedron: hI, + RoundConvexPolyhedron: NI, + Heightfield: FI, + Cylinder: qI, + RoundCylinder: RI, + Cone: sI, + RoundCone: cI, + get ActiveCollisionTypes() { + return qA + }, + Collider: YI, + get MassPropsMode() { + return RA + }, + ColliderDesc: LI, + ColliderSet: HI, + get FeatureType() { + return NA + }, + Ray: CI, + RayIntersection: BI, + RayColliderIntersection: QI, + RayColliderToi: EI, + PointProjection: II, + PointColliderProjection: gI, + ShapeTOI: iI, + ShapeColliderTOI: DI, + ShapeContact: AI, + World: OI, + PhysicsPipeline: lI, + SerializationPipeline: pI, + get ActiveEvents() { + return cA + }, + TempContactForceEvent: nI, + EventQueue: class { + constructor(A, I) { + this.raw = I || new b(A) + } + free() { + this.raw && this.raw.free(), this.raw = void 0 + } + drainCollisionEvents(A) { + this.raw.drainCollisionEvents(A) + } + drainContactForceEvents(A) { + let I = new nI; + this.raw.drainContactForceEvents((g => { + I.raw = g, A(I), I.free() + })) + } + clear() { + this.raw.clear() + } + }, + get ActiveHooks() { + return YA + }, + get SolverFlags() { + return LA + }, + DebugRenderBuffers: eI, + DebugRenderPipeline: rI, + get QueryFilterFlags() { + return sA + }, + QueryPipeline: tI, + init: function() { + return function(A, I, g, C) { + return new(g || (g = Promise))((function(I, B) { + function Q(A) { + try { + i(C.next(A)) + } catch (A) { + B(A) + } + } + + function E(A) { + try { + i(C.throw(A)) + } catch (A) { + B(A) + } + } + + function i(A) { + var C; + A.done ? I(A.value) : (C = A.value, C instanceof g ? C : new g((function(A) { + A(C) + }))).then(Q, E) + } + i((C = C.apply(A, [])).next()) + })) + }(this, 0, void 0, (function*() { + yield GA(ZI.toByteArray("AGFzbQEAAAABrwuTAWACf38AYAN/f38AYAR/f39/AGACf38Bf2ABfwF/YAN/f38Bf2ABfwF+YAF/AGAFf39/f38AYAZ/f39/fX8AYAJ/fAF/YAF/AX1gBX9/f31/AGAFf39/f30AYAN/fH8AYAR/f399AX9gBn9/f39/fQBgAAF/YAR/f39/AX1gA39/fwF9YAN/f30AYAN/f38BfmADf399AX9gBH9/f38Bf2AGf39/f39/AX9gAn99AGAEf3x/fwBgAn98AX1gBn9/f39/fwBgAX0BfWADf3x9AGAIf39/f39/fX8Bf2AIf39/f39/f38AYAN/f3wAYAJ/fwF9YAV/f39/fwF/YAAAYAd/f39/f39/AGAIf39/f39/f30AYAF/AXxgA35+fwF+YAN/fH8BfWADfX19AX9gCX9/f39/f39/fwBgD39/f39/f39/f39/f39/fwBgBn99f39/fQBgCn9/f39/f39/fX8AYAt/f39/f39/f319fwBgBX9/fX9/AGAGf3x/f39/AGAFf3x/f38AYAN/fH8Bf2AFf3x9fX0AYAJ9fQF/YAZ/fH19fX0AYAp/f39/f399f39/AGAHf39/f31/fwBgCX9/f39/f31/fwF/YAt/f39/f39/f39/fwBgBn99fX9/fQBgBH99f38Bf2ADf35/AX9gD39/f39/fX9/f39/fH98fwF/YAN/fX0AYA9/f39/f39/f39/f3x/fH8AYAJ9fQF9YAN/fHwBf2ABfQF/YAV/fH99fQBgAn98AXxgBH98fX8AYAJ/fABgBX9/fHx/AXxgBH19fX0Bf2ABfAF/YAh/f39/fX9/fwBgCX9/f39/fX9/fwBgB39/f39/f30AYAt/f39/f39/f31/fwBgD39/f39/f39/f39/f319fwBgDH99f39/f39/f39/fwF/YAt/f399f399f319fwBgBn9/f39/fwF9YAl/f39/f39/f30AYAl/f39/f39/fX8AYBJ/f39/f39/f39/f399f319fX0AYAh/f39/fX1/fwBgCn9/f39/f39/fX8Bf2AJf39/f39/fX9/AGALf39/f31/f39/f38AYAh/fX9/f39/fwBgB39/f39/f30Bf2AKf31/f39/f39/fwBgBH9/f30AYAp/f39/fX9/f39/AGACf34Bf2AGf31/f39/AGAHf39/fX1/fwBgCH9/f39/f31/AGARf39/f39/f31/f39/f3x/fH8Bf2AEf39+fwBgCH99f31/fX9/AGAGf39/f319AGAJf3x/f39/f31/AX9gDH9/f39/f39/fH98fwF/YAR/f31/AGAHf39/f399fwF/YAt/f39/f39/f399fwBgB398f3x/fX8Bf2ANf39/f39/f39/fH98fwBgCn9/f39/f39/f38Bf2ANf39/f39/f319fX19fQBgBn98f39/fQF/YAZ/fH1/f38AYAV/f39/fwF9YBl/f39/fX1/f39/f39/f39/f399fX9/f39/AXxgB398fX9/f38AYAd/f39/f31/AX1gGn9/f39/f399f39/fX19f39/f39/f399f3x/AGANf39/f39/f39/fH98fwF/YAl/f39/f39+fn4AYAZ/f39/f30Bf2AHf39/f39/fwF/YAR/fHx9AX9gA35/fwF/YAZ/fH9/fX8Bf2AQf39/f399f39/f39/fH98fwBgBn9/f399fQF/YAR/fH9/AX9gDn99f39/fH9/f31/f39/AGASf31/f39/f39/f39/f39/f39/AGACf34AYAV/fH9/fwF/YAZ/fH9/fX8BfWAFf3x/f30Bf2AGf3x/fX19AGAHf3x/fX19fQBgBX9/f399AX9gBH99fX8AYAZ/f319fX0AYAN/fH8BfGAHf3x9fX19fwBgBn98fX19fwBgBX9/fH9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwAChQYWA3diZxpfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZgAHA3diZxVfX3diaW5kZ2VuX251bWJlcl9uZXcASgN3YmcVX193YmluZGdlbl9udW1iZXJfZ2V0AAADd2JnFl9fd2JpbmRnZW5fYm9vbGVhbl9nZXQABAN3YmcWX193YmluZGdlbl9pc19mdW5jdGlvbgAEA3diZyRfX3diZ19yYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9uZXcABAN3YmceX193YmdfcmF3Y29udGFjdGZvcmNlZXZlbnRfbmV3AAQDd2JnG19fd2JnX2NhbGxfMTY4ZGE4ODc3OWUzNWY2MQAFA3diZxtfX3diZ19jYWxsXzM5OTliZWU1OWU5Zjc3MTkAFwN3YmcbX193YmdfY2FsbF9lMWY3MmMwNTFjZGFiODU5ACMD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AgEBAAQHAQsUBwAqABYWFhYWFhYWFhYWFhYWAxcDAxEDAwMDAAALAwcZGQcZGRkAAAAAABkLBwQEBBUVAQAAGREDAQEDFAsECwsEBAsLCwQEBAQECwsECwsLCxUVAwMDAwMDAwsBBwcBAQcLBAUYAxEIjwEjMJEBBwIDAAUAAAIUAQABAwAAAAAAAAARFwAAAAAAABcAAQEBAQEBAQEBAAADAwMDCAAAAwMHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwMAAwICAgIAAgICAgICCAgICwMDAQEBAwEABQMDBAMDAwMDACQkAwMBAQELBQUFAwMAAQQIQQcLCwsdBgYGBAMGBgYGBgYGBgYGBgYGBgYGBgYGBgYDBQsEBAQEBAQEBAsEBAsEBAsEBAsEBAQEBgYHAAgtBAcBcAGxB7EHBQMBABEGCQF/AUGAgMAACwfpdbMDBm1lbW9yeQIAB3ZlcnNpb24AwwoqX193YmdfcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9mcmVlAOMJI3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfbmV3APQGInJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfdXAAkwglcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9zZXRVcACNByZyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX29mZnNldACWCylyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NldE9mZnNldADECixyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NsaWRlRW5hYmxlZACXCy9yYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX3NldFNsaWRlRW5hYmxlZADaCjFyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2F1dG9zdGVwTWF4SGVpZ2h0AK0KMHJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfYXV0b3N0ZXBNaW5XaWR0aACuCj1yYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2F1dG9zdGVwSW5jbHVkZXNEeW5hbWljQm9kaWVzAOQJL3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfYXV0b3N0ZXBFbmFibGVkAIcLLnJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfZW5hYmxlQXV0b3N0ZXAAsAkvcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9kaXNhYmxlQXV0b3N0ZXAA+AoycmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9tYXhTbG9wZUNsaW1iQW5nbGUAmAs1cmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9zZXRNYXhTbG9wZUNsaW1iQW5nbGUA+QoycmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9taW5TbG9wZVNsaWRlQW5nbGUAmQs1cmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9zZXRNaW5TbG9wZVNsaWRlQW5nbGUA+go0cmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9zbmFwVG9Hcm91bmREaXN0YW5jZQCvCjJyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2VuYWJsZVNuYXBUb0dyb3VuZADFCjNyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2Rpc2FibGVTbmFwVG9Hcm91bmQA+wozcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9zbmFwVG9Hcm91bmRFbmFibGVkAIgLN3Jhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfY29tcHV0ZUNvbGxpZGVyTW92ZW1lbnQAvwUwcmF3a2luZW1hdGljY2hhcmFjdGVyY29udHJvbGxlcl9jb21wdXRlZE1vdmVtZW50AK0IMHJhd2tpbmVtYXRpY2NoYXJhY3RlcmNvbnRyb2xsZXJfY29tcHV0ZWRHcm91bmRlZACaCzVyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX251bUNvbXB1dGVkQ29sbGlzaW9ucwCbCzFyYXdraW5lbWF0aWNjaGFyYWN0ZXJjb250cm9sbGVyX2NvbXB1dGVkQ29sbGlzaW9uAP4HIF9fd2JnX3Jhd2NoYXJhY3RlcmNvbGxpc2lvbl9mcmVlALYLGXJhd2NoYXJhY3RlcmNvbGxpc2lvbl9uZXcA4QYccmF3Y2hhcmFjdGVyY29sbGlzaW9uX2hhbmRsZQD5CChyYXdjaGFyYWN0ZXJjb2xsaXNpb25fdHJhbnNsYXRpb25BcHBsaWVkAJQIKnJhd2NoYXJhY3RlcmNvbGxpc2lvbl90cmFuc2xhdGlvblJlbWFpbmluZwCVCBlyYXdjaGFyYWN0ZXJjb2xsaXNpb25fdG9pAJwLI3Jhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZFdpdG5lc3MxAJYII3Jhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZFdpdG5lc3MyAIgFInJhd2NoYXJhY3RlcmNvbGxpc2lvbl93b3JsZE5vcm1hbDEAlwgicmF3Y2hhcmFjdGVyY29sbGlzaW9uX3dvcmxkTm9ybWFsMgCuBRdfX3diZ19yYXdjY2Rzb2x2ZXJfZnJlZQCTCRByYXdjY2Rzb2x2ZXJfbmV3AO0JHHJhd2ltcHVsc2Vqb2ludHNldF9qb2ludFR5cGUA+QYjcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50Qm9keUhhbmRsZTEAqAcjcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50Qm9keUhhbmRsZTIAqQcfcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50RnJhbWVYMQDFBh9yYXdpbXB1bHNlam9pbnRzZXRfam9pbnRGcmFtZVgyAMYGH3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludEFuY2hvcjEAmAYfcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50QW5jaG9yMgCZBiJyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRTZXRBbmNob3IxAO8GInJhd2ltcHVsc2Vqb2ludHNldF9qb2ludFNldEFuY2hvcjIA8AYncmF3aW1wdWxzZWpvaW50c2V0X2pvaW50Q29udGFjdHNFbmFibGVkANUHKnJhd2ltcHVsc2Vqb2ludHNldF9qb2ludFNldENvbnRhY3RzRW5hYmxlZACjCCVyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRMaW1pdHNFbmFibGVkAP8GIXJhd2ltcHVsc2Vqb2ludHNldF9qb2ludExpbWl0c01pbgCUByFyYXdpbXB1bHNlam9pbnRzZXRfam9pbnRMaW1pdHNNYXgAlQchcmF3aW1wdWxzZWpvaW50c2V0X2pvaW50U2V0TGltaXRzAKUHK3Jhd2ltcHVsc2Vqb2ludHNldF9qb2ludENvbmZpZ3VyZU1vdG9yTW9kZWwAhAcucmF3aW1wdWxzZWpvaW50c2V0X2pvaW50Q29uZmlndXJlTW90b3JWZWxvY2l0eQCwBy5yYXdpbXB1bHNlam9pbnRzZXRfam9pbnRDb25maWd1cmVNb3RvclBvc2l0aW9uALEHJnJhd2ltcHVsc2Vqb2ludHNldF9qb2ludENvbmZpZ3VyZU1vdG9yALIHHV9fd2JnX3Jhd2ltcHVsc2Vqb2ludHNldF9mcmVlAJQJFnJhd2ltcHVsc2Vqb2ludHNldF9uZXcA7gkecmF3aW1wdWxzZWpvaW50c2V0X2NyZWF0ZUpvaW50AOEIGXJhd2ltcHVsc2Vqb2ludHNldF9yZW1vdmUA3QgWcmF3aW1wdWxzZWpvaW50c2V0X2xlbgDvCRtyYXdpbXB1bHNlam9pbnRzZXRfY29udGFpbnMAsQglcmF3aW1wdWxzZWpvaW50c2V0X2ZvckVhY2hKb2ludEhhbmRsZQCmCTJyYXdpbXB1bHNlam9pbnRzZXRfZm9yRWFjaEpvaW50QXR0YWNoZWRUb1JpZ2lkQm9keQChCSNfX3diZ19yYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfZnJlZQC2CxxyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfbmV3AI4HG3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19kdAC7CytyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfYWxsb3dlZExpbmVhckVycm9yAJ0LK3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19wcmVkaWN0aW9uRGlzdGFuY2UAngsucmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX21heFZlbG9jaXR5SXRlcmF0aW9ucwCfCzZyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfbWF4VmVsb2NpdHlGcmljdGlvbkl0ZXJhdGlvbnMAoAszcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX21heFN0YWJpbGl6YXRpb25JdGVyYXRpb25zAKELJnJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19taW5Jc2xhbmRTaXplAKILJ3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19tYXhDY2RTdWJzdGVwcwCjCx9yYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X2R0AI8LIHJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfZXJwAPwKL3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfYWxsb3dlZExpbmVhckVycm9yAP0KL3Jhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfcHJlZGljdGlvbkRpc3RhbmNlAP4KMnJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfbWF4VmVsb2NpdHlJdGVyYXRpb25zAP8KOnJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19zZXRfbWF4VmVsb2NpdHlGcmljdGlvbkl0ZXJhdGlvbnMAgAs3cmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX3NldF9tYXhTdGFiaWxpemF0aW9uSXRlcmF0aW9ucwCBCypyYXdpbnRlZ3JhdGlvbnBhcmFtZXRlcnNfc2V0X21pbklzbGFuZFNpemUAggsrcmF3aW50ZWdyYXRpb25wYXJhbWV0ZXJzX3NldF9tYXhDY2RTdWJzdGVwcwCDCxtfX3diZ19yYXdpc2xhbmRtYW5hZ2VyX2ZyZWUA2wYUcmF3aXNsYW5kbWFuYWdlcl9uZXcAjwctcmF3aXNsYW5kbWFuYWdlcl9mb3JFYWNoQWN0aXZlUmlnaWRCb2R5SGFuZGxlAKcJGl9fd2JnX3Jhd2dlbmVyaWNqb2ludF9mcmVlALYLGXJhd2dlbmVyaWNqb2ludF9zcGhlcmljYWwAwAUZcmF3Z2VuZXJpY2pvaW50X3ByaXNtYXRpYwCLBRVyYXdnZW5lcmljam9pbnRfZml4ZWQA8QIYcmF3Z2VuZXJpY2pvaW50X3Jldm9sdXRlAJUFHnJhd211bHRpYm9keWpvaW50c2V0X2pvaW50VHlwZQDaCSFyYXdtdWx0aWJvZHlqb2ludHNldF9qb2ludEZyYW1lWDEAuQUhcmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRGcmFtZVgyALoFIXJhd211bHRpYm9keWpvaW50c2V0X2pvaW50QW5jaG9yMQC7BSFyYXdtdWx0aWJvZHlqb2ludHNldF9qb2ludEFuY2hvcjIAvAUpcmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRDb250YWN0c0VuYWJsZWQA5gYscmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRTZXRDb250YWN0c0VuYWJsZWQAgAcncmF3bXVsdGlib2R5am9pbnRzZXRfam9pbnRMaW1pdHNFbmFibGVkALEJI3Jhd211bHRpYm9keWpvaW50c2V0X2pvaW50TGltaXRzTWluAIgGI3Jhd211bHRpYm9keWpvaW50c2V0X2pvaW50TGltaXRzTWF4AIkGH19fd2JnX3Jhd211bHRpYm9keWpvaW50c2V0X2ZyZWUAlQkYcmF3bXVsdGlib2R5am9pbnRzZXRfbmV3APAJIHJhd211bHRpYm9keWpvaW50c2V0X2NyZWF0ZUpvaW50AOIIG3Jhd211bHRpYm9keWpvaW50c2V0X3JlbW92ZQDvCB1yYXdtdWx0aWJvZHlqb2ludHNldF9jb250YWlucwCYCCdyYXdtdWx0aWJvZHlqb2ludHNldF9mb3JFYWNoSm9pbnRIYW5kbGUAqAk0cmF3bXVsdGlib2R5am9pbnRzZXRfZm9yRWFjaEpvaW50QXR0YWNoZWRUb1JpZ2lkQm9keQCiCR1yYXdyaWdpZGJvZHlzZXRfcmJUcmFuc2xhdGlvbgCaBhpyYXdyaWdpZGJvZHlzZXRfcmJSb3RhdGlvbgDHBhdyYXdyaWdpZGJvZHlzZXRfcmJTbGVlcAC/CBxyYXdyaWdpZGJvZHlzZXRfcmJJc1NsZWVwaW5nAOcHGnJhd3JpZ2lkYm9keXNldF9yYklzTW92aW5nAOgHIXJhd3JpZ2lkYm9keXNldF9yYk5leHRUcmFuc2xhdGlvbgCbBh5yYXdyaWdpZGJvZHlzZXRfcmJOZXh0Um90YXRpb24AjQYgcmF3cmlnaWRib2R5c2V0X3JiU2V0VHJhbnNsYXRpb24AmAodcmF3cmlnaWRib2R5c2V0X3JiU2V0Um90YXRpb24AlQobcmF3cmlnaWRib2R5c2V0X3JiU2V0TGludmVsAOcGG3Jhd3JpZ2lkYm9keXNldF9yYlNldEFuZ3ZlbADoBi1yYXdyaWdpZGJvZHlzZXRfcmJTZXROZXh0S2luZW1hdGljVHJhbnNsYXRpb24AygcqcmF3cmlnaWRib2R5c2V0X3JiU2V0TmV4dEtpbmVtYXRpY1JvdGF0aW9uALAKNnJhd3JpZ2lkYm9keXNldF9yYlJlY29tcHV0ZU1hc3NQcm9wZXJ0aWVzRnJvbUNvbGxpZGVycwCWByNyYXdyaWdpZGJvZHlzZXRfcmJTZXRBZGRpdGlvbmFsTWFzcwDLBy1yYXdyaWdpZGJvZHlzZXRfcmJTZXRBZGRpdGlvbmFsTWFzc1Byb3BlcnRpZXMAwgMYcmF3cmlnaWRib2R5c2V0X3JiTGludmVsAI4GGHJhd3JpZ2lkYm9keXNldF9yYkFuZ3ZlbACPBiJyYXdyaWdpZGJvZHlzZXRfcmJMb2NrVHJhbnNsYXRpb25zAJkKKHJhd3JpZ2lkYm9keXNldF9yYlNldEVuYWJsZWRUcmFuc2xhdGlvbnMA0AkfcmF3cmlnaWRib2R5c2V0X3JiTG9ja1JvdGF0aW9ucwCaCiVyYXdyaWdpZGJvZHlzZXRfcmJTZXRFbmFibGVkUm90YXRpb25zANEJIHJhd3JpZ2lkYm9keXNldF9yYkRvbWluYW5jZUdyb3VwAMQHI3Jhd3JpZ2lkYm9keXNldF9yYlNldERvbWluYW5jZUdyb3VwALIIG3Jhd3JpZ2lkYm9keXNldF9yYkVuYWJsZUNjZACkCBZyYXdyaWdpZGJvZHlzZXRfcmJNYXNzAOkHGXJhd3JpZ2lkYm9keXNldF9yYkludk1hc3MA1gcicmF3cmlnaWRib2R5c2V0X3JiRWZmZWN0aXZlSW52TWFzcwCcBhpyYXdyaWdpZGJvZHlzZXRfcmJMb2NhbENvbQCdBhpyYXdyaWdpZGJvZHlzZXRfcmJXb3JsZENvbQCeBilyYXdyaWdpZGJvZHlzZXRfcmJJbnZQcmluY2lwYWxJbmVydGlhU3FydACfBixyYXdyaWdpZGJvZHlzZXRfcmJQcmluY2lwYWxJbmVydGlhTG9jYWxGcmFtZQCgBiJyYXdyaWdpZGJvZHlzZXRfcmJQcmluY2lwYWxJbmVydGlhAN8GLnJhd3JpZ2lkYm9keXNldF9yYkVmZmVjdGl2ZVdvcmxkSW52SW5lcnRpYVNxcnQA9QUpcmF3cmlnaWRib2R5c2V0X3JiRWZmZWN0aXZlQW5ndWxhckluZXJ0aWEAyAYYcmF3cmlnaWRib2R5c2V0X3JiV2FrZVVwALMIHnJhd3JpZ2lkYm9keXNldF9yYklzQ2NkRW5hYmxlZADqBx5yYXdyaWdpZGJvZHlzZXRfcmJOdW1Db2xsaWRlcnMAzAcacmF3cmlnaWRib2R5c2V0X3JiQ29sbGlkZXIA3wkacmF3cmlnaWRib2R5c2V0X3JiQm9keVR5cGUA1wcdcmF3cmlnaWRib2R5c2V0X3JiU2V0Qm9keVR5cGUAvAcZcmF3cmlnaWRib2R5c2V0X3JiSXNGaXhlZADrBx1yYXdyaWdpZGJvZHlzZXRfcmJJc0tpbmVtYXRpYwDsBxtyYXdyaWdpZGJvZHlzZXRfcmJJc0R5bmFtaWMA7QcfcmF3cmlnaWRib2R5c2V0X3JiTGluZWFyRGFtcGluZwDYByByYXdyaWdpZGJvZHlzZXRfcmJBbmd1bGFyRGFtcGluZwDZByJyYXdyaWdpZGJvZHlzZXRfcmJTZXRMaW5lYXJEYW1waW5nALQII3Jhd3JpZ2lkYm9keXNldF9yYlNldEFuZ3VsYXJEYW1waW5nAKUIHHJhd3JpZ2lkYm9keXNldF9yYlNldEVuYWJsZWQApggbcmF3cmlnaWRib2R5c2V0X3JiSXNFbmFibGVkAO4HHnJhd3JpZ2lkYm9keXNldF9yYkdyYXZpdHlTY2FsZQDvByFyYXdyaWdpZGJvZHlzZXRfcmJTZXRHcmF2aXR5U2NhbGUAmQgdcmF3cmlnaWRib2R5c2V0X3JiUmVzZXRGb3JjZXMApwgecmF3cmlnaWRib2R5c2V0X3JiUmVzZXRUb3JxdWVzAKgIGnJhd3JpZ2lkYm9keXNldF9yYkFkZEZvcmNlAOkGHnJhd3JpZ2lkYm9keXNldF9yYkFwcGx5SW1wdWxzZQDqBhtyYXdyaWdpZGJvZHlzZXRfcmJBZGRUb3JxdWUA6wYkcmF3cmlnaWRib2R5c2V0X3JiQXBwbHlUb3JxdWVJbXB1bHNlAOwGIXJhd3JpZ2lkYm9keXNldF9yYkFkZEZvcmNlQXRQb2ludAC1BSVyYXdyaWdpZGJvZHlzZXRfcmJBcHBseUltcHVsc2VBdFBvaW50ALYFGnJhd3JpZ2lkYm9keXNldF9yYlVzZXJEYXRhANoHHXJhd3JpZ2lkYm9keXNldF9yYlNldFVzZXJEYXRhAP8HGl9fd2JnX3Jhd3JpZ2lkYm9keXNldF9mcmVlAMEFE3Jhd3JpZ2lkYm9keXNldF9uZXcAkAgfcmF3cmlnaWRib2R5c2V0X2NyZWF0ZVJpZ2lkQm9keQC0AxZyYXdyaWdpZGJvZHlzZXRfcmVtb3ZlAKQFE3Jhd3JpZ2lkYm9keXNldF9sZW4A8QkYcmF3cmlnaWRib2R5c2V0X2NvbnRhaW5zALUIJnJhd3JpZ2lkYm9keXNldF9mb3JFYWNoUmlnaWRCb2R5SGFuZGxlAKkJOXJhd3JpZ2lkYm9keXNldF9wcm9wYWdhdGVNb2RpZmllZEJvZHlQb3NpdGlvbnNUb0NvbGxpZGVycwDICRhfX3diZ19yYXdicm9hZHBoYXNlX2ZyZWUAlgkRcmF3YnJvYWRwaGFzZV9uZXcA0gkccmF3Y29sbGlkZXJzZXRfY29UcmFuc2xhdGlvbgChBhlyYXdjb2xsaWRlcnNldF9jb1JvdGF0aW9uAJAGH3Jhd2NvbGxpZGVyc2V0X2NvU2V0VHJhbnNsYXRpb24AzQcocmF3Y29sbGlkZXJzZXRfY29TZXRUcmFuc2xhdGlvbldydFBhcmVudADOBxxyYXdjb2xsaWRlcnNldF9jb1NldFJvdGF0aW9uALEKJXJhd2NvbGxpZGVyc2V0X2NvU2V0Um90YXRpb25XcnRQYXJlbnQAsgoZcmF3Y29sbGlkZXJzZXRfY29Jc1NlbnNvcgDwBxpyYXdjb2xsaWRlcnNldF9jb1NoYXBlVHlwZQDbCSByYXdjb2xsaWRlcnNldF9jb0hhbGZzcGFjZU5vcm1hbADFBRxyYXdjb2xsaWRlcnNldF9jb0hhbGZFeHRlbnRzAPUGH3Jhd2NvbGxpZGVyc2V0X2NvU2V0SGFsZkV4dGVudHMAlwkXcmF3Y29sbGlkZXJzZXRfY29SYWRpdXMA2QgacmF3Y29sbGlkZXJzZXRfY29TZXRSYWRpdXMAzQobcmF3Y29sbGlkZXJzZXRfY29IYWxmSGVpZ2h0ANoIHnJhd2NvbGxpZGVyc2V0X2NvU2V0SGFsZkhlaWdodADOChxyYXdjb2xsaWRlcnNldF9jb1JvdW5kUmFkaXVzANsIH3Jhd2NvbGxpZGVyc2V0X2NvU2V0Um91bmRSYWRpdXMAzwoZcmF3Y29sbGlkZXJzZXRfY29WZXJ0aWNlcwDNBhhyYXdjb2xsaWRlcnNldF9jb0luZGljZXMAzgYjcmF3Y29sbGlkZXJzZXRfY29IZWlnaHRmaWVsZEhlaWdodHMAzwYhcmF3Y29sbGlkZXJzZXRfY29IZWlnaHRmaWVsZFNjYWxlAPYGIXJhd2NvbGxpZGVyc2V0X2NvSGVpZ2h0ZmllbGROUm93cwD6CCFyYXdjb2xsaWRlcnNldF9jb0hlaWdodGZpZWxkTkNvbHMA+wgXcmF3Y29sbGlkZXJzZXRfY29QYXJlbnQA8gYbcmF3Y29sbGlkZXJzZXRfY29TZXRFbmFibGVkAKkIGnJhd2NvbGxpZGVyc2V0X2NvSXNFbmFibGVkAPEHGXJhd2NvbGxpZGVyc2V0X2NvRnJpY3Rpb24A4wcccmF3Y29sbGlkZXJzZXRfY29SZXN0aXR1dGlvbgDkBxhyYXdjb2xsaWRlcnNldF9jb0RlbnNpdHkA8gcVcmF3Y29sbGlkZXJzZXRfY29NYXNzAPMHF3Jhd2NvbGxpZGVyc2V0X2NvVm9sdW1lAPQHIHJhd2NvbGxpZGVyc2V0X2NvQ29sbGlzaW9uR3JvdXBzAKoHHXJhd2NvbGxpZGVyc2V0X2NvU29sdmVyR3JvdXBzAKsHHHJhd2NvbGxpZGVyc2V0X2NvQWN0aXZlSG9va3MA9QclcmF3Y29sbGlkZXJzZXRfY29BY3RpdmVDb2xsaXNpb25UeXBlcwDbBx1yYXdjb2xsaWRlcnNldF9jb0FjdGl2ZUV2ZW50cwD2BytyYXdjb2xsaWRlcnNldF9jb0NvbnRhY3RGb3JjZUV2ZW50VGhyZXNob2xkAPcHHnJhd2NvbGxpZGVyc2V0X2NvQ29udGFpbnNQb2ludAD2BRpyYXdjb2xsaWRlcnNldF9jb0Nhc3RTaGFwZQCYAh1yYXdjb2xsaWRlcnNldF9jb0Nhc3RDb2xsaWRlcgDYAiByYXdjb2xsaWRlcnNldF9jb0ludGVyc2VjdHNTaGFwZQDRBh1yYXdjb2xsaWRlcnNldF9jb0NvbnRhY3RTaGFwZQCgAyByYXdjb2xsaWRlcnNldF9jb0NvbnRhY3RDb2xsaWRlcgDjBB1yYXdjb2xsaWRlcnNldF9jb1Byb2plY3RQb2ludACWBR5yYXdjb2xsaWRlcnNldF9jb0ludGVyc2VjdHNSYXkAnQcYcmF3Y29sbGlkZXJzZXRfY29DYXN0UmF5AJEHJHJhd2NvbGxpZGVyc2V0X2NvQ2FzdFJheUFuZEdldE5vcm1hbACCBRpyYXdjb2xsaWRlcnNldF9jb1NldFNlbnNvcgCqCB9yYXdjb2xsaWRlcnNldF9jb1NldFJlc3RpdHV0aW9uALYIHHJhd2NvbGxpZGVyc2V0X2NvU2V0RnJpY3Rpb24AtwgkcmF3Y29sbGlkZXJzZXRfY29GcmljdGlvbkNvbWJpbmVSdWxlANwHJ3Jhd2NvbGxpZGVyc2V0X2NvU2V0RnJpY3Rpb25Db21iaW5lUnVsZQCBCCdyYXdjb2xsaWRlcnNldF9jb1Jlc3RpdHV0aW9uQ29tYmluZVJ1bGUA3QcqcmF3Y29sbGlkZXJzZXRfY29TZXRSZXN0aXR1dGlvbkNvbWJpbmVSdWxlAIIII3Jhd2NvbGxpZGVyc2V0X2NvU2V0Q29sbGlzaW9uR3JvdXBzALcHIHJhd2NvbGxpZGVyc2V0X2NvU2V0U29sdmVyR3JvdXBzALgHH3Jhd2NvbGxpZGVyc2V0X2NvU2V0QWN0aXZlSG9va3MAgwggcmF3Y29sbGlkZXJzZXRfY29TZXRBY3RpdmVFdmVudHMAhAgocmF3Y29sbGlkZXJzZXRfY29TZXRBY3RpdmVDb2xsaXNpb25UeXBlcwCFCBlyYXdjb2xsaWRlcnNldF9jb1NldFNoYXBlANIGLnJhd2NvbGxpZGVyc2V0X2NvU2V0Q29udGFjdEZvcmNlRXZlbnRUaHJlc2hvbGQAuAgbcmF3Y29sbGlkZXJzZXRfY29TZXREZW5zaXR5ALkIGHJhd2NvbGxpZGVyc2V0X2NvU2V0TWFzcwC6CCJyYXdjb2xsaWRlcnNldF9jb1NldE1hc3NQcm9wZXJ0aWVzAKcDGV9fd2JnX3Jhd2NvbGxpZGVyc2V0X2ZyZWUAoAUScmF3Y29sbGlkZXJzZXRfbmV3AKQHEnJhd2NvbGxpZGVyc2V0X2xlbgDyCRdyYXdjb2xsaWRlcnNldF9jb250YWlucwC7CB1yYXdjb2xsaWRlcnNldF9jcmVhdGVDb2xsaWRlcgCDBBVyYXdjb2xsaWRlcnNldF9yZW1vdmUA4AUkcmF3Y29sbGlkZXJzZXRfZm9yRWFjaENvbGxpZGVySGFuZGxlAKoJGl9fd2JnX3Jhd3NoYXBlY29udGFjdF9mcmVlALYLGHJhd3NoYXBlY29udGFjdF9kaXN0YW5jZQCkCxlfX3diZ19yYXduYXJyb3dwaGFzZV9mcmVlAJgJEnJhd25hcnJvd3BoYXNlX25ldwDTCRxyYXduYXJyb3dwaGFzZV9jb250YWN0c193aXRoAPMJG3Jhd25hcnJvd3BoYXNlX2NvbnRhY3RfcGFpcgDcBiFyYXduYXJyb3dwaGFzZV9pbnRlcnNlY3Rpb25zX3dpdGgA9AkgcmF3bmFycm93cGhhc2VfaW50ZXJzZWN0aW9uX3BhaXIArAcdX193YmdfcmF3Y29udGFjdG1hbmlmb2xkX2ZyZWUAtgsYcmF3Y29udGFjdHBhaXJfY29sbGlkZXIxAPwIGHJhd2NvbnRhY3RwYWlyX2NvbGxpZGVyMgDwCCJyYXdjb250YWN0cGFpcl9udW1Db250YWN0TWFuaWZvbGRzAJsKHnJhd2NvbnRhY3RwYWlyX2NvbnRhY3RNYW5pZm9sZADPBxlyYXdjb250YWN0bWFuaWZvbGRfbm9ybWFsAK0HG3Jhd2NvbnRhY3RtYW5pZm9sZF9sb2NhbF9uMQCzBxtyYXdjb250YWN0bWFuaWZvbGRfbG9jYWxfbjIAtAcccmF3Y29udGFjdG1hbmlmb2xkX3N1YnNoYXBlMQCzChxyYXdjb250YWN0bWFuaWZvbGRfc3Vic2hhcGUyALQKH3Jhd2NvbnRhY3RtYW5pZm9sZF9udW1fY29udGFjdHMAnAojcmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfbG9jYWxfcDEA4gYjcmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfbG9jYWxfcDIA4wYfcmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfZGlzdACBCR9yYXdjb250YWN0bWFuaWZvbGRfY29udGFjdF9maWQxAIIJH3Jhd2NvbnRhY3RtYW5pZm9sZF9jb250YWN0X2ZpZDIAgwkicmF3Y29udGFjdG1hbmlmb2xkX2NvbnRhY3RfaW1wdWxzZQCECSxyYXdjb250YWN0bWFuaWZvbGRfY29udGFjdF90YW5nZW50X2ltcHVsc2VfeACFCSxyYXdjb250YWN0bWFuaWZvbGRfY29udGFjdF90YW5nZW50X2ltcHVsc2VfeQCGCSZyYXdjb250YWN0bWFuaWZvbGRfbnVtX3NvbHZlcl9jb250YWN0cwCdCidyYXdjb250YWN0bWFuaWZvbGRfc29sdmVyX2NvbnRhY3RfcG9pbnQA5AYmcmF3Y29udGFjdG1hbmlmb2xkX3NvbHZlcl9jb250YWN0X2Rpc3QAhwkqcmF3Y29udGFjdG1hbmlmb2xkX3NvbHZlcl9jb250YWN0X2ZyaWN0aW9uAPYILXJhd2NvbnRhY3RtYW5pZm9sZF9zb2x2ZXJfY29udGFjdF9yZXN0aXR1dGlvbgD3CDJyYXdjb250YWN0bWFuaWZvbGRfc29sdmVyX2NvbnRhY3RfdGFuZ2VudF92ZWxvY2l0eQDtBh1fX3diZ19yYXdwb2ludHByb2plY3Rpb25fZnJlZQC2CyVfX3diZ19yYXdwb2ludGNvbGxpZGVycHJvamVjdGlvbl9mcmVlALYLKXJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2NvbGxpZGVySGFuZGxlAPEIJnJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2ZlYXR1cmVUeXBlAJsLJHJhd3BvaW50Y29sbGlkZXJwcm9qZWN0aW9uX2ZlYXR1cmVJZAC1Ch1fX3diZ19yYXdyYXlpbnRlcnNlY3Rpb25fZnJlZQC2Cx5yYXdyYXlpbnRlcnNlY3Rpb25fZmVhdHVyZVR5cGUAvAsccmF3cmF5aW50ZXJzZWN0aW9uX2ZlYXR1cmVJZADGCiFyYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9ub3JtYWwAmggecmF3cmF5Y29sbGlkZXJpbnRlcnNlY3Rpb25fdG9pAKULJnJhd3JheWNvbGxpZGVyaW50ZXJzZWN0aW9uX2ZlYXR1cmVUeXBlAKYLJHJhd3JheWNvbGxpZGVyaW50ZXJzZWN0aW9uX2ZlYXR1cmVJZAC2ChxfX3diZ19yYXdyYXljb2xsaWRlcnRvaV9mcmVlALYLE19fd2JnX3Jhd3NoYXBlX2ZyZWUAyQkPcmF3c2hhcGVfY3Vib2lkALQJFHJhd3NoYXBlX3JvdW5kQ3Vib2lkALIJDXJhd3NoYXBlX2JhbGwAvwkScmF3c2hhcGVfaGFsZnNwYWNlAJMGEHJhd3NoYXBlX2NhcHN1bGUA0AcRcmF3c2hhcGVfY3lsaW5kZXIAuQkWcmF3c2hhcGVfcm91bmRDeWxpbmRlcgC1CQ1yYXdzaGFwZV9jb25lALoJEnJhd3NoYXBlX3JvdW5kQ29uZQC2CRFyYXdzaGFwZV9wb2x5bGluZQCRCBByYXdzaGFwZV90cmltZXNoAJIIFHJhd3NoYXBlX2hlaWdodGZpZWxkAP0FEHJhd3NoYXBlX3NlZ21lbnQA2QURcmF3c2hhcGVfdHJpYW5nbGUA/gQWcmF3c2hhcGVfcm91bmRUcmlhbmdsZQDyBBNyYXdzaGFwZV9jb252ZXhIdWxsALwIGHJhd3NoYXBlX3JvdW5kQ29udmV4SHVsbACuCBNyYXdzaGFwZV9jb252ZXhNZXNoAMUHGHJhd3NoYXBlX3JvdW5kQ29udmV4TWVzaADABxJyYXdzaGFwZV9jYXN0U2hhcGUAmwEYcmF3c2hhcGVfaW50ZXJzZWN0c1NoYXBlALgDFXJhd3NoYXBlX2NvbnRhY3RTaGFwZQC6ARZyYXdzaGFwZV9jb250YWluc1BvaW50AI0FFXJhd3NoYXBlX3Byb2plY3RQb2ludAC6BBZyYXdzaGFwZV9pbnRlcnNlY3RzUmF5AKsEEHJhd3NoYXBlX2Nhc3RSYXkA8gMccmF3c2hhcGVfY2FzdFJheUFuZEdldE5vcm1hbADAAhZfX3diZ19yYXdzaGFwZXRvaV9mcmVlALYLFHJhd3NoYXBldG9pX3dpdG5lc3MxAJsIE3Jhd3NoYXBldG9pX25vcm1hbDEAnAgTcmF3c2hhcGV0b2lfbm9ybWFsMgCdCB5fX3diZ19yYXdzaGFwZWNvbGxpZGVydG9pX2ZyZWUAtgsccmF3c2hhcGVjb2xsaWRlcnRvaV93aXRuZXNzMgCeCBtyYXdzaGFwZWNvbGxpZGVydG9pX25vcm1hbDIAnwgPcmF3cm90YXRpb25fbmV3AMcKFHJhd3JvdGF0aW9uX2lkZW50aXR5AO8KDXJhd3JvdGF0aW9uX3kApwsNcmF3cm90YXRpb25fdwCoCw5yYXd2ZWN0b3JfemVybwCQCw1yYXd2ZWN0b3JfbmV3ANsKD3Jhd3ZlY3Rvcl9zZXRfeQCECw1yYXd2ZWN0b3JfeHl6AOYIDXJhd3ZlY3Rvcl95eHoA5wgNcmF3dmVjdG9yX3p4eQDoCA1yYXd2ZWN0b3JfeHp5AOkIDXJhd3ZlY3Rvcl95engA6ggNcmF3dmVjdG9yX3p5eADrCBZyYXdzZHBtYXRyaXgzX2VsZW1lbnRzAL0HIV9fd2JnX3Jhd2RlYnVncmVuZGVycGlwZWxpbmVfZnJlZQDOBBpyYXdkZWJ1Z3JlbmRlcnBpcGVsaW5lX25ldwDeBx9yYXdkZWJ1Z3JlbmRlcnBpcGVsaW5lX3ZlcnRpY2VzANUIHXJhd2RlYnVncmVuZGVycGlwZWxpbmVfY29sb3JzANYIHXJhd2RlYnVncmVuZGVycGlwZWxpbmVfcmVuZGVyAK8FGF9fd2JnX3Jhd2V2ZW50cXVldWVfZnJlZQByH19fd2JnX3Jhd2NvbnRhY3Rmb3JjZWV2ZW50X2ZyZWUAtgsecmF3Y29udGFjdGZvcmNlZXZlbnRfY29sbGlkZXIyAPIIIHJhd2NvbnRhY3Rmb3JjZWV2ZW50X3RvdGFsX2ZvcmNlAKAIKnJhd2NvbnRhY3Rmb3JjZWV2ZW50X3RvdGFsX2ZvcmNlX21hZ25pdHVkZQCpCyhyYXdjb250YWN0Zm9yY2VldmVudF9tYXhfZm9yY2VfZGlyZWN0aW9uAKEIKHJhd2NvbnRhY3Rmb3JjZWV2ZW50X21heF9mb3JjZV9tYWduaXR1ZGUAqgsRcmF3ZXZlbnRxdWV1ZV9uZXcA+gcicmF3ZXZlbnRxdWV1ZV9kcmFpbkNvbGxpc2lvbkV2ZW50cwDKCSVyYXdldmVudHF1ZXVlX2RyYWluQ29udGFjdEZvcmNlRXZlbnRzAMsJE3Jhd2V2ZW50cXVldWVfY2xlYXIA+AcdX193YmdfcmF3cGh5c2ljc3BpcGVsaW5lX2ZyZWUAvQEWcmF3cGh5c2ljc3BpcGVsaW5lX25ldwCZCRdyYXdwaHlzaWNzcGlwZWxpbmVfc3RlcAC9BCFyYXdwaHlzaWNzcGlwZWxpbmVfc3RlcFdpdGhFdmVudHMApgQbX193YmdfcmF3cXVlcnlwaXBlbGluZV9mcmVlAJMJFHJhd3F1ZXJ5cGlwZWxpbmVfbmV3APUJF3Jhd3F1ZXJ5cGlwZWxpbmVfdXBkYXRlAN8HGHJhd3F1ZXJ5cGlwZWxpbmVfY2FzdFJheQCoBCRyYXdxdWVyeXBpcGVsaW5lX2Nhc3RSYXlBbmRHZXROb3JtYWwAwwMlcmF3cXVlcnlwaXBlbGluZV9pbnRlcnNlY3Rpb25zV2l0aFJheQCDBSZyYXdxdWVyeXBpcGVsaW5lX2ludGVyc2VjdGlvbldpdGhTaGFwZQDEBB1yYXdxdWVyeXBpcGVsaW5lX3Byb2plY3RQb2ludACXBCpyYXdxdWVyeXBpcGVsaW5lX3Byb2plY3RQb2ludEFuZEdldEZlYXR1cmUAnQIncmF3cXVlcnlwaXBlbGluZV9pbnRlcnNlY3Rpb25zV2l0aFBvaW50APMCGnJhd3F1ZXJ5cGlwZWxpbmVfY2FzdFNoYXBlAPUBJ3Jhd3F1ZXJ5cGlwZWxpbmVfaW50ZXJzZWN0aW9uc1dpdGhTaGFwZQDYBDJyYXdxdWVyeXBpcGVsaW5lX2NvbGxpZGVyc1dpdGhBYWJiSW50ZXJzZWN0aW5nQWFiYgD6Bh9fX3diZ19yYXdkZXNlcmlhbGl6ZWR3b3JsZF9mcmVlANoFIHJhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VHcmF2aXR5AJcHLnJhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VJbnRlZ3JhdGlvblBhcmFtZXRlcnMAvgQmcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUlzbGFuZE1hbmFnZXIAyQQjcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUJyb2FkUGhhc2UAkAckcmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZU5hcnJvd1BoYXNlANUEH3Jhd2Rlc2VyaWFsaXplZHdvcmxkX3Rha2VCb2RpZXMAtwUicmF3ZGVzZXJpYWxpemVkd29ybGRfdGFrZUNvbGxpZGVycwCXBSZyYXdkZXNlcmlhbGl6ZWR3b3JsZF90YWtlSW1wdWxzZUpvaW50cwChBChyYXdkZXNlcmlhbGl6ZWR3b3JsZF90YWtlTXVsdGlib2R5Sm9pbnRzAKIEJXJhd3NlcmlhbGl6YXRpb25waXBlbGluZV9zZXJpYWxpemVBbGwAjAMncmF3c2VyaWFsaXphdGlvbnBpcGVsaW5lX2Rlc2VyaWFsaXplQWxsALADGV9fd2JnX3Jhd2NvbnRhY3RwYWlyX2ZyZWUAtgslX193YmdfcmF3cmF5Y29sbGlkZXJpbnRlcnNlY3Rpb25fZnJlZQC2CxZfX3diZ19yYXdyb3RhdGlvbl9mcmVlALYLFF9fd2JnX3Jhd3ZlY3Rvcl9mcmVlALYLGF9fd2JnX3Jhd3NkcG1hdHJpeDNfZnJlZQC2Cw9yYXd2ZWN0b3Jfc2V0X3gAjwsPcmF3dmVjdG9yX3NldF96APwKG3Jhd3BvaW50cHJvamVjdGlvbl9pc0luc2lkZQCaCyNyYXdwb2ludGNvbGxpZGVycHJvamVjdGlvbl9pc0luc2lkZQCaCxxyYXdjb2xsaWRlcnNldF9pc0hhbmRsZVZhbGlkALsIFnJhd3NoYXBlY29udGFjdF9wb2ludDEArQgWcmF3c2hhcGVjb250YWN0X3BvaW50MgCWCBdyYXdzaGFwZWNvbnRhY3Rfbm9ybWFsMgCXCBhyYXdwb2ludHByb2plY3Rpb25fcG9pbnQArQggcmF3cG9pbnRjb2xsaWRlcnByb2plY3Rpb25fcG9pbnQArQgZcmF3cmF5aW50ZXJzZWN0aW9uX25vcm1hbACWCBxyYXdzaGFwZWNvbGxpZGVydG9pX3dpdG5lc3MxAJYIF3Jhd3NoYXBlY29udGFjdF9ub3JtYWwxAJ4IG3Jhd3NoYXBlY29sbGlkZXJ0b2lfbm9ybWFsMQCXCBRyYXdzaGFwZXRvaV93aXRuZXNzMgCgCBxyYXdzZXJpYWxpemF0aW9ucGlwZWxpbmVfbmV3AMALHHJhd2ludGVncmF0aW9ucGFyYW1ldGVyc19lcnAAnAsWcmF3cmF5aW50ZXJzZWN0aW9uX3RvaQCcCxVyYXdyYXljb2xsaWRlcnRvaV90b2kAnAsPcmF3c2hhcGV0b2lfdG9pALsLF3Jhd3NoYXBlY29sbGlkZXJ0b2lfdG9pAJwLDXJhd3JvdGF0aW9uX3gAuwsNcmF3cm90YXRpb25fegCcCwtyYXd2ZWN0b3JfeAC7CwtyYXd2ZWN0b3JfeQCnCwtyYXd2ZWN0b3JfegCcCylyYXdyYXljb2xsaWRlcmludGVyc2VjdGlvbl9jb2xsaWRlckhhbmRsZQD5CCByYXdyYXljb2xsaWRlcnRvaV9jb2xsaWRlckhhbmRsZQD5CCJyYXdzaGFwZWNvbGxpZGVydG9pX2NvbGxpZGVySGFuZGxlAPkIHnJhd2NvbnRhY3Rmb3JjZWV2ZW50X2NvbGxpZGVyMQD5CCNfX3diZ19yYXdzZXJpYWxpemF0aW9ucGlwZWxpbmVfZnJlZQC3Cx9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyANMMD19fd2JpbmRnZW5fZnJlZQDjCxFfX3diaW5kZ2VuX21hbGxvYwDUChRfX3diaW5kZ2VuX2V4bl9zdG9yZQD4CwnGDgEAQQELsAfNDPILrgHqCekJ7AnrCeoJpg3VDOUM5gy2DNQM2QrtCsMJyQvxDPMMxguUCu4EoAnwC+IJ9guSCdgM6wq/B8AElwrUB7AI7gqhBe8E1ATCBfQL9Av0C/QLrwmcB80JnQOcAqsDtgeRBewI8wbHBdgKkQ2SDJYNnw2PDZkM5wzdC7MGlwasBZMFhwf5AdID7gilBOYFvgWqBfUL9Qv1C/ULogjYBsQI8gL4AfcClgqTCrgK4QTIBZIGjw2UDLQLlwzcC8QMlgbyDNcM1gzoDPUMpw2oDakNvwrcAsMEpw3ZAUs27ArXBtEMwwumB8ELwwu+C8oLxwvBC8ELxAvCC8ULpg3rCvcJ9gn3CfgJ+Qn3CYwJigurC/cJ+gmRC70K3gmmDXUyZ1dJzQEvFtkK8grFCcsL8QzwCvEK6wrACvMI2AzrCr8HwASXCtQHsAjuCqEF7wTUBMIF+Qv5C/kL+QuvCZwHzQmdA5wCqwPHBecMlwa5DFG7DE+6DGW8DEzyDNwMrAv8CY8Jiwv9CfwJ/gmmDcYJzAvZBoUN8QyCB/YM+gy7CYcNgQ34DIkNhA27CfkM8wy3CvsM6gWIDcQDhg2DDewM/wyBB/4MnAWKDf0M9wzZBoANgg38DOsK6wrdDPIM4wjCDLEB/gv+C/4L/guRDJkCgwyDDIMMgwySDL8CjgyODI4MjgyTDMsB+gv6C/oL+guUDNgBigyKDIoMigyVDKICsgbwArUHxgjUCaEKsQPMBdMD8QWADIAMgAyADKMFrATKBckCtALgAswK0wv0CqQJ0wb7Bo4NlQztDI0NlgznDOcM5AiLBsEH+AKeCuEHvQjzCucD8ASVA8MF+wv7C/sL+wuvCZwHzQmmA6MCtQOXA6kEwQynAcAMfsMMnQG+DO4CvwyQA+AH/gLQCrwJ1wiUC/QD/wSkA8kFggyCDIIMggymCtYB3QrWA7UC+gOmBcwG1QnLArcEkg2RDJoM3gvFDKcGrAmMC9II5QmUBtcC0geJAswE7gj/AugF6AOqBYQMhAyEDIQMogjgBMQIgALnAZIC1wWNAuYJ5gmjBNIKjg2NCIoD5QLkC88IgweNBPME6wO2BP8L/wv/C/8LpwqwAeAK3QOzAv0DmQfHB60JjgOBBa4JkA2TDO4MmAzUC+oMpgblBYUH3QKPA4AIgAiqA6kD6wTQBtAG9AL1AsoEiQiGA1vlC8sIaoYE+wTAA+sFiwyLDIsMiwxSVeoK0QO6AuMDjQv7B6cC3gyEBc4Lkw2bDOEF4gWcDKUG3QnpDNMH/ALLClzOCHjvA/0E6QPtBfwL/Av8C/wLRkrhCs8DsgLlA40L+wfaBN4MhAWUDZ0MmQ2eDKUGkQb0DLcJogOYB1TGB2yzA9sE6gPsBYcMhwyHDIcMP1riCtADvALkA40L+weLAd4MhAWVC5UNnwygDKUGtAX0DIEBzAOMAucL0QiLDYUE9AS+A4wNhQyFDIUMhQyoCnzfCt8DuwL5A44LwgexBKEM8QSXDaIMjAaKCIMDGbEFyQiyC4sE9gTIAs0FhgyGDIYMhgysCokB5wreA7EC9gOzBZsC5wnPC90F0wiYDaMMpwWkDN8Lxgz7BfADgAT/Af8BpAGVBMsDlgTlBK8EqwmWAucFmgK4BZAMkAyQDJAMqgrcAeYK2wOvAvgD7Qv1CrkK3wz/BdQGmg2lDO8MpgzgC+0D4AjgCIEEgQSYA48IiwOmAuYLxwiwC4wE/AS6A84FjQyNDI0MjQyrCsAB6QrVA7AC/wPuC7oK4AyABpsNpwzXCqgM4QvsA4oHiQeaA5oDmASGBugCngevCOAJwQqhA9sFzQP6BY8MjwyPDI8MnwfyBeUHnwOUAskD0AupDLsK0QvWBp0NqgycDc0LjAiHAxzpC8oIswuJBPcEuQPRBf0L/Qv9C/0LqQqvAeMK3AO9Av4D+Ab5B9cJ7QSFBYAGog2xDMcM9gqyDNgLpAaHCIgDHugLzQivC44E+QS7A88FgQyBDIEMgQyiCr8B3grZA7YC+wP3BtYJ7ATUBqENrwywDNcLogaOCIQDIOoLyAixC4cE+gS8A9MFiQyJDIkMiQykCt8B6ArXA7cC9QPCBIMCzAnuBt4F0wijDbMMogW0DNkLvASICIkDG+wLzAitC4oE9QS/A9AFjAyMDIwMjAylCqgB5QraA7gC9wO9BbAEwAipBdwFoA2tDOEMrgzWC4ADiwiFAx/rC9AIrguIBPgEvQPSBYgMiAyIDIgMowrOAeQK2AO5AvwDiweuB+EJtgPpBJIGng2rDIULrAzVC6MGswmjB9gIkQPhA7IF+AXKAucC/QbiB4IDsgPzBdUG4QL5Av0IrgPGA6QE0gvIC78LvgqlBbUM7QimDeIJ6gSbCe8L2AzrCsYLpQ3yDLoL2AWgB7wKtwykDdkK9wqmDegJyAycCfELyQy4DPILnQnlCMYEpg2kDdIM8QPpBaUJ0AzfBZ4JCoT0UJQN+I4BAxp/HX0CfiMAQdAEayIIJAAgAiADKAKUAREEACEAIAQgBSgClAERBABB/wFxIQoCQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQf8BcSIJDgMVAAEDCyAKDggVAQUFAwUFCAULAkAgCg4IFQUABQUFBQgFC0EAIQAgAiADEIMKIQMgBCAFEIMKIQogA0UNGSAKRQ0ZIAMqAhQhKCADKgIMITMgAyoCECE0IAMqAgghOSADKgIAITogAyoCBCE7IAEqAgAiLiAKQRBqKgIAIimUIAFBBGoqAgAiLSAKKgIMIiuUkyIiICKSISUgAUEIaioCACIxICuUIC4gCkEUaioCACIjlJMiIiAikiEqIAhBCGoiAEEUaiABQRhqKgIAIiwgIyABQQxqKgIAIjAgJZQgLiAqlCAtIC0gI5QgMSAplJMiIiAikiIilJOSkpI4AgAgAEEQaiABQRRqKgIAIiQgKSAwICqUIDEgIpQgLiAllJOSkpI4AgAgACABKgIQIiMgKyAwICKUIC0gJZQgMSAqlJOSkpI4AgwgLiAKKgIEIiqUIC0gCioCACIplJMiIiAikiEnICkgMZQgCioCCCIrIC6UkyIiICKSISUgACAsICsgMCAnlCAuICWUIC0gKyAtlCAqIDGUkyIiICKSIiKUk5KSkjgCCCAAICQgKiAwICWUIDEgIpQgLiAnlJOSkpI4AgQgACAjICkgMCAilCAtICeUIDEgJZSTkpKSOAIAQQAhBSAzIDqTIi4gLpQgNCA7kyItIC2UkiAoIDmTIicgJ5SSQwAAAACSIjZDAAAANF8iACAIKgIUIiogCCoCCCIxkyI8IDyUIAhBGGoqAgAiKSAIKgIMIjCTIj0gPZSSIAhBHGoqAgAiLCAIKgIQIiuTIi8gL5SSQwAAAACSIjVDAAAANF9xDRcgPCA6IDGTIiSUID0gOyAwkyIjlJIgLyA5ICuTIiKUkiElAkACQAJAIABFBEAgLiAklCAtICOUkiAnICKUkiE3IDVDAAAANF8NAQJ9QwAAAAAgNiA1lCI4IC4gPJQgLSA9lJIgJyAvlJIiJyAnlCIkkyIjQwAAADReRQ0AGkMAAAAAICOLQwAAADRfDQAaQwAAwH9DAACAPyA4mCA4IDhcG0MAAMB/QwAAgD8gJJggJCAkXBtbBEBDAAAAACA4vCICICS8IgBrQQRLIAAgAmtBBEsgACACSRtBAUcNARoLICcgJZQgNyA1lJMgI5UiIkMAAIA/ICJDAACAP10bQwAAAAAgIkMAAAAAXhsLISIgJSAnICKUkiA1lSImQwAAAABdDQIgJkMAAIA/XkUNGSAnIDeTIDaVIiJDAAAAAF5FDQMgIkMAAIA/ICJDAACAP10bISJDAACAPyEmDBkLQQAhACAlIDWVIiJDAAAAAF5FBEBBACEEQQAMHAsgIkMAAIA/ICJDAACAP10bISZBACEEDBkLIDeMIDaVIiJDAAAAAF5FDRkgIkMAAIA/ICJDAACAP10bISIMFwtDAAAAACEmIDeMIDaVIiJDAAAAAF5FDRggIkMAAIA/ICJDAACAP10bISIMFgtBACEEQQAhAEEBDBgLQQAhACACIAMQgQohCyAEIAUQgQohDCALRQ0YIAxFDRggByABEJcCDRggCEGIBGoiAEEIaiIDIAFBCGopAgA3AwAgAEEYaiICIAFBGGooAgA2AgAgAyADKgIAIieMOAIAIAggASkCEDcDmAQgCCABKQIANwOIBCAnIAgqApgEIiuUIAgqAogEIiUgAioCACIslJMiIiAikiEqICUgCEGcBGoiACoCACIklCAIKgKMBCIoICuUkyIiICKSISkgACAIKgKUBCIjICqUICUgKZQgJyAoICyUICcgJJSTIiIgIpIiIpSTkiAkkzgCACACICMgKZQgKCAilCAlICqUk5IgLJM4AgAgCCAljDgCiAQgCCAojDgCjAQgCCAjICKUICcgKpQgKCAplJOSICuTOAKYBCAIQbACaiALIAwgARCqASAIKgKwAiIjIAZeRQRAIAhB4AJqIAwgCyAIQYgEahCqASAIKgLgAiIwIAZeRQRAIAhBmANqIAsgDCABEN0BIAgqApgDIiIgBl5FBEAgCEHYA2ogCEG4AmopAwA3AwAgCCAIKQOwAjcD0AMCQCAjIDBdICIgMF1xRQRAICIgI15FDQEgCEHYA2ogCEGgA2opAwA3AwAgCCAIKQOYAzcD0AMMAQsgCEHQA2oiAkEMaiABQQxqKgIAIiogCCoC5AIiKSABQQRqKgIAIieUIAhB4AJqIgBBCGoqAgAiKyABKgIAIiWUkyIiICKSIiyUICUgJSAAQQxqKgIAIiSUICkgAUEIaioCACIolJMiIiAikiIjlCAnICsgKJQgJCAnlJMiIiAikiIilJOSICSTOAIAIAJBCGogKiAjlCAoICKUICUgLJSTkiArkzgCACAIIDA4AtADIAggKiAilCAnICyUICggI5STkiApkzgC1AMLIAdB5ABqIgUoAgAhAkEAIQRBBCEAAkAgB0HoAGoiCSgCACINBEAgDUGq1aoVSw0RIA1BMGwiBEEEEPcLIgBFDQELIAAgAiAEEOQMIQMgCUEANgIAIAhB0ANqIgJBCGoqAgAhKCAIQdwDaiIEKgIAISMgCCoClAQhKiAIKgKIBCEwIAgqAtQDISkgCCoCkAQhJyAIKgKMBCElIAhBCGoiCkEIaiAEKAIANgIAIAggCCkC1AM3AwggCEHIAWoiACALIAoQ0QogCCAqICkgJZQgKCAwlJMiIiAikiIrlCAwICMgMJQgKSAnlJMiIiAikiIslCAlICggJ5QgIyAllJMiIiAikiIilJOSICOTIiQ4AsgEIAggKiAslCAnICKUIDAgK5STkiAokyIjOALEBCAIICogIpQgJSArlCAnICyUk5IgKZMiIjgCwAQgCiAMIAhBwARqENEKIAEgAkEEciAAIAogBiAHQQAQJSAHQdQAaiAkOAIAIAdB0ABqICM4AgAgByAiOAJMIAdByABqIAQoAgA2AgAgByAIKQLUAzcCQAJAIAkoAgAiAARAIA1FDQEgBSgCACIFIABBMGxqIQogDUEwbCIAIANqIQkgA0EkaiEMIANBMGohAiAAQTBrIgdBMG5BAXEhBANAIAVBJGohDiAFKAIcIQsCfyADIAQNABogAiALIAMoAhxHDQAaIAIgBSgCICADKAIgRw0AGiAOIAwpAgA3AgAgDkEIaiAMQQhqKAIANgIAIAILIQAgB0EwTwRAIABB1ABqIQEDQAJAIAsgASIAQThrKAIARw0AIAUoAiAgAEE0aygCAEcNACAOIABBMGsiASkCADcCACAOQQhqIAFBCGooAgA2AgALAkAgCyAAQQhrKAIARw0AIAUoAiAgAEEEaygCAEcNACAOIAApAgA3AgAgDkEIaiAAQQhqKAIANgIACyAAQeAAaiEBIABBDGogCUcNAAsLIAogBUEwaiIFRw0ACwsgDUUNACADELUBC0EAIQAMHAsgBEEEQcjvwwAoAgAiAEGKByAAGxEAAAALQQAhACAHQegAakEANgIADBoLQQAhACAHQegAakEANgIADBkLQQAhACAHQegAakEANgIADBgLIApFDRICQAJAIAlBBGsOBAADAwEDCyAKQQFrDgcBAwMDAwMGAwsgCEEIaiAEIAUoArABEQAAIAgoAggiBUUNBiAIKgIQISIgCCgCDCEEIAIgAxCCCiICRQ0EQQAhACABIAIgBSAEICIgBiAHQQAQkAEMFwsgAiADEIEKIgpBACAEIAUQhQoiCRsNAkEAIQAgAiADEIUKIQkgBCAFEIEKIQUgCUUNFiAFRQ0WIAhBCGoiBEEIaiICIAFBCGopAgA3AwAgBEEYaiIDIAFBGGooAgA2AgAgAiACKgIAIieMOAIAIAggASkCEDcDGCAIIAEpAgA3AwggJyAIKgIYIiuUIAgqAggiJSADKgIAIiyUkyIiICKSISogJSAIQRxqIgIqAgAiJJQgCCoCDCIoICuUkyIiICKSISkgAiAIKgIUIiMgKpQgJSAplCAnICggLJQgJyAklJMiIiAikiIilJOSICSTOAIAIAMgIyAplCAoICKUICUgKpSTkiAskzgCACAIICWMOAIIIAggKIw4AgwgCCAjICKUICcgKpQgKCAplJOSICuTOAIYIAQgASAFIAkgBiAHQQEQNQwWCyAKQQdGDQMLIAhByAFqIAIgAygCsAERAAAgCEEIaiAEIAUoArABEQAAQQEhACAIKALIASIZRQ0UIAgoAggiGkUNFCAIKQIMIUAgCCkCzAEhP0EAIQAgByABEJcCDRQgQEIgiKe+ITMgP0IgiKe+ITQgP6chHSBApyEfAkAgB0FAayIhKgIAIiwgLJQgB0HEAGoqAgAiJCAklJIgB0HIAGoqAgAiIyAjlJJDAAAAAJIiIkMAAIAoXgRAICIQkwEhLyAIQQhqEP8JIAggIyAvlTgCqAIgCCAkIC+VOAKkAiAIICwgL5U4AqACDAELIAhBCGoQ/wkgASoCECIkICSUIAFBFGoqAgAiIyAjlJIgAUEYaioCACIiICKUkkMAAAAAkiIvQwAAgCheBEAgCCAiIC8QkwEiL5U4AqgCIAggIyAvlTgCpAIgCCAkIC+VOAKgAgwBCyAIQgA3AqQCIAhBgICA/AM2AqACCyAIQeACaiIEIBkgCEGgAmoiACAdQQxqKAIAIgwRAQAgCEHIAWoiCUEIaiIFIABBCGooAgA2AgAgBSAFKgIAjDgCACAIIAgpA6ACNwPIASAIIAgqAsgBjDgCyAEgCCAIKgLMAYw4AswBIAhBmANqIgMgGiABIAkgHygCFCIgEQIAIAhB0ANqIgJBCGogBEEIaigCADYCACAIIAgpA+ACNwPQAyAIQYgEaiIAQQhqIANBCGooAgA2AgAgCCAIKQOYAzcDiAQgNCAGkiAzkiEpIAkgAiAAEJoJIAhBCGoiAEEANgKsASAAQQA2ArwBIAAgCSkCADcCECAAQRhqIAUpAgA3AgAgAEEgaiAJQRBqKQIANwIAIABBKGogCUEYaikCADcCACAAQTBqIAlBIGooAgA2AgBDAACgNRCTASEkIAhBwARqIAAQPAJAIAgqAsAEIiYgJpQgCCoCxAQiMiAylJIgCCoCyAQiBiAGlJJDAAAAAJIiIkMAAAAAXkUNACAiEJMBIS4gIkMAAMgrXkUNACAmjCAulSEvIDKMIC6VIS0gBowgLpUhLkP//39/ISNBkM4AIQUDQCAIIAaMICIQkwEiBpU4ArgCIAggMowgBpU4ArQCIAggJowgBpU4ArACAkACQAJ9IAYgI2BFBEAgCEHgAmoiBCAZIAhBsAJqIgAgDBEBACAIQcgBaiIJQQhqIgogAEEIaiIDKAIANgIAIAogCioCAIw4AgAgCCAIKQOwAjcDyAEgCCAIKgLIAYw4AsgBIAggCCoCzAGMOALMASAIQZgDaiICIBogASAJICARAgAgCEHQA2oiAEEIaiAEQQhqKAIANgIAIAggCCkD4AI3A9ADIAogAkEIaigCADYCACAIIAgpA5gDNwPIASAIQYgEaiAAIAkQmgkgCCoCsAIiMiAIKgKIBJQgCCoCtAIgCCoCjASUkiADKgIAIAgqApAElJIiJiAmXA0CICkgJowiIl0EQCAIKQK0AiE/QQMMDgsCQCAGICaSICQgBpRfRQRAIAhByAFqIgJBIGogCEGIBGoiAEEgaigCADYCACACQRhqIABBGGopAwA3AwAgAkEQaiAAQRBqKQMANwMAIAogAEEIaikDADcDACAIIAgpA4gENwPIASAIQQhqIAIQqwJFDQ4gCCoCuAIhLiAIKgK0AiEtIAgqArACIS8gCEHABGogCEEIaiIAEDwgACgCvAFBA0YNASAFQQFrIgUNBUMAAIA/ITJCACE/QQMMDwsMDQsgIkMAAKA1YEUNBSAIQcgBaiAIQQhqQQEQzwEgCEHYAWoqAgAhJiAIQdwBaioCAAwBCyAIQcgBaiAIQQhqQQEQzwEgCEHYAWoqAgAhJiAIQdwBaioCAAshIiAIKgLUASEGIAgpAswBIT8gCCoCyAEhMkEBDAsLQYjuwABBKEGU78AAENkJAAsgBiEjIAgqAsgEIgYgBpQgCCoCwAQiJiAmlCAIKgLEBCIyIDKUkpJDAAAAAJIiIkMAAMgrXg0ACwsgCEGwAmoiAkKAgICAwAA3AhggAkIANwIIIAJCgICAgMAANwIAIAJBKGpCBDcCACACQSBqIgBCADcCACACQRBqQgQ3AgAgAkEANgIIIAJBLGpBADYCACACQRRqQQA2AgAgAEEANgIAIAhBCGooArwBIgBBf0YNBSAAQQFqIQpBACECA0AgCEHIAWoiBUEgaiIJIQMjAEEgayIEJAACQCACIAhBCGoiACgCvAFNBEAgAkEESQ0BIAJBBEHkosIAEMMIAAsgBEEUakEBNgIAIARBHGpBADYCACAEQbyiwgA2AhAgBEHk78EANgIYIARBADYCCCAEQQhqQdSiwgAQ0woACyAEQSBqJAAgAyAAIAJBJGxqQRBqIgtBIGooAgA2AgAgBUEYaiIEIAtBGGopAgA3AwAgBUEQaiIDIAtBEGopAgA3AwAgBUEIaiIAIAtBCGopAgA3AwAgCCALKQIANwPIASACQQFqIQIgCCgCuAIiBSAIKAKwAkYEQCAIQbACaiAFELUGIAgoArgCIQULIAgoArQCIAVBJGxqIgsgCCkDyAE3AgAgC0EIaiAAKQMANwIAIAtBEGogAykDADcCACALQRhqIAQpAwA3AgAgC0EgaiAJKAIANgIAIAggBUEBajYCuAIgAiAKRw0ACwwFCyAIQQhqIgNBCGoiACABQQhqKQIANwMAIANBGGoiAiABQRhqKAIANgIAIAAgACoCACInjDgCACAIIAEpAhA3AxggCCABKQIANwMIICcgCCoCGCIrlCAIKgIIIiUgAioCACIslJMiIiAikiEqICUgCEEcaiIAKgIAIiSUIAgqAgwiKCArlJMiIiAikiEpIAAgCCoCFCIjICqUICUgKZQgJyAoICyUICcgJJSTIiIgIpIiIpSTkiAkkzgCACACICMgKZQgKCAilCAlICqUk5IgLJM4AgAgCCAljDgCCCAIICiMOAIMIAggIyAilCAnICqUICggKZSTkiArkzgCGEEAIQAgASADIAogCSAGIAdBABA1DBMLQYjCwABBK0HUwsAAENkJAAsgCEHIAWogAiADKAKwAREAACAIKALIASIDRQ0AIAgqAtABISMgCCgCzAEhAiAIQQhqIgBBCGoiCiABQQhqKQIANwMAIABBGGoiCSABQRhqKAIANgIAIAogCioCACIwjDgCACAIIAEpAhA3AxggCCABKQIANwMIIDAgCCoCGCIplCAIKgIIIicgCSoCACIrlJMiIiAikiEoICcgCEEcaiIAKgIAIiyUIAgqAgwiJSAplJMiIiAikiEqIAAgCCoCFCIkICiUICcgKpQgMCAlICuUIDAgLJSTIiIgIpIiIpSTkiAskzgCACAJICQgKpQgJSAilCAnICiUk5IgK5M4AgAgCCAnjDgCCCAIICWMOAIMIAggJCAilCAwICiUICUgKpSTkiApkzgCGCAEIAUQggoiAA0BQYjCwABBK0HkwsAAENkJAAtBASEADBALIAhBCGogACADIAIgIyAGIAdBARCQAUEAIQAMDwsCQCAIQQhqKAK8AUUEQEMAAIA/IS1CACE/QwAAAAAhIkMAAAAAISZDAAAAACEGQwAAAAAhMkMAAAAAIS9DAAAAACEuDAELAkACQAJAAkACQAJAAkACQCAIQQhqKAK8AUEDRgRAIAgoArgCIhZBAU0NAiAWQQJGDQMgFkEDTQ0EIAgoArQCIhAqAgQhBiAQKgJIIBAqAgAiI5MhJCAQQShqKgIAIAaTIiIgEEHQAGoqAgAgECoCCCImkyIvlCAQQSxqKgIAICaTIi0gEEHMAGoqAgAgBpMiLpSTIBAqAmwgI5OUIC0gJJQgECoCJCAjkyIjIC+UkyAQQfAAaioCACAGk5SSICMgLpQgIiAklJMgEEH0AGoqAgAgJpOUkkMAAAAAXg0BDAYLIAgoArgCIQMgCEEIaigCvAFBAUYEQCADQQFNDQUgCCgCtAIiAEEsaioCACAAKgIIkyIGQwAAAAAgACoCJCAAKgIAkyImvEH/////B3G+IABBKGoqAgAgACoCBJMiLLxB/////wdxvl4iABsiIiAmjCAsIAAbIiQgJJRDAAAAACAGjCAAGyIjICOUICIgIpSSkkMAAAAAkhCTASIulSEiIAhBwARqIgNBCGoiAiAsICKUICYgIyAulSItlJM4AgAgCCAmICQgLpUiL5QgBiAilJM4AsQEIAggBiAtlCAsIC+UkzgCwAQgCEHgAmoiACAZIAMgDBEBACAIQcgBaiIEQQhqIgkgAigCADYCACAJIAkqAgCMOAIAIAggCCkDwAQ3A8gBIAggCCoCyAGMOALIASAIIAgqAswBjDgCzAEgCEGYA2oiAyAaIAEgBCAgEQIAIAhB0ANqIgJBCGogAEEIaigCADYCACAIIAgpA+ACNwPQAyAIQYgEaiIAQQhqIANBCGooAgA2AgAgCCAIKQOYAzcDiAQgBCACIAAQmgkgCCgCuAIiBSAIKAKwAkYEQCAIQbACaiAFELUGIAgoArgCIQULIAgoArQCIAVBJGxqIgIgCCkDyAE3AgAgAkEIaiAJKQMANwIAIAJBEGogCEHIAWoiAEEQaikDADcCACACQRhqIABBGGopAwA3AgAgAkEgaiAAQSBqKAIANgIAIAggBUEBaiIDNgK4AgsgCCgCtAIhACAIQQI2AtgDIAhCgICAgBA3AtADIAhBATYCkAQgCEKBgICAEDcCiAQgCEHIAWoiDyAAIAMgCEHQA2oiACAIQYgEaiISEJMDIABBMGoiESAPQTBqIhAoAgA2AgAgAEEoaiIWIA9BKGoiDikDADcDACAAQSBqIg0gD0EgaiILKQMANwMAIABBGGoiDCAPQRhqIgUpAwA3AwAgAEEQaiIKIA9BEGoiBCkDADcDACAAQQhqIgkgD0EIaiIDKQMANwMAIAggCCkDyAE3A9ADIAgoArgCIQIgCCgCtAIhACAIQQE2AqADIAhCgICAgCA3ApgDIAhBADYCkAQgCEIANwKIBCAPIAAgAiAIQZgDaiASEJMDIBJBMGogECgCADYCACASQShqIA4pAwA3AwAgEkEgaiALKQMANwMAIBJBGGogBSkDADcDACASQRBqIAQpAwA3AwAgEkEIaiADKQMANwMAIAggCCkDyAE3A4gEIAhBvAJqIQAgCEHEAmooAgAiAiAIKAK8AiIFRgRAIAAgAhDJBiAIKAK8AiEFIAgoAsQCIQILIAhBwAJqKAIAIgQgAkE0bGoiAyAIKQPQAzcCACADQShqIBYpAwA3AgAgA0EgaiANKQMANwIAIANBGGogDCkDADcCACADQRBqIAopAwA3AgAgA0EIaiAJKQMANwIAIANBMGogESgCADYCACAIIAJBAWoiAjYCxAIgAiAFRgRAIAAgBRDJBiAIKALAAiEEIAgoAsQCIQILIAQgAkE0bGoiAyAIKQOIBDcCACADQShqIAhBiARqIgBBKGopAwA3AgAgA0EgaiAAQSBqKQMANwIAIANBGGogAEEYaikDADcCACADQRBqIABBEGopAwA3AgAgA0EIaiAAQQhqKQMANwIAIANBMGogAEEwaigCADYCACAIIAJBAWo2AsQCIAhByAFqIgBBADYCBCAAQQhqQwAAAAA4AgAgAEEBNgIAIAgoAsgBRQ0HIAhB0AFqKgIAIQYgCCgCzAEhAiAIQdQCaiEKIAhB3AJqKAIAIgMhBSAIKALUAiADRgRAIAogAxC4BiAIKALcAiEFCyAIQdgCaigCACIMIAVBA3RqIgAgBjgCBCAAIAI2AgAgCCAFQQFqNgLcAiAMIANBA3RqIgAqAgQhBiAAKAIAIQkCQCADRQRAQQAhBQwBCwNAQQBBfyAMIANBAWsiBEEBdiIFQQN0aiICQQRqKgIAIiYgBl8iABtBAUECIAAbIAYgJl8bQQFqQQJJBEAgAyEFDAILIAwgA0EDdGogAikCADcCACAFIQMgBEEBSw0ACwsgDCAFQQN0aiIAIAY4AgQgACAJNgIAIAhByAFqIgBBATYCBCAAQQhqQwAAAAA4AgAgAEEBNgIAIAgoAsgBRQ0HIAhB0AFqKgIAIQYgCCgCzAEhAiAIKALcAiIDIQUgCCgC1AIgA0YEQCAKIAMQuAYgCCgC3AIhBQsgCCgC2AIiCiAFQQN0aiIAIAY4AgQgACACNgIAIAggBUEBajYC3AIgCiADQQN0aiIAKgIEIQYgACgCACEJAkAgA0UEQEEAIQUMAQsDQEEAQX8gBiAKIANBAWsiBEEBdiIFQQN0aiICQQRqKgIAIiZgIgAbQQFBAiAAGyAGICZfG0EBakECSQRAIAMhBQwCCyAKIANBA3RqIAIpAgA3AgAgBSEDIARBAUsNAAsLIAogBUEDdGoiACAGOAIEIAAgCTYCAAwGCyAQQSRqIgMpAgAhPyADIBBByABqIg4pAgA3AgAgCEHIAWoiAEEgaiINIANBIGoiCygCADYCACAAQRhqIgwgA0EYaiIKKQIANwMAIABBEGoiCSADQRBqIgIpAgA3AwAgAEEIaiIFIANBCGoiACkCADcDACAAIA5BCGoiBCkCADcCACACIA5BEGoiAykCADcCACAKIA5BGGoiAikCADcCACALIA5BIGoiACgCADYCACAIID83A8gBIA4gCCkDyAE3AgAgACANKAIANgIAIAIgDCkDADcCACADIAkpAwA3AgAgBCAFKQMANwIADAQLQQEgFkGI68AAEMMIAAtBAkECQZjrwAAQwwgAC0EDIBZBqOvAABDDCAALQQEgA0H46sAAEMMIAAsgCEECNgLYAyAIQoCAgIAQNwLQAyAIQQI2ApAEIAhCg4CAgBA3AogEIAhByAFqIhMgECAWIAhB0ANqIhUgCEGIBGoiFBCTAyAIQeACaiIAQTBqIhAgE0EwaiIPKAIANgIAIABBKGoiFiATQShqIhIpAwA3AwAgAEEgaiIOIBNBIGoiESkDADcDACAAQRhqIg0gE0EYaiIKKQMANwMAIABBEGoiCyATQRBqIgQpAwA3AwAgAEEIaiIFIBNBCGoiAykDADcDACAIIAgpA8gBNwPgAiAILQD8ASEJIAgoArgCIQIgCCgCtAIhACAIQQI2AtgDIAhCgYCAgDA3AtADIAhBADYCkAQgCEKDgICAIDcCiAQgEyAAIAIgFSAUEJMDIAhBmANqIgBBMGogDygCADYCACAAQShqIBIpAwA3AwAgAEEgaiARKQMANwMAIABBGGogCikDADcDACAAQRBqIAQpAwA3AwAgAEEIaiADKQMANwMAIAggCCkDyAE3A5gDIAgtAPwBIQwgCCgCuAIhAiAIKAK0AiEAIAhBAzYC2AMgCEKAgICAIDcC0AMgCEEDNgKQBCAIQoCAgIAQNwKIBCATIAAgAiAVIBQQkwMgFUEwaiAPKAIANgIAIBVBKGogEikDADcDACAVQSBqIBEpAwA3AwAgFUEYaiAKKQMANwMAIBVBEGogBCkDADcDACAVQQhqIAMpAwA3AwAgCCAIKQPIATcD0AMgCC0A/AEhHiAIKAK4AiECIAgoArQCIQAgCEEBNgLIBCAIQoCAgIAwNwLABCAIQQA2ApAEIAhCgoCAgBA3AogEIBMgACACIAhBwARqIBQQkwMgFEEwaiAPKAIANgIAIBRBKGogEikDADcDACAUQSBqIBEpAwA3AwAgFEEYaiAKKQMANwMAIBRBEGogBCkDADcDACAUQQhqIAMpAwA3AwAgCCAIKQPIATcDiAQgCC0A/AEhCiAIQbwCaiEAIAgoArwCIgIgCEHEAmooAgAiBEYEQCAAIAQQyQYgCCgCxAIhBCAIKAK8AiECCyAIQcACaigCACIDIARBNGxqIhEgCCkD4AI3AgAgEUEoaiAWKQMANwIAIBFBIGogDikDADcCACARQRhqIA0pAwA3AgAgEUEQaiALKQMANwIAIBFBCGogBSkDADcCACARQTBqIBAoAgA2AgAgCCAEQQFqIgQ2AsQCIAIgBEYEQCAAIAIQyQYgCCgCwAIhAyAIKALEAiEEIAgoArwCIQILIAMgBEE0bGoiCyAIKQOYAzcCACALQShqIAhBmANqIgVBKGopAwA3AgAgC0EgaiAFQSBqKQMANwIAIAtBGGogBUEYaikDADcCACALQRBqIAVBEGopAwA3AgAgC0EIaiAFQQhqKQMANwIAIAtBMGogBUEwaigCADYCACAIIARBAWoiBDYCxAIgAiAERgRAIAAgAhDJBiAIKALAAiEDIAgoAsQCIQQgCCgCvAIhAgsgAyAEQTRsaiILIAgpA9ADNwIAIAtBKGogCEHQA2oiBUEoaikDADcCACALQSBqIAVBIGopAwA3AgAgC0EYaiAFQRhqKQMANwIAIAtBEGogBUEQaikDADcCACALQQhqIAVBCGopAwA3AgAgC0EwaiAFQTBqKAIANgIAIAggBEEBaiIFNgLEAiACIAVGBEAgACACEMkGIAgoAsQCIQUgCCgCwAIhAwsgAyAFQTRsaiICIAgpA4gENwIAIAJBKGogCEGIBGoiAEEoaikDADcCACACQSBqIABBIGopAwA3AgAgAkEYaiAAQRhqKQMANwIAIAJBEGogAEEQaikDADcCACACQQhqIABBCGopAwA3AgAgAkEwaiAAQTBqKAIANgIAIAggBUEBaiIANgLEAgJAIAlFDQACQCAABEAgCCgCuAJFDQEgCEHIAWoiACADQRhqKgIAIAgoArQCIgIqAgCUIANBHGoqAgAgAkEEaioCAJSSIANBIGoqAgAgAkEIaioCAJSSjCIjQwAAoDVeBH9BAAUgAEEANgIEIABBCGogIzgCAEEBCzYCACAIKALIAUUNBCAIQdABaioCACEGIAgoAswBIQIgCEHcAmooAgAiAyEFIAgoAtQCIANGBEAgCEHUAmogAxC4BiAIKALcAiEFCyAIQdgCaigCACILIAVBA3RqIgAgBjgCBCAAIAI2AgAgCCAFQQFqNgLcAiALIANBA3RqIgAqAgQhBiAAKAIAIQkCQCADRQRAQQAhBQwBCwNAQQBBfyALIANBAWsiBEEBdiIFQQN0aiICQQRqKgIAIiYgBl8iABtBAUECIAAbIAYgJl8bQQFqQQJJBEAgAyEFDAILIAsgA0EDdGogAikCADcCACAFIQMgBEEBSw0ACwsgCyAFQQN0aiIAIAY4AgQgACAJNgIADAILQQBBAEG468AAEMMIAAtBAEEAQcjrwAAQwwgACwJAIAxFDQACQCAIKALEAiIAQQFLBEAgCCgCuAIiAEEBTQ0BIAhByAFqIgAgCCgCwAIiA0HMAGoqAgAgCCgCtAIiAkEkaioCAJQgA0HQAGoqAgAgAkEoaioCAJSSIANB1ABqKgIAIAJBLGoqAgCUkowiI0MAAKA1XgR/QQAFIABBATYCBCAAQQhqICM4AgBBAQs2AgAgCCgCyAFFDQQgCEHQAWoqAgAhBiAIKALMASECIAhB3AJqKAIAIgMhBSAIKALUAiADRgRAIAhB1AJqIAMQuAYgCCgC3AIhBQsgCEHYAmooAgAiDCAFQQN0aiIAIAY4AgQgACACNgIAIAggBUEBajYC3AIgDCADQQN0aiIAKgIEIQYgACgCACEJAkAgA0UEQEEAIQUMAQsDQEEAQX8gDCADQQFrIgRBAXYiBUEDdGoiAkEEaioCACImIAZfIgAbQQFBAiAAGyAGICZfG0EBakECSQRAIAMhBQwCCyAMIANBA3RqIAIpAgA3AgAgBSEDIARBAUsNAAsLIAwgBUEDdGoiACAGOAIEIAAgCTYCAAwCC0EBIABB2OvAABDDCAALQQEgAEHo68AAEMMIAAsCQCAeQf8BcUUNAAJAIAgoAsQCIgBBAksEQCAIKAK4AiIAQQJNDQEgCEHIAWoiACAIKALAAiIDQYABaioCACAIKAK0AiICQcgAaioCAJQgA0GEAWoqAgAgAkHMAGoqAgCUkiADQYgBaioCACACQdAAaioCAJSSjCIjQwAAoDVeBH9BAAUgAEECNgIEIABBCGogIzgCAEEBCzYCACAIKALIAUUNBCAIQdABaioCACEGIAgoAswBIQIgCEHcAmooAgAiAyEFIAgoAtQCIANGBEAgCEHUAmogAxC4BiAIKALcAiEFCyAIQdgCaigCACIMIAVBA3RqIgAgBjgCBCAAIAI2AgAgCCAFQQFqNgLcAiAMIANBA3RqIgAqAgQhBiAAKAIAIQkCQCADRQRAQQAhBQwBCwNAQQBBfyAMIANBAWsiBEEBdiIFQQN0aiICQQRqKgIAIiYgBl8iABtBAUECIAAbIAYgJl8bQQFqQQJJBEAgAyEFDAILIAwgA0EDdGogAikCADcCACAFIQMgBEEBSw0ACwsgDCAFQQN0aiIAIAY4AgQgACAJNgIADAILQQIgAEH468AAEMMIAAtBAiAAQYjswAAQwwgACyAKRQ0AAkAgCCgCxAIiAEEDSwRAIAgoArgCIgBBA00NASAIQcgBaiIAIAgoAsACIgNBtAFqKgIAIAgoArQCIgJB7ABqKgIAlCADQbgBaioCACACQfAAaioCAJSSIANBvAFqKgIAIAJB9ABqKgIAlJKMIiNDAACgNV4Ef0EABSAAQQM2AgQgAEEIaiAjOAIAQQELNgIAIAgoAsgBRQ0DIAhB0AFqKgIAIQYgCCgCzAEhAiAIQdwCaigCACIDIQUgCCgC1AIgA0YEQCAIQdQCaiADELgGIAgoAtwCIQULIAhB2AJqKAIAIgogBUEDdGoiACAGOAIEIAAgAjYCACAIIAVBAWo2AtwCIAogA0EDdGoiACoCBCEGIAAoAgAhCQJAIANFBEBBACEFDAELA0BBAEF/IAYgCiADQQFrIgRBAXYiBUEDdGoiAkEEaioCACImYCIAG0EBQQIgABsgBiAmXxtBAWpBAkkEQCADIQUMAgsgCiADQQN0aiACKQIANwIAIAUhAyAEQQFLDQALCyAKIAVBA3RqIgAgBjgCBCAAIAk2AgAMAgtBAyAAQZjswAAQwwgAC0EDIABBqOzAABDDCAALIAhB3AJqKAIAIgtFBEBBiMLAAEErQfjtwAAQ2QkACyAIQbACaiICQSRqIRYgAkEMaiEOIAhB0ANqIgBBJGohEiAAQRhqIRMgAEEMaiERIAJBKGooAgAoAgAhF0P//39/IS1BACEVAkACfQJAA0AgCCgC2AIhDQNAIAggC0EBayICNgLcAiANIAJBA3RqIgAqAgQhBiAAKAIAIQkCQCACRQRAIAkhAyAGISIMAQsgDSoCBCEiIA0gBjgCBCANKAIAIQMgDSAJNgIAAkACQAJAIAJBA08EQEEAIAJBAmsiACAAIAJLGyEKQQAhBEEBIQVBACEAA0AgDSAAQQN0aiANIAVBAEF/IARBA3QgDWpBFGoqAgAiJiANIAVBA3RqQQRqKgIAIiNfIgAbQQFBAiAAGyAjICZfG0EBakECSWoiAkEDdGoiDCkCADcCACAKIAIiAEEBdCIEQQFyIgVPDQALIAtBAmsgBUYEQCACIQQMAgsgDCAGOAIEIAwgCTYCACACDQJBACEEDAMLQQAhBEEBIQUgAkECRw0CCyANIARBA3RqIA0gBUEDdGoiACkCADcCACAAIAY4AgQgACAJNgIAIAUhAgsDQEEAQX8gDSACQQFrIgpBAXYiBEEDdGoiBUEEaioCACIjIAZfIgAbQQFBAiAAGyAGICNfG0EBakECTwRAIA0gAkEDdGogBSkCADcCACAEIQIgCkECTw0BDAILCyACIQQLIA0gBEEDdGoiACAGOAIEIAAgCTYCAAsCQAJAAkAgCCgCxAIiBSADSwRAIAhB2ANqIANBNGwiCSAIKALAAmoiAEEIaigCADYCACAIIAApAgA3A9ADIBFBCGogAEEUaigCADYCACARIAApAgw3AgAgE0EIaiICIABBIGooAgA2AgAgEyAAKQIYNwIAIBIgACkCJDcCACASQQhqIABBLGooAgA2AgAgCCAALQAwIgA6AIAEIAANAiAIQcAEaiIEIBkgEyAdQQxqKAIAEQEAIAhByAFqIgVBCGoiFCACKAIANgIAIBQgFCoCAIw4AgAgCCATKQIANwPIASAIIAgqAsgBjDgCyAEgCCAIKgLMAYw4AswBIAhB4AJqIgIgGiABIAUgIBECACAIQYgEaiIAQQhqIhAgBEEIaigCADYCACAIIAgpA8AENwOIBCAUIAJBCGooAgA2AgAgCCAIKQPgAjcDyAEgCEGYA2ogACAFEJoJIAgoArgCIhsiAiAIKAKwAkYEQCAIQbACaiAbELUGIAgoArgCIQILIAgoArQCIAJBJGxqIgQgCCkDmAM3AgAgBEEgaiAIQZgDaiIAQSBqKAIANgIAIARBGGogAEEYaikDADcCACAEQRBqIABBEGopAwA3AgAgBEEIaiAAQQhqIgApAwA3AgAgCCACQQFqIgI2ArgCIAMgFyAtIAgqApgDIAgqAugDlCAIKgKcAyAIKgLsA5SSIAAqAgAgCCoC8AOUkiIGXiIAGyEXIAgoAsQCIQQgIiAGIC0gABsiLZJDAABIN10NASADIARJBEAgCCgCwAIgCWpBAToAMCAIKALcAyICIAgoAsQCIgBJBEAgCCgCwAIgAkE0bGogCCgC0AMQ+AghAyAIKALgAyICIAgoAsQCIgBJBEAgCCgCwAIgAkE0bGogCCgC1AMQ+AghAiAIKALkAyIEIAgoAsQCIgBJBEAgCCgCwAIgBEE0bGogCCgC2AMQ+AghACAIQbACaiIEIBsgCCgC3AMgAxDRASAEIBsgCCgC4AMgAhDRASAEIBsgCCgC5AMgABDRASAIKALQAiIARQ0NICKMISQgCCgCxAIhHCAIKALMAiIEIABBA3RqIQ0DQAJAAkACQCAIKALEAiIYIAQoAgAiCUsEQCAIKALAAiAJQTRsaiIPLQAwDQMgDyAEKAIEIgBBAmpBA3BBAnRqKAIAIQUgDyAAQQFqQQNwQQJ0aigCACEDIAgoArQCIQIgCCgCuAIhACAIIBs2AsgEIAggAzYCxAQgCCAFNgLABCAIIBhBAWs2AugCIAggGEEBajYC5AIgCCAJNgLgAiAIQcgBaiIFIAIgACAIQcAEaiAIQeACahCTAyAQIBQpAwA3AwAgCEGIBGoiAEEQaiILIAVBEGopAwA3AwAgAEEYaiIMIAVBGGopAwA3AwAgAEEgaiIKIAVBIGopAwA3AwAgAEEoaiIJIAVBKGopAwA3AwAgAEEwaiIDIAVBMGooAgA2AgAgCCAIKQPIATcDiAQgCC0A/AEhAiAPIAQoAgRBAWpBA3BBAnRqQQxqIBg2AgAgCCgCxAIiBSAIKAK8AkYEQCAOIAUQyQYgCCgCxAIhBQsgCCgCwAIiACAFQTRsaiIPIAgpA4gENwIAIA9BKGogCSkDADcCACAPQSBqIAopAwA3AgAgD0EYaiAMKQMANwIAIA9BEGogCykDADcCACAPQQhqIBApAwA3AgAgD0EwaiADKAIANgIAIAggBUEBaiIDNgLEAiACQQFxRQ0DIAMgGE0NASAAIBhBNGxqIgUoAgAiAiAIKAK4AiIDTw0CAkACQCAkIAgoArQCIgAgAkEkbGoiAioCACAFKgIYlCACKgIEIAVBHGoqAgCUkiACKgIIIAVBIGoqAgCUkiIGXkUEQCAIQcgBaiIAIAaMIiNDAACgNV4Ef0EABSAAIBg2AgQgAEEIaiAjOAIAQQELNgIAIAgoAsgBIgBFDRUgCCoC0AEgLyAAGyEvIAgoAswBIB4gABshHiAIKALcAiIDIQUgCCgC1AIgA0YEQCAWIAMQuAYgCCgC3AIhBQsgCCgC2AIiDCAFQQN0aiIAIC84AgQgACAeNgIAIAggBUEBajYC3AIgDCADQQN0aiIAKgIEIQYgACgCACEKIAMNAUEAIQUMAgsgCEHIAWogCEHQA2ogACADEJMEIAhB2AFqKgIAISYgCCoC8AMhLiAIKgLsAyEtIAgqAugDIS8gCEHcAWoqAgAMEgsDQEEAQX8gDCADQQFrIglBAXYiBUEDdGoiAkEEaioCACImIAZfIgAbQQFBAiAAGyAGICZfG0EBakECSQRAIAMhBQwCCyAMIANBA3RqIAIpAgA3AgAgBSEDIAlBAUsNAAsLIAwgBUEDdGoiACAGOAIEIAAgCjYCAAwDCyAJIBhBqO3AABDDCAALIBggA0G47cAAEMMIAAsgAiADQcjtwAAQwwgACyANIARBCGoiBEcNAAsgCCgCxAIiACAcRg0NAkAgACAcSwRAIAgoAsACIBxBNGxqQRRqIABBAWs2AgAgCCgCxAIiAEUNASAIKALAAiAAQTRsakEkayAcNgIAIAhBADYC0AIgFUGQzgBGDQ8gFUEBaiEVIAgoAtwCIgtFDQkMCwsgHCAAQdjtwAAQwwgAC0GIwsAAQStB6O3AABDZCQALIAQgAEGY7cAAEMMIAAsgAiAAQYjtwAAQwwgACyACIABB+OzAABDDCAALIAMgBEHo7MAAEMMIAAsgAyAFQcjswAAQwwgACyAEIBdLBEAgCEHIAWogCCgCwAIgF0E0bGoiACAIKAK0AiACEJMEIABBIGoqAgAhLiAAQRxqKgIAIS0gACoCGCEvIAhB2AFqKgIAISYgCEHcAWoqAgAMBgsgFyAEQdjswAAQwwgACyAIKALcAiILDQEMAwsLCyAIKALEAiEFCyAFIBdNDQEgCEHIAWogCCgCwAIgF0E0bGoiACAIKAK0AiAIKAK4AhCTBCAAQSBqKgIAIS4gAEEcaioCACEtIAAqAhghLyAIQdgBaioCACEmIAhB3AFqKgIACyEiIAgqAtQBIQYgCCkCzAEhPyAIKgLIASEyDAILIBcgBUG47MAAEMMIAAsgCCgCsAIEQCAIKAK0AhC1AQsgCCgCvAIEQCAIQcACaigCABC1AQsgCCgCyAIEQCAIQcwCaigCABC1AQsgCCgC1AIEQCAIQdgCaigCABC1AQtDAACAPyEyQgAhP0EDDAILIAgoArACBEAgCCgCtAIQtQELIAgoArwCBEAgCEHAAmooAgAQtQELIAgoAsgCBEAgCEHMAmooAgAQtQELIAgoAtQCBEAgCEHYAmooAgAQtQELQQEMAQsgCEHIAWogCEEIakEAEM8BIAhB3AFqKgIAISIgCEHYAWoqAgAhJiAIKgLUASEGIAgpAswBIT8gCCoCyAEhMiAIKgK4AiEuIAgqArQCIS0gCCoCsAIhL0EBCyECIAdB5ABqKAIAIQUCQCAHQegAaiIEKAIAIg1FBEBBBCEAQQAhAwwBCyANQarVqhVLDQEgDUEwbCIDQQQQ9wsiAEUNAgsgACAFIAMQ5AwhCSAEQQA2AgACQAJAAkAgAkEBaw4DAgEAAQsgByAyOAJAIAdBxABqID83AgAMBwsgB0IANwJAIAdByABqQQA2AgAMBgsgCCAtOALUAyAIIC84AtADIAggLjgC2AMgCCABKgIMIisgLSABKgIAIiWUIC8gAUEEaiIDKgIAIiiUkyIjICOSIiyUICggLiAolCAtIAFBCGoiAioCACIqlJMiIyAjkiIklCAlIC8gKpQgLiAllJMiIyAjkiIjlJOSIC6TOAKQBCAIICsgI5QgJSAslCAqICSUk5IgLZM4AowEIAggKyAklCAqICOUICggLJSTkiAvkzgCiAQgCEHIAWoiBRD+CCAIQQhqIgQQ/gggGSAIQdADaiIAIAUgHSgCHBEBACAaIAhBiARqIAQgHygCHBEBACABIAAgBSAEICkgB0EAECUgGSAdKAIgEQQARQ0CDAMLEKAKAAsgA0EEQcjvwwAoAgAiAEGKByAAGxEAAAALIBogHygCIBEEAA0AIAdB6ABqKAIAIQQMAQsgJiABQRRqKgIAkyIqIAIqAgAiMZQgIiABQRhqKgIAkyIpIAMqAgAiMJSTIiMgI5IhJyApIAEqAgAiJZQgBiABKgIQkyIkIDGUkyIjICOSISggJCABKgIMIisgJ5QgMSAolCAwICQgMJQgKiAllJMiIyAjkiIjlJOSkiEsICkgKyAjlCAwICeUICUgKJSTkpIhJCAqICsgKJQgJSAjlCAxICeUk5KSISMgLyAGIDKTlCAtICYgP6e+k5SSIC4gIiA/QiCIp76TlJIhBiAHQegAaiIAKAIAIgMgBygCYEYEQCAHQeAAaiADELkGIAAoAgAhAwsgACADQQFqIgQ2AgAgB0HkAGooAgAgA0EwbGoiAEIANwIcIAAgBjgCGCAAICQ4AhQgACAjOAIQIAAgLDgCDCAAID83AgQgACAyOAIAIABBJGpCADcCACAAQSxqQQA2AgALIAdB5ABqKAIAIQUCQCA0QwAAAABbIDNDAAAAAFtxDQAgBEUEQEEAIQQMAQsgBSAEQTBsaiEBIDQgM5IhIyAFIQMDQCAIKgLYAyEiIAgqAtQDIQYgAyAIKgLQAyA0lCADKgIAkjgCACADQQRqIgAgBiA0lCAAKgIAkjgCACADQQhqIgAgIiA0lCAAKgIAkjgCACAIKgKQBCEiIAgqAowEIQYgA0EMaiIAIAgqAogEIDOUIAAqAgCSOAIAIANBEGoiACAGIDOUIAAqAgCSOAIAIANBFGoiACAiIDOUIAAqAgCSOAIAIANBGGoiACAAKgIAICOTOAIAIAEgA0EwaiIDRw0ACwsgISAIKQPQAzcCACAHIAgpA4gENwJMICFBCGogCEHYA2ooAgA2AgAgB0HUAGogCEGQBGooAgA2AgAgBEUNACANRQRAQQAhAAwICyAFIARBMGxqIQogDUEwbCIAIAlqIQcgCUEkaiEMIAlBMGohAiAAQTBrIgRBMG5BAXEhAwNAIAVBJGohDiAFKAIcIQsCfyAJIAMNABogAiALIAkoAhxHDQAaIAIgBSgCICAJKAIgRw0AGiAOIAwpAgA3AgAgDkEIaiAMQQhqKAIANgIAIAILIQAgBEEwTwRAIABB1ABqIQEDQAJAIAsgASIAQThrKAIARw0AIAUoAiAgAEE0aygCAEcNACAOIABBMGsiASkCADcCACAOQQhqIAFBCGooAgA2AgALAkAgCyAAQQhrKAIARw0AIAUoAiAgAEEEaygCAEcNACAOIAApAgA3AgAgDkEIaiAAQQhqKAIANgIACyAAQeAAaiEBIABBDGogB0cNAAsLIAogBUEwaiIFRw0ACwtBACEAIA1FDQYgCRC1AQwGCyAKDQBBACEAIAIgAxCACiEDIAQgBRCACiECIANFDQUgAkUNBSACKgIAITMgAyoCACE0IAYgASoCECIjICOUIAFBFGoqAgAiIiAilJIgAUEYaioCACIGIAaUkkMAAAAAkhCTASIkIDSTIDOTIjBeRQRAIAdB6ABqQQA2AgAMBgsCfSAkQwAAAABbBEBDAACAPyEGQwAAAAAMAQsgBiAklSEmICIgJJUhBiAjICSVCyEiIDMgASoCDCIqIAYgASoCACIklCAiIAFBBGoqAgAiMZSTIiMgI5IiKZQgMSAmIDGUIAYgAUEIaioCACIolJMiIyAjkiIrlCAkICIgKJQgJiAklJMiIyAjkiIjlJOSICaTIiyUIScgMyAqICOUICQgKZQgKCArlJOSIAaTIiSUISUgMyAqICuUICggI5QgMSAplJOSICKTIiOUISggNCAmlCEqIDQgBpQhKSA0ICKUIStBACEDIwBBIGsiACQAIABBADYCBCAAQSBqJAACQCAHQegAaigCAEUEQCAHQeAAaiIAKAIARQRAIABBABC5BiAHQegAaigCACEDCyAHQegAaiADQQFqNgIAIAdB5ABqKAIAIANBMGxqIgBBADYCLCAAQgA3AiQgAEGAgICAfDYCICAAQYCAgIB8NgIcIAAgMDgCGCAAICc4AhQgACAlOAIQIAAgKDgCDCAAICo4AgggACApOAIEIAAgKzgCAAwBCyAHQeQAaigCACIAQYCAgIB8NgIgIABBgICAgHw2AhwgACAoOAIMIAAgKjgCCCAAICk4AgQgACArOAIAIAAgMDgCGCAAQRRqICc4AgAgAEEQaiAlOAIACyAHICM4AkwgByAiOAJAIAdB1ABqICw4AgAgB0HQAGogJDgCACAHQcgAaiAmOAIAIAdBxABqIAY4AgBBACEADAULIAIgAxCACiIJBEAgCEEIaiIDQQhqIgAgAUEIaikCADcDACADQRhqIgIgAUEYaigCADYCACAAIAAqAgAiJ4w4AgAg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DUHQgMMAEMMIAAsgCEKAgICAEDcCCCAIQoCAgIAQNwIAIAhBEGpCADcCAEECCyECQQIhCyACIQlBAiEECyAAIAQ2AhQgACAINgIQIAAgCzYCDCAAIAk2AgggACAGNgIEIAAgAjYCAAsgAygCKARAIAMoAiwQtQELIAMoAhgEQCADKAIcELUBCyADKAIIBEAgAygCDBC1AQsgEBC1AQsgA0HQAmokAA8LQRhBBEHI78MAKAIAIgBBigcgABsRAAAACyAEIAJByO/DACgCACIAQYoHIAAbEQAAAAvGZQMvfwR+AX0jAEGQBGsiAiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkAgASgCBCIEQQRPBEAgASAEQQRrIgU2AgQgASABKAIAIgNBBGo2AgAgAygAACIIDhMDBAUGBwgJCgsMDQ4PEBESExQVAQsgAkKBygA3A8gCIAJByAJqEIkLDAELIAJBAToAyAIgAiAIrTcD0AIgAkHIAmpBnIjAAEGMg8AAEKwICyEBIABBEzYCACAAIAE2AgQMPQsgBUEETwRAIAEgBEEIazYCBCABIANBCGo2AgAgACADKAAENgIEIABBADYCAAw9CyACQQA6AMsCIAJBJTsAyQIgAkEANgLMAiACQQE6AMgCIAJByAJqEIkLIQEgAEETNgIAIAAgATYCBAw8CyACQcgCaiABELkEIAIoAsgCRQRAIAIoAswCIQEgACACQdACaikDADcCCCAAIAE2AgQgAEEBNgIADDwLIAAgAigCzAI2AgQgAEETNgIADDsLIAJByAJqIAEQuQQCfyACKALIAgRAIAIoAswCDAELIAJB0AJqIgMpAwAhMSACKALMAiEGIAJByAJqIAEQuQQgAigCyAIEQCACKALMAgwBCyABKAIEIgRBA0sNESACQQA6AMsCIAJBJTsAyQIgAkEANgLMAiACQQE6AMgCIAJByAJqEIkLCyEBIABBEzYCACAAIAE2AgQMOgsgAkHIAmogARC5BCACKALIAkUEQCACQdACaiIDKQMAITEgAigCzAIhBiACQcgCaiABELkEIAIoAsgCRQ0RCyACKALMAiEBIABBEzYCACAAIAE2AgQMOQsgAkHIAmogARC5BAJAIAIoAsgCDQAgAkHQAmoiAykDACExIAIoAswCIQYgAkHIAmogARC5BCACKALIAg0AIAMpAwAhMiACKALMAiEDIAJByAJqIAEQuQQgAigCyAJFDRELIAIoAswCIQEgAEETNgIAIAAgATYCBAw4CyACIAE2AmwgAkEHNgJoIAJByAJqIAJB6ABqEFYgAigCyAINECACQegCaigCACIcRQRAQQBB0IrAAEGMg8AAEOYHIQEMNwsgAkGQA2ooAgAhJyACQYwDaigCACEdIAJBiANqKAIAIR4gAkGEA2ooAgAhKCACQYADaigCACEfIAJB/AJqKAIAISAgAkH4AmooAgAhKSACQfQCaigCACEhIAJB8AJqKAIAISIgAkHsAmooAgAhKiACQeQCaigCACEjIAJBgAFqIgNBCGogAkHIAmoiAUEQaikDADcDACADQRBqIAJB4AJqKAIANgIAIAIgAUEIaiIDKQMANwOAASACKALMAiErIAEgAkHoAGoQggQgAigCyAINESADKAIAIiRFBEBBAUHQisAAQYyDwAAQ5gchAQw2CyACKALMAiElAkAgAigCaCIBBEAgAkHUAmooAgAhLCACIAFBAWs2AmggAigCbCIDKAIEIgFBB00EQCACQoHKADcDyAIgAkHIAmoQiQshAQw3CyADIAFBCGsiDzYCBCADIAMoAgAiAUEIajYCACACQShqIAEpAAAQhwYgAigCLCEBIAIoAigNNgJAIAFBgCAgAUGAIEkbIgVFBEBBBCEMDAELIAVBDGwiBEEEEPcLIgxFDRULQQAhCCACQQA2AtACIAIgDDYCzAIgAiAFNgLIAiABBEADQAJAAn8gD0EDTQRAIAJCgcoANwMoIAJBKGoQiQsMAQsgAyAPQQRrIgU2AgQgAyADKAIAIgRBBGo2AgAgBUEDTQRAIAJCgcoANwMoIAJBKGoQiQsMAQsgBCgAACEHIAMgBUEEayIFNgIEIAMgBEEIajYCACAFQQNLDQEgAkKBygA3AyggAkEoahCJCwshASACKALIAkUNOSACKALMAhC1AQw5CyABQQFrIQEgBDUABCExIAMgBUEEayIPNgIEIAMgBEEMajYCACAxIAQ1AAhCIIaEITEg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CyACQfwCaigCACENIAJB+AJqKAIAIRUgAkH0AmooAgAhByACQfACaigCACEQIAJB7AJqKAIAIRYgAkHkAmooAgAhDiACQYABaiIDQQhqIAJByAJqIgFBEGopAwA3AwAgA0EQaiACQeACaigCADYCACACIAFBCGoiAykDADcDgAEgAigCzAIhFyABIAJB6ABqEIIEAkAgAigCyAJFBEAgAygCACIRRQRAQQFBiITAAEGMg8AAEOYHIQEMMAsgAigCzAIhEiACKAJoBEAgAigCbCIDKAIEIgFBB00EQCACQoHKADcDyAIgAkHIAmoQiQshAQwwCyACQdQCaigCACEYIAMgAUEIayIPNgIEIAMgAygCACIBQQhqNgIAIAJBKGogASkAABCHBiACKAIsIQEgAigCKA0vAkAgAUGAICABQYAgSRsiCEUEQEEEIQwMAQsgCEEDdCIGQQQQ9wsiDEUNPAtBACEFIAJBADYC0AIgAiAMNgLMAiACIAg2AsgCIAEEQANAAkACfyAPQQNNBEAgAkKBygA3AyggAkEoahCJCwwBCyADIA9BBGsiCDYCBCADIAMoAgAiBkEEajYCACAIQQNLDQEgAkKBygA3AyggAkEoahCJCwshASACKALIAkUNMiACKALMAhC1AQwyCyABQQFrIQEgBjUAACExIAMgCEEEayIPNgIEIAMgBkEIajYCACAxIAY1AARCIIaEITEgAigCyAIgBUYEQCACQcgCaiAFELgGIAIoAswCIQwgAigC0AIhBQsgDCAFQQN0aiAxNwIAIAIgBUEBaiIFNgLQAiABDQALIAIoAswCIQwgAigCyAIhCAsgDA0CIAghAQwvC0ECQYiEwABBjIPAABDmByEBDC4LIAIoAswCIQEMLgsgACACKQOAATcCCCAAQRhqIAJBkAFqKAIANgIAIABBEGogAkGIAWopAwA3AgAgACAFNgJgIAAgDDYCXCAAIAg2AlggACAYNgJUIAAgETYCUCAAIBI2AkwgACAUNgJIIAAgCTYCRCAAIAo2AkAgACATNgI8IAAgCzYCOCAAIA02AjQgACAVNgIwIAAgBzYCLCAAIBA2AiggACAWNgIkIAAgBDYCICAAIA42AhwgACAXNgIEIABBBjYCAAw2CyACQcgCaiABELkEIAIoAsgCRQRAIAIoAswCIQEgACACQdACaikDADcC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QQA6AMsCIAJBJTsAyQIgAkEANgLMAiACQQE6AMgCIAJByAJqEIkLCyEBIABBEzYCACAAIAE2AgQMLwsgAkHIAmogARC5BAJ/IAIoAsgCBEAgAigCzAIMAQsgAkHQAmoiAykDACExIAIoAswCIQYgAkHIAmogARC5BCACKALIAgRAIAIoAswCDAELIAMpAwAhMiACKALMAiEDIAJByAJqIAEQuQQgAigCyAIEQCACKALMAgwBCyABKAIEIgRBA0sNGSACQQA6AMsCIAJBJTsAyQIgAkEANgLMAiACQQE6AMgCIAJByAJqEIkLCyEBIABBEzYCACAAIAE2AgQMLgsCfyAFQQNNBEAgAkEAOgDLAiACQSU7AMkCIAJBADYCzAIgAkEBOgDIAiACQcgCahCJCwwBCyABIARBCGsiBjYCBCABIANBCGo2AgAgBkEDTQRAIAJBADoAywIgAkElOwDJAiACQQA2AswCIAJBAToAyAIgAkHIAmoQiQsMAQsgAygABCEGIAEgBEEMayIFNgIEIAEgA0EMajYCACAFQQNLDRkgAkEAOgDLAiACQSU7AMkCIAJBADYCzAIgAkEBOgDIAiACQcgCahCJCwshASAAQRM2AgAgACABNgIEDC0LAn8gBUEDTQRAIAJBADoAywIgAkElOwDJAiACQQA2AswCIAJBAToAyAIgAkHIAmoQiQsMAQsgASAEQQhrIgY2AgQgASADQQhqNgIAIAZBA00EQCACQQA6AMsCIAJBJTsAyQIgAkEANgLMAiACQQE6AMgCIAJByAJqEIkLDAELIAMoAAQhBiABIARBDGsiBTYCBCABIANBDGo2AgAgBUEDSw0ZIAJBADoAywIgAkElOwDJAiACQQA2AswCIAJBAToAyAIgAkHIAmoQiQsLIQEgAEETNgIAIAAgATYCBAwsCyACQcgCaiABEGEgAigCyAIhBiACKALMAiIDBEAgAigCoAMhBCACKAKcAyEFIAIoApQDIQggAigCkAMhCSACKAKIAyEKIAIoAoQDIQsgAigC/AIhDSACKAL4AiEHIAIoAvACIQwgAigC7AIhDyACKALkAiEQIAIoAuACIQ4gAigC2AIhESACKALUAiESIAEoAgQiFEEDSw0ZIAJBADoAywIgAkElOwDJAiACQQA2AswCIAJBAToAyAIgAkHIAmoQiQshASAGBEAgAxC1AQsgEgRAIBEQtQELIA4EQCAQELUBCyAPBEAgDBC1AQsgBwRAIA0QtQELIAsEQCAKELUBCyAJBEAgCBC1AQsgBQRAIAQQtQELIAEhBgsgAEETNgIAIAAgBjYCBAwrCyAFQQRPBEAgASAEQQhrNgIEIAEgA0EIajYCACAAIAMoAAQ2AgQgAEESNgIADCsLIAJCgcoANwPIAiACQcgCahCJCyEBIABBEzYCACAAIAE2AgQMKgsgAykDACEyIAIoAswCIQMgASAEQQRrNgIEIAEgASgCACIBQQRqNgIAIAAgASoAADgCHCAAIDI3AhQgACADNgIQIAAgMTcCCCAAIAY2AgQgAEECNgIADCkLIAIoAswCIQEgACADKQMANwIUIAAgATYCECAAIDE3AgggACAGNgIEIABBAzYCAAwoCyACKALMAiEBIAAgAkHQAmopAwA3AiAgACABNgIcIAAgMjcCFCAAIAM2AhAgACAxNwIIIAAgBjYCBCAAQQQ2AgAMJwsgAigCzAIhAQwlCyACKALMAiEBDCMLIARBBEHI78MAKAIAIgBBigcgABsRAAAACwALIBRBBEHI78MAKAIAIgBBigcgABsRAAAACyADQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAigCzAIhAQwYCyACKALMAiEBDBQLIANBAUHI78MAKAIAIgBBigcgABsRAAAACyACQoHKADcDyAIgAkHIAmoQiQshAQwQCyACQoHKADcDyAIgAkHIAmoQiQshAQwPCyACQoHKADcDyAIgAkHIAmoQiQshAQwNCyACKALMAiEDDAoLIAJB6ABqIgNBCGoiCiACQcgCaiIBQRBqIgUpAwA3AwAgA0EQaiILIAFBGGoiCCgCADYCACACIAIpA9ACNwNoIAIoAswCIQcgAkHEAGogAkGAAWoiA0EIaikDADcCACACQcwAaiADQRBqKQMANwIAIAJB1ABqIANBGGooAgA2AgAgAUEwaiIMIAJBIGooAgA2AgAgAUEoaiIPIAIpAxg3AwAgAUEIaiIQIANBIGoiA0EIaikCADcDACAFIANBEGopAgA3AwAgCCADQRhqKQIANwMAIAFBIGoiDiADQSBqKQIANwMAIAIgAikDgAE3AjwgAiADKQIANwPIAiACQShqIgFBEGoiAyALKAIANgIAIABBMGogAUEoaikDADcC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IQcgBEEBNgKAAyAEQoCAgIAwNwL4AiAEQQA2AsgDIARCgoCAgBA3AsADIAEgByAFIARB+AJqIAMQkwMgA0EwaiAGKAIANgIAIANBKGogCCkDADcDACADQSBqIAopAwA3AwAgA0EYaiALKQMANwMAIANBEGogCSkDADcDACADQQhqIBEpAwA3AwAgBCAEKQP4AzcDwAMgBC0ArAQhCCAEKALMASIGIAQoAtQBIgdGBEAgEiAHEMkGIAQoAswBIQYgBCgC1AEhBwsgBCgC0AEiASAHQTRsaiIDIAQpA4gCNwIAIANBKGogDSkDADcCACADQSBqIBUpAwA3AgAgA0EYaiAWKQMANwIAIANBEGogFykDADcCACADQQhqIBgpAwA3AgAgA0EwaiAPKAIANgIAIAQgB0EBaiIHNgLUASAGIAdGBEAgEiAGEMkGIAQoAswBIQYgBCgC1AEhByAEKALQASEBCyABIAdBNGxqIgMgBCkDwAI3AgAgA0EoaiAEQcACaiIFQShqKQMANwIAIANBIGogBUEgaikDADcCACADQRhqIAVBGGopAwA3AgAgA0EQaiAFQRBqKQMANwIAIANBCGogBUEIaikDADcCACADQTBqIAVBMGooAgA2AgAgBCAHQQFqIgc2AtQBIAYgB0YEQCASIAYQyQYgBCgCzAEhBiAEKALUASEHIAQoAtABIQELIAEgB0E0bGoiAyAEKQOIAzcCACADQShqIARBiANqIgVBKGopAwA3AgAgA0EgaiAFQSBqKQMANwIAIANBGGogBUEYaikDADcCACADQRBqIAVBEGopAwA3AgAgA0EIaiAFQQhqKQMANwIAIANBMGogBUEwaigCADYCACAEIAdBAWoiBTYC1AEgBSAGRgRAIBIgBhDJBiAEKALUASEFIAQoAtABIQELIAEgBUE0bGoiAyAEKQPAAzcCACADQShqIARBwANqIgdBKGopAwA3AgAgA0EgaiAHQSBqKQMANwIAIANBGGogB0EYaikDADcCACADQRBqIAdBEGopAwA3AgAgA0EIaiAHQQhqKQMANwIAIANBMGogB0EwaigCADYCACAEIAVBAWoiAzYC1AECQCAZRQ0AAkAgAwRAIAQoAsgBRQ0BIAFBGGoqAgAgBCgCxAEiAyoCAJQgAUEcaioCACADQQRqKgIAlJIgAUEgaioCACADQQhq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Rg0LIARB+AJqIA8Q9gIgDUEBaiENIAQoAvgCQQFGDQEMDAsLIAogA0H8nsIAEMMIAAtBp/XBAEErQYyfwgAQ2QkACyAEQQA2AoAEIAZBCGogBEHAA2ogBEH4A2pBvJvCABCOCQALIAkgA0G8nsIAEMMIAAsgBEEANgKABCALQQhqIARBwANqIARB+ANqQbybwgAQjgkACyAHIANBrJ7CABDDCAALIARBADYCgAQgCUEIaiAEQcADaiAEQfgDakG8m8IAEI4JAAsgBSADQZyewgAQwwgACyAFIANBjJ7CABDDCAALIAMgCEsEQCAEQcADaiIBIAQoAtABIAhBNGxqIAQoAsQBIAcQkwQgBEH4A2oiAkEIaiIDIAFBCGooAgA2AgAgAkEUaiABQRRqKAIANgIAIAQgBCkCzAM3AoQEIARB8AFqIgFBCGogAykDADcDACABQRBqIAJBEGopAwA3AwAgBCAEKQPAAzcD8AEMAwsgCCADQfydwgAQwwgACyAAQQE6AAwgACACKQIANwIAIABBCGogAkEIaigCADYCACAEKALAAQRAIAQoAsQBELUBCyAEKALMAQRAIAQoAtABELUBCyAEKALYAQRAIAQoAtwBELUBCyAEKALkAUUNBSAEKALoARC1AQwFCyAEKALUASIBIAhNDQEgBEHAA2oiASAEKALQASAIQTRsaiAEKALEASAEKALIARCTBCAEQfgDaiICQQhqIgMgAUEIaigCADYCACACQRRqIAFBFGooAgA2AgAgBCAEKQLMAzcChAQgBEHwAWoiAUEIaiADKQMANwMAIAFBEGogAkEQaikDADcDACAEIAQpA8ADNwPwAQsgACAEKQPwATcCACAAQQhqIARB+AFqKAIANgIAIABBAToADCAEKALAAQRAIAQoAsQBELUBCyAEKALMAQRAIAQoAtABELUBCyAEKALYAQRAIAQoAtwBELUBCyAEKALkAUUNAyAEKALoARC1AQwDCyAIIAFB3J3CABDDCAALIARB+ANqIARBARDPASAEKgKABCEfIAQqAvwDISAgBCoC+AMLISEgAEEAOgAMIAAgHzgCCCAAICA4AgQgACAhOAIACyAEQbAEaiQADwtBkI7CAEEoQdCgwgAQ2QkAC/JSAxZ/E30BfiMAQbAEayIEJAAgBEGoAWpBADYCACAEQbgBakEANgIAIARC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QegAakKAgICA8P//v383AgAgEEHgAGpC////+////7//ADcCACAQQdgAakL////7BzcCACAQQdAAakKAgICA8P//v383AgAgEEHIAGpC////+////7//ADcCACAQQUBrQv////sHNwIAIBBBOGpCgICAgPD//79/NwIAIBBBMGpC////+////7//ADcCACAQQShqIJ4BNwIAIBBB2AJqLQAAITAgEEGkAWpC////+wc3AgAgEEGsAWpBADoAACAQQaABaiAPKAAANgAAIBBBmQFqIAgpAwA3AAAgEEGRAWogICkD6AE3AAAgEEHAAWpC////+wc3AgAgEEHIAWpBADoAACAQQa0BaiAgKQPQATcAACAQQbUBaiASKQMANwAAIBBBvAFqIBooAAA2AAAgEEHJAWogICkDuAE3AAAgEEHRAWogLSkDADcAACAQQdgBaiAkKAAANgAAIBBB5AFqQQA6AAAgEEHcAWpC////+wc3AgAgEEH0AWogKygAADYAACAQQe0BaiAnKQMANwAAIBBB5QFqICApA6ABNwAAIBBBgAJqQQA6AAAgEEH4AWpC////+wc3AgAgEEGQAmogNCgAADYAACAQQYkCaiAvKQMANwAAIBBBgQJqICApA4gBNwAAIBBBqAJqQoCAgICAgIDAPzcCACAQQaACakIANwIAIBBBnAJqQQA6AAAgEEGUAmpC////+wc3AgAgEEHAAmpCADcCACAQQbgCakIANwIAIBBBsAJqQgA3AgAgEEHIAmpBgICA/AM2AgAgEEHcAmpBADoAACAQQdQCakIANwIAIBBBzAJqQgA3AgAgEEHdAmpBAToAACAQQeQCaiAoKQEANwEAIBBB3gJqICApAXA3AQAgEEH0AmpBADYCACAQQewCakIANwIAIBMoAgBFDQtBACESIBYoAgBBADYC/AIgFSAVKAKQAUEGajYCkAFBBCEPIBVBBGooAgAhECAVQQhqIhooAgAiCARAIAhB/////wFLDQkgCEECdCISQQQQ9wsiD0UNCwsgDyAQIBIQ5AwhDyAgIBUoAgwiEDYCPCAgIAg2AjggICAPNgI0ICAgCDYCMCAgQcgCaiAQQQZqIi0gIEEwahCOBSAgKALIAiEkICAoAswCIQggICgC0AIhDyAgKALUAiESIC0EQCAIQRhqIAggEEECdBDiDBoLIBJBBU0NGiAIQgA3AgAgCEEQakIANwIAIAhBCGpCADcCACAPIBJHDRggFSgCAARAIBVBBGooAgAQtQELIBUgDzYCDCAVICQ2AgAgGiAPNgIAQQQhEiAVQQRqIAg2AgAgFUEUaiIaKAIAIQ8CQCAVQRhqIi0oAgAiCEUEQEEAIRAMAQsgCEH/////AUsNCSAIQQJ0IhBBBBD3CyISRQ0KCyASIA8gEBDkDCEPICAgFUEcaigCACIQNgI8ICAgCDYCOCAgIA82AjQgICAINgIwICBByAJqIBBBBmoiJCAgQTBqEI4FICAoAsgCIScgICgCzAIhCCAgKALQAiEPICAoAtQCIRIgJARAIAhBGGogCCAQQQJ0EOIMGgsgEkEFTQ0aIAhCADcCACAIQRBqQgA3AgAgCEEIakIANwIAIA8gEkcNGCAVKAIQBEAgGigCABC1AQsgFSAPNgIcIBUgJzYCECAtIA82AgAgGiAINgIAIBVBJGoiEigCACEaAkAgFUEoaiItKAIAIghFBEBBBCEQQQAhDwwBCyAIQf////8BSw0JIAhBAnQiD0EEEPcLIhBFDQgLIBAgGiAPEOQMIQ8gICAVQSxqKAIAIhA2AjwgICAINgI4ICAgDzYCNCAgIAg2AjAgIEHIAmogEEEGaiIkICBBMGoQjgUgICgCyAIhJyAgKALMAiEIICAoAtACIQ8gICgC1AIhGiAkBEAgCEEYaiAIIBBBAnQQ4gwaCyAaQQVNDRogCEIANwIAIAhBEGpCADcCACAIQQhqQgA3AgAgDyAaRw0YIBUoAiAEQCASKAIAELUBCyAVIA82AiwgFSAnNgIgIC0gDzYCACASIAg2AgAgEygCACIPRQ0GIA9BAUYNDiAwaSESIBYoAgAhCAJ/IA9B1ANsIhpBqAdrIi1B1ANuQQFqQQdxIg9FBEAgCCIPQdQDagwBCyAPQdQDbCEQIAghDwNAIA9B0AZqIiQgJCgCACASajYCACAPQdQDaiEPIBBB1ANrIhANAAsgD0HUA2oLIRAgLUHMGUkNDiAIIBpqIQgDQCAPQdAGaiIPIA8oAgAgEmo2AgAgEEHQBmoiDyAPKAIAIBJqNgIAIBBBpApqIg8gDygCACASajYCACAQQfgNaiIPIA8oAgAgEmo2AgAgEEHMEWoiDyAPKAIAIBJqNgIAIBBBoBVqIg8gDygCACASajYCACAQQfQYaiIPIA8oAgAgEmo2AgAgEEHIHGoiDyAPKAIAIBJqNgIAIBBBzBlqIQ8gCCAQQaAdaiIQRw0ACwwOC0GYo8EAQTZB0KPBABDZCQALQeCjwQBBM0GUpMEAENkJAAsgFEEoaikDACGeASAUQTBqKQMAIZ8BIB1BCGpCADcAACAdQgA3AAAgHkIANwAAIB5BCGpCADcAACAYQgA3AAAgGEEIakIANwAAIBxCADcAACAcQQhqQgA3AAAgI0IANwAAICNBCGpCADcAACAgQdABaiIIQQ9qIhIgIEHIAmoiJEEPaigAADYAACAIQQhqIicgJEEIaiIIKQAANwMAICAgICkAyAI3A9ABICBBuAFqIiRBD2oiKyAgQagCaiIvQQ9qKAAANgAAICRBCGoiJCAvQQhqKQAANwMAICAgICkAqAI3A7gBICBBoAFqIi9BD2oiNCAgQZUCaiIwQQ9qKAAANgAAIC9BCGoiLyAwQQhqKQAANwMAICAgICkAlQI3A6ABICBBiAFqIjBBD2oiKiAgQYICaiIsQQ9qKAAANgAAIDBBCGoiMCAsQQhqKQAANwMAICAgICkAggI3A4gBICBB8ABqIixBD2oiMyAgQegBaiIuQQ9qKAAANgAAICxBCGoiLCAuQQhqKQAANwMAICAgICkA6AE3A3AgH0EQakIANwEAIB9BCGpCADcBACAfQgA3AQAgEEHYAmoiLi0AACExIAggFEFAaygCADYCACAUQThqKQIAIaABIBBB8ABqQf////sHNgIAIBBB6ABqQoCAgIDw//+/fzcCACAQQeAAakL////7////v/8ANwIAIBBB2ABqQv////sHNwIAIBBB0ABqQoCAgIDw//+/fzcCACAQQcgAakL////7////v/8ANwIAIBBBQGtC////+wc3AgAgEEE4akKAgICA8P//v383AgAgEEEwakL////7////v/8ANwIAIBBBKGpCgICAgICAgMA/NwIAIBBCADcCICAQQfQAakIANwIAIBBB/ABqQgA3AgAgEEGEAWpBADYCACAQQZABakEAOgAAIBBBiAFqQv////sHNwIAICAgoAE3A8gCIBBBpAFqQv////sHNwIAIBBBrAFqQQA6AAAgEEHAAWpC////+wc3AgAgEEHIAWpBADoAACAQQaABaiASKAAANgAAIBBBmQFqICcpAwA3AAAgEEGRAWogICkD0AE3AAAgEEGtAWogICkDuAE3AAAgEEG1AWogJCkDADcAACAQQbwBaiArKAAANgAAIBBByQFqICApA6ABNwAAIBBB0QFqIC8pAwA3AAAgEEHYAWogNCgAADYAACAQQeQBakEAOgAAIBBB3AFqQv////sHNwIAIBBBgAJqQQA6AAAgEEH4AWpC////+wc3AgAgEEGcAmpBADoAACAQQZQCakL////7BzcCACAQQagCaiCfATcCACAQQaACaiCeATcCACAQQfQBaiAqKAAANgAAIBBB7QFqIDApAwA3AAAgEEHlAWogICkDiAE3AAAgEEGQAmogMygAADYAACAQQYkCaiAsKQMANwAAIBBBgQJqICApA3A3AAAgEEG4AmogCCgCADYCACAQQbACaiAgKQPIAjcCACAQQcQCakKAgICAgICAwD83AgAgEEG8AmpCADcCACAQQdQCakEANgIAIBBBzAJqQgA3AgAgEEHcAmpBgAI7AQAgLkE/NgIAIBBB9gJqICUvAQA7AQAgEEHuAmogGSkBADcBACAQQeYCaiAgQThqKQEANwEAIBBB3gJqICApATA3AQAgEygCAEUNAiAWKAIAQQA2AvwCIBUgFSgCkAEiEEEGIDFpayISazYCkAECQCAQIBJGBEAgFSgCAARAIBVBBGooAgAQtQELIBVCADcCCCAVQoCAgIDAADcCACAVKAIQBEAgFUEUaigCABC1AQsgFUKAgICAwAA3AhAgFUEYakIANwIAIBUoAiAEQCAVQSRqKAIAELUBCyAVQoCAgIDAADcCICAVQShqQgA3AgAMAQsgDygCACIPIBJNDRUgICASQQJ0IhAgFUEEaiIkKAIAajYCqAIgICAPNgKwAiAgQQAgDyASayInIA8gJ0kbNgKsAiAgQcgCaiAgQagCahCfBCAVKAIABEAgJCgCABC1AQsgFSAgKQPIAjcCACAVQQhqIAgpAwA3AgAgGigCACIPIBJNDRUgICAVQRRqIhooAgAgEGo2AqgCICAgDzYCsAIgIEEAIA8gEmsiJCAPICRJGzYCrAIgIEHIAmogIEGoAmoQnwQgFUEQaiIPKAIABEAgGigCABC1AQsgDyAgKQPIAjcCACAPQQhqIAgpAwA3AgAgLSgCACIPIBJNDRUgICAQIBVBJGoiGigCAGo2AqgCICAgDzYCsAIg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IYMBIAFBkANqKgAAIYQBIAFBjANqKgAAIYUBIAFBiANqKgAAIYYBIAFBhANqKgAAIYcBIAFBgANqKAAAIQ4gAUH4AmopAAAhayABQd0Cai0AACEGIAFB3AJqLQAAIQIgAUHYAmotAAAhCiABQcgCaioAACGIASABQcQCaioAACGJASABQcACaioAACGKASABQbwCaioAACGLASABQawCaioAACGMASABQagCaioAACGNASABQaQCaioAACGOASABQaACaioAACGPASABQZwCai0AACEhIAFBmAJqKgAAIZABIAFBlAJqKgAAIZEBIAFBgAJqLQAAISkgAUH8AWoqAAAhkgEgAUH4AWoqAAAhkwEgAUHkAWotAAAhGiABQeABaioAACGUASABQdwBaioAACGVASABQcgBai0AACEqIAFBxAFqKgAAIZYBIAFBwAFqKgAAIZcBIAFBrAFqLQAAISsgAUGoAWoqAAAhmAEgAUGkAWoqAAAhmQEgAUHZAmovAAAhXSABQdsCai0AACFeIARBoAZqIgdBCGoiXyABQQhqKQIANwMAIAdBEGoiYCABQRBqKQIANwMAIAdBGGoiYSABQRhqKQIANwMAIAQgASkCADcDoAYgBEGIBmoiB0EQaiIsIAFBhAFqKAIANgIAIAdBCGoiLSABQfwAaikCADcDACAEIAFB9ABqKQIANwOIBiAEQfAFaiIHQQ9qIi4gAUGgAWooAAA2AAAgB0EIaiIvIAFBmQFqKQAANwMAIAQgAUGRAWopAAA3A/AFIARB2AVqIgdBD2oiMCABQbwBaigAADYAACAHQQhqIjEgAUG1AWopAAA3AwAgBCABQa0BaikAADcD2AUgBEHABWoiB0EPaiIyIAFB2AFqKAAANgAAIAdBCGoiMyABQdEBaikAADcDACAEIAFByQFqKQAANwPABSAEQagFaiIHQQ9qIjQgAUH0AWooAAA2AAAgB0EIaiI1IAFB7QFqKQAANwMAIAQgAUHlAWopAAA3A6gFIARBkAVqIgdBD2oiNiABQZACaigAADYAACAHQQhqIjcgAUGJAmopAAA3AwAgBCABQYECaikAADcDkAUgBEGOBWoiYiABQZ8Cai0AADoAACAEIAFBnQJqLwAAOwGMBSAEQYgFaiI4IAFBuAJqKAAANgIAIAQgAUGwAmopAAA3A4AFIARB+ARqIjkgAUHUAmooAAA2AgAgBCABQcwCaikAADcD8AQgBEHQBGoiB0EYaiI6IAFB9gJqLwAAOwEAIAdBEGoiOyABQe4CaikAADcDACAHQQhqIjwgAUHmAmopAAA3AwAgBCABQd4CaikAADcD0AQgBEHIBGoiPSABQZwDaigAADYCACAEIAFBlANqKQAANwPABCAEQbACaiIHQTBqImMgAUHQA2ooAAA2AgAgB0EoaiJkIAFByANqKQAANwMAIAdBIGoiZSABQcADaikAADcDACAHQRhqImYgAUG4A2opAAA3AwAgB0EQaiJnIAFBsANqKQAANwMAIAdBCGoiaCABQagDaikAADcDACAEIAFBoANqKQAANwOwAgJAAkACQAJAAkACQAJAIAVFIAUgEkZyImlFBEAgDiAQTw0CIAUgEE8NAyAJIBRqIBQgDkECdGooAgA2AgAMAQsgBSAQTw0DIAkgFGogBCgCqAIiATYCACAEQQA2AtAGIARCADcDyAYgBEKAgICAwAA3A8AGIFwgBEHABmoiBxBjIARBADYC0AYgBEIANwPIBiAEQoCAgIDAADcDwAYgWyAHEGMgH0IANwIAIB9BCGpCADcCACAnQgA3AgAgJ0EIakIANwIAIARBADYCwAggBEKAgICAwAA3A7gIIARBBDYC1AggBEIANwLMCCAEQoCAgIDAADcCxAggBEIANwPIByAEQoCAgIDAADcDwAcgBEIANwO4ByAEQoCAgIDAADcDsAcgBEIANwOoByAEQoCAgIDAADcDoAcgBEEENgLoCCAEQQA6AKwJIARCADcDsAggBEIENwKkCSAEQgA3ApwJIARCgICAgMAANwKUCSAEQgQ3AowJIARCADcChAkgBEIENwL8CCAEQoCAgIDAADcD0AcgBEIANwPYByAEKAKgAiABRgRAIARBoAJqIQwjAEEgayIHJAACQAJAIAFBAWoiAUUNACAMKAIAIg9BAXQiKCABIAEgKEkbIgFBBCABQQRLGyIBQZACbCEoIAFB+fDhA0lBAnQhagJAIA8EQCAHIA9BkAJsNgIUIAdBBDYCGCAHIAxBBGooAgA2AhAMAQsgB0EANgIYCyAHICggaiAHQRBqEIYHIAcoAgQhDyAHKAIARQRAIAwgATYCACAMIA82AgQMAgsgB0EIaigCACIBQYGAgIB4Rg0BIAFFDQAgDyABQcjvwwAoAgAiAEGKByAAGxEAAAALEKAKAAsgB0EgaiQAIAQoAqgCIQELIAQoAqQCIAFBkAJsaiAEQaAHakGQAhDkDBogBCABQQFqNgKoAgsgBSAQRg0DIAkgFGooAgAiASAEKAKoAiIHTw0EIAkgHWogBCgCpAIgAUGQAmxqIgFBoAFqKAIANgIAIAFBmAFqIQcgaUUEQCBdIF5BEHRyIQ8MBgsgJkEIakIANwAAICZCADcAACAXQgA3AAAgF0EIakIANwAAIBZCADcAACAWQQhqQgA3AAAgHkIANwAAIB5BCGpCADcAACAiQgA3AAAgIkEIakIANwAAIC8gBEHABmoiAkEIaikAADcDACAuIAJBD2ooAAA2AAAgBCAEKQDABjcD8AUgMCAEQY0HaiICQQ9qKAAANgAAIDEgAkEIaikAADcDACAEIAQpAI0HNwPYBSAyIARB+gZqIgJBD2ooAAA2AAAgMyACQQhqKQAANwMAIAQgBCkA+gY3A8AFIDQgBEHnBmoiAkEPaigAADYAACA1IAJBCGopAAA3AwAgBCAEKQDnBjcDqAUgNiAEQdQGaiICQQ9qKAAANgAAIDcgAkEIaikAADcDACAEIAQpANQGNwOQBSATQRBqQgA3AQAgE0EIakIANwEAIBNCADcBAEEAIQ8gLEEANgIAIC1CADcDACAEQgA3A4gGIDggPSgCADYCACAEIAQpA8AENwOABSA5QQA2AgAgBEIANwPwBCA6IARBoAdqIgJBGGovAQA7AQAgOyACQRBqKQEANwMAIDwgAkEIaikBADcDACAEIAQpAaAHNwPQBEE/IQpD//9//yF/QwAAgD8hiAFDAAAAACGYAUP//39/IZkBQQEhBkEAIQJBACErQ///f38hlwFDAAAAACGWAUEAISpD//9/fyGVAUMAAAAAIZQBQQAhGkP//39/IZMBQwAAAAAhkgFBACEpQ///f38hkQFDAAAAACGQAUEAISEghwEhjwEghgEhjgEghQEhjQEghAEhjAFDAAAAACGLAUMAAAAAIYoBQwAAAAAhiQFDAAAAACGDAUMAAAAAIYIBQwAAAAAhgQFDAACAPyGAAUP//39/IX5DAAAAACF9Q///f/8hfEP//39/IXtDAAAAACF6Q///f/8heUP//39/IXhDAAAAACF3Q///f/8hdkP//39/IXVDAAAAACF0Q///f/8hc0P//39/IXJDAAAAACFxQ///f/8hcEP//39/IW9D//9/fyFuQwAAAAAhbUEAISAMBQsgDiAQQeidwQAQwwgACyAFIBBB+J3BABDDCAALIAUgEEHYncEAEMMIAAsgECAQQYiewQAQwwgACyABIAdBmJ7BABDDCAALIAEgASgCkAEgCkH/AXFpa0EGajYCkAEgBygCCCIMIAcoAgBGBEAgByAMEMIGIAcoAgghDAsgBygCBCAMQdQDbGoiASAEKQOgBjcCACABIG84AnAgASBwOAJsIAEgcTgCaCABIHI4AmQgASBzOAJgIAEgdDgCXCABIHU4AlggASB2OAJUIAEgdzgCUCABIHg4AkwgASB5OAJIIAEgejgCRCABIHs4AkAgASB8OAI8IAEgfTgCOCABIH44AjQgASB/OAIwIAEggAE4AiwgASCBATgCKCABIIIBOAIkIAEggwE4AiAgAUEYaiBhKQMANwIAIAFBEGogYCkDADcCACABQQhqIF8pAwA3AgAgASBuOAKIASABIG04AowBIAEgIDoAkAEgASCZATgCpAEgASCYATgCqAEgASArOgCsASABQYQBaiAsKAIANgIAIAFB/ABqIC0pAwA3AgAgASAEKQOIBjcCdCABIAQpA/AFNwCRASABQZkBaiAvKQMANwAAIAFBoAFqIC4oAAA2AAAgASAqOgDIASABIJYBOALEASABIJcBOALAASABIBo6AOQBIAEglAE4AuABIAEglQE4AtwBIAFBvAFqIDAoAAA2AAAgAUG1AWogMSkDADcAACABIAQpA9gFNwCtASABIAQpA8AFNwDJASABQdEBaiAzKQMANwAAIAFB2AFqIDIoAAA2AAAgAUH0AWogNCgAADYAACABQe0BaiA1KQMANwAAIAEgBCkDqAU3AOUBIAEgKToAgAIgASCSATgC/AEgASCTATgC+AEgAUGQAmogNigAADYAACABQYkCaiA3KQMANwAAIAEgBCkDkAU3AIECIAEgIToAnAIgASCQATgCmAIgASCRATgClAIgAUGfAmogYi0AADoAACABIAQvAYwFOwCdAiABIIwBOAKsAiABII0BOAKoAiABII4BOAKkAiABII8BOAKgAiABQbgCaiA4KAIANgIAIAEgBCkDgAU3ArACIAEgiAE4AsgCIAEgiQE4AsQCIAEgigE4AsAC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tAdqQQA2AgAgBEGYjMEANgKoByAEQZi/wAA2ArAHIARBADYCoAcgBEGgB2pBoIzBABDTCgALQZCNwQBBE0H4p8EAEM4MAAtBiMLAAEErQYiowQAQ2QkACyAGIBtHDQALDAELIAYgG0YNACAbIAZrQZACbkGQAmwhAQNAIAYQiwIgBkGQAmohBiABQZACayIBDQALCyAPRQ0AIAcQtQELIARBsAlqJAAPC0GY98AAQR1BoPjAABC4CwALIAFBBEHI78MAKAIAIgBBigcgABsRAAAAC705Ax9/L30DfiMAQbAKayILJAAgC0EQaiIMQShqIApBKGopAgA3AwAgDEEgaiAKQSBqKQIANwMAIAxBGGogCkEYaikCADcDACAMQRBqIApBEGopAgA3AwAgDEEIaiAKQQhqKQIANwMAIAsgAzYCSCALIAI2AkQgCyABNgJAIAsgCikCADcDECABKAIAIQ0gASgCBCIOKAIIIREgC0GgBGoiEiAGIAQgBygCiAERAQAgC0HQAGoiA0EIakEANgIAIAtCADcDUCALQcAGaiICQQhqIg8gBUEIaigCADYCACALIAUpAgA3A8AGIAtBoAVqIgogAyACENYKIBJBEGoqAgAhLCALQbQEaioCACErIAsqAqAEIS4gCyoCrAQhLyALKgKkBCEwIAsqAqgEITEgAkEQaiAKQRBqKQMANwMAIA8gCkEIaikDADcDACALIAspA6AFNwPABiADIAIQigYgC0GUAmogDjYCACALQYwCaiArIDGTQwAAAD+UIio4AgAgC0GIAmogKjgCACALQYQCaiAqOAIAIAtBgAJqICo4AgAgC0H8AWogLCAwk0MAAAA/lCIqOAIAIAtB+AFqICo4AgAgC0H0AWogKjgCACALQfABaiAqOAIAIAtB7AFqIC8gLpNDAAAAP5QiKjgCACALQegBaiAqOAIAIAtB5AFqICo4AgAgC0HcAWogMSArkkMAAAC/lCIrOAIAIAtB2AFqICs4AgAgC0HUAWogKzgCACALQdABaiArOAIAIAtBzAFqIDAgLJJDAAAAv5QiKzgCACALQcgBaiArOAIAIAtBxAFqICs4AgAgC0HAAWogKzgCACALQbwBaiAuIC+SQwAAAL+UIis4AgAgC0G4AWogKzgCACALQbQBaiArOAIAIAsgBTYCqAIgCyAENgKkAiALIA0g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AwAgEyAmKQMANwMAIBQgJykDADcDACAWICgpAwA3AwAgFyADKQMANwMAICkgBC0AADoAACALIAspA4gJNwPwCSALIBU6AKQKIAtBwAhqIgMgC0HwCWoiBCkCEDcCECADQRhqIARBGGooAgA2AgAgBkEYaioCACE2IAZBFGoqAgAhNyAEQQxqKgIAIS8gBEEIaioCACEwIAZBDGoqAgAhLiAGQQRqKgIAISogBEEkaioCACExIAZBCGoqAgAhKyAEQSBqKgIAITIgBioCECE4IAQqAgQhLSAEKgIcITMgBioCACEsIAMgBCoCADgCACADQTBqIARBMGooAgA2AgAgAyAEKQIoNwIoIAMgBC0ANDoANCADIDMgLiAqIDGUICsgMpSTIjQgNJIiNJQgKiAsIDKUICogM5STIjUgNZIiNZQgKyArIDOUICwgMZSTIjMgM5IiM5STkpI4AhwgA0EgaiAyIC4gM5QgKyA0lCAsIDWUk5KSOAIAIANBJGogMSAuIDWUICwgM5QgKiA0lJOSkjgCACADIDggLSAuIC8gKpQgMCArlJMiMSAxkiIxlCAqIDAgLJQgLSAqlJMiMiAykiIylCArIC0gK5QgLyAslJMiLSAtkiItlJOSkpI4AgQgA0EIaiA3IDAgLiAtlCArIDGUICwgMpSTkpKSOAIAIANBDGogNiAvIC4gMpQgLCAtlCAqIDGUk5KSkjgCACALLQD0CCEEIBcgEkEIaikCADcDACAWIBJBEGopAgA3AwAgFCASQRhqKQIANwMAIBMgEkEgaikCADcDACAQIBJBKGopAgA3AwAgC0GKCWoiBiAbQQJqLQAAOgAAIAsgEikCADcD8AkgCyAbLwAAOwGICSAEQQRGDQAgCyoCwAghKiALQcAGaiAFaiIDIA82AgAgA0EIaiAqOAIAIANBBGogHzYCACADQQxqIAspA/AJNwIAIANBFGogFykDADcCACADQRxqIBYpAwA3AgAgA0EkaiAUKQMANwIAIANBLGogEykDADcCACADQTRqIBApAwA3AgAgA0E8aiAEOgAAIANBPWogCy8BiAk7AAAgA0E/aiAGLQAAOgAAIAtBqAZqIApqICo4AgAgByAIICpeOgAACyAFQUBrIQUgB0EBaiEHIApBBGohCiBZQgRSDQALIAtB4ARqIgRBEGogC0HABmoiA0EQaikDADcDACAEQRhqIANBGGopAwA3AwAgBEEgaiADQSBqKQMANwMAIARBKGogA0EoaikDADcDACAEQTBqIANBMGopAwA3AwAgBEE4aiADQThqKAIANgIAIAsgCykDwAY3A+AEIAsgA0EIaikDADcD6AQgCyoCtAYhLiALKgKwBiEsIAsqAqwGISsgCyoCqAYhKiALKAK8BiEKIAtBoARqIgNBCGogDkEIaikAADcDACADQRBqIA5BEGopAAA3AwAgA0EYaiAOQRhqKQAANwMAIANBIGogDkEgaikAADcDACADQShqIA5BKGopAAA3AwAgA0EwaiAOQTBqKQAANwMAIANBN2ogDkE3aikAADcAACALIA4pAAA3A6AEIAstAPwGIQUgCy0AvAchByALQeADaiIDQTdqIA1BN2opAAA3AAAgA0EwaiANQTBqKQAANwMAIANBKGogDUEoaikAADcDACADQSBqIA1BIGopAAA3AwAgA0EYaiANQRhqKQAANwMAIANBEGogDUEQaikAADcDACADQQhqIA1BCGopAAA3AwAgCyANKQAANwPgAyALLQD8ByEEIAtBoANqIgNBN2ogDEE3aikAADcAACADQTBqIAxBMGopAAA3AwAgA0EoaiAMQShqKQAANwMAIANBIGogDEEgaikAADcDACADQRhqIAxBGGopAAA3AwAgA0EQaiAMQRBqKQAANwMAIANBCGogDEEIaikAADcDACALIAwpAAA3A6ADIAstALwIIQYgC0GeA2ogGEECai0AADoAACALIBgvAAA7AZwDIApB/wFxQQJHDQIgBUH/AXFBBEYNAyALQcsGaiALKQPoBDcAACALQfIJaiALLQCiBDoAACALQfsGaiALQZgFaigCADYAACALQfMGaiALQeAEaiIBQTBqKQMANwAAIAtB6wZqIAFBKGopAwA3AAAgC0HjBmogAUEgaikDADcAACALQdsGaiABQRhqKQMANwAAIAtB0wZqIAFBEGopAwA3AAAgCyALKQPgBDcAwwYgCyALLwGgBDsB8AkgC0GgBWoiAUE3aiALQcAGaiICQTdqKQAANwAAIAFBMGogAkEwaikAADcDACABQShqIAJBKGopAAA3AwAgAUEgaiACQSBqKQAANwMAIAFBGGogAkEYaikAADcDACABQRBqIAJBEGopAAA3AwAgAUEIaiACQQhqKQAANwMAIAsgCykAwAY3A6AFIAUhAgwFCyADIAVBrNvAABDDCAALIApB/wFxQQJGDQFBBCEFQQQhB0EEIQRBBCEGCyAJQfgAaiEQIAtBwAZqIgNBCGogCykD6AQ3AwAgA0E4aiALQeAEaiIPQThqKAIANgIAIANBMGogD0EwaikDADcDACADQShqIA9BKGopAwA3AwAgA0EgaiAPQSBqKQMANwMAIANBGGogD0EYaikDADcDACADQRBqIA9BEGopAwA3AwAgCyALKQPgBDcDwAYgCyAFOgD8BiAOIAspA6AENwAAIA5BCGogC0GgBGoiA0EIaikDADcAACAOQRBqIANBEGopAwA3AAAgDkEYaiADQRhqKQMANwAAIA5BIGogA0EgaikDADcAACAOQShqIANBKGopAwA3AAAgDkEwaiADQTBqKQMANwAAIA5BN2ogA0E3aikAADcAACALIAc6ALwHIA1BN2ogC0HgA2oiA0E3aikAADcAACANQTBqIANBMGopAwA3AAAgDUEoaiADQShqKQMANwAAIA1BIGogA0EgaikDADcAACANQRhqIANBGGopAwA3AAAgDUEQaiADQRBqKQMANwAAIA1BCGogA0EIaikDADcAACANIAspA+ADNwAAIAsgBDoA/AcgDEE3aiALQaADaiIDQTdqKQAANwAAIAxBMGogA0EwaikDADcAACAMQShqIANBKGopAwA3AAAgDEEgaiADQSBqKQMANwAAIAxBGGogA0EYaikDADcAACAMQRBqIANBEGopAwA3AAAgDEEIaiADQQhqKQMANwAAIAwgCykDoAM3AAAgCyAGOgC8CCAYQQJqIAtBngNqLQAAOgAAIBggCy8BnAM7AAAgCyAuOAL8CSALICw4AvgJIAsgKzgC9AkgCyAqOALwCSAKQRV2QQhxIApBDnZBBHEgCkEHdkECcSAKQQFxcnJyrSFbIAFBKGooAgAhBSABQcwAaigCACEGQgAhWQNAIFkiWkIBfCFZAkAgWyBaiKdBAXFFDQAgWqchAyAQLQAAQQFxBEAgA0ECdCIHIAtB8AlqaioCACIqIAhdRQ0BIAtBwAZqIANBBnRqIgQtADwiA0EERg0BIAYgByAJakHgAGooAgBNDQEgESAEKQAANwAAIBFBOGogBEE4aigAADYAACARQTBqIARBMGopAAA3AAAgEUEoaiAEQShqKQAANwAAIBFBIGogBEEgaikAADcAACARQRhqIARBGGopAAA3AAAgEUEQaiAEQRBqKQAANwAAIBFBCGogBEEIaikAADcAACALQc4CaiAEQT9qLQAAOgAAIAsgBC8APTsBzAIgC0HQAmoiAkE3aiALQaAFaiIEQTdqKQAANwAAIAJBMGogBEEwaikAADcDACACQShqIARBKGopAAA3AwAgAkEgaiAEQSBqKQAANwMAIAJBGGogBEEYaikAADcDACACQRBqIARBEGopAAA3AwAgAkEIaiAEQQhqKQAANwMAIAsgCykAoAU3A9ACIAMhAiAqIQgMAQsgA0ECdCIDIAlqQeAAaigCACIEIAVPDQAgC0HwCWogA2oqAgCMISogCygCyAIiCiEHIAsoAsACIApGBEAgC0HAAmogChC4BiALKALIAiEHCyALKALEAiIDIAdBA3RqIg8gKjgCBCAPIAQ2AgAgCyAHQQFqNgLIAiADIApBA3RqIgQqAgQhKiAEKAIAIQQCQCAKRQRAQQAhBwwBCwNAQQBBfyADIApBAWsiD0EBdiIHQQN0aiITQQRqKgIAIisgKl8iFBtBAUECIBQbICogK18bQQFqQQJJBEAgCiEHDAILIAMgCkEDdGogEykCADcCACAHIQogD0EBSw0ACwsgAyAHQQN0aiIDICo4AgQgAyAENgIACyBZQgRSDQALIAtBkANqIAtBwAJqEPYCIAsoApADQQFGDQEMAwsLIAtBoAVqIgFBN2ogC0HQAmoiA0E3aikAADcAACABQTBqIANBMGopAwA3AwAgAUEoaiADQShqKQMANwMAIAFBIGogA0EgaikDADcDACABQRhqIANBGGopAwA3AwAgAUEQaiADQRBqKQMANwMAIAFBCGogA0EIaikDADcDACALQfIJaiALQc4Cai0AADoAACALIAspA9ACNwOgBSALIAsvAcwCOwHwCQsgCygCwAJFDQEgCygCxAIQtQEMAQsgC0GgBWoiAUEIaiALQdACaiIDQQhqKQMANwMAIAFBEGogA0EQaikDADcDACABQRhqIANBGGopAwA3AwAgAUEgaiADQSBqKQMANwMAIAFBKGogA0EoaikDADcDACABQTBqIANBMGopAwA3AwAgAUE3aiADQTdqKQAANwAAIAtB8glqIAtBzgJqLQAAOgAAIAsgCykD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AwQFBgcICQoLDA0ODxAREgALIAkoAgwhAiABKAIAIgEoAgghAyABKAIAIANrQQNNBEAgASADQQQQ2gYgASgCCCEDC0EAIQAgASgCBCADakEANgAAIAEgA0EEaiIDNgIIIAIqAgAhCiABKAIAIANrQQNNBEAgASADQQQQ2gYgASgCCCEDCyABIANBBGo2AgggASgCBCADaiAKOAAADBQLIAkoAgwhACABKAIAIgIoAgghASACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACIAFBBGo2AgggAigCBCABakEBNgAAIAAgAhDwBSEADBMLIAkoAgwhAiABKAIAIgEoAgghACABKAIAIABrQQNNBEAgASAAQQQQ2gYgASgCCCEACyABIABBBGo2AgggASgCBCAAakECNgAAIAIgARDwBSIADRIgAkEMaiABEPAFIgANEiACKgIYIQogASgCACABKAIIIgBrQQNNBEAgASAAQQQQ2gYgASgCCCEACyABIABBBGo2AgggASgCBCAAaiAKOAAADBELIAkoAgwhAiABKAIAIgEoAgghACABKAIAIABrQQNNBEAgASAAQQQQ2gYgASgCCCEACyABIABBBGo2AgggASgCBCAAakEDNgAAIAIgARDwBSIADREgAkEMaiABEPAFIQAMEQsgCSgCDCECIAEoAgAiASgCCCEAIAEoAgAgAGtBA00EQCABIABBBBDaBiABKAIIIQALIAEgAEEEajYCCCABKAIEIABqQQQ2AAAgAiABEPAFIgANECACQQxqIAEQ8AUiAA0QIAJBGGogARDwBSEADBALIAkoAgwhByABKAIAIgAoAgghAyAAKAIAIANrQQNNBEAgACADQQQQ2gYgACgCCCEDCyAAIANBBGo2AgggACgCBCADakEFNgAAIAEgBxCNASIADQ8gB0HQAGooAgAhAiAHQcwAaigCACEGIAEoAgAiBSgCCCEAIAUoAgAgAGtBB00EQCAFIABBCBDaBiAFKAIIIQALIAUgAEEIajYCCCAFKAIEIABqIAKtNwAAIAJBDGwhAwNAIAMEQCADQQxrIQMgBiAFEPAFIQAgBkEMaiEGIABFDQEMEQsLIAdB3ABqKAIAIQAgB0HYAGooAgAhAyABKAIAIgQoAgghCCAEKAIAIAhrQQdNBEAgBCAIQQgQ2gYgBCgCCCEICyAE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AgAiAigCCCEGIAIoAgAgBmtBB00EQCACIAZBCBDaBiACKAIIIQYLIAIgBkEIajYCCCACKAIEIAZqIACtNwAAIABBJGwhBgNAIAYEQCABIAMQmgUiAA0NIANBEGogASgCABDwBSIADQ0gBkEkayEGIANBHGohACADQSRqIQMgACABECkiAEUNAQwNCwsgASAFQRhqEI0BIgANCyAFQfQAaigCACECIAVB8ABqKAIAIQMgASgCACIEKAIIIQAgBCgCACAAa0EHTQRAIAQgAEEIENoGIAQoAgghAAsgBCAAQQhqNgIIIAQoAgQgAGogAq03AAAgAkEYbCEGA0AgBgRAIAMgBBDwBSIADQ0gBkEYayEGIANBDGohACADQRhqIQMgACAEEPAFIgBFDQEMDQsLIAUgASgCACIBEPAFIgANCyAFQQxqIAEQ8AUhAAwLCyAJKAIMIQAgASgCACICKAIIIQMgAigCACADa0EDTQRAIAIgA0EEENoGIAIoAgghAwsgAiADQQRqNgIIIAIoAgQgA2pBCjYAACAAIAEQmgEhAAwKCyAJKAIMIQAgASgCACICKAIIIQEgAigCACABa0EDTQRAIAIgAUEEENoGIAIoAgghAQsgAigCBCABakELNgAAIAIgAUEEaiIBNgIIIABBBGoqAgAhCyAAKgIAIQogAigCACABa0EDTQRAIAIgAUEEENoGIAIoAgghAQsgAigCBCABaiAKOAAAIAIgAUEEaiIBNgIIIAIoAgAgAWtBA00EQCACIAFBBBDaBiACKAIIIQELIAIgAUEEajYCCCACKAIEIAFqIAs4AAAMCAsgCSgCDCEAIAEoAgAiAigCCCEBIAIoAgAgAWtBA00EQCACIAFBBBDaBiACKAIIIQELIAIoAgQgAWpBDDYAACACIAFBBGoiATYCCCAAQQRqKgIAIQsgACoCACEKIAIoAgAgAWtBA00EQCACIAFBBBDaBiACKAIIIQELIAIoAgQgAWogCjgAACACIAFBBGoiATYCCCACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACIAFBBGo2AgggAigCBCABaiALOAAADAcLIAkoAgwhAiABKAIAIgEoAgghACABKAIAIABrQQNNBEAgASAAQQQQ2gYgASgCCCEACyABIABBBGo2AgggASgCBCAAakENNgAAIAIgARDwBSIADQcgAioCDCEKIAEoAgAgASgCCCIAa0EDTQRAIAEgAEEEENoGIAEoAgghAAsgASAAQQRqNgIIIAEoAgQgAGogCjgAAAwGCyAJKAIMIQIgASgCACIBKAIIIQAgASgCACAAa0EDTQRAIAEgAEEEENoGIAEoAgghAAsgASAAQQRqNgIIIAEoAgQgAGpBDjYAACACIAEQ8AUiAA0GIAJBDGogARDwBSIADQYgAkEYaiABEPAFIgANBiACKgIkIQogASgCACABKAIIIgBrQQNNBEAgASAAQQQQ2gYgASgCCCEACyABIABBBGo2AgggASgCBCAAaiAKOAAADAULIAkoAgwhACABKAIAIgIoAgghASACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACKAIEIAFqQQ82AAAgAiABQQRqIgE2AgggAEEEaioCACELIAAqAgAhCiACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACKAIEIAFqIAo4AAAgAiABQQRqIgE2AgggAigCACABa0EDTQRAIAIgAUEEENoGIAIoAgghAQsgAigCBCABaiALOAAAIAIgAUEEaiIBNgIIIAAqAgghCiACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACIAFBBGo2AgggAigCBCABaiAKOAAADAQLIAkoAgwhACABKAIAIgIoAgghASACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACKAIEIAFqQRA2AAAgAiABQQRqIgE2AgggAEEEaioCACELIAAqAgAhCiACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACKAIEIAFqIAo4AAAgAiABQQRqIgE2AgggAigCACABa0EDTQRAIAIgAUEEENoGIAIoAgghAQsgAigCBCABaiALOAAAIAIgAUEEaiIBNgIIIAAqAgghCiACKAIAIAFrQQNNBEAgAiABQQQQ2gYgAigCCCEBCyACIAFBBGo2AgggAigCBCABaiAKOAAADAMLIAkoAgwhAiABKAIAIgAoAgghAyAAKAIAIANrQQNNBEAgACADQQQQ2gYgACgCCCEDCyAAIANBBGo2AgggACgCBCADakERNgAAIAIgARCaASIADQMgAioCYCEKIAEoAgAiACgCCCEBIAAoAgAgAWtBA00EQCAAIAFB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AyAKQagDaiILQShqIApBkAdqIg1BKGopAwA3AwAgC0EgaiANQSBqKQMANwMAIAtBGGogDUEYaikDADcDACALQRBqIA1BEGopAwA3AwAgC0EIaiANQQhqKQMANwMAIApBpgNqIApBjgdqLQAAOgAAIApB8AJqIg1BKGogCkHQBmoiC0EoaikDADcDACANQSBqIAtBIGopAwA3AwAgDUEYaiALQRhqKQMANwMAIA1BEGogC0EQaikDADcDACAKIAopA5AHNwOoAyAKIAovAYwHOwGkAyAKIAtBCGopAwA3A/gCIAogCikD0AY3A/ACIApB7gJqIApBzgZqLQAAOgAAIAogCi8BzAY7AewCIApBuAJqIgtBKGogCkGYBmoiDUEoaikDADcDACALQSBqIA1BIGopAwA3AwAgC0EYaiANQRhqKQMANwMAIAtBEGogDUEQaikDADcDACALQQhqIA1BCGopAwA3AwAgCiAKKQOYBjcDuAIgCkG2AmogCkGWBmotAAA6AAAgCiAKLwGUBjsBtAIgDkEYdCADQRB0ciAJQQh0ciAUciEDCyADQf8BcUECRwRAIARB+ABqIQsgGCAKKQPwAzcCACAhIAovAewDOwAAICAgCikD4AM3AgAgGEEIaiAKQfADaiIJQQhqKQMANwIAIBhBEGogCUEQaikDADcCACAYQRhqIAlBGGopAwA3AgAgIUECaiAKQe4Dai0AADoAACAgQQhqIApB6ANqKAIANgIAIAogQzgClAQgCiAaNgKQBCAKIBs6ALgEIB8gCi8B3AM7AAAgH0ECaiAKQd4Dai0AADoAACASIAopA6gDNwIAIBJBCGogCkGoA2oiCUEIaikDADcCACASQRBqIAlBEGopAwA3AgAgEkEYaiAJQRhqKQMANwIAIBJBIGogCUEgaikDADcCACASQShqIAlBKGopAwA3AgAgCiAFOgDIBCAKICg2AswEIAogYTgC0AQgHiAKLwGkAzsAACAeQQJqIApBpgNqLQAAOgAAIBEgCikD8AI3AgAgEUEIaiAKKQP4AjcCACARQRBqIApB8AJqIgVBEGopAwA3AgAgEUEYaiAFQRhqKQMANwIAIBFBIGogBUEgaikDADcCACARQShqIAVBKGopAwA3AgAgCiAGOgCEBSAKIGI4AowFIAogKTYCiAUgCiACOgDABSAdQQJqIApB7gJqLQAAOgAAIB0gCi8B7AI7AAAgCiBjOALIBSAKICo2AsQFIBBBKGogCkG4AmoiAkEoaikDADcCACAQQSBqIAJBIGopAwA3AgAgEEEYaiACQRhqKQMANwIAIBBBEGogAkEQaikDADcCACAQQQhqIAJBCGopAwA3AgAgECAKKQO4AjcCACAKIAc6APwFIBxBAmogCkG2AmotAAA6AAAgHCAKLwG0AjsAACAKIAg4AowIIAogLTgCiAggCiAuOAKECCAKIDA4AoAIIANBFXZBCHEgA0EOdkEEcSADQQd2QQJxIANBAXFycnKtIWYgE0EgaigCACEOIBNBxABqKAIAIQZCACFkA0AgZCJlQgF8IWQCQCBmIGWIp0EBcUUNACBlpyECIAstAABBAXEEQCACQQJ0IgUgCkGACGpqKgIAIgggL11FDQEgCkGQBGogAkE8bGoiAy0AOCICQQRGDQEgBiAEIAVqQeAAaigCAE0NASAKQYYCaiADQTtqLQAAOgAAIApBiAJqIgFBCGogA0EgaikAADcDACABQRBqIANBKGopAAA3AwAgAUEYaiADQTBqKQAANwMAIAogAy8AOTsBhAIgCiADKQAYNwOIAiADKgIUIUQgAygCECErIAMqAgwhRSADKgIIIUYgAyoCBCFHIAIhASAIIS8MAQsgAkECdCICIARqQeAAaigCACIHIA5PDQAgCkGACGogAmoqAgCMIQggCigCgAIiAyECIAooAvgBIANGBEAgCkH4AWogAxC4BiAKKAKAAiECCyAKKAL8ASIFIAJBA3RqIgkgCDgCBCAJIAc2AgAgCiACQQFqNgKAAiAFIANBA3RqIgIqAgQhCCACKAIAIQcCQCADRQRAQQAhAgwBCwNAQQBBfyAFIANBAWsiCUEBdiICQQN0aiINQQRqKgIAIi4gCF8iFBtBAUECIBQbIAggLl8bQQFqQQJJBEAgAyECDAILIAUgA0EDdGogDSkCADcCACACIQMgCUEBSw0ACwsgBSACQQN0aiICIAg4AgQgAiAHNgIACyBkQgRSDQALIApBqAJqIApB+AFqEPYCIAooAqgCQQFGDQEMAgsLIApBgghqAn8gG0EERgRAIApBkARqIgJBGGogCkGIAmoiA0EYaikDADcDACACQRBqIANBEGopAwA3AwAgAkEIaiADQQhqKQMANwMAIAogCikD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IAtBwANqNgLoByALIAtBpANqNgLkByALIAtBvANqNgLgByALIAtBzAVqNgLcByALIAtBqANqNgLYByAHIAIgC0G4B2pBpLLCACANQQxqKAIAEQIADAELIAsoAswFIgJBBE8NBCALQbwDaiACaiAJIAsqAqQDXToAACALQagDaiACQQJ0aiAJOAIACyAGQQRqIQYgBEEBaiIEQQRHDQALIAogCykDwAM3AgAgCkEIaiIGIAtBwANqIgJBCGoiBykDADcCACAKQRBqIhEgAkEQaiINKQMANwIAIApBGGoiEyACQRhqIhYpAwA3AgAgCkEgaiIXIAJBIGoiKykDADcCACALQd4CaiIsIBRBAmoiLS0AADoAACALIAspA6gDNwPgAiALIBQvAAA7AdwCIAsgISkDADcD6AIgCy0A6AMhAiALKAK8AyEEIAtBmAFqIBhBxAEQ5AwaIARB/wFxQQJGDQQgFCALLwHcAjsAACArIBcpAgA3AwAgFiATKQIANwMAIA0gESkCADcDACAHIAYpAgA3AwAgLSAsLQAAOgAAIAsgAjoA6AMgCyAKKQIANwPAAyAYIAtBmAFqQcQBEOQMGiALIAspA+gCNwPoBSALIAspA+ACNwPgBSAEQRV2QQhxIARBDnZBBHEgBEEHdkECcSAEQQFxcnJyrSFPIBBBIGooAgAhBiAQQcQAaigCACERQgAhTQNAIE0iTkIBfCFNAkAgTyBOiKdBAXFFDQAgTqchAiApLQAAQQFxBEAgAkECdCIHIAtB4AVqaioCACIJIAhdRQ0BIAtBwANqIAJBPGxqIgQtADgiAkEERg0BIBEgAyAHakHgAGooAgBNDQEgBSAEKQAANwAAIAVBMGogBEEwaikAADcAACAFQShqIARBKGopAAA3AAAgBUEgaiAEQSBqKQAANwAAIAVBGGogBEEYaikAADcAACAFQRBqIARBEGopAAA3AAAgBUEIaiAEQQhqKQAANwAAIAtBxgBqIARBO2otAAA6AAAgCyAELwA5OwFEIAtByABqIgFBN2ogC0HXBmooAAA2AAAgAUEwaiAqKQAANwMAIAFBKGogFSkAADcDACABQSBqIA8pAAA3AwAgAUEYaiAOKQAANwMAIAFBEGogDCkAADcDACABQQhqIBIpAAA3AwAgCyALKQCgBjcDSCACIQEgCSEIDAELIAJBAnQiAiADakHgAGooAgAiDSAGTw0AIAtB4AVqIAJqKgIAjCEJIAsoAkAiByEEIAsoAjggB0YEQCALQThqIAcQuAYgCygCQCEECyALKAI8IgIgBEEDdGoiEyAJOAIEIBMgDTYCACALIARBAWo2AkAgAiAHQQN0aiIEKgIEIQkgBCgCACENAkAgB0UEQEEAIQQMAQsDQEEAQX8gAiAHQQFrIhNBAXYiBEEDdGoiFkEEaioCACIvIAlfIhcbQQFBAiAXGyAJIC9fG0EBakECSQRAIAchBAwCCyACIAdBA3RqIBYpAgA3AgAgBCEHIBNBAUsNAAsLIAIgBEEDdGoiAiAJOAIEIAIgDTYCAAsgTUIEUg0ACyALQYgBaiALQThqEPYCIAsoAogBQQFGDQEMBQsLIAJBBEGoqcIAEMMIAAsgAkEEQZipwgAQwwgACyACIAZBrInCABDDCAALAkAgAkEERgRAIAtBoAZqIgJBN2ogC0HIAGoiA0E3aigAADYAACACQTBqIANBMGopAwA3AwAgAkEoaiADQShqKQMANwMAIAJBIGogA0EgaikDADcDACACQRhqIANBGGopAwA3AwAgAkEQaiADQRBqKQMANwMAIAJBCGogA0EIaikDADcDACALQeIFaiALQcYAai0AADoAACALIAspA0g3A6AGIAsgCy8BRDsB4AUMAQsgC0HLA2ogCykD6AI3AAAgC0HzA2ogC0HgAmoiAUEwaikDADcAACALQesDaiABQShqKQMANwAAIAtB4wNqIAFBIGopAwA3AAAgC0HbA2ogAUEYaikDADcAACALQdMDaiABQRBqKQMANwAAIAtB4gVqIAtB3gJqLQAAOgAAIAsgCykD4AI3AMMDIAsgCy8B3AI7AeAFIAtBoAZqIgFBCGogC0HAA2oiA0EIaikAADcDACABQTdqIANBN2ooAAA2AAAgAUEwaiADQTBqKQAANwMAIAFBKGogA0EoaikAADcDACABQSBqIANBIGopAAA3AwAgAUEYaiADQRhqKQAANwMAIAFBEGogA0EQaikAADcDACALIAspAMADNwOgBiACIQELIAsoAjhFDQEgCygCPBC1AQwBCyALQaAGaiICQQhqIAtByABqIgNBCGopAwA3AwAgAkEQaiADQRBqKQMANwMAIAJBGGogA0EYaikDADcDACACQSBqIANBIGopAwA3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IgBBigcgABsRAAAACyAHQZwBaigCACEDIAdBmAFqKAIAIQAgBygClAEhBCAHKAKIASEIIAcoApABIQogBygCjAEhASAHQYCAgPwDNgIwIAdCgICA/IOAgMA/NwMoIAlBCGogBkEIaikCADcDACAHIAYpAgA3A4gBIAIgASAKIAAgAyAFIAdBKGogCRCuAiAEBEAgABC1AQsgCEUNCCABELUBDAgLIAcoAiQhBCAHQYgBaiIDQRBqIAFBEGooAgA2AgAgA0EIaiABQQhqKQIANwMAIAcgASkCADcDiAEgB0EoaiIBQQhqIAZBCGopAgA3AwAgByAGKQIANwMoIAAgAyACIARB6KrAACAFIAEQLAwHCyAHQYgBaiEDIAcoAiQhASAAQeABaigCACELIABB5AFqKAIAIQQjAEHgAGsiACQAIAEqAgQhGCABKgIIIRogASoCACEZIABBADYCECAAQoCAgIDAADcDCCAAQQA2AiAgAEKAgICAwAA3AxggAEEIaiIIQQAQtAYgACgCDCAAKAIQIglBDGxqIgFBADYCCCABIBmMIhsgGpMiHTgCBCABIBiMIhg4AgAgACAJQQFqNgIQIABBADYCMCAAIBs4AiwgACAYOAIoIABBADYCQCAAIB04AjwgACAYOAI4IABBADYCUCAAIBs4AkwgACAYIBqTIh04AkggAEEoaiAAQThqIABByABqIAQgCBD3ASAaIBmSIRogACgCECIBIAAoAggiCEYEQCAAQQhqIAEQtAYgACgCCCEIIAAoAhAhAQsgACgCDCIJIAFBDGxqIgpBADYCCCAKIBs4AgQgCiAdOAIAIAAgAUEBaiIBNgIQIAEgCEYEQCAAQQhqIAgQtAYgACgCDCEJIAAoAhAhAQsgCSABQQxsaiIIQQA2AgggCCAZOAIEIAggHTgCACAAIAFBAWo2AhAgAEEANgIwIAAgGTgCLCAAIBg4AiggAEEANgJAIAAgGTgCPCAAIB04AjggAEEANgJQIAAgGjgCTCAAIBg4AkggAEEoaiAAQThqIABByABqIAQgAEEIahD3ASAAKAIQIgEgACgCCEYEQCAAQQhqIAEQtAYgACgCECEBCyAAQQhqIghBCGoiCSABQQFqNgIAIAAoAgwgAUEMbGoiAUEANgIIIAEgGjgCBCABIBg4AgAgACAENgJQIABByABqIgFBDGog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IAxBDGxqIgkpAgA3AgAgCEEIaiAJQQhqKAIANgIAIAdBKGoiCUEIaiIMIAspAwA3AwAgCUEQaiIQIARBEGoiEykDADcDACAJQRhqIg8gCCkDADcDACAJQSBqIgkgBEEgaiISKAIANgIAIAcgFCkCADcDKCASIAkoAgA2AgAgCCAPKQMANwMAIBMgECkDADcDACALIAwpAwA3AwAgByAHKQMoNwOIASAHQbgCaiIJQRBqIAFBEGooAgA2AgAgCUEIaiABQQhqKQIANwMAIAcgASkCADcDuAIgB0HoAWoiC0EIaiAGQQhqKQIANwMAIAcgBikCADcD6AEgACAJIAIgBEHoqsAAIAUgCxAsIA4gA0EMaiIDRg0GDAELCyAMIARB7JrAABDDCAALIAkgBEHMmsAAEMMIAAsgCyAEQdyawAAQwwgAC0EACyEIA0AgCARAIAdB6AFqIghBIGogBEEgaigCACIJNgIAIAhBGGogBEEYaikCACIrNwMAIAhBEGogBEEQaikCACIsNwMAIAhBCGogBEEIaikCACItNwMAIAcgBCkCACIuNwPoASAMIAk2AgAgECArNwMAIA4gLDcDACANIC03AwAgByAuNwO4AiAHQZACaiIIQRBqIAFBEGooAgA2AgAgCEEIaiABQQhqKQIANwMAIAcgASkCADcDkAIgB0GoAmoiCUEIaiAGQQhqKQIANwMAIAcgBikCADcDqAIgACAIIAIgB0G4AmpB6KrAACAFIAkQLCAMIAtBIGooAgA2AgAgECALQRhqKQIANwMAIA4gC0EQaikCADcDACANIAtBCGopAgA3AwAgB0EANgKIASAHIAspAgA3A7gCQQAhCAwBBSAHKALgASIJQQxqIRECfwNAIAcoArABIQggB0EANgKwASAKIAhBAUYNARogByAHKALYAUEBaiIENgLYASAHKALcASEIIAdBiAFqIRMgESgCAEEBayAETQRAIAggCUEQaigCAEECa08NBSAHQQA2AtgBIAcgCEEBaiIINgLcAUEAIQQLIBMgCSAEIAgQhAIgDSALQQhqKQIANwMAIA4gC0EQaikCADcDACAQIAtBGGopAgA3AwAgDCALQSBqKAIANgIAIAcoAogBIQQgB0EANgKIASAHIAspAgA3A7gCIARBAUcNAAsgAwshBEEBIQgMAQsACwALIAdB4AJqJAAL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ACAJQZgDakIANwMAIAlBoANqQgA3AwAgCUGoA2pCADcDACAJQbADakIANwMAIAlBtgNqQgA3AQAgCUHIA2pCADcDACAJQdADakIANwMAIAlB2ANqQgA3AwAgCUHgA2pCADcDACAJQegDakIANwMAIAlB8ANqQgA3AwAgCUH4A2pCADcDACAJQf4DakIANwEAIAlC////+////7//ADcD+AIgCUL////7////v/8ANwPAAyAJQcYEakIANwEAIAlBwARqQgA3AwAgCUG4BGpCADcDACAJQbAEakIANwMAIAlBqARqQgA3AwAgCUGgBGpCADcDACAJQZgEakIANwMAIAlBkARqQgA3AwAgCUGOBWpCADcBACAJQYgFakIANwMAIAlBgAVqQgA3AwAgCUH4BGpCADcDACAJQfAEakIANwMAIAlB6ARqQgA3AwAgCUHgBGpCADcDACAJQdgEakIANwMAIAlC////+////7//ADcDiAQgCUL////7////v/8ANwPQBCAJQv////v///+//wA3A5gFIAlB1gVqQgA3AQAgCUHQBWpCADcDACAJQcgFakIANwMAIAlBwAVqQgA3AwAgCUG4BWpCADcDACAJQbAFakIANwMAIAlBqAVqQgA3AwAgCUGgBWpCADcDACAJQv////v///+//wA3A+AFIAlBngZqQgA3AQAgCUGYBmpCADcDACAJQZAGakIANwMAIAlBiAZqQgA3AwAgCUGABmpCADcDACAJQfgFakIANwMAIAlB8AVqQgA3AwAgCUHoBWpCADcDACAJQv////v///+//wA3A6gGIAlB5gZqQgA3AQAgCUHgBmpCADcDACAJQdgGakIANwMAIAlB0AZqQgA3AwAgCUHIBmpCADcDACAJQcAGakIANwMAIAlBuAZqQgA3AwAgCUGwBmpCADcDACAJQv////v///+//wA3A/AGIAlBrgdqQgA3AQAgCUGoB2pCADcDACAJQaAHakIANwMAIAlBmAdqQgA3AwAgCUGQB2pCADcDACAJQYgHakIANwMAIAlBgAdqQgA3AwAgCUH4BmpCADcDACAJQv////v///+//wA3A7gHIAlB9gdqQgA3AQAgCUHwB2pCADcDACAJQegHakIANwMAIAlB4AdqQgA3AwAgCUHYB2pCADcDACAJQdAHakIANwMAIAlByAdqQgA3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L0L////7////v/8ANwPoASAvQv////v///+//wA3A6ACIC9C////+////7//ADcD2AIgL0GMA2pBADYCACAvQYQDakIANwIAIC9B/AJqQgA3AgAgL0H0AmpCADcCACAvQagDakF/NgIAIC9BmANqQgA3AwAgL0GgA2pC/////w83AwAgL0GsA2pCADcCACAvQbQDakIANwIAIC9BvANqQgA3AgAgL0HEA2pBADYCACAvQeADakF/NgIAIC9B0ANqQgA3AwAgL0HYA2pC/////w83AwAgL0HkA2pCADcCACAvQewDakIANwIAIC9B9ANqQgA3AgAgL0H8A2pBADYCACAvQv////v///+//wA3A5ADIC9C////+////7//ADcDyAMgL0GYBGpBfzYCACAvQZAEakL/////DzcDACAvQYgEakIANwMAIC9BtARqQQA2AgAgL0GsBGpCADcCACAvQaQEakIANwIAIC9BnARqQgA3AgAgL0HIBGpC/////w83AwAgL0HABGpCADcDACAvQdAEakF/NgIAIC9B7ARqQQA2AgAgL0HkBGpCADcCACAvQdwEakIANwIAIC9B1ARqQgA3AgAgL0GABWpC/////w83AwAgL0H4BGpCADcDACAvQYgFakF/NgIAIC9C////+////7//ADcDgAQgL0L////7////v/8ANwO4BCAvQv////v///+//wA3A/AEIC9BpAVqQQA2AgAgL0GcBWpCADcCACAvQZQFakIANwIAIC9BjAVqQgA3AgAgL0HABWpBfzYCACAvQbgFakL/////DzcDACAvQbAFakIANwMAIC9C////+////7//ADcDqAUgL0HcBWpBADYCACAvQdQFakIANwIAIC9BzAVqQgA3AgAgL0HEBWpCADcCACAvQfgFakF/NgIAIC9B8AVqQv////8PNwMAIC9B6AVqQgA3AwAgL0L////7////v/8ANwPgBSAvQZQGakEANgIAIC9BjAZqQgA3AgAgL0GEBmpCADcCACAvQfwFakIANwIAIC9BsAZqQX82AgAgL0GoBmpC/////w83AwAgL0GgBmpCADcDACAvQv////v///+//wA3A5gGIC9BzAZqQQA2AgAgL0HEBmpCADcCACAvQbwGakIANwIAIC9BtAZqQgA3AgAgL0HoBmpBfzYCACAvQeAGakL/////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BEAgByEGDAELIAkgACgCCCAPIgZrSwRAIABBCGogDyAJEK0GIABBEGooAgAhBgsgAEEMaigCACAGQQN0aiEDIAlBAk8EQCAJQQFrIgxBB3EhAiAJQQJrQQdPBEAgDEF4cSEIA0AgA0L////79/////8ANwIAIANBOGpC////+/f/////ADcCACADQTBqQv////v3/////wA3AgAgA0EoakL////79/////8ANwIAIANBIGpC////+/f/////ADcCACADQRhqQv////v3/////wA3AgAgA0EQakL////79/////8ANwIAIANBCGpC////+/f/////ADcCACADQUBrIQMgCEEIayIIDQALCyACBEADQCADQv////v3/////wA3AgAgA0EIaiEDIAJBAWsiAg0ACwsgBiAJakEBayEGCyAJBEAgA0L////79/////8ANwIAIAZBAWohBgsgAEEcaigCACEJCyAKIAY2AgAgCQRAIA9BAmshBiAHQQJrIQMgAEEYaigCACIMIAlBDGxqIQ4gAEEQaiEKAkACQANAAkACQCAKKAIAIgkgBksEQCAOQQxrIQ4gBkEDdCECIANBA3QhCANAIABBDGooAgAiByACaiIPKgIAIh8gDioCACIeXw0CIAMgCU8NAyAHIAhqIgdBBGogD0EEaigCADYCACAHIB84AgAgAkEIayECIAhBCGshCCADQQFrIQMgBkEBayIGIAooAgAiCUkNAAsLIAYgCUH01sEAEMMIAAsgAyAJTw0CIAcgCGoiAkEEaiAOQQRqKAIANgIAIAIgHjgCACAOQQhqIAM2AgAgA0EBayEDIAwgDkcNAQwDCwsgAyAJQZTXwQAQwwgACyADIAlBhNfBABDDCAALIABBEGooAgAhBgsgBkEBayEIAkAgBgRAIAVFDQIgAEEMaigCACEMIABBHGoiAygCACECIANBADYCACACQQxsIQMgAEEYaigCACEKIARBDGooAgAhEQJAAkACQCABQQNPBEADQCADRQ0HIANBDGshAyAKKAIEIQAgCkEMaiEKIABBAE4NAAsgESAAQf////8HcSIHSw0BDAULIAMgCmohDyAEQQhqKAIAIQkgBkEDdEEQayEEIAFBAnQhBgNAIAogD0YNBiAKIgBBDGohCiAAKAIEIgFBAE4NACARIAFB/////wdxIgdNDQUgACgC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QRhqIggpAgA3AgAgBiAEQSBqIgYoAgA2AgAgBSBbNwNAIAQgBSkDQDcCACAGIAIoAgA2AgAgCCAJKQMANwIAIAogCykDADcCACADIAcpAwA3AgBBAiEEDBELIAMpAgAhWyADIAkpAgA3AgAgBUFAayIEQSBqIgcgA0EgaiICKAIANgIAIARBGGoiBiADQRhqIggpAgA3AwAgBEEQaiILIANBEGoiCikCADcDACAEQQhqIgQgA0EIaiIDKQIANwMAIAMgCUEIaiIDKQIANwIAIAogCUEQaiIKKQIANwIAIAggCUEYaiIIKQIANwIAIAIgCUEgaiICKAIANgIAIAUgWzcDQCAJIAUpA0A3AgAgAiAHKAIANgIAIAggBikDADcCACAKIAspAwA3AgAgAyAEKQMANwIAQQMhBAwQCyADKQIAIVsgAyAEKQIANwIAIAVBQGsiAkEgaiIGIANBIGoiCigCADYCACACQRhqIgggA0EYaiIOKQIANwMAIAJBEGoiCyADQRBqIg8pAgA3AwAgAkEIaiICIANBCGoiAykCADcDACADIARBCGoiAykCADcCACAPIARBEGoiDykCADcCACAOIARBGGoiDikCADcCACAKIARBIGoiCigCADYCACAFIFs3A0AgBCAFKQNANwIAIAogBigCADYCACAOIAgpAwA3AgAgDyALKQMANwIAIAMgAikDADcCACABKAIIIQQgASABKAIANgIIIAEgBDYCACAGIAdBIGoiBCgCADYCACAIIAdBGGoiAykCADcDACALIAdBEGoiCikCADcDACACIAdBCGoiDikCADcDACAHKQIAIVsgByAJKQIANwIAIA4gCUEIaiIHKQIANwIAIAogCUEQaiIKKQIANwIAIAMgCUEYaiIDKQIANwIAIAQgCUEgaiIEKAIANgIAIAUgWzcDQCAJIAUpA0A3AgAgBCAGKAIANgIAIAMgCCkDADcCACAKIAspAwA3AgAgByACKQMANwIAC0EDCyEEIBUhFiABQQRqDA4LIAFBgICA/AM2ArABIAAgASkCEDcCACAAQQhqIAFBGGooAgA2AgAMEQsgAkEETw0HIAVBQGsiA0EgaiIHIARBIGoiBigCADYCACADQRhqIgggBEEYaiILKQIANwMAIANBEGoiDCAEQRBqIg0pAgA3AwAgA0EIaiIKIARBCGoiDikC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IQEMAQsgAkEgaiIFQQhqIAJBkAJqIgNBEGoiBCkDADcDACAFQRBqIAJBqAJqIgUpAwA3AwAgAiADQQhqIgopAwA3AyAgAigClAIhDSADIAEQxgUgAigCkAIEQCACKAKUAiEBDAELIAJBOGoiA0EIaiAEKQMANwMAIANBEGogBSkDADcDACACIAopAwA3AzggASgCBCIFRQRAIAJCgcoANwOQAiACQZACahCJCyEBDAELIAIoApQCIQ4gASAFQQFrIgQ2AgQgASABKAIAIgNBAWo2AgAgBEUEQCACQoHKADcDkAIgAkGQAmoQiQshAQwBCyADLQAAIQ8gASAFQQJrIgQ2AgQgASADQQJqNgIAIARFBEAgAkKBygA3A5ACIAJBkAJqEIkLIQEMAQsgAy0AASEQIAEgBUEDayIENgIEIAEgA0EDajYCACAERQRAIAJCgcoANwOQAiACQZACahCJCyEBDAELIAMtAAIhESABIAVBBGsiBDYCBCABIANBBGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADLQADIRIgASAFQQhrIgQ2AgQgASADQQhqNgIAIARBA00EQCACQQA6AJMCIAJBJTsAkQIgAkEANgKUAiACQQE6AJACIAJBkAJqEIkLIQEMAQsgAygABCETIAEgBUEMayIENgIEIAEgA0EMajYCACAEQQNNBEAgAkEAOgCTAiACQSU7AJECIAJBADYClAIgAkEBOgCQAiACQZACahCJCyEBDAELIAM1AAghGiABIAVBEGsiBDYCBCABIANBEGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQAMIRsgASAFQRRrIgQ2AgQgASADQRRqNgIAIARBA00EQCACQQA6AJMCIAJBJTsAkQIgAkEANgKUAiACQQE6AJACIAJBkAJqEIkLIQEMAQsgAygAECEUIAEgBUEYayIENgIEIAEgA0EYajYCACAEQQNNBEAgAkEAOgCTAiACQSU7AJECIAJBADYClAIgAkEBOgCQAiACQZACahCJCyEBDAELIAM1ABQhHCABIAVBHGsiBDYCBCABIANBHGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQAYIR0gASAFQSBrIgQ2AgQgASADQSBqNgIAIARBA00EQCACQQA6AJMCIAJBJTsAkQIgAkEANgKUAiACQQE6AJACIAJBkAJqEIkLIQEMAQsgAygAHCEVIAEgBUEkayIENgIEIAEgA0EkajYCACAEQQNNBEAgAkEAOgCTAiACQSU7AJECIAJBADYClAIgAkEBOgCQAiACQZACahCJCyEBDAELIAM1ACAhHiABIAVBKGsiBDYCBCABIANBKGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQAkIR8gASAFQSxrIgQ2AgQgASADQSxqNgIAIARBA00EQCACQQA6AJMCIAJBJTsAkQIgAkEANgKUAiACQQE6AJACIAJBkAJqEIkLIQEMAQsgAygAKCEWIAEgBUEwayIENgIEIAEgA0EwajYCACAEQQNNBEAgAkEAOgCTAiACQSU7AJECIAJBADYClAIgAkEBOgCQAiACQZACahCJCyEBDAELIAM1ACwhICABIAVBNGsiBDYCBCABIANBNGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQAwISEgASAFQThrIgQ2AgQgASADQThqNgIAIARBA00EQCACQQA6AJMCIAJBJTsAkQIgAkEANgKUAiACQQE6AJACIAJBkAJqEIkLIQEMAQsgAygANCEXIAEgBUE8ayIENgIEIAEgA0E8ajYCACAEQQNNBEAgAkEAOgCTAiACQSU7AJECIAJBADYClAIgAkEBOgCQAiACQZACahCJCyEBDAELIAM1ADghIiABIAVBQGoiBDYCBCABIANBQGs2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQA8ISMgASAFQcQAayIENgIEIAEgA0HEAGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADKABAIRggASAFQcgAayIENgIEIAEgA0HIAGo2AgAgBEEDTQRAIAJBADoAkwIgAkElOwCRAiACQQA2ApQCIAJBAToAkAIgAkGQAmoQiQshAQwBCyADNQBEISQgASAFQcwAazYCBCABIANBzABqNgIAIAM1AEghJSACIAE2AtQCIAJBBjYC0AIgAkHYAmogAkHQAmoQ1QICQAJAAkACQAJAAkACQCACLQDwAiIFQQNHBEAgBUECRgRAQQAgAkH4A2pB4LHAABDmByEBDAkLIAJB+AJqIAJB0AJqENUCIAItAJADIgRBA0YNASAEQQJGBEBBASACQfgDakHgscAAEOYHIQEMCQsgAkGYA2ogAkHQAmoQ1QIgAi0AsAMiCkEDRg0CIApBAkYEQEECIAJB+ANqQeCxwAAQ5gchAQwJCyACQbgDaiACQdACahDVAiACLQDQAyILQQNGDQMgC0ECRgRAQQMgAkH4A2pB4LHAABDmByEBDAkLIAJB2ANqIAJB0AJqENUCIAItAPADIgxBA0YNBCAMQQJGBEBBBCACQfgDakHgscAAEOYHIQEMCQsgAkGQAmogAkHQAmoQ1QICQAJAAkAgAi0AqAIiGUECaw4CAQACCyACKAKQAiEBDAoLQQUgAkH4A2pB4LHAABDmByEBDAkLIAJB1gBqIAJBqwJqLQAAOgAAIAJBtAJqIgNBAmogAkHxAmoiBkECai0AADoAACACQdYBaiACQZEDaiIHQQJqLQAAOgAAIAJBtgFqIAJBsQNqIglBAmotAAA6AAAgAkGWAWogAkHRA2oiCEECai0AADoAACACIAIvAKkCOwFUIAIgBi8AADsBtAIgAiAHLwAAOwHUASACIAkvAAA7AbQBIAIgCC8AADsBlAEgAkH2AGogAkHxA2oiBkECai0AADoAACACQfgBaiIHQQhqIAJB5AJqKQIANwMAIAdBEGogAkHsAmooAgA2AgAgAkG/AmogAkH4AmoiB0EIaikDADcAACACQccCaiAHQRBqKQMANwAAIAJBuAFqIgdBEGogAkGYA2oiCUEQaikDADcDACAHQQhqIAlBCGopAwA3AwAgAiAGLwAAOwF0IAIgAikC3AI3A/gBIAIgAikD+AI3ALcCIAIgAikDmAM3A7gBIAIoAtgCIQkgAkGYAWoiBkEQaiACQbgDaiIHQRBqKQMANwMAIAZBCGogB0EIaikDADcDACACQfgAaiIGQRBqIAJB2ANqIgdBEGopAwA3AwAgBkEIaiAHQQhqKQMANwMAIAJB2ABqIgZBEGogAkGQAmoiB0EQaikDADcDACAGQQhqIAdBCGopAwA3AwAgAiACKQO4AzcDmAEgAiACKQPYAzcDeCACIAIpA5ACNwNYIAJB2AFqIgZBF2ogA0EXaigAADYAACAGQRBqIANBEGopAQA3AwAgBkEIaiADQQhqKQEANwMAIAIgAikBtAI3A9gBIAEoAgQiBkUNBSABIAZBAWsiCDYCBCABIAEoAgAiA0EBajYCACADLQAAIgdBAk8EQEEQQQQQ9wsiAUUNByABIAc6AAEgAUECOgAADAkLIAhBBEkNByABIAZBBWs2AgQgASADQQVqNgIAIAMoAAEiAUEDTwRAIAJBAToAkAIgAiABrTcDmAIgAkGQAmpBoIvAAEGMg8AAEKwIIQEMCQsgACACKQMgNwL0ASAAIAIpAzg3ApACIABBhAJqIAJBIGoiA0EQaikDADcCACAAQfwBaiADQQhqKQMANwIAIABBmAJqIAJBOGoiA0EIaikDADcCACAAQaACaiADQRBqKQMANwIAIAJBCGoiA0EIaiIGIAJB+AFqIghBCGopAwA3AwAgA0EQaiIDIAhBEGooAgA2AgAgAiACKQP4ATcDCCAAQfgAaiACQe8BaigAADYAACAAQfEAaiACQdgBaiIIQRBqKQMANwAAIABB6QBqIAhBCGopAwA3AAAgACACKQPYATcAYSAAQf8AaiACQdYBai0AADoAACAAIAIvAdQBOwB9IABBkAFqIAJBuAFqIghBEGopAwA3AgAgAEGIAWogCEEIaikDADcCACAAIAIpA7gBNwKAASAAQZsBaiACQbYBai0AADoAACAAIAIvAbQBOwCZASAAQawBaiACQZgBaiIIQRBqKQMANwIAIABBpAFqIAhBCGopAwA3AgAgACACKQOYATcCnAEgAEG3AWogAkGWAWotAAA6AAAgACACLwGUATsAtQEgAEHIAWogAkH4AGoiCEEQaikDADcCACAAQcABaiAIQQhqKQMANwIAIAAgAikDeDcCuAEgAEHTAWogAkH2AGotAAA6AAAgACACLwF0OwDRASAAQeQBaiACQdgAaiIIQRBqKQMANwIAIABB3AFqIAhBCGopAwA3AgAgACACKQNYNwLUASAAQe8BaiACQdYAai0AADoAACAAIAIvAVQ7AO0BIAAgCTYC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IgogGSAVIBogChtdGyIKQQJqQQNwIQwgCkEBakEDcCEOIAFBIGoiDSgCACILIQogAUEYaiIIKAIAIAtGBEAgCCALEMAGIA0oAgAhCgsgAUEcaiIPKAIAIApBB3RqIghCADcDYCAIQegAakIANwMAIAggBjYCcCAIQv////v///+/fzcDWCAIQv////v///+/fzcDUCAIQv////v///+/fzcDSCAIQv////v///+/fzcDQCAIQv////v///+/fzcDOCAIQv////v///+/fzcDMCAIQv////v3//+//wA3AyggCEL////79///v/8ANwMgIAhC////+/f//7//ADcDGCAIQv////v3//+//wA3AxAgCEL////79///v/8ANwMIIAhC////+/f//7//ADcDACAIQQA6AHggCCAHOgB0IA0gCkEBajYCACAFQQhqKAIAIQYgBUEEaigCACEHIAItAAAhCiAJIBc4AkggCSAWOAJEIAkgGDgCQCAJQeAAaiIIIAMgBCAHIAYgCUFAayIDIA4gChCuBCAJQewAaiIEKAIAIQ4gCSgCaCEQIAggCSgCYCAJKAJkIAcgBiADIAwgChCuBCAEKAIAIREgCSgCaCESIAkoAmQhEyAJKAJgIRQgCCAQIA4gByAGIAMgDCAKEK4EIAQoAgAhBCAJKAJoIQYgCSgCZCEHIAkoAmAhCiAJIAEgAiAUIBMgBSALQQAQQSAJQSBqIAEgAiASIBEgBSALQQEQQSADIAEgAiAKIAcgBSALQQIQQSAIIAEgAiAGIAQgBSALQQMQQSANKAIAIgIgC00NAyAJKgJ4IRcgCSoCdCEWIAkqAnAhGCAJKgJsIRUgCSoCaCEaIAkqAmQhGSAJKAJgIQMgCSoCWCEbIAkqAlQhHCAJKgJQIR0gCSoCTCEeIAkqAkghHyAJKgJEISAgCSgCQCEEIAkqAjghISAJKgI0ISIgCSoCMCEjIAkqAiwhJCAJKgIoISUgCSoCJCEmIAkoAiAhBSAJKgIYIScgCSoCFCEoIAkqAhAhKSAJKgIMISogCSoCCCErIAkqAgQhLCAPKAIAIAtBB3RqIgIgCSgCADYCYCACQewAaiADNgIAIAJB6ABqIAQ2AgAgAkHkAGogBTYCACABQSBqIgMoAgAiAiALTQ0EIAtBB3QiBCABQRxqIgUoAgBqIgIgFzgCXCACIBs4AlggAiAhOAJUIAIgJzgCUCACIBY4AkwgAiAcOAJIIAIgIjgCRCACICg4AkAgAiAYOAI8IAIgHTgCOCACICM4AjQgAiApOAIwIAIgFTgCLCACIB44AiggAiAkOAIkIAIgKjgCICACIBo4AhwgAiAfOAIYIAIgJTgCFCACICs4AhAgAiAZOAIMIAIgIDgCCCACICY4AgQgAiAsOAIAIAMoAgAiAiALTQ0FIAUoAgAhAiAJQgA3A2ggCUIANwNgIAIgBGogCUHgAGoQngIgAUEgaigCACICIAtLDQEgCyACQZiIwgAQwwgACyABQSBqKAIAIQtD//9/fyEXQ///f/8hFkF/IQIgBEUEQEF/IQpBfyENQX8hCEP//3//IRtD//9//yEcQ///f38hHUP//39/IR5D//9//yEgQ///f/8hIUP//3//ISJD//9/fyEjQ///f38hJEP//39/ISVD//9//yEmQ///f/8hJ0P//3//IShD//9/fyEpQ///f38hKkP//39/IStD//9//yEYQ///f/8hH0P//3//IRVD//9/fyEaQ///f38hGUP//39/ISwMCQsgAygCACIKIAVBCGooAgAiDE8NByABQcQAaigCACIMIApNDQYgBUEEaigCACAKQRhsaiIIKgIUIRggCCoCECEfIAgqAgwhFSAIKgIIIRogCCoCBCEZIAgqAgAhLCABQUBrKAIAIApBDGxqIghBADoABCAIIAs2AgAgBEEBRgRAQX8hDUF/IQhD//9//yEbQ///f/8hHEP//39/IR1D//9/fyEeQ///f/8hIEP//3//ISFD//9//yEiQ///f38hI0P//39/ISRD//9/fyElQ///f/8hJkP//3//ISdD//9//yEoQ///f38hKUP//39/ISpD//9/fyErDAkLIAMoAgQiDSAFQQhqKAIAIgxPBEAgDSEKDAgLIA0gAUHEAGooAgAiDE8EQCANIQoMBwsgBUEEaigCACANQRhsaiIIKgIUISYgCCoCECEnIAgqAgwhKCAIKgIIISkgCCoCBCEqIAgqAgAhKyABQUBrKAIAIA1BDGxqIghBAToABCAIIAs2AgAgBEECRgRAQX8hCEP//3//IRtD//9//yEcQ///f38hHUP//39/IR5D//9//yEgQ///f/8hIUP//3//ISJD//9/fyEjQ///f38hJEP//39/ISUMCQsgAygCCCIIIAVBCGooAgAiDE8EQCAIIQoMCAsgCCABQcQAaigCACIMTwRAIAghCgwHCyAFQQRqKAIAIAhBGGxqIgwqAhQhICAMKgIQISEgDCoCDCEiIAwqAgghIyAMKgIEISQgDCoCACElIAFBQGsoAgAgCEEMbGoiDEECOgAEIAwgCzYCACAEQQNGBEBD//9//yEbQ///f/8hHEP//39/IR1D//9/fyEeDAkLIAMoAgwiAiAFQQhqKAIAIgxPBEAgAiEKDAgLIAIgAUHEAGooAgAiDE8EQCACIQoMBwsgBUEEaigCACACQRhsaiIDKgIAIR4gAyoCBCEdIAMqAgghFyADKgIMIRwgAyoCECEbIAMqAhQhFiABQUBrKAIAIAJBDGxqIgNBAzoABCADIAs2AgAMCAsgAUEcaigCACALQQd0aiIBKgIAIhcgASoCBCIWIBYgF2AbIhcgASoCCCIWIBYgF2AbIhcgASoCDCIWIBYgF2AbIRogAUHQAGoqAgAiFyABQdQAaioCACIWIBYgF18bIhcgAUHYAGoqAgAiFiAWIBdfGyIXIAFB3ABqKgIAIhYgFiAXXxshFyABQUBrKgIAIhYgAUHEAGoqAgAiGCAWIBhgGyIWIAFByABqKgIAIhggFiAYYBsiFiABQcwAaioCACIYIBYgGGAbIRYgAUEwaioCACIYIAFBNGoqAgAiFSAVIBhfGyIYIAFBOGoqAgAiFSAVIBhfGyIYIAFBPGoqAgAiFSAVIBhfGyEYIAFBIGoqAgAiFSABQSRqKgIAIhkgFSAZXxsiFSABQShqKgIAIhkgFSAZXxsiFSABQSxqKgIAIhkgFSAZXxshHyABQRBqKgIAIhUgAUEUaioCACIZIBUgGV8bIhUgAUEYaioCACIZIBUgGV8bIhUgAUEcaioCACIZIBUgGV8bDAgLIAogCEHIh8IAEMMIAAsgCyACQeiHwgAQwwgACyALIAJB+IfCABDDCAALIAsgAkGIiMIAEMMIAAsgCiAIQdiHwgAQwwgACyAKIAxBuIfCABDDCAALIAogDEGoh8IAEMMIAAsgGCAYQwAAAACUIBpDAAAAAJSTIhiSIjMgJiAmQwAAAACUIClDAAAAAJSTIi2SIiYgJiAzXxsiLiAgICBDAAAAAJQgI0MAAAAAlJMiMZIiICAgIC5fGyI1IBYgFkMAAAAAlCAXQwAAAACUkyIWkiIuYCEEIB8gH0MAAAAAlCAZQwAAAACUkyIfkiI0ICcgJ0MAAAAAlCAqQwAAAACUkyIykiInICcgNF8bIi8gISAhQwAAAACUICRDAAAAAJSTIjaSIiEgISAvXxsiNyAbIBtDAAAAAJQgHUMAAAAAlJMiOJIiG2AhBSAVIBVDAAAAAJQgLEMAAAAAlJMiFZIiLyAoIChDAAAAAJQgK0MAAAAAlJMiOZIiKCAoIC9fGyIwICIgIkMAAAAAlCAlQwAAAACUkyI6kiIiICIgMF8bIjsgHCAcQwAAAACUIB5DAAAAAJSTIjySIhxgIQwgGiAYkyIwICkgLZMiKSApIDBgGyIYICMgMZMiIyAYICNfGyIaIBcgFpMiLV8hDiAZIB+TIhkgKiAykyIqIBkgKl8bIhcgJCA2kyIkIBcgJF8bIjEgHSA4kyIdXyEPICwgFZMiLCArIDmTIisgKyAsYBsiFyAlIDqTIiUgFyAlXxsiMiAeIDyTIh5fIRAgASgCICIDIAEoAhhGBEAgAUEYaiADEMAGIAEoAiAhAwsgNSAuIAQbIRcgNyAbIAUbIRYgOyAcIAwbIRggGiAtIA4bIR8gMiAeIBAbIRogAUEcaigCACADQQd0aiIEQQE6AHggBCAHOgB0IAQgBjYCcCAEIAo2AmAgBCAuOAJcIAQgIDgCWCAEICY4AlQgBCAzOAJQIAQgGzgCTCAEICE4AkggBCAnOAJEIAQgNDgCQCAEIBw4AjwgBCAiOAI4IAQgKDgCNCAEIC84AjAgBCAtOAIsIAQgIzgCKCAEICk4AiQgBCAwOAIgIAQgHTgCHCAEICQ4AhggBCAqOAIUIAQgGTgCECAEIB44AgwgBCAlOAIIIAQgKzgCBCAEICw4AgAgBEHsAGogAjYCACAEQegAaiAINgIAIARB5ABqIA02AgAgASADQQFqNgIgIDEgHSAPGwshFSAAIBo4AgQgACALNgIAIABBGGogFzgCACAAQRRqIBY4AgAgAEEQaiAYOAIAIABBDGogHzgCACAAQQhqIBU4AgAgCUGAAWokAAvoHgIgfQN/IwBBoAFrIiQkACABQRxqKgIAIQ4gAUEgaioCACEPIAFBEGoqAgAhCiABKgIYIRAgASoCDCELIAEqAgAhByABKgIEIQggJCABQRRqKgIAIgwgASoCCCIJkyINOAIQICQgCiAIkyIROAIMICQgCyAHkyISOAIIICQgDyAJkyITOAIgICQgDiAIkyIUOAIcICQgECAHkyIVOAIYICQgAioCACIEIAeTIho4AiggJCACKgIEIgYgCJMiGzgCLCAkIAIqAggiBSAJkyIcOAIwAkACQAJAAkACQAJAAkAgEiAalCARIBuUkiANIByUkiIdQwAAAABfIBUgGpQgFCAblJIgEyAclJIiHkMAAAAAX3FFBEAgJCAFIAyTIhY4AkAgJCAGIAqTIhc4AjwgJCAEIAuTIhg4AjggEiAYlCARIBeUkiANIBaUkiIfQwAAAABgIBUgGJQgFCAXlJIgEyAWlJIiICAfX3ENASAkIAYgDpMiGTgCTCAkIAQgEJMiITgCSCAkIAUgD5MiIjgCUCASICGUIBEgGZSSIA0gIpSSIiMgFSAhlCAUIBmUkiATICKUkiIZXyAZQwAAAABgcQ0CICQgDyAMkyIPOAJgICQgDiAKkyIOOAJcICQgECALkyIQOAJYICRB6ABqICRBCGogJEEYaiAkQdgAaiAkQShqICRBOGogJEHIAGogHSAfIB4gGSAgICMQjQMgJCgCaEEBaw4DBAUGAwsCQAJAIAQgB1sNAEEAIQEgB0MAAIB/Ww0BIAdDAACA/1sNASAEQwAAgH9bDQEgBEMAAID/Ww0BIAcgBJOLIgpDAAAANF8NACAKIASLIgQgB4siCyAEIAteG0MAAAA0lF9FDQELAkAgBiAIWw0AQQAhASAIQwAAgH9bDQEgCEMAAID/Ww0BIAZDAACAf1sNASAGQwAAgP9bDQEgCCAGk4siBEMAAAA0Xw0AIAQgBosiBiAIiyIKIAYgCl4bQwAAADSUX0UNAQtBASEBIAUgCVsNAEEAIQEgCUMAAIB/Ww0AIAlDAACA/1sNACAFQwAAgH9bDQAgBUMAAID/Ww0AQQEhASAJIAWTiyIEQwAAADRfDQAgBCAFiyIGIAmLIgUgBSAGXRtDAAAANJRfIQELIABCADcCECAAIAE6AAwgACAJOAIIIAAgCDgCBCAAIAc4AgAMBgsCQAJAIAQgC1sNAEEAIQEgC0MAAIB/Ww0BIAtDAACA/1sNASAEQwAAgH9bDQEgBEMAAID/Ww0BIAsgBJOLIgdDAAAANF8NACAHIASLIgQgC4siCCAEIAheG0MAAAA0lF9FDQELAkAgBiAKWw0AQQAhASAKQwAAgH9bDQEgCkMAAID/Ww0BIAZDAACAf1sNASAGQwAAgP9bDQEgCiAGk4siBEMAAAA0Xw0AIAQgBosiBiAKiyIHIAYgB14bQwAAADSUX0UNAQtBASEBIAUgDFsNAEEAIQEgDEMAAIB/Ww0AIAxDAACA/1sNACAFQwAAgH9bDQAgBUMAAID/Ww0AQQEhASAMIAWTiyIEQwAAADRfDQAgBCAFiyIGIAyLIgUgBSAGXRtDAAAANJRfIQELIABCgICAgBA3AhAgACABOgAMIAAgDDgCCCAAIAo4AgQgACALOAIADAULAkACQCAEIBBbDQBBACEBIBBDAACAf1sNASAQQwAAgP9bDQEgBEMAAIB/Ww0BIARDAACA/1sNASAQIASTiyIHQwAAADRfDQAgByAEiyIEIBCLIgggBCAIXhtDAAAANJRfRQ0BCwJAIAYgDlsNAEEAIQEgDkMAAIB/Ww0BIA5DAACA/1sNASAGQwAAgH9bDQEgBkMAAID/Ww0BIA4gBpOLIgRDAAAANF8NACAEIAaLIgYgDosiByAGIAdeG0MAAAA0lF9FDQELQQEhASAFIA9bDQBBACEBIA9DAACAf1sNACAPQwAAgP9bDQAgBUMAAIB/Ww0AIAVDAACA/1sNAEEBIQEgDyAFk4siBEMAAAA0Xw0AIAQgBYsiBiAPiyIFIAUgBl0bQwAAADSUXyEBCyAAQoCAgIAgNwIQIAAgAToADCAAIA84AgggACAOOAIEIAAgEDgCAAwEC0MAAIA/IB0gEiASlCARIBGUkiANIA2UkkMAAAAAkpUiCpMhCyAJIAogDZSSIQkgCCAKIBGUkiEIAkACQCAHIBIgCpSSIgcgBFsNAEEAIQEgB0MAAIB/Ww0BIAdDAACA/1sNASAEQwAAgH9bDQEgBEMAAID/Ww0BIAcgBJOLIgxDAAAANF8NACAMIASLIgQgB4siDSAEIA1eG0MAAAA0lF9FDQELAkAgBiAIWw0AQQAhASAIQwAAgH9bDQEgCEMAAID/Ww0BIAZDAACAf1sNASAGQwAAgP9bDQEgCCAGk4siBEMAAAA0Xw0AIAQgBosiBiAIiyIMIAYgDF4bQwAAADSUX0UNAQtBASEBIAUgCVsNAEEAIQEgCUMAAIB/Ww0AIAlDAACA/1sNACAFQwAAgH9bDQAgBUMAAID/Ww0AQQEhASAJIAWTiyIEQwAAADRfDQAgBCAFiyIGIAmLIgUgBSAGXRtDAAAANJRfIQELIABCATcCECAAIAE6AAwgACAJOAIIIAAgCDgCBCAAIAc4AgAgAEEYaiALvK0gCrytQiCGhDcCAAwDC0MAAIA/IB4gFSAVlCAUIBSUkiATIBOUkkMAAAAAkpUiCpMhCyAJIAogE5SSIQkgCCAKIBSUkiEIAkACQCAHIBUgCpSSIgcgBFsNAEEAIQEgB0MAAIB/Ww0BIAdDAACA/1sNASAEQwAAgH9bDQEgBEMAAID/Ww0BIAcgBJOLIgxDAAAANF8NACAMIASLIgQgB4siDSAEIA1eG0MAAAA0lF9FDQELAkAgBiAIWw0AQQAhASAIQwAAgH9bDQEgCEMAAID/Ww0BIAZDAACAf1sNASAGQwAAgP9bDQEgCCAGk4siBEMAAAA0Xw0AIAQgBosiBiAIiyIMIAYgDF4bQwAAADSUX0UNAQtBASEBIAUgCVsNAEEAIQEgCUMAAIB/Ww0AIAlDAACA/1sNACAFQwAAgH9bDQAgBUMAAID/Ww0AQQEhASAJIAWTiyIEQwAAADRfDQAgBCAFiyIGIAmLIgUgBSAGXRtDAAAANJRfIQELIABCgYCAgCA3AhAgACABOgAMIAAgCTgCCCAAIAg4AgQgACAHOAIAIABBGGogC7ytIAq8rUIghoQ3AgAMAgtDAACAPyAQIBiUIBcgDpSSIBYgD5SSIBAgEJQgDiAOlJIgDyAPlJJDAAAAAJKVIg2TIREgDCANIA+UkiEHIAogDSAOlJIhCAJAAkAgCyAQIA2UkiIJIARbDQBBACEBIAlDAACAf1sNASAJQwAAgP9bDQEgBEMAAIB/Ww0BIARDAACA/1sNASAJIASTiyIKQwAAADRfDQAgCiAEiyIEIAmLIgsgBCALXhtDAAAANJRfRQ0BCwJAIAYgCFsNAEEAIQEgCEMAAIB/Ww0BIAhDAACA/1sNASAGQwAAgH9bDQEgBkMAAID/Ww0BIAggBpOLIgRDAAAANF8NACAEIAaLIgYgCIsiCiAGIApeG0MAAAA0lF9FDQELQQEhASAFIAdbDQBBACEBIAdDAACAf1sNACAHQwAAgP9bDQAgBUMAAIB/Ww0AIAVDAACA/1sNAEEBIQEgByAFk4siBEMAAAA0Xw0AIAQgBYsiBiAHiyIFIAUgBl0bQwAAADSUXyEBCyAAQoGAgIAQNwIQIAAgAToADCAAIAc4AgggACAIOAIEIAAgCTgCACAAQRhqIBG8rSANvK1CIIaENwIADAELAkACQCAkKgJwICQqAnQiBJIgJCoCeCIGkiIFQwAAAABbBEAgAw0BIBggGJQgFyAXlJIgFiAWlJJDAAAAAJIgHiAeIBmTlSIGIAYgECAQlCAOIA6UkiAPIA+UkkMAAAAAkpSUkyEWAkAgGiAalCAbIBuUkiAcIByUkkMAAAAAkiIEIB0gHSAfk5UiBSAFIBIgEpQgESARlJIgDSANlJJDAAAAAJKUlJMiFyAEICAgH5MiBCAEICOSIBmTlSIEIAQgFSAVlCAUIBSUkiATIBOUkkMAAAAAkpSUkyIYXUUEQCAWIBheDQEgDCAPIASUkiEJIAogDiAElJIhCCALIBAgBJSSIQdBASEBDAQLIBYgF15FBEAgDCAPIASUkiEJIAogDiAElJIhCCALIBAgBJSSIQdBASEBDAQLIAkgBSANlJIhCSAIIAUgEZSSIQggByASIAWUkiEHQQAhASAFIQQMAwsgCSAGIBOUkiEJIAggBiAUlJIhCCAHIBUgBpSSIQdBAiEBIAYhBAwCCyAkKAJsISYgJCAJIARDAACAPyAFlSIFlCIEIA2UkiAGIAWUIgYgE5SSOAKYASAkIAggBCARlJIgBiAUlJI4ApQBICQgFSAGlCAHIBIgBJSSkjgCkAEgJEGAAWohJUEAIQECQAJAICRBkAFqIgMqAgAiBSACKgIAIgdbDQAgBUMAAIB/Ww0BIAVDAACA/1sNASAHQwAAgH9bDQEgB0MAAID/Ww0BIAUgB5OLIghDAAAANF8NACAIIAeLIgcgBYsiBSAFIAddG0MAAAA0lF9FDQELAkAgA0EEaioCACIFIAJBBGoqAgAiB1sNACAFQwAAgH9bDQEgBUMAAID/Ww0BIAdDAACAf1sNASAHQwAAgP9bDQEgBSAHk4siCEMAAAA0Xw0AIAggB4siByAFiyIFIAUgB10bQwAAADSUX0UNAQtBASEBIANBCGoqAgAiBSACQQhqKgIAIgdbDQBBACEBIAVDAACAf1sNACAFQwAAgP9bDQAgB0MAAIB/Ww0AIAdDAACA/1sNAEEBIQEgBSAHk4siCEMAAAA0Xw0AIAggB4siByAFiyIFIAUgB10bQwAAADSUXyEBCyAlIAE6AAwgJSADKQIANwIAICVBCGoiASADQQhqKAIANgIAIABBCGogASkDADcCACAAICQpA4ABNwIAIABBIGogBjgCACAAQRxqIAQ4AgAgAEEYakMAAIA/IASTIAaTOAIAIABBFGogJjYCACAAQQI2AhAMAgsgAEEDNgIQIABBAToADCAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIADAELIABBATYCECAAQQE6AAwgACAJOAIIIAAgCDgCBCAAIAc4AgAgAEEUaiABNgIAIABBGGpDAACAPyAEk7ytIAS8rUIghoQ3AgALICRBoAFqJAAL2h4DCn8afQN+IwBBsANrIgUkACAAKgKYASEgIABBQGtBADYCACAAQShqQQA2AgAgBUEBOgBPAkACQAJAAkACQAJAAkACQCACQSRqKAIAIggEQCAIQf////8BSw0DIAhBAnQiBkEEEPcLIgcNAQwICyAFQQA2AlggBUKAgICAwAA3A1AgBSAINgJoIAVCgICAgMAANwNgIAVBOGoiBkEAOgAEIAZBfzYCAEEEIQcMAQsgBUEANgJYIAUgBzYCVCAFIAg2AlAgCEHVqtUqSw0BIAhBGGwiB0EEEPcLIgZFDQIgBSAGNgJkIAUgCDYCYAJAIAhBAkkNACAIQQFrIgdBA3EhCSAIQQJrQQNPBEAgB0F8cSEHA0AgBkL////7////v383AhAgBkL////79///v383AgggBkL////79///v/8ANwIAIAZB2ABqQv////v///+/fzcCACAGQdAAakL////79///v383AgAgBkHIAGpC////+/f//7//ADcCACAGQUBrQv////v///+/fzcCACAGQThqQv////v3//+/fzcCACAGQTBqQv////v3//+//wA3AgAgBkEoakL////7////v383AgAgBkEgakL////79///v383AgAgBkEYakL////79///v/8ANwIAIAZB4ABqIQYgB0EEayIHDQALCyAJRQ0AA0AgBkL////7////v383AhAgBkL////79///v383AgggBkL////79///v/8ANwIAIAZBGGohBiAJQQFrIgkNAAsLIAZC////+////79/NwIQIAZC////+/f//79/NwIIIAZC////+/f//7//ADcCACAFIAg2AmggAkEkaigCACEJIAVB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ACAFLQAMIQMgBSgCCCEGIABBKGoiAigCACIHIAAoAiBGBEAgAEEgaiAHEMAGIAIoAgAhBwsgAEEkaiIJKAIAIAdBB3RqIAVB8ABqQeAAEOQMIgBBADoAeCAAIAM6AHQgACAGNgJwIABCfzcDaCAAQoGAgIBwNwNgIAIgB0EBajYCACAFQQA6AAQgBUEANgIAIAVB0AJqIgAgASAFQc8AaiAFKAJUIAUoAlggBUHgAGogBSgCACAFLQAEICAQUyAFQdgBaiIDQRBqIAVB5AJqKQIAIik3AwAgA0EIaiAFQdwCaikCACIqNwMAIAUgBSkC1AIiKzcD2AEgAUEQaiApNwIAIAFBCGogKjcCACABICs3AgAgAEEQaiApNwMAIABBCGogKjcDACAFQagDakL////7////v383AwAgBUGgA2pC////+/f//79/NwMAIAVBkANqQv////v///+/fzcDACAFQYgDakL////79///v383AwAgAEEoakL////7////v383AwAgBUHwAmpC////+/f//79/NwMAIAUgKzcD0AIgBUL////79///v/8ANwOYAyAFQv////v3//+//wA3A4ADIAVC////+/f//7//ADcD6AIgBUHwAWogABC1BCACKAIABEAgCSgCACAFQfABakHgABDkDBogBSgCYARAIAUoAmQQtQELIAUoAlAEQCAFKAJUELUBCyAFQbADaiQADwtBAEEAQcjVwAAQwwgACyAGQQRByO/DACgCACIAQYoHIAAbEQAAAAv3GAMEfBp/AX4jAEHABGsiCiQAIApBCGpBAEGgARDjDBogCkGoAWpBAEGgARDjDBogCkHIAmpBAEGgARDjDBogCkHoA2pBAEHQABDjDBogAkEDa0EYbSISIQxBzJfDACgCACIOIQkgEkECdEHcl8MAaiEIIBJBaGwgAmohCwNAIAcgCU8hDSAHIAcgCUlqIQIgCkEIaiAHQQN0aiAMQQBIBHxEAAAAAAAAAAAFIAgoAgC3CzkDACAIQQRqIQggDEEBaiEMIA0gCSACIgdJckUNAAtBACEJA0AgCSAOSSECIApByAJqIAlBA3RqIAArAwAgCkEIaiAJQQN0aisDAKJEAAAAAAAAAACgOQMAIAkgDkkEQCAOIAIgCWoiCU8NAQsLRAAAAAAAAPB/RAAAAAAAAOB/IAtBlwhrIgJB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GZQgFyAYlJMiEiASkiISlJOSIBiTOAIAIA0gFSAalCAWIBKUIBMgFJSTkiAZkzgCACALIBOMOAKgAiALIBaMOAKkAiALIBUgEpQgFyAUlCAWIBqUk5IgG5M4ArACIAJBBGoqAgAiFyADKgIAIhuUIAIqAgAiEyADQQRqKgIAIhmUkyISIBKSIRYgByoCACIUIBmUIBcgA0EIaioCACIYlJMiEiASkiEaIAsgGCACKgIMIhUgFpQgFyAalCATIBMgGJQgFCAblJMiEiASkiISlJOSkow4AsgCIAsgGSAVIBKUIBMgFpQgFCAalJOSkow4AsQCIAsgGyAVIBqUIBQgEpQgFyAWlJOSkow4AsACIAtB6AFqIAEgDiALQcACaiAMIAQgBSAIIAkQWSALLQCcAiIBQQVHBEAgC0HgAWogC0HoAWoiAkEMaigCADYCACALQdABaiACQRhqKAIANgIAIAtBwAFqIAJBJGooAgA2AgAgC0GwAWogAkEwaigCADYCACALIAspAuwBNwPYASALIAspA/gBNwPIASALIAspAoQCNwO4ASALIAspA5ACNwOoASALKgLoASEIIAFBBEcEQCALQZABaiALQeABaigCADYCACALQaABaiALQdABaigCADYCACALQfAAaiALQcABaigCADYCACALQYABaiALQbABaigCADYCACALIAspA9gBNwOIASALIAspA8gBNwOYASALIAspA7gBNwNoIAsgCykDqAE3A3gLIAAgCDgCACAAIAspA5gBNwIEIABBDGogC0GgAWooAgA2AgAgACALKQOIATcCECAAQRhqIAtBkAFqKAIANgIAIAAgCykDeDcCHCAAQSRqIAtBgAFqKAIANgIAIAAgCykDaDcCKCAAQTBqIAtB8ABqKAIANgIAIAAgAToANAwECyAAQQU6ADQMAwsgC0EgaiAEIA8RAAAgCygCJCEOIAsoAiAhDyALQRhqIAYgEBEAAAJAIA8EQCALKAIYIg0NAQsgC0EQaiAEIAUoAqwBEQAAIAsoAhAiDQRAIAAgASACIAMgDSALKAIUIAYgByAIIAkQKgwECyALQQhqIAYgBygCrAERAAAgCygCCCIOBEAgCygCDCENIwBB8ABrIgwkACAMQUBrIhBBCGoiBiACQQhqIgcpAgA3AwAgEEEYaiIPIAJBGGooAgA2AgAgBiAG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EGogBikDADcDACACQQhqIAUpAwA3AwAgAkEgaiADKQMANwMAIAlB6ABqIA0pAwA3AwAgCSAJKQOoAzcDQCAJIAkpA5ADNwNYIAlB+ABqIAQpAwA3AwAgCUGAAWogDikDADcDACAJIAkpA/gCNwNwIAlBmAFqIBIpAwA3AwAgCUGQAWogESkDADcDACAJIAkpA+ACNwOIASAJQYAEaiACELUEIAFBIGoiAigCACIDIApNDQQgCkEHdCIEIAFBHGoiAygCAGogCUGABGpB4AAQ5AwaIAIoAgAiAiAKTQ0FIAMoAgAhAiAJIAg4AkwgCSAIOAJIIAkgCDgCRCAJIAg4AkAgAiAEaiAJQUBrEJ4CIAFBIGooAgAiAiAKSw0BIAogAkG41cAAEMMIAAsgAUEgaigCACEPQ///f38hGkP//3//IRtBfyENIARFBEBBfyEKQX8hC0F/IQxD//9//yEWQ///f/8hHEP//39/IR1D//9/fyEeQ///f/8hH0P//3//ISBD//9//yEhQ///f38hIkP//39/ISND//9/fyEkQ///f/8hJUP//3//ISZD//9//yEnQ///f38hKEP//39/ISlD//9/fyEqQ///f/8hGUP//3//IStD//9//yEVQ///f38hF0P//39/IRhD//9/fyEsDAkLIAVBCGooAgAiAiADKAIAIgpNDQcgBUEEaigCACAKQRhsaiICKgIUIRkgAioCECErIAIqAgwhFSACKgIIIRcgAioCBCEYIAIqAgAhLCAJQRhqIgJBADoABCACIA82AgAgCiABQcQAaigCACICTw0GIAkoAhghAiABQUBrKAIAIApBBHRqIgsgCS0AHDoABCALIAI2AgAgBEEBRgRAQX8hC0F/IQxD//9//yEWQ///f/8hHEP//39/IR1D//9/fyEeQ///f/8hH0P//3//ISBD//9//yEhQ///f38hIkP//39/ISND//9/fyEkQ///f/8hJUP//3//ISZD//9//yEnQ///f38hKEP//39/ISlD//9/fyEqDAkLIAVBCGooAgAiAiADKAIEIgtNBEAgCyEKDAgLIAVBBGooAgAgC0EYbGoiAioCFCElIAIqAhAhJiACKgIMIScgAioCCCEoIAIqAgQhKSACKgIAISogCUEQaiICQQE6AAQgAiAPNgIAIAFBxABqKAIAIgIgAygCBCIMTQRAIAwhCgwHCyAJKAIQIQIgAUFAaygCACAMQQR0aiIMIAktABQ6AAQgDCACNgIAIARBAkYEQEF/IQxD//9//yEWQ///f/8hHEP//39/IR1D//9/fyEeQ///f/8hH0P//3//ISBD//9//yEhQ///f38hIkP//39/ISND//9/fyEkDAkLIAVBCGooAgAiAiADKAIIIgxNBEAgDCEKDAgLIAVBBGooAgAgDEEYbGoiAioCFCEfIAIqAhAhICACKgIMISEgAioCCCEiIAIqAgQhIyACKgIAISQgCUEIaiICQQI6AAQgAiAPNgIAIAFBxABqKAIAIgIgAygCCCIOTQRAIA4hCgwHCyAJKAIIIQIgAUFAaygCACAOQQR0aiIOIAktAAw6AAQgDiACNgIAIARBA0YEQEP//3//IRZD//9//yEcQ///f38hHUP//39/IR4MCQsgBUEIaigCACICIAMoAgwiDU0EQCANIQoMCAsgBUEEaigCACANQRhsaiICKgIUIRsgAioCECEWIAIqAgwhHCACKgIIIRogAioCBCEdIAIqAgAhHiAJQQM6AAQgCSAPNgIAIAFBxABqKAIAIgIgAygCDCIDTQRAIAMhCgwHCyAJKAIAIQIgAUFAaygCACADQQR0aiIDIAktAAQ6AAQgAyACNgIADAgLIABBBGogAUEcaigCACAKQQd0ahDFAyAAIAo2AgAMCAsgCiAMQejUwAAQwwgACyAKIAJBiNXAABDDCAALIAogA0GY1cAAEMMIAAsgCiACQajVwAAQwwgACyAKIAxB+NTAABDDCAALIAogAkHY1MAAEMMIAAsgCiACQcjUwAAQwwgACyAJIBs4ApwCIAkgFjgCmAIgCSAcOAKUAiAJIBo4ApACIAkgHTgCjAIgCSAeOAKIAiAJIB84AoQCIAkgIDgCgAIgCSAhOAL8ASAJICI4AvgBIAkgIzgC9AEgCSAkOALwASAJICU4AuwBIAkgJjgC6AEgCSAnOALkASAJICg4AuABIAkgKTgC3AEgCSAqOALYASAJIBk4AtQBIAkgKzgC0AEgCSAVOALMASAJIBc4AsgBIAkgGDgCxAEgCSAsOALAASAJQUBrIgIgCUHAAWoiAxC1BCAJQbQBaiAHOgAAIAlBrAFqIA02AgAgCUGoAWogDDYCACAJQaQBaiALNgIAIAlBAToAuAEgCSAGNgKwASAJIAo2AqABIAkgCDgCzAEgCSAIOALIASAJIAg4AsQBIAkgCDgCwAEgAiADEJ4CIAlBgARqIAIQxQMgAyACQYABEOQMGiABKAIgIgogASgCGEYEQCABQRhqIAoQwAYgASgCICEKCyABQRxqKAIAIApBB3RqIAlBwAFqQYABEOQMGiABIApBAWo2AiAgAEEUaiAJQZAEaikDADcCACAAQQxqIAlBiARqKQMANwIAIAAgCSkDgAQ3AgQgACAPNgIACyAJQeAEaiQAC6cXAyp/CH0DfiMAQfADayIDJAACQAJAAkACQCABQeQAaigCAEUEQCADQQA6ADggAyACNgI0IAMgAioCCCItOAIsIAMgLTgCKCADIC04AiQgAyAtOAIgIAMgAioCBCItOAIcIAMgLTgCGCADIC04AhQgAyAtOAIQIAMgAioCACItOAIMIAMgLTgCCCADIC04AgQgAyAtOAIAIAMgATYCMCABQSBqKAIAIhVFDQIgA0EANgJQIANCgICAgMAANwNIIANByABqIgVBABC4BiADKAJMIAMoAlAiBEEDdGpCgICAgPD///9+NwIAIAMgBEEBajYCUCADQfAAaiAFEPYCIAMoAnBBAUcEQEEEIRAMAgsgAUFAaygCACETIAFBxABqKAIAIREgAUEcaigCACEdIANByANqIgVBA2ohFyADQaACaiIEQdAAaiEMIANB1AJqIQ0gBEEYaiEOIANBzAFqIQ8gBUENaiEYIANBkANqIgVBGGohGSAFQQxqIRpD//9/fyEtIAFBzABqIR4gAUHYAGohHyABQdwAaiEgQQQhEANAIC0gAyoCeIxfDQIgAygCdCIFIBVJBEAgHSAFQQd0aiIKLQB4QQFxIgUEQCATIAooAmAiBEEMbGpBACAEIBFJGyIEQQhqQQAgBBshISATIApB7ABqKAIAIgRBDGxqQQAgBCARSRsiBEEIakEAIAQbISIgEyAKQegAaigCACIEQQxsakEAIAQgEUkbIgRBCGpBACAEGyEjIBMgCkHkAGooAgAiBEEMbGpBACAEIBFJGyIEQQhqQQAgBBshGwsgA0HwAWogCiADEPQBIAMqAvABIC1dIiStITYgAyoC/AEhLiADKgL4ASEwIAMqAvQBITECfyAFBEAgAyAiNgKMAiADICM2AogCIAMgGzYChAIgAyAhNgKAAkIA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IB2UkyIUIBSSIhSUk5IgHZM4AgAgCiAWIBiUIBogFJQgGSAblJOSIBWTOAIAIAsgGYw4AiAgCyAajDgCJCALIBYgFJQgHCAblCAaIBiUk5IgF5M4AjAgCyABIAkgBiAFIAMgBCAHEDkCQCALKAIAQQFGBEAgACALKQMQNwIEIAAgCykCBDcCECAAQQE2AgAgAEEMaiALQRhqKAIANgIAIABBGGogC0EMaigCADYCAAwBCyAAIAspAwA3AgAgAEEYaiALQRhqKAIANgIAIABBEGogC0EQaikDADcCACAAQQhqIAtBCGopAwA3AgALIAtBQGskAAwBCyAAQQM2AgALIAhBwAJqJAALwCECDX0VfyMAQbABayIRJAAgASgCAEH/////B3G+IgIgAUEEaiIQKAIAQf////8Hcb4iAyACIANgGyICIAFBCGoiEigCAEH/////B3G+IgMgAiADYBsiAiABKAIMQf////8Hcb4iAyACIANgGyICIAFBEGoiFCgCAEH/////B3G+IgMgAiADYBsiAiABQRRqIhMoAgBB/////wdxviIDIAIgA2AbIgIgASgCGEH/////B3G+IgMgAiADYBsiAiABQRxqIg8oAgBB/////wdxviIDIAIgA2AbIgIgAUEgaiIVKAIAQf////8Hcb4iAyACIANgGyIIQwAAAABcBEAgASABKgIAIAiVOAIAIAEgASoCDCAIlTgCDCABIAEqAhggCJU4AhggECAQKgIAIAiVOAIAIBIgEioCACAIlTgCACAUIBQqAgAgCJU4AgAgEyATKgIAIAiVOAIAIA8gDyoCACAIlTgCACAVIBUqAgAgCJU4AgALIBFB0ABqIhNBIGogAUEgaigCADYCACATQRhqIAFBGGopAgA3AwAgE0EQaiABQRBqKQIANwMAIBNBCGogAUEIaikCADcDACARIAEpAgA3A1AgEUH4AGohG0EAIQEjAEEQayIZJAAgGUIANwMIIBNBJGohHSATQRRqIR4gGUEQaiEgQQEhFANAIAFBAnQiFiATaiABQQxsaiIQQQRqIhVBAiABayIcIBUgHBDUAUMAAAAAkiIFEJMBIgQgBIwgFSoCACICQwAAAABgIhIbIQMgFSACIAOSOAIAAkAgBSAEIAIgAowgEhuUkiICIAKSIgJDAAAAAFsEQCAWIBlqIAM4AgAMAQsgEEEQ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IA1cIQZB/////wcCfyAHi0MAAABPXQRAIAeoDAELQYCAgIB4C0GAgICAeCACGyAHQ////05eGyECIAcgB1whHkMAAMB/QwAAgD8gEJggECAQXBsiB0MAAADPYCEhQQAgBSAGGyEFQQAgAiAeGyEGQQBB/////wcCfyAJi0MAAABPXQRAIAmoDAELQYCAgIB4C0GAgICAeCADGyAJQ////05eGyAJIAlcGyEmQQBB/////wcCfyAHi0MAAABPXQRAIAeoDAELQYCAgIB4C0GAgICAeCAhGyAHQ////05eGyAHIAdcGyEnIARBEGohHiAEQQxqISEgBEEwaiEiA0ACfSAQQwAAAABeRQRAQ///f38gEEMAAAAAXUUNARogBCoCKEMAAIA/IB4oAgCzQwAAgL+SlSAGspRDAAAAv5KUIBOTIBCVDAELIAQqAihDAACAPyAeKAIAs0MAAIC/kpUgBkEBarKUQwAAAL+SlCATkyAQlQsiByAaKgIAIg1eIA0CfSAOQwAAAABeRQRAQ///f38gDkMAAAAAXUUNARogIioCAEMAAIA/ICEoAgCzQwAAgL+SlSAFspRDAAAAv5KUIAuTIA6VDAELICIqAgBDAACAPyAhKAIAs0MAAIC/kpUgBUEBarKUQwAAAL+SlCALkyAOlQsiCV1xDQIgJkEAIAcgCWAbQQAgCUMAAAAAYBsiASAnQQAgByAJXxtBACAHQwAAAABgGyICckUNAiACIB1qIh0gAiAbaiIbIAJBAEobIiNBAEggICAjTHIhJAJAIB8gASAcaiIcIAEgCGoiCCABQQBKGyIlSiAlQQBOcUUEQCAkDQQMAQsgAUUNACAbIB0gGyAdShshKCAbIQMDQCADIChGDQEgGkHYAGogJSADEJkBISkgA0EBaiEDIClFDQALIABBBToANAwFCyABIAVqIQUgAiAGaiEGICQNACACRQ0AIAggHCAIIBxKGyEBIAghAwNAIAEgA0YNASAaQdgAaiADICMQmQEhAiADQQFqIQMgAkUNAAsLIABBBToANAwDCyAAIBopAyA3AgAgAEEwaiAaQSBqIgFBMGopAwA3AgAgAEEoaiABQShqKQMANwIAIABBIGogAUEgaikDADcCACAAQRhqIAFBGGopAwA3AgAgAEEQaiABQRBqKQMANwIAIABBCGogAUEIaikDADcCAAwC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ahD0CAwECyAAQQI2AhgMBgsgAEECNgIYDAULIBJB2ABqIhNBOGogEkEYaiIJQThqKQMANwMAIBNBMGogCUEwaikDADcDACATQShqIAlBKGopAwA3AwAgE0EgaiAJQSBqKQMANwMAIBNBGGogCUEYaikDADcDACATQRBqIAlBEGopAwA3AwAgE0EIaiAJQQhqKQMANwMAIBIgEikDGDcDWAwCCyASQfABaiAJQThqKAIANgIAIBJB6AFqIAlBMGopAgA3AwAgEkHYAWoiF0EIaiAJQShqKQIANwMAIBIgCSkCIDcD2AEgEkGgA2oiFUEIaiAJQcABaigCADYCACASIAlBuAFqKQIANwOgAyASQZgCaiIUQQhqIAlB4ABqKAIANgIAIBIgCSkCWDcDmAIgEkGYAWoiE0EIaiAJQewAaigCADYCACASIAlB5ABqKQIANwOYASASQdACaiAXIBUgFCATEIYICyASQdgAaiITQThqIBJB0AJqIglBOGopAwA3AwAgE0EwaiAJQTBqKQMANwMAIBNBKGogCUEoaikDADcDACATQSBqIAlBIGopAwA3AwAgE0EYaiAJQRhqKQMANwMAIBNBEGogCUEQaikDADcDACATQQhqIAlBCGopAwA3AwAgEiASKQPQAjcDWAsCQAJAAkAgCgRAIApBwAJqLQAADQEgEkHwAWogCkHUAGooAgA2AgAgEkHoAWogCkHMAGopAgA3AwAgEkHgAWogCkHEAGopAgA3AwAgEiAKQTxqKQIANwPYASASQdACaiASQdgBahD0CAwCCyASQZgBaiIKQThqIBJBGGoiCUE4aikDADcDACAKQTBqIAlBMGopAwA3AwAgCkEoaiAJQShqKQMANwMAIApBIGogCUEgaikDADcDACAKQRhqIAlBGGopAwA3AwAgCkEQaiAJQRBqKQMANwMAIApBCGogCUEIaikDADcDACASIBIpAxg3A5gBDAILIBJB8AFqIApBOGooAgA2AgAgEkHoAWogCkEwaikCADcDACASQdgBaiIVQQhqIApBKGopAgA3AwAgEiAKKQIgNwPYASASQZADaiIUQQhqIApBwAFqKAIANgIAIBIgCkG4AWopAgA3A5ADIBJBoANqIhNBCGogCkHgAGooAgA2AgAgEiAKKQJYNwOgAyASQZgCaiIJQQhqIApB7ABqKAIANgIA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JAAgAEHYAGooAgAhCSAAQdwAaigCACEGIABBOGpBADYCACAAQSBqQQA2AgAgA0EBOgAPIAZBDGwhCAJAAkACQCAGBEACQCAGQQJ0IgJBBBD3CyIBBEAgA0EANgIYIAMgATYCFCADIAY2AhAgCEH8////A0sNAyAGQRhsIgRBAEgNAyAIQf3///8DSUECdCECIAQEfyAEIAIQ9wsFIAILIgFFDQEgAyABNgIkIAMgBjYCIAJAIAhBDUkNACAGQQFrIgJBA3EhBCAGQQJrQQNPBEAgAkF8cSEFA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFB2ABqQv////v///+/fzcCACABQdAAakL////79///v383AgAgAUHIAGpC////+/f//7//ADcCACABQUBrQv////v///+/fzcCACABQThqQv////v3//+/fzcCACABQTBqQv////v3//+//wA3AgAgAUEoakL////7////v383AgAgAUEgakL////79///v383AgAgAUEYakL////79///v/8ANwIAIAFB4ABqIQEgBUEEayIFDQALCyAERQ0AA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFBGGohASAEQQFrIgQNAAsLIAFC////+////79/NwIQIAFC////+/f//79/NwIIIAFC////+/f//7//ADcCACADIAY2AiggCEH5////B0kiAkUNAyAIIAJBAnQiARD3CyICRQ0EIAIhAQJAIAhBDUkNACAGQQFrIgdBA3EhBCAGQQJrQQNPBEAgB0F8cSEFA0AgAUJ/NwIIIAFBADoABCABQX82AgAgAUEsakF/NgIAIAFBKGpBADoAACABQSBqQn83AgAgAUEcakEAOgAAIAFBFGpCfzcCACABQRBqQQA6AAAgAUEwaiEBIAVBBGsiBQ0ACwsgBEUNAANAIAFBfzYCCCABQQA6AAQgAUF/NgIAIAFBDGohASAEQQFrIgQNAAsLIAFBfzYCCCABQQA6AAQgAUF/NgIADAULIAJBBEHI78MAKAIAIgBBigcgABsRAAAACyAEIAJByO/DACgCACIAQYoHIAAbEQAAAAsgA0EANgIYIANCgICAgMAANwMQIANBADYCKCADQoCAgIDAADcDIEEEIQIMAgsQoAoACyAIIAFByO/DACgCACIAQYoHIAAbEQAAAAsgACgCPARAIABBQGsoAgAQtQELIAAgBjYCPCAAQcQAaiIMIAY2AgAgAEFAayINIAI2AgACQAJAAkAgBgR/IAggCWohDiAAQdAAaiEPIABBzABqIRAgAEE8aiERQQAhBANAAkACQAJAIAkoAgAiASAPKAIAIgJJBEAgCSgCBCIHIAJPDQEgCSgCCCIFIAJPDQIgBEEBaiEIIBAoAgAiAiABQQxsaiIBKgIEIRQgAiAFQQxsaiIFKgIAIRcgAiAHQQxsaiICKgIAIRggAioCCCIVIAEqAggiFl4hByAFKgIIIhMgEyAVIBUgFiAHGyAWIBZcGyIZIBMgGV4bIBkgGVwbIRkgFiAWIBUgBxsgFSAVXBsiFSAVIBMgEyAVXhsgEyATXBshGiACKgIEIhUgFF4hAiAFKgIEIhMgEyAVIBUgFCACGyAUIBRcGyIWIBMgFl4bIBYgFlwbIRYgFCAUIBUgAhsgFSAVXBsiFCAUIBMgEyAUXhsgEyATXBshFSABKgIAIhQgGF0hAiAXIBcgGCAYIBQgAhsgFCAUXBsiEyATIBddGyATIBNcGyETIBQgFCAYIAIbIBggGFwbIhQgFCAXIBQgF10bIBcgF1wbIRcgBCAGSQ0DIAAoAjwgBiICayAIIAJrIgdJBEAgESAGIAcQrgYgDCgCACECCyANKAIAIAJBDGxqIQEgB0ECTwRAIAQgBmsiBUEDcSEKIAQgBkF/c2pBA08EQCAFQXxxIQUDQCABQn83AgggAUEAOgAEIAFBfzYCACABQSxqQX82AgAgAUEoakEAOgAAIAFBIGpCfzcCACABQRxqQQA6AAAgAUEUakJ/NwIAIAFBEGpBADoAACABQTBqIQEgBUEEayIFDQALCyAKBEAgCyAGa0EDcSEFA0AgAUF/NgIIIAFBADoABCABQX82AgAgAUEMaiEBIAVBAWsiBQ0ACwsgAiAHakEBayECCyAGIAhHBEAgAUF/NgIIIAFBADoABCABQX82AgAgAkEBaiECCyAMIAIiBjYCACADAn8gCCADKAIoIgcgBEsNABogCCAHIgJrIQogCiADKAIgIAJrSwRAIANBIGogByAKELAGIAMoAighAgsgAygCJCACQRhsaiEBIApBAk8EQCAEIAdrIgVBA3EhEiAEIAdBf3NqQQNPBEAgBUF8cSEFA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFB2ABqQv////v///+/fzcCACABQdAAakL////79///v383AgAgAUHIAGpC////+/f//7//ADcCACABQUBrQv////v///+/fzcCACABQThqQv////v3//+/fzcCACABQTBqQv////v3//+//wA3AgAgAUEoakL////7////v383AgAgAUEgakL////79///v383AgAgAUEYakL////79///v/8ANwIAIAFB4ABqIQEgBUEEayIFDQALCyASBEAgCyAHa0EDcSEFA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFBGGohASAFQQFrIgUNAAsLIAIgCmpBAWshAgsgAiAHIAhGDQAaIAFC////+////79/NwIQIAFC////+/f//79/NwIIIAFC////+/f//7//ADcCACACQQFqCzYCKAwDCyABIAJB8OPCABDDCAALIAcgAkGA5MIAEMMIAAsgBSACQZDkwgAQwwgACyAEIAZPDQIgDSgCACAEQQxsaiAENgIIIAMoAigiAiAETQ0DIAlBDGohCSADKAIkIARBGGxqIgIgGTgCFCACIBY4AhAgAiATOAIMIAIgGjgCCCACIBU4AgQgAiAXOAIAIAMoAhgiASADKAIQRgRAIANBEGogARC2BiADKAIYIQELIAMoAhQgAUECdGogBDYCACADIAFBAWo2AhggC0EBaiELIAghBCAJIA5HDQALIABBIGooAgAFQQALIQQgBCAAQRhqIgIoAgBGBEAgAiAEEMAGIABBIGooAgAhBAsgAEEcaiIBKAIAIARBB3RqIgJBATYCYCACQv////v///+/fzcDWCACQv////v///+/fzcDUCACQv////v///+/fzcDSCACQv////v///+/fzcDQCACQv////v///+/fzcDOCACQv////v///+/fzcDMCACQv////v3//+//wA3AyggAkL////79///v/8ANwMgIAJC////+/f//7//ADcDGCACQv////v3//+//wA3AxAgAkL////79///v/8ANwMIIAJC////+/f//7//ADcDACACQn83AmQgAkEAOgB0IAJBADoAeCACQewAakJ/NwIAIABBIGoiAiAEQQFqNgIAIANBMGogACADQQ9qIAMoAhQiBCADKAIYIANBIGpBAEEAEEEgA0E4aioCACEXIANBPGoqAgAhFCADQUBrKgIAIRggA0HEAGoqAgAhEyADKgI0IRUgACADQcgAaioCACIWOAIUIAAgEzgCECAAIBg4AgwgACAUOAIIIAAgFzgCBCAAIBU4AgAgAigCAEUNAiABKAIAIgBB////ezYCXCAAQv////v///+/fzcCVCAAIBY4AlAgAEH///97NgJMIABC////+////79/NwJEIAAgEzgCQCAAQf///3s2AjwgAEL////7////v383AjQgACAYOAIwIABB////+wc2AiwgAEL////79///v/8ANwIkIAAgFDgCICAAQf////sHNgIcIABC////+/f//7//ADcCFCAAIBc4AhAgAEH////7BzYCDCAAQv////v3//+//wA3AgQgACAVOAIAIAMoAiAEQCADKAIkELUBCyADKAIQBEAgBBC1AQsgA0HQAGokAA8LIAQgBkGIh8IAEMMIAAsgBCACQZiHwgAQwwgAC0EAQQBB+IbCABDDCAALihICM38CfQJAIAFBDGooAgAiCSABQRBqIiwoAgAiEyAJIBNJGyIORQRAQQQhHEEAIQ4MAQsgDkH/////AE0EQCAOQQN0IgRBBBD3CyIcBEAgHEEAIAQQ4wwhLSAJQQN0IS4gE0EBayEvIAlBAWshMCATQQJrITEgCUECayEiIAlBAnQiGEEEaiEPIBhBBGshMgNAIBAhBANAIAQgDiAEIA5LGyEzIARBAWshGiAvIARrIQIgMCAEayEDIAkgBGshHSAEIA9sIhBBBGoiESEWIA8gEGoiFyEjQXwhHiAEQQJ0IhBBBGshHyAQIDJqISAgESIKIg0iDCIGIQcgBCEQAkACQANAIAMhEiAGISQgDCElIBchJiANIScgAiEUIAohKCARISkgIyEqIBYhKyAQIgUgM0YNB0EAIQggAUEEaigCACILIAUgBSAJbCI0akECdGoiFSgCAEH/////B3G+ITUgCSAFayIbQQFHBEAgByALaiECQQEhAwNAIAMgCCACKAIAQf////8Hcb4iNiA1XiIQGyEIIDYgNSAQGyE1IAJBBGohAiAdIANBAWoiA0cNAAsL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BSACIAEQtgYgAigCBCEHIAIoAggLIgBBAWoiATYCCCAHIABBAnRqIAM2AgALAkAgIkICg1AEQCABIQMMAQsgBS0AAEEBcQRAIAEhAwwBCyAKIAZB5ABqKAIAIgBJBEAgASEDDAELIAIoAgAgAUYEQCACIAEQtgYgAigCBCEHIAIoAgghAQsgAiABQQFqIgM2AgggByABQQJ0aiAANgIACwJAICJCBINQBEAgAyEBDAELIAUtAABBAXEEQCADIQEMAQsgCiAGQegAaigCACIASQRAIAMhAQwBCyACKAIAIANGBEAgAiADELYGIAIoAgQhByACKAIIIQMLIAIgA0EBaiIBNgIIIAcgA0ECdGogADYCAAsgCEEISQRAIAEiAEUNAgwBCyAFLQAAQQFxBEAgASIARQ0CDAELIAogBkHsAGooAgAiA0kEQCABIgBFDQIMAQsgAigCACABRgRAIAIgARC2BiACKAIEIQcgAigCCCEBCyACIAFBAWoiADYCCCAHIAFBAnRqIAM2AgAgAA0ACwsgBEHQAmokAAuCGgMSfwZ9AX4jAEHQAGsiCCQAIAhBKGoiBEEIaiABQQhqKAIANgIAIAggASkCADcDKCAIIABBBGogBBCEBAJAAkACQAJAAkACQAJAAkACQAJAIAgoAgBFBEAgCEEUaigCAEEEaygCACIAIAhBEGooAgAiAUEYaigCACICTw0BIAFBFGooAgAgAEEUbGooAhAhBwwICyAIQSBqIAhBEGooAgA2AgAgCCAIQQhqKQMANwMYIAAqAgAiFiABKAIIspQhFyAWIBeSIRggFiAWIAEoAgSylCIZkiEaIBYgFiABKAIAspQiFpIhGyAIQRRqKAIAIQQgCCgCBCEMAkACQCADKAIIIgFFDQAgAyABQQFrIgE2AgggAygCBCABQQJ0aigCACIBRQ0AIAFBEGpBADYCACABQRxqQQA2AgAgAUEIaiEJIAEoAggiBUUEQCAJQQAQuAYgASgCCCEFIAEoAhAhBwsgASAHQQFqIgM2AhAgAUEMaigCACIGIAdBA3RqQv///3s3AgAgAyAFRgRAIAkgBRC4BiABKAIMIQYgASgCECEDCyABIBs4AgQgASAWOAIAIAEgA0EBajYCEEEAIQcgAUE8akEANgIAIAFBMGpBADYCACAGIANBA3RqQv////v3/////wA3AgAgAUEoaiIJKAIAIgVFBEAgCUEAELgGIAEoAighBSABKAIwIQcLIAEgB0EBaiIDNgIwIAFBLGooAgAiBiAHQQN0akL///97NwIAIAMgBUYEQCAJIAUQuAYgASgCLCEGIAEoAjAhAwsgASAZOAIgIAEgA0EBajYCMEEAIQcgAUHcAGpBADYCACABQSRqIBo4AgAgAUHQAGpBADYCACAGIANBA3RqQv////v3/////wA3AgAgAUHIAGoiCSgCACIFRQRAIAlBABC4BiABKAJIIQUgASgCUCEHCyABIAdBAWoiAzYCUCABQcwAaigCACIGIAdBA3RqQv///3s3AgAgAyAFRgRAIAkgBRC4BiABKAJMIQYgASgCUCEDCyABQQA6AJABIAEgFzgCQCABIANBAWo2AlAgAUHEAGogGDgCACAGIANBA3RqQv////v3/////wA3AgAgAUHkAGooAgAEQCABQegAaigCABC1AQsgAUEAOgCRASABQX82AnAgAUIANwJgIAFBjAFqQQA2AgAgAUHoAGpCBDcCACABKAJ0DQMgAUGAAWooAgBFDQFB4ODBAEEqQYzhwQAQ2QkACwJAIBYgG18EQEEQQQQQ9wsiAw0BDAsLDAsLIANC////+/f/////ADcCCCADQv///3s3AgACQCAZIBpfBEBBEEEEEPcLIgcNAQwLCwwLCyAHQv////v3/////wA3AgggB0L///97NwIAAkAgFyAYXwRAQRBBBBD3CyIFDQEMCwsMCwsgBUL////79/////8ANwIIIAVC////ezcCAEGUAUEEEPcLIgFFDQMgAUEAOwGQASABQgQ3AogBIAFCADcCgAEgAUKAgICAwAA3AnggAUL/////DzcCcCABQgQ3AmggAUIANwJgIAFCBDcCWCABQgI3AlAgASAFNgJMIAFBAjYCSCABIBg4AkQgASAXOAJAIAFCBDcCOCABQgI3AjAgASAHNgIsIAFBAjYCKCABIBo4AiQgASAZOAIgIAFCBDcCGCABQgI3AhAgASADNgIMIAFBAjYCCCABIBs4AgQgASAWOAIACyAALQA8IQMgAC0APSEFAkAgAigCACIHQX9GBEAgAkEMaigCACIHIAIoAgRGBEAgAkEEaiAHEL0GIAIoAgwhBwsgAiAHQQFqNgIMIAJBCGooAgAgB0EsbGoiAiADOgApDAELIAJB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BCITNgIEIBEgEigCACATKAIIQQdqQXhxajYCACACKAIQIAVBzABqIAEoAgwgAigCFCgCSBEFAEUNACABKAIQKAIAKAIAIQEgAkEhNgKIAiACQQhqIgUgDzYCBCAFIAs2AgAgAiACKwMIEAE2AowCIAIgASACQYgCaiACQYwCahDcCSACKAIEIQUCQAJAIAIoAgBFBEBBASEBQQAhCwJAAkACQCAFEAMOAgABAgtBACEBDAELQQEhC0EAIQELIAEgC3IhASAFQSRJDQIMAQtBASEBIAVBI00NAQsgBRAACyACKAKMAiIFQSRPBEAgBRAACyACKAKIAiIFQSRPBEAgBRAACyABRQ0GCyAAQQRqIQAgFEIBfCIUQgRSDQALDAILIAAgCUHYmcAAEMMIAAsgAkHgAWogBCACQZABahD7AiACLQDjASENIAItAOIBIQ4gAi0A4QEhCCACLQDgASEHCyAHQQJGDQEgBEH4AGohACAIQQF0QQJxIAdBAXEiASAOQQJ0QQRxIA1BA3RBCHFycnIiB60hFAJAIAFFDQAgAC0AAEEBcQ0AIAQoAmAiASAJSw0AIAIoAtABIANGBEAgAkHQAWogAxC2BiACKALUASEGIAIoAtgBIQMLIAYgA0ECdGogATYCACACIANBAWoiAzYC2AELAkAgFEICg1ANACAALQAAQQFxDQAgBEHkAGooAgAiASAJSw0AIAIoAtABIANGBEAgAkHQAWogAxC2BiACKALUASEGIAIoAtgBIQMLIAYgA0ECdGogATYCACACIANBAWoiAzYC2AELAkAgFEIEg1ANACAALQAAQQFxDQAgBEHoAGooAgAiASAJSw0AIAIoAtABIANGBEAgAkHQAWogAxC2BiACKALUASEGIAIoAtgBIQMLIAYgA0ECdGogATYCACACIANBAWoiAzYC2AELAkAgB0EISQ0AIAAtAABBAXENACAEQewAaigCACIAIAlLDQAgAigC0AEgA0YEQCACQdABaiADELYGIAIoAtQBIQYgAigC2AEhAwsgBiADQQJ0aiAANgIAIAIgA0EBaiIDNgLYAQsgAw0ACwsgAigC0AEEQCACKALUARC1AQsgAkGQAmokAAu4DQISfwJ9AkAgAUECSQ0AAkACQAJAAkAgAigCACICQQhqKAIAIgsgACgCBCIFSwRAIAAoAgAiDCALTw0B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kpIhCiACIQYLIAAoAggiACANOAIMIAAgCzgCCCAAIAo4AgQgACAQOAIAIAAgBCkDeDcCECAAIBE4AiQgACAOOAIgIAAgDzgCHCAAIAQpAwA3AiggACAGOgA0IABBGGogBEGAAWooAgA2AgAgAEEwaiAEQQhqKAIANgIACyAEQbABaiQAC9cPAhB/A34jAEGwBGsiAyQAIANBADYCiAEgA0IANwOAASADQoCAgIDAADcDeCAAQUBrIANB+ABqIgQQYyADQQA2AogBIANCADcDgAEgA0KAgICAwAA3A3ggAEHoAGogBBBjIABBoAFqIgxBADYCACAAQoCAgIDAADcCmAEgAEG0AWpBBDYCACAAQawBaiINQgA3AgAgAEKAgICAwAA3AqQBIABBKGpCADcCACAAQoCAgIDAADcCICAAQRhqQgA3AgAgAEKAgICAwAA3AhAgAEIANwIIIABCgICAgMAANwIAIABBuAFqQgA3AgAgAEHAAWpCADcCACAAQcgBakEENgIAIABCADcCkAEgAEHUAWpCADcCACAAQcwBakIANwIAIABB3AFqQgQ3AgAgAEHkAWpCADcCACAAQewBakIENwIAIABCgICAgMAANwL0ASAAQfwBakIANwIAIABBhAJqQgQ3AgAgAEEBOgCMAiAAQThqQgA3AgAgAEKAgICAwAA3AjAgBEELakIANwAAIANBkARqIgZBC2pCADcAACADQfwDaiIFQQtqQgA3AAAgA0HpA2oiB0ELakIANwAAIANB1gNqIghBC2pCADcAACADQgA3AHsgA0IANwCTBCADQgA3AP8DIANCADcA7AMgA0IANwDZAyADQeAAaiIJQQ9qIg4gBEEPaigAADYAACAJQQhqIgkgBEEIaikAADcDACADIAMpAHg3A2AgA0HIAGoiCkEIaiIPIAZBCGopAAA3AwAgCkEPaiIKIAZBD2ooAAA2AAAgAyADKQCQBDcDSCADQTBqIgZBD2oiECAFQQ9qKAAANgAAIAZBCGoiBiAFQQhqKQAANwMAIAMgAykA/AM3AzAgA0EYaiILQQ9qIhEgB0EPaigAADYAACALQQhqIgsgB0EIaikAADcDACADIAMpAOkDNwMYIANBD2oiByAIQQ9qKAAANgAAIANBCGoiEiAIQQhqKQAANwMAIAMgAykA1gM3AwAgA0GGBGpBADYBACADQgA3Af4DIANB1AFqQgA3AgAgA0HcAWpBADYCACADQf////sHNgLIASADQoCAgIDw//+/fzcDwAEgA0L////7////v/8ANwO4ASADQv////sHNwOwASADQoCAgIDw//+/fzcDqAEgA0L////7////v/8ANwOgASADQv////sHNwOYASADQoCAgIDw//+/fzcDkAEgA0L////7////v/8ANwOIASADQoCAgICAgIDAPzcDgAEgA0IANwN4IANCADcCzAEgA0EAOgDoASADQv////sHNwPgASADQfEBaiAJKQMANwAAIANB+AFqIA4oAAA2AAAgAyADKQNgNwDpASADQQA6AIQCIANC////+wc3AvwBIANBlAJqIAooAAA2AAAgA0GNAmogDykDADcAACADIAMpA0g3AIUCIANBADoAoAIgA0L////7BzcDmAIgBEG4AWogECgAADYAACADQakCaiAGKQMANwAAIAMgAykDMDcAoQIgA0EAOgC8AiADQv////sHNwK0AiAEQdQBaiARKAAANgAAIANBxQJqIAspAwA3AAAgAyADKQMYNwC9AiADQQA6ANgCIANC////+wc3A9ACIANB6AJqIAcoAAA2AAAgA0HhAmogEikDADcAACADIAMpAwA3ANkCIANCgICAgICAgMA/NwOAAyADQgA3A/gCIANBADoA9AIgA0L////7BzcC7AIgA0GYA2pCADcDACADQZADakIANwMAIANCADcDiAMgA0GAgID8AzYCoAMgA0G0A2pBADoAACADQawDakIANwIAIANCADcCpAMgA0EBOgC1AyADQbwDaiAFQQZqKQEANwEAIAMgAykB/AM3AbYDIANBzANqQQA2AgAgA0IANwLEAyAMKAIAIQYgACAAKAIMIgdBBmoiBBCgAiAAQRBqIAQQoAIgAEEgaiAEEKACIA0oAgAiBSAAKAKkAUYEQCAAQaQBaiAFQQEQrwYgACgCrAEhBQsgACAFQQFqNgKsASAAKAKoASAFQQR0aiIFQgA3AgggBUKAgICAwAA3AgAgACAAKAKQAUEGaiIINgKQAQJAIAAoAhwgBE8EQCAAKAIUIAdBAnRqIgRBFGpBzZmz7gM2AgAgBEEMakLNmbPu05mz5j03AgAgA0GQBGogA0H4AGoQxAEgACgCoAEiBSAAKAKYAUYEQCAAQZgBaiAFEMIGIAAoApABIQggACgCoAEhBQsgACgCnAEgBUHUA2xqIgRCADcCCCAEIAI2AgQgBCABNgIAIARBEGpCADcCACAEQRhqQgA3AgAgBEEgaiADQfgAakHYAhDkDBogBEEANgKAAyAEIAc2AvwCIAQgBjYC+AIgBEHMA2pCADcCACAEQcQDakIANwIAIARCADcCvAMgACAFQQFqIgE2AqABIAQgAykDkAQiEzcChAMgBEGMA2ogA0GYBGopAwAiFDcCACAEQZQDaiADQZAEaiICQRBqKQMAIhU3AgAgBEGcA2ogAkEYaigCACICNgIAIAQgEzcCoAMgBEGoA2ogFDcCACAEQbADaiAVNwIAIARBuANqIAI2AgAgAEHYAWogASAIEMECIAAoAqABIgAgBk0NASADQbAEaiQADwtBmPfAAEEdQaD4wAAQuAsACyAGIABB2J7BABDDCAALzwwCIH0FfyMAQUBqIiUkAEMAAKA1EJMBIRoCQAJ/AkACQCADQQxqKgIAIgUgBZQgA0EQaioCACIHIAeUkiADQRRqKgIAIgYgBpSSQwAAAACSEJMBIg5DAAAAAFsNAAJAIA5DAACAf1sNACAOQwAAgP9bDQAgDosiDEMAAAA0Xw0BIAwgDEMAAAA0lF8NAQsgAyoCCCESIAMqAgQhEyADKgIAIRQgBSAOlSIWjCIMIAYgDpUiFyAXlCAWIBaUIAcgDpUiGCAYlJKSQwAAAACSEJMBIgaVIgUgAUEYaiImKgIAIhuUIBiMIg8gBpUiByABQRxqKgIAIhyUkiAXjCIQIAaVIgYgAUEgaioCACIdlJIhDSAFIAEqAgAiHpQgByABQQRqKgIAIh+UkiAGIAFBCGoqAgAiIJSSIgggBSABQQxqIigqAgAiIZQgByABQRBqKgIAIiKUkiAGIAFBFGoqAgAiI5SSIhFeDQEgJiANIBFdRQ0CGiAoDAILIABBADYCAAwCCyABICYgCCANXhsLIQMgAkEANgK8ASACQQA2AqwBIAJBMGpBADYCACACQShqQgA3AgAgAkEkaiADKgIIIAYgASoCJCIRlJIiBjgCACACQSBqIAMqAgQgByARlJIiBzgCACACQRxqIAMqAgAgBSARlJIiBTgCACACQRhqIAYgEpM4AgAgAkEUaiAHIBOTOAIAIAIgBSAUkzgCECAlQQhqIAIQPEP//39/IQhBkM4AISkCQAJAAkADQCAlKgIIIgkgCZQgJSoCDCILIAuUkiAlKgIQIgogCpSSQwAAAACSIgVDAADIK15FDQIgCowgBRCTASINlSEFIAuMIA2VIQcgCYwgDZUhBgJ9An8CQAJAIAggDV8iJwRAIBlDAAAAAF5FDQEMBwsgHSAFIAUgBZQgBiAGlCAHIAeUkpJDAAAAAJIQkwEiCpUiCJQgGyAGIAqVIgmUIBwgByAKlSILlJKSIQogICAIlCAeIAmUIB8gC5SSkiIVICMgCJQgISAJlCAiIAuUkpIiJF4NASAmIAogJF1FDQIaICgMAgsgEyALkiELIBQgCZIhFSASIAqSDAILIAEgJiAKIBVdGwshAyARIAuUIAMqAgSSIQsgESAJlCADKgIAkiEVIBEgCJQgAyoCCJILIQoCQAJAAkAgFyAFlCAWIAaUIBggB5SSkiIIQwAAAABbDQACQCAIQwAAgH9bDQAgCEMAAID/Ww0AIAiLIglDAAAANF8NASAJIAlDAAAANJRfDQELIAUgCiASk5QgByALIBOTlCAGIBUgFJOUkpIgCJUiCUMAAAAAYA0BC0EAIQMgCEMAAKA1Xg0FICcNBQwBCwJAAkAgCEMAAAAAXUUNACAJQwAAAABeRQ0AIAQgGSAJkiIZIA6VXQRAIABBADYCAAwICyASIBcgCZQiDJIhEiATIBggCZQiD5IhEyAUIBYgCZQiEJIhFEP//39/IQ0gAigCvAEiJ0EBaiIDRQ0BIAIgAioCECAQkzgCECACIAIqAhQgD5M4AhQgAiACKgIYIAyTOAIYICdFDQEgAiACKgI0IBCTOAI0IAIgAioCOCAPkzgCOCACIAIqAjwgDJM4AjwgA0ECRg0BIAIgAioCWCAQkzgCWCACIAIqAlwgD5M4AlwgAiACKgJgIAyTOAJgIANBA0YNASACIAIqAnwgEJM4AnwgAiACKgKAASAPkzgCgAEgAiACKgKEASAMkzgChAEgBSEQIAchDyAGIQwgA0EERg0CQQRBBEH0o8IAEMMIAAsgJ0UNASAAQQA2AgAMBgsgBSEQIAchDyAGIQwLIAYgFSAUkyIGlCAHIAsgE5MiB5SSIAUgCiASkyIIlJIiBSAFXA0BQQAhAyANIAWSIBogDZRfDQMgJUEANgI4ICVCADcDMCAlIAo4AiwgJSALOAIoICUgFTgCJCAlIAg4AiAgJSAHOAIcICUgBjgCGCACICVBGGoQqwIaICVBCGogAhA8IAIoArwBQQNHBEAgDSEIIClBAWsiKQ0BDAQLCyAFQwAAoLVfRQ0BDAILQeCgwgBBKEGYocIAENkJAAsgAEEQaiAQOAIAIABBDGogDzgCACAAQQhqIAw4AgAgACAZIA6VOAIEQQEhAwsgACADNgIACyAlQUBrJAALlAwCFH0SfyMAQdAAayIZJAAgAEECOgAMAkACQCACKgIAIgYgBJIgAUEoaioCACIOlSIFQwAAAL9fDQAgAioCCCIJIASSIAFBMGoqAgAiD5UiCkMAAAC/Xw0AIAYgBJMgDpUiCEMAAAA/YA0AIAkgBJMgD5UiB0MAAAA/YA0AIAIqAgQhCyABQSxqKgIAIQlDAACAPyABQQxqKAIAIh2zQwAAgL+SlSENQX8CfyAFQwAAAD+SQwAAgD8gAUEQaigCACIgs0MAAIC/kpUiEJWNIgYgIEEBa7MiBSAFIAZeG0MAAAAAIAZDAAAAAF4bIgZDAAAAAGAiGiAGQwAAgE9dcQRAIAapDAELQQALQQAgGhsgBkP//39PXhshJUF/An8gCEMAAAA/kiAQlY4iBiAgQQJrsyIFIAUgBl4bQwAAAAAgBkMAAAAAXhsiBkMAAAAAYCIbIAZDAACAT11xBEAgBqkMAQtBAAtBACAbGyAGQ///f09eGyEaAn8gCkMAAAA/kiANlY0iBiAdQQFrsyIFIAUgBl4bQwAAAAAgBkMAAAAAXhsiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALIR4gGiAlTyEcAn8gB0MAAAA/kiANlY4iBSAdQQJrsyIKIAUgCl0bQwAAAAAgBUMAAAAAXhsiBUMAAIBPXSAFQwAAAABgcQRAIAWpDAELQQALIR8gHA0AQX8gH0EAIAVDAAAAAGAbIAVD//9/T14bIhxBfyAeQQAgBkMAAAAAYBsgBkP//39PXhsiJk8NACALIASSIAmVIQogCyAEkyAJlSELIAFBJGooAgAhKiABQQRqKAIAIhsgHSAaQQFqbEECdCAcQQJ0amohIiAcIAFBIGooAgAiIyAcICNLGyEnIB1BAnQhKCABQRhqKAIAIBogI2xqIR8gGyAcIBogHWxqQQJ0aiEkQ///f38hBgNAAkACQCAaICpPDQQgGkEBaiEpIBwhASAaICBJBEAgDiAQIBqzlEMAAAC/kiIFlCERIA4gECAFkpQhEiAkIRsgIiEeIBwhGgNAIBogJ0YNBiAaIgFBAWohGgJAIAEgH2otAAAiIUEGcUEGRg0AIAEgHU8NByAaIB1PDQcgICApTQ0HIBtBBGoqAgAhBSAeQQRqKgIAIQggHioCACEHAkAgGyoCACIMIApeRQ0AIAUgCl5FDQAgByAKXkUNACAIIApeDQELAkAgCyAMXkUNACAFIAtdRQ0AIAcgC11FDQAgCCALXQ0BCyAJIAiUIRMgCSAHlCEUIA8gDSANIAGzlEMAAAC/kiIHkpQhCCAJIAWUIRUgDyAHlCEHIAkgDJQhDAJAICFBAnENACAZIBI4AhggGSAVOAIQIBkgETgCDCAZIAw4AgQgGSAROAIAIBkgBzgCCCAZIAg4AhQgGSAIIAcgIUEBcSIBGzgCICAZIBMgFCABGzgCHCAZQShqIBkgAiADEEIgGSoCKCIWIAIqAgCTIgUgBZQgGSoCLCIXIAIqAgSTIgUgBZSSIBkqAjAiGCACKgIIkyIFIAWUkkMAAAAAkiIFIAZdRQ0AIAQgBZFgBEAgACAZKAI0NgIMIAAgGDgCCCAAIBc4AgQgACAWOAIACyAFIQYLICFBBHENACAZIBQ4AhwgGSASOAIYIBkgEzgCECAZIBI4AgwgGSAROAIAIBkgCDgCFCAZIAc4AiAgGSAHIAggIUEBcSIBGzgCCCAZIAwgFSABGzgCBCAZQShqIBkgAiADEEIgGSoCKCIIIAIqAgCTIgUgBZQgGSoCLCIHIAIqAgSTIgUgBZSSIBkqAjAiDCACKgIIkyIFIAWUkkMAAAAAkiIFIAZdRQ0AIAQgBZFgBEAgACAZKAI0NgIMIAAgDDgCCCAAIAc4AgQgACAIOAIACyAFIQYLIBtBBGohGyAeQQRqIR4gGiAmRw0ACwwCCwNAIAEgJ0YNBSABIB9qLQAAQQZxQQZHDQUgAUEBaiIBICZHDQALDAELAAsgHyAjaiEfICQgKGohJCAiIChqISIgJSApIhpHDQALCyAZQdAAaiQADwtBuPjBAEEbQaCQwwAQuQsAC8INAwx/Bn0BfiMAQeABayIIJAAgCCAHOAIMIAhBEGogBSACIAYoAogBEQEAIAdDAAAAAGAEQCAIQSBqKgIAIRUgCEEkaioCACEUIAgqAhAhFiAIKgIUIRcgCCoCGCEYIAgqAhwhGSAAQQA2AgAgCEEcaiAGNgIAIAggAjYCJCAIIAE2AiAgCCADNgIQIAggADYCLCAIIAU2AhggCCAIQQxqNgIoIAggBDYCFCAIIBQgB5IiFDgCjAEgCCAUOAKIASAIIBQ4AoQBIAggFDgCgAEgCCAVIAeSIhQ4AnwgCCAUOAJ4IAggFDgCdCAIIBQ4AnAgCCAZIAeSIhQ4AmwgCCAUOAJoIAggFDgCZCAIIBQ4AmAgCCAYIAeTIhQ4AlwgCCAUOAJYIAggFDgCVCAIIBQ4AlAgCCAXIAeTIhQ4AkwgCCAUOAJIIAggFDgCRCAIIBQ4AkAgCCAWIAeTIgc4AjwgCCAHOAI4IAggBzgCNCAIIAc4AjAgCCAIQRBqNgKQASADIAQoAhARBAAhACAIQQA2AqgBIAhCgICAgMAANwOgAQJAIABBIGooAgAiBEUNACAIQaABakEAELYGIAgoAqQBIgMgCCgCqAEiAUECdGpBADYCACABQQFqIgZFDQAgAEFAaygCACEMIABBxABqKAIAIQ0gAEEcaigCACERA0AgCCAGQQFrIgY2AqgBAkACQCADIAZBAnRqKAIAIgAgBEkEQCARIABBB3RqIgItAHhBAXEEQCACQeQAaigCACEJIAJB6ABqKAIAIQsgAkHsAGooAgAhDiACKAJgIQogCEGwAWogAiAIQTBqEOQCIAgtALMBIhBBA3RBCHEgCC0AsgEiAUECdEEEcSAILQCxASIAQQF0QQJxIAgtALABIgVBAXFycnIiEq0iGkIBg1ANAiAMIApBDGxqQQAgCiANSRsiCkUNAiAKKAIIIQogCCgCECEPIAgoAhQhEyAIIAgpAyA3A9ABIAggCCkDKDcD2AEgCCAIKQMYNwPIASAPIAogCEHIAWpBsJPCACATKAIMEQIADAILIAhBsAFqIAIgCEEwahDkAiAILQCzASEQIAgtALIBIQEgCC0AsQEhACAILQCwASEFDAILIAAgBEGcicIAEMMIAAsCQCAaQgKDUA0AIAwgCUEMbGpBACAJIA1JGyIJRQ0AIAkoAgghCSAIKAIQIQogCCgCFCEPIAggCCkDIDcD0AEgCCAIKQMoNwPYASAIIAgpAxg3A8gBIAogCSAIQcgBakGwk8IAIA8oAgwRAgALAkAgGkIEg1ANACAMIAtBDGxqQQAgCyANSRsiCUUNACAJKAIIIQkgCCgCECELIAgoAhQhCiAIIAgpAyA3A9ABIAggCCkDKDcD2AEgCCAIKQMYNwPIASALIAkgCEHIAWpBsJPCACAKKAIMEQIACyASQQhJDQAgDCAOQQxsakEAIA0gDksbIglFDQAgCSgCCCEJIAgoAhAhCyAIKAIUIQ4gCCAIKQMgNwPQASAIIAgpAyg3A9gBIAggCCkDGDcDyAEgCyAJIAhByAFqQbCTwgAgDigCDBECAAsgBUH/AXFBAkYNASACQfgAaiEJIABBAXRBAnEgBUEBcSIAIAFBAnRBBHEgEEEDdEEIcXJyciIBrSEaAkAgAEUNACAJLQAAQQFxDQAgAigCYCIAIARLDQAgCCgCoAEgBkYEQCAIQaABaiAGELYGIAgoAqgBIQYgCCgCpAEhAwsgAyAGQQJ0aiAANgIAIAggBkEBaiIGNgKoAQsCQCAaQgKDUA0AIAktAABBAXENACACQeQAaigCACIAIARLDQAgCCgCoAEgBkYEQCAIQaABaiAGELYGIAgoAqgBIQYgCCgCpAEhAwsgAyAGQQJ0aiAANgIAIAggBkEBaiIGNgKoAQsCQCAaQgSDUA0AIAktAABBAXENACACQegAaigCACIAIARLDQAgCCgCoAEgBkYEQCAIQaABaiAGELYGIAgoAqgBIQYgCCgCpAEhAwsgAyAGQQJ0aiAANgIAIAggBkEBaiIGNgKoAQsCQCABQQhJDQAgCS0AAEEBcQ0AIAJB7ABqKAIAIgAgBEsNACAIKAKgASAGRgRAIAhBoAFqIAYQtgYgCCgCqAEhBiAIKAKkASEDCyADIAZBAnRqIAA2AgAgCCAGQQFqIgY2AqgBCyAGDQALCyAIKAKgAQRAIAgoAqQBELUBCyAIQeABaiQADwsgCEE8akEBNgIAIAhBxABqQQA2AgAgCEGo/8EANgI4IAhB5O/BADYCQCAIQQA2AjAgCEEwakGw/8EAENMKAAvODAIafQJ/IwBBQGoiHyQAQwAAoDUQkwEhHgJAAkACQAJAIANBDGoqAgAiBSAFlCADQRBqKgIAIgYgBpSSIANBFGoqAgAiDSANlJJDAAAAAJIQkwEiDkMAAAAAWw0AAkAgDkMAAIB/Ww0AIA5DAACA/1sNACAOiyIHQwAAADRfDQEgByAHQwAAADSUXw0BC0MAAAAAIQcgAyoCCCESIAMqAgQhEyADKgIAIRQgBiAOlSIXjCIPIA0gDpUiGCAYlCAFIA6VIhkgGZQgFyAXlJKSQwAAAACSEJMBIgaVIQwCQAJ9AkAgGIwiECAGlSIFIAWUIBmMIhEgBpUiBiAGlEMAAAAAkpJDAAAAAJIQkwEiCEMAAAAAXARAIAwgASoCACINlCIJIAUgBSAIlSABKgIEIhqUIgeUIAYgBiAIlSAalCIKlCAJk5JeDQEgDYwhCAwDCyABKgIEIRogASoCACINIAyYDAELQwAAAAAhByANCyEIQwAAAAAhCgsgAkEANgK8ASACQQA2AqwBIAJBMGpBADYCACACQShqQgA3AgAgAkEkaiAHIAUgASoCCCIWlJIiBTgCACACQSBqIAggDCAWlJIiBzgCACACQRxqIAogBiAWlJIiBjgCACACQRhqIAUgEpM4AgAgAkEUaiAHIBOTOAIAIAIgBiAUkzgCECAfQQhqIAIQPEP//39/IQhBkM4AIQECQANAIB8qAggiCiAKlCAfKgIMIgkgCZSSIB8qAhAiCyALlJJDAAAAAJIiBUMAAMgrXkUNAyALjCAFEJMBIgyVIQUgCYwgDJUhBiAKjCAMlSEHAn0CQCAIIAxfIiAEQCAbQwAAAABeRQ0BDAYLIAYgBSAFlCAHIAeUIAYgBpSSkkMAAAAAkhCTASIIlSEcAkACfQJAIAUgCJUiCSAJlCAHIAiVIgsgC5RDAAAAAJKSQwAAAACSEJMBIgpDAAAAAFwEQCANIByUIhUgCSAaIAkgCpWUIgiUIAsgGiALIAqVlCIdlCAVk5JeDQEgDYwhCgwDCyANIByYIQpDAAAAAAwBCyANIQpDAAAAAAshCEMAAAAAIR0LIBYgCZQgCJIhFSAWIByUIAqSIQggFiALlCAdkgwBCyASIAuSIRUgEyAJkiEIIBQgCpILIQoCQAJAAkAgGCAFlCAZIAeUIBcgBpSSkiIJQwAAAABbDQACQCAJQwAAgH9bDQAgCUMAAID/Ww0AIAmLIgtDAAAANF8NASALIAtDAAAANJRfDQELIAUgFSASk5QgBiAIIBOTlCAHIAogFJOUkpIgCZUiC0MAAAAAYA0BC0EAIQMgCUMAAKA1Xg0GICANBgwBCwJAAkAgCUMAAAAAXUUNACALQwAAAABeRQ0AIAQgGyALkiIbIA6VXQRAIABBADYCAAwJCyASIBggC5QiD5IhEiATIBcgC5QiEJIhEyAUIBkgC5QiEZIhFEP//39/IQwgAigCvAEiIEEBaiIDRQ0BIAIgAioCECARkzgCECACIAIqAhQgEJM4AhQgAiACKgIYIA+TOAIYICBFDQEgAiACKgI0IBGTOAI0IAIgAioCOCAQkzgCOCACIAIqAjwgD5M4AjwgA0ECRg0BIAIgAioCWCARkzgCWCACIAIqAlwgEJM4AlwgAiACKgJgIA+TOAJgIANBA0YNASACIAIqAnwgEZM4AnwgAiACKgKAASAQkzgCgAEgAiACKgKEASAPkzgChAEgBSEQIAYhDyAHIREgA0EERg0CQQRBBEH0o8IAEMMIAAsgIEUNASAAQQA2AgAMBwsgBSEQIAYhDyAHIRELIAcgCiAUkyIHlCAGIAggE5MiBpSSIAUgFSASkyIJlJIiBSAFXA0BQQAhAyAMIAWSIB4gDJRfDQQgH0EANgI4IB9CADcDMCAfIBU4AiwgHyAIOAIoIB8gCjgCJCAfIAk4AiAgHyAGOAIcIB8gBzgCGCACIB9BGGoQqwIaIB9BCGogAhA8IAIoArwBQQNHBEAgDCEIIAFBAWsiAQ0BDAULCyAFQwAAoLVfRQ0CDAMLQeCgwgBBKEGYocIAENkJAAsgAEEANgIADAILIABBEGogEDgCACAAQQxqIA84AgAgAEEIaiAROAIAIAAgGyAOlTgCBEEBIQMLIAAgAzYCAAsgH0FAayQAC6IQAwR8A38CfSMAQRBrIgckAAJAAkACQAJAIAG8IghB/////wdxIgZB25+k+gNPBEAgBkHSp+2DBEkNASAGQdbjiIcESQ0CIAZB////+wdNDQMgASABkyIJIQEMBAsgBkGAgIDMA08EQCABuyIDIAOiIgIgAqIhBCACRIFeDP3//9+/okQAAAAAAADwP6AgBERCOgXhU1WlP6KgIAIgBKIgAkRpUO7gQpP5PqJEJx4P6IfAVr+goqC2IQkgAiADoiIFIASiIAJEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgBSACRLL7bokQEYE/okR3rMtUVVXFv6CiIAOgoLYhAQwECyAGQYCAwABPBEAgByABQwAAgHuSOAIIIAcqAggaQwAAgD8hCQwECyAHIAFDAACAA5Q4AgggByoCCBpDAACAPyEJDAMLAkAgBkHkl9uABE8EQCAIQQBIDQEgAUPbD0nAkrsiAyADoiICIAKiIQQgAkSBXgz9///fv6JEAAAAAAAA8D+gIAREQjoF4VNVpT+ioCACIASiIAJEaVDu4EKT+T6iRCceD+iHwFa/oKKgtowhCSACIAOiIgUgBKIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiAFIAJEsvtuiRARgT+iRHesy1RVVcW/oKIgA6CgtowhAQwECyAIQQBOBEBD2w/JPyABk7siAyADoiICIAKiIQQgAkSBXgz9///fv6JEAAAAAAAA8D+gIAREQjoF4VNVpT+ioCACIASiIAJEaVDu4EKT+T6iRCceD+iHwFa/oKKgtiEBIAIgA6IiBSAEoiACRKdGO4yHzcY+okR058ri+QAqv6CiIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goiADoKC2IQkMBAsgAUPbD8k/krsiAyADoiICIAOiIgUgAiACoiIEoiACRKdGO4yHzcY+okR058ri+QAqv6CiIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goiADoKC2IQkgAkSBXgz9///fv6JEAAAAAAAA8D+gIAREQjoF4VNVpT+ioCACIASiIAJEaVDu4EKT+T6iRCceD+iHwFa/oKKgtowhAQwDCyABQ9sPSUCSuyIDIAOiIgIgAqIhBCACRIFeDP3//9+/okQAAAAAAADwP6AgBERCOgXhU1WlP6KgIAIgBKIgAkRpUO7gQpP5PqJEJx4P6IfAVr+goqC2jCEJIAIgA6IiBSAEoiACRKdGO4yHzcY+okR058ri+QAqv6CiIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goiADoKC2jCEBDAILAkAgBkHg27+FBE8EQCAIQQBIDQEgAUPbD8nAkrsiAyADoiICIAKiIQQgAkSBXgz9///fv6JEAAAAAAAA8D+gIAREQjoF4VNVpT+ioCACIASiIAJEaVDu4EKT+T6iRCceD+iHwFa/oKKgtiEJIAIgA6IiBSAEoiACRKdGO4yHzcY+okR058ri+QAqv6CiIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goiADoKC2IQEMAwsgCEEATgRAIAFD5MuWwJK7IgMgA6IiAiADoiIFIAIgAqIiBKIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiAFIAJEsvtuiRARgT+iRHesy1RVVcW/oKIgA6CgtiEJIAJEgV4M/f//37+iRAAAAAAAAPA/oCAEREI6BeFTVaU/oqAgAiAEoiACRGlQ7uBCk/k+okQnHg/oh8BWv6CioLaMIQEMAwsgAUPky5ZAkrsiAyADoiICIAKiIQQgAkSBXgz9///fv6JEAAAAAAAA8D+gIAREQjoF4VNVpT+ioCACIASiIAJEaVDu4EKT+T6iRCceD+iHwFa/oKKgtiEBIAIgA6IiBSAEoiACRKdGO4yHzcY+okR058ri+QAqv6CiIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goiADoKC2jCEJDAILIAFD2w/JQJK7IgMgA6IiAiACoiEEIAJEgV4M/f//37+iRAAAAAAAAPA/oCAEREI6BeFTVaU/oqAgAiAEoiACRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYhCSACIAOiIgUgBKIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiAFIAJEsvtuiRARgT+iRHesy1RVVcW/oKIgA6CgtiEBDAELIAdCADcDCAJ8IAZB2p+k7gRNBEAgAbsiA0SDyMltMF/kP6JEAAAAAAAAOEOgRAAAAAAAADjDoCICRAAAAAAAAODBZiEIQQBB/////wcCfyACmUQAAAAAAADgQWMEQCACqgwBC0GAgICAeAtBgICAgHggCBsgAkQAAMD////fQWQbIAIgAmIbIQYgAyACRAAAAFD7Ifm/oqAgAkRjYhphtBBRvqKgDAELIAcgBiAGQRd2QZYBayIGQRd0a767OQMAIAcgB0EIaiAGEEQhBiAIQQBOBEAgBysDCAwBC0EAIAZrIQYgBysDCJoLIgMgAyADoiICoiIFIAIgAqIiBKIgAkSnRjuMh83GPqJEdOfK4vkAKr+goiADIAUgAkSy+26JEBGBP6JEd6zLVFVVxb+goqCgtiEBIAJEgV4M/f//37+iRAAAAAAAAPA/oCAEREI6BeFTVaU/oqAgAiAEoiACRGlQ7uBCk/k+okQnHg/oh8BWv6CioLYiCiEJAkACQAJAIAZBA3FBAWsOAwABAgMLIAGMIQkgCiEBDAILIAqMIQkgAYwhAQwBCyABIQkgCowhAQsgACAJOAIEIAAgATgCACAHQRBqJAALug0BDH8jAEHgAGsiAyQAIAEtADQhCyABQQI6ADQCQAJAIAtBAkcEQCABKABAIQwgASgAPCENIAEoAjAhBiABKAA4KAIAIQogA0E0aiABQShqKQIANwIAIANBLGogAUEgaikCADcCACADQSRqIAFBGGopAgA3AgAgA0EcaiABQRBqKQIANwIAIANBFGogAUEIaikCADcCACADQYACOwE8IAMgASkCADcCDCADQQE2AgggAigCACIFKAIAIQEgBSABQQFqNgIAIAFBAE4EQCAGQQxqKAIAIgEgBigCBEYEQCAGQQRqIAEQtAYgBigCDCEBCyAGQQhqKAIAIAFBDGxqIgQgBTYCCCAEIAo2AgAgBiABQQFqNgIMIAQgA0EIajYCBCAGQTBqIgEoAgAhBSABQQA2AgAgBUEMbCEBIAZBLGooAgAiByEEIAVFDQIgASEEIAchBQNAIAUoAggiCEUEQCAFQQxqIQQMBAsgCEEQaiIOKAIAIQkgDiAJIAUoAgAgCRs2AgAgCUUEQCAIQRhqKAIAQRBqEJ8FCyAIIAgoAgAiCUEBazYCACAJQQFGBEAgCBDCCQsgBUEMaiEFIARBDGsiBA0ACwwDCwALQYjCwABBK0HgxsAAENkJAAsgASAHaiIBIARGDQAgASAEa0EMbkEMbCEFIAQgBigCLCIBa0EMbkEMbCABakEIaiEBA0AgASgCACIHKAIAIQQgByAEQQFrNgIAIARBAUYEQCABKAIAEMIJCyABQQxqIQEgBUEMayIFDQALCwJAIAsNAEHc78MAKAIAQf////8HcUUNAEHM88MAKAIARQ0AIAZBAToAAQsgBkEAOgAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACIA0pAwAgDSgCCBCPBEEBaw4DAQIDAAtB2MTAAEEoQcjJwAAQ2QkACyAMKAIAIgItAAAhASACQQE6AAAgAyABQQFxIgE6AEcgAQ0LQQAhB0Hc78MAKAIAQf////8HcQRAQczzwwAoAgBFRSEHCyACLQABDQggAkEIaigCAEEMayEFIAJBDGooAgAiBkEMbCEBQX8hBANAIAFFDQogBEEBaiEEIAFBDGshASAFQQxqIgUoAgAgCkcNAAsgBCAGTw0HIAVBCGooAgAhBCAFIAVBDGogARDiDBogAkEMaiAGQQFrNgIAIARFDQkgBCAEKAIAIgFBAWs2AgAgAUEBRgRAIAQQwgkLAkAgBw0AQdzvwwAoAgBB/////wdxRQ0AQczzwwAoAgBFDQAgAkEBOgABCyACQQA6AAAgAygCCCEBIANBADYCCCABRQ0KIAAgAykCNDcCLCAAIAMpAiw3AiQgACADKQIkNwIcIAAgAykCHDcCFCAAIAMpAhQ3AgwgACADKQIMNwIEIABBADYCAAwCCyAMKAIAIgItAAAhASACQQE6AAAgAyABQQFxIgE6AEcgAQ0KQQAhB0Hc78MAKAIAQf////8HcQRAQczzwwAoAgBFRSEHCyACLQABDQMgAkEIaigCAEEMayEFIAJBDGooAgAiBkEMbCEBQX8hBANAIAFFDQUgBEEBaiEEIAFBDGshASAFQQxqIgUoAgAgCkcNAAsgBCAGTw0CIAVBCGooAgAhBCAFIAVBDGogARDiDBogAkEMaiAGQQFrNgIAIARFDQQgBCAEKAIAIgFBAWs2AgAgAUEBRgRAIAQQwgkLAkAgBw0AQdzvwwAoAgBB/////wdxRQ0AQczzwwAoAgBFDQAgAkEBOgABCyACQQA6AAAgAygCCCEBIANBADYCCCABRQ0FIAAgAykCNDcCLCAAIAMpAiw3AiQgACADKQIkNwIcIAAgAykCHDcCFCAAIAMpAhQ3AgwgACADKQIMNwIEIABBATYCAAwBCyADLQA8RQRAQQAhAQNAIAEgAUEBaiABQQpLIAFBB09xGyEBIAMtADxFDQALCyAAQQI2AgALIANB4ABqJAAPCyAEIAZB7MPAABDCCAALIAMgBzoATCADIAI2AkhB/MPAAEErIANByABqQezHwABBiMnAABD9BwALQYjCwABBK0GIycAAENkJAAtBiMLAAEErQZjJwAAQ2QkACyAEIAZB7MPAABDCCAALIAMgBzoATCADIAI2AkhB/MPAAEErIANByABqQezHwABBqMnAABD9BwALQYjCwABBK0GoycAAENkJAAtBiMLAAEErQbjJwAAQ2QkACyADQQA2AlwgA0GYv8AANgJYIANBATYCVCADQeTMwAA2AlAgA0EANgJIIANBxwBqIANByABqEIgJAAvQCwImfQF/IAEqAgAiCSADQRBqKgIAIhmUIAFBBGoqAgAiCiADKgIMIhqUkyIFIAWSIQwgAUEIaioCACILIBqUIAkgA0EUaioCACIblJMiBSAFkiENIAMqAgQiDiAJlCADKgIAIg8gCpSTIgUgBZIhECAPIAuUIAMqAggiESAJlJMiBSAFkiEVIAFBGGoqAgAiKCAbIAFBDGoqAgAiEiAMlCAJIA2UIAogCiAblCALIBmUkyIFIAWSIhiUk5KSkiIcICggESASIBCUIAkgFZQgCiARIAqUIA4gC5STIgUgBZIiE5STkpKSIh2TIiIgIpQgASoCECIpIBogEiAYlCAKIAyUIAsgDZSTkpKSIh4gKSAPIBIgE5QgCiAQlCALIBWUk5KSkiIfkyIjICOUIAFBFGoqAgAiKiAZIBIgDZQgCyAYlCAJIAyUk5KSkiIFICogDiASIBWUIAsgE5QgCSAQlJOSkpIiEJMiJCAklJKSQwAAAACSIRYCQCACKgIMIhUgAioCACIXkyIlICWUIAJBEGoqAgAiGCACKgIEIgyTIiYgJpSSIAJBFGoqAgAiEyACKgIIIg2TIhQgFJSSQwAAAACSIiBDAAAANF8iASAWQwAAADRfcQ0AICMgFyAfkyIIlCAkIAwgEJMiB5SSICIgDSAdkyIGlJIhJwJAAn8CQAJAAkACQAJAAkAgAUUEQCAlIAiUICYgB5SSIBQgBpSSISEgFkMAAAA0Xw0BAn1DAAAAACAWICCUIgggIyAllCAkICaUkiAiIBSUkiIUIBSUIgeTIgZDAAAANF5FDQAaQwAAAAAgBotDAAAANF8NABpDAADAf0MAAIA/IAiYIAggCFwbQwAAwH9DAACAPyAHmCAHIAdcG1sEQEMAAAAAIAi8IgIgB7wiAWtBBEsgASACa0EESyABIAJJG0EBRw0BGgsgFCAnlCAWICGUkyAGlSIGQwAAgD8gBkMAAIA/XRtDAAAAACAGQwAAAABeGwshCCAnIBQgCJSSIBaVIgdDAAAAAF0NAyAHQwAAgD9eDQIMBAsgJyAWlSIGQwAAAABeRQ0IIAZDAACAPyAGQwAAgD9dGyEHDAQLQwAAAAAhByAhjCAglSIGQwAAAABeRQ0HIAZDAACAPyAGQwAAgD9dGyEIDAILIBQgIZMgIJUiBkMAAAAAXkUNBSAGQwAAgD8gBkMAAIA/XRshCEMAAIA/IQcMAQtDAAAAACEHICGMICCVIgZDAAAAAF5FDQUgBkMAAIA/IAZDAACAP10bIQgLIAhDAAAAAFwNAQtBAQwBCyAIQwAAgD9bBEBBASErQQEMAQtDAACAPyAIk7whK0EACyECAn8gB0MAAAAAWwRAQQEhA0EADAELQQEhA0EBIAdDAACAP1sNABpBACEDQwAAgD8gB5O8CyEBAkACQAJAIAIEQCArDgIDAgELIBMgCJQgDSArviITlJIhDSAYIAiUIAwgE5SSIQwgFSAIlCAXIBOUkiEXDAILQbC5wgBBDkHAucIAENkJAAsgFSEXIBghDCATIQ0LAkAgAwRAIAEOAgMCAQsgKCAbIAeUIBEgAb4iBZSSIhEgEiAJIBkgB5QgDiAFlJIiDpQgCiAaIAeUIA8gBZSSIg+UkyIFIAWSIhyUIAkgCyAPlCAJIBGUkyIFIAWSIh6UIAogCiARlCALIA6UkyIFIAWSIgWUk5KSkiEdICogDiASIB6UIAsgBZQgCSAclJOSkpIhECApIA8gEiAFlCAKIByUIAsgHpSTkpKSIR8MAgtBsLnCAEEOQcC5wgAQ2QkACyAcIR0gBSEQIB4hHyAaIQ8gGSEOIBshEQtBAiEBIAAgHSANkyIFIAWUIB8gF5MiBSAFlCAQIAyTIgUgBZSSkkMAAAAAkiAEIASUXwR/IAAgDzgCECAAIBc4AgQgAEEYaiAROAIAIABBFGogDjgCACAAQQxqIA04AgAgAEEIaiAMOAIAQQEFQQILNgIAC5sMAhx9An8jAEFAaiIhJABDAACgNRCTASEgAkACQAJAAkACQCADQQxqKgIAIgUgBZQgA0EQaioCACIGIAaUkiADQRRqKgIAIgggCJSSQwAAAACSEJMBIhBDAAAAAFsNAAJAIBBDAACAf1sNACAQQwAAgP9bDQAgEIsiC0MAAAA0Xw0BIAsgC0MAAAA0lF8NAQsgCCAQlSIVjCELIAYgEJUiFowhDiAFIBCVIheMIQ8gAyoCCCERIAMqAgQhEiADKgIAIRNDAACAPyEMQwAAAAAhBUMAAAAAIQYgFSAVlCAXIBeUIBYgFpSSkkMAAAAAkiIIQwAAAABeBEAgCyAIEJMBIgaVIQUgDiAGlSEMIA8gBpUhBgsgAkEANgK8ASACQQA2AqwBIAJBMGpBADYCACACQShqQgA3AgAgBiABKgIAIhqUIAwgAUEEaioCACIblJIgBSABQQhqKgIAIhyUkiAGIAFBDGoqAgAiHZQgDCABQRBqKgIAIh6UkiAFIAFBFGoqAgAiH5SSXiEDIAJBJGogBSABKgIYIhSUIBwgHyADG5IiBTgCACACQSBqIAwgFJQgGyAeIAMbkiIIOAIAIAJBHGogBiAUlCAaIB0gAxuSIgY4AgAgAkEYaiAFIBGTOAIAIAJBFGogCCASkzgCACACIAYgE5M4AhAgIUEIaiACEDxD//9/fyEHQZDOACEBA0AgISoCCCINIA2UICEqAgwiCiAKlJIgISoCECIJIAmUkkMAAAAAkiIFQwAAyCteRQ0DIAmMIAUQkwEiDJUhBSAKjCAMlSEGIA2MIAyVIQgCfSAHIAxfIiJFBEBDAAAAACENQwAAgD8hCkMAAAAAIQcgBSAFlCAIIAiUIAYgBpSSkkMAAAAAkiIJQwAAAABeBEAgBSAJEJMBIgeVIQ0gBiAHlSEKIAggB5UhBwsgFCANlCAcIB8gHCANlCAbIAqUIBogB5SSkiAfIA2UIB4gCpQgHSAHlJKSXiIDG5IhGSAUIAqUIBsgHiADG5IhCiAUIAeUIBogHSADG5IMAQsgGEMAAAAAXg0EIBEgCZIhGSASIAqSIQogEyANkgshDQJAAkACQCAVIAWUIBcgCJQgFiAGlJKSIgdDAAAAAFsNAAJAIAdDAACAf1sNACAHQwAAgP9bDQAgB4siCUMAAAA0Xw0BIAkgCUMAAAA0lF8NAQsgBSAZIBGTlCAGIAogEpOUIAggDSATk5SSkiAHlSIJQwAAAABgDQELQQAhAyAHQwAAoDVeDQYgIg0GDAELAkACQCAHQwAAAABdRQ0AIAlDAAAAAF5FDQAgBCAYIAmSIhggEJVdBEAgAEEANgIADAkLIBEgFSAJlCILkiERIBIgFiAJlCIOkiESIBMgFyAJlCIPkiETQ///f38hDCACKAK8ASIiQQFqIgNFDQEgAiACKgIQIA+TOAIQIAIgAioCFCAOkzgCFCACIAIqAhggC5M4AhggIkUNASACIAIqAjQgD5M4AjQgAiACKgI4IA6TOAI4IAIgAioCPCALkzgCPCADQQJGDQEgAiACKgJYIA+TOAJYIAIgAioCXCAOkzgCXCACIAIqAmAgC5M4AmAgA0EDRg0BIAIgAioCfCAPkzgCfCACIAIqAoABIA6TOAKAASACIAIqAoQBIAuTOAKEASAFIQsgBiEOIAghDyADQQRGDQJBBEEEQfSjwgAQwwgACyAiRQ0BIABBADYCAAwHCyAFIQsgBiEOIAghDwsgCCANIBOTIgiUIAYgCiASkyIGlJIgBSAZIBGTIgeUkiIFIAVbBEBBACEDIAwgBZIgICAMlF8NBSAhQQA2AjggIUIANwMwICEgGTgCLCAhIAo4AiggISANOAIkICEgBzgCICAhIAY4AhwgISAIOAIYIAIgIUEYahCrAhogIUEIaiACEDwgAigCvAFBA0YNAyAMIQcgAUEBayIBDQEMBQsLQeCgwgBBKEGYocIAENkJAAsgAEEANgIADAMLIAVDAACgtV8NAQsgAEEQaiALOAIAIABBDGogDjgCACAAQQhqIA84AgAgACAYIBCVOAIEQQEhAwsgACADNgIACyAhQUBrJAAL7wwCC38BfiMAQUBqIgQkACABKAIIIQUgAUECNgIIAkACQCAFQQJHBEAgASgCKCELIAEoAiQhDCABKQIAIQ4gASgCICgCACEKIARBCGoiA0EMaiABQRRqKQIANwIAIANBFGogAUEcaigCADYCACAEIAU2AgggBEGAAjsBICAEIAEpAgw3AgwgAigCACIFKAIAIQEgBSABQQFqNgIAIAFBAE4EQCAOpyIHQQxqKAIAIgEgBygCBEYEQCAHQQRqIAEQtAYgBygCDCEBCyAHQQhqKAIAIAFBDGxqIgMgBTYCCCADIAo2AgAgByABQQFqNgIMIAMgBEEIajYCBCAHQTBqIgEoAgAhBSABQQA2AgAgBUEMbCEBIAdBLGooAgAiBiEDIAVFDQIgASEDIAYhBQNAIAUoAggiCEUEQCAFQQxqIQMMBAsgCEEQaiINKAIAIQkgDSAJIAUoAgAgCRs2AgAgCUUEQCAIQRhqKAIAQRBqEJ8FCyAIIAgoAgAiCUEBazYCACAJQQFGBEAgCBDCCQsgBUEMaiEFIANBDGsiAw0ACwwDCwALQYjCwABBK0HgxsAAENkJAAsgASAGaiIBIANGDQAgASADa0EMbkEMbCEFIAMgBygCLCIBa0EMbkEMbCABakEIaiEBA0AgASgCACIGKAIAIQMgBiADQQFrNgIAIANBAUYEQCABKAIAEMIJCyABQQxqIQEgBUEMayIFDQALCwJAIA5CgICAgPAfg0IAUg0AQdzvwwAoAgBB/////wdxRQ0AQczzwwAoAgBFDQAgB0EBOgABCyAHQQA6AAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIgDCkDACAMKAIIEI8EQQFrDgMBAgMAC0HYxMAAQShByMnAABDZCQALIAsoAgAiBi0AACEBIAZBAToAACAEIAFBAXEiAToAJyABDQtBACECQdzvwwAoAgBB/////wdxBEBBzPPDACgCAEVFIQILIAYtAAENCCAGQQhqKAIAQQxrIQUgBkEMaigCACIHQQxsIQFBfyEDA0AgAUUNCiADQQFqIQMgAUEMayEBIAVBDGoiBSgCACAKRw0ACyADIAdPDQcgBUEIaigCACEDIAUgBUEMaiABEOIMGiAGQQxqIAdBAWs2AgAgA0UNCSADIAMoAgAiAUEBazYCACABQQFGBEAgAxDCCQsCQCACDQBB3O/DACgCAEH/////B3FFDQBBzPPDACgCAEUNACAGQQE6AAELIAZBADoAACAEKAIIIQEgBEECNgIIIAFBAkYNCiAAIAQoAhw2AhggACAEKQIUNwIQIAAgBCkCDDcCCCAAIAE2AgQgAEEANgIADAILIAsoAgAiBi0AACEBIAZBAToAACAEIAFBAXEiAToAJyABDQpBACECQdzvwwAoAgBB/////wdxBEBBzPPDACgCAEVFIQILIAYtAAENAyAGQQhqKAIAQQxrIQUgBkEMaigCACIHQQxsIQFBfyEDA0AgAUUNBSADQQFqIQMgAUEMayEBIAVBDGoiBSgCACAKRw0ACyADIAdPDQIgBUEIaigCACEDIAUgBUEMaiABEOIMGiAGQQxqIAdBAWs2AgAgA0UNBCADIAMoAgAiAUEBazYCACABQQFGBEAgAxDCCQsCQCACDQBB3O/DACgCAEH/////B3FFDQBBzPPDACgCAEUNACAGQQE6AAELIAZBADoAACAEKAIIIQEgBEECNgIIIAFBAkYNBSAAIAQoAhw2AhggACAEKQIUNwIQIAAgBCkCDDcCCCAAIAE2AgQgAEEBNgIADAELIAQtACBFBEBBACEBA0AgASABQQFqIAFBCksgAUEHT3EbIQEgBC0AIEUNAAsLIABBAjYCAAsgBEFAayQADwsgAyAHQezDwAAQwggACyAEIAI6ACwgBCAGNgIoQfzDwABBKyAEQShqQezHwABBiMnAABD9BwALQYjCwABBK0GIycAAENkJAAtBiMLAAEErQZjJwAAQ2QkACyADIAdB7MPAABDCCAALIAQgAjoALCAEIAY2AihB/MPAAEErIARBKGpB7MfAAEGoycAAEP0HAAtBiMLAAEErQajJwAAQ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BiAEQQgQ2gYgBigCCCEECyAGIARBCGo2AgggBigCBCAEaiACrTcAACACBEAgBSACQQd0aiEDA0AgCCAFKQMINwMIIAggBSkDADcDACAIIAVBKGopAwA3AyggCCAFQSBqKQMANwMgIAggBUEYaikDADcDGCAIIAVBEGopAwA3AxAgCCAFQdgAaikDADcDWCAIIAVB0ABqKQMANwNQIAggBUHIAGopAwA3A0ggCCAFQUBrKQMANwNAIAggBUE4aikDADcDOCAIIAVBMGopAwA3AzAgACAIEPYBIgQNAiAAIAhBMGoQ9gEiBA0CIAVB4ABqKAIAIQQgACgCACIGKAIIIQIgBigCACACa0EDTQRAIAYgAkEEENoGIAYoAgghAgsgBigCBCACaiAENgAAIAYgAkEEaiICNgIIIAVB5ABqKAIAIQQgBigCACACa0EDTQRAIAYgAkEEENoGIAYoAgghAgsgBigCBCACaiAENgAAIAYgAkEEaiICNgIIIAVB6ABqKAIAIQQgBigCACACa0EDTQRAIAYgAkEEENoGIAYoAgghAgsgBigCBCACaiAENgAAIAYgAkEEaiICNgIIIAVB7ABqKAIAIQQgBigCACACa0EDTQRAIAYgAkEEENoGIAYoAgghAgsgBiACQQRqNgIIIAYoAgQgAmogBDYAACAFQfQAai0AACEGIAVB8ABqKAIAIQQgACgCACIHKAIIIQIgBygCACACa0EDTQRAIAcgAkEEENoGIAcoAgghAgsgBygCBCACaiAENgAAIAcgAkEEaiICNgIIIAIgBygCAEYEQCAHIAJBARDaBiAHKAIIIQILIAcgAkEBajYCCCAHKAIEIAJqIAY6AAAgBUH4AGotAAAhBCAAKAIAIgYoAggiAiAGKAIARgRAIAYgAkEBENoGIAYoAgghAgsgBiACQQFqNgIIIAYoAgQgAmogBDoAACADIAVBgAFqIgVHDQALCyABQSxqKAIAIQQgAUEoaigCACEHIAAoAgAiAygCCCEFIAMoAgAgBWtBB00EQCADIAVBCBDaBiADKAIIIQULIAMgBUEIaiICNgIIIAMoAgQgBWogBK03AAAgBARAIARBAnQhBQNAIAcoAgAhBiAHQQRqIQcgAyADKAIAIAJrQQNLBH8gAgUgAyACQQQQ2gYgAygCCAsiBEEEaiICNgIIIAMoAgQgBGogBjYAACAFQQRrIgUNAAsLIAFBOGooAgAhBCABQTRqKAIAIQcgACgCACIDKAIIIQUgAygCACAFa0EHTQRAIAMgBUEIENoGIAMoAgghBQsgAyAFQQhqIgI2AgggAygCBCAFaiAErTcAACAEBEAgBEECdCEFA0AgBygCACEGIAdBBGohByADIAMoAgAgAmtBA0sEfyACBSADIAJBBBDaBiADKAIICyIEQQRqIgI2AgggAygCBCAEaiAGNgAAIAVBBGsiBQ0ACwsgAUHEAGooAgAhAiABQUBrKAIAIQcgACgCACIDKAIIIQQgAygCACAEa0EHTQRAIAMgBEEIENoGIAMoAgghBAsgAyAEQQhqIgA2AgggAygCBCAEaiACrTcAAEEAIQQgAkUNACAHIAJBDGxqIQYDQCAHQQRqLQAAIQIgBygCACEBIAMoAgAgAGtBA00EQCADIABBBBDaBiADKAIIIQALIAMoAgQgAGogATYAACADIABBBGoiADYCCCAAIAMoAgBGBEAgAyAAQQEQ2gYgAygCCCEACyADKAIEIABqIAI6AAAgAyAAQQFqIgI2AgggB0EIaigCACEBIAMoAgAgAmtBA00EQCADIAJBBBDaBiADKAIIIQILIAMgAkEEaiIANgIIIAMoAgQgAmogATYAACAGIAdBDGoiB0cNAAsLIAhB4ABqJAAgBAvwCwIBfwl9IwBBwAFrIgskACABIAEoAgBBCXI2AgAgByAEKgIMIhIgCEEUaioCACIOlCAEKgIAIgwgCCoCCCIPlJMgBCoCBCINIAhBDGoqAgAiE5STIAQqAggiECAIQRBqKgIAIhSUkzgCDCAHIBAgDpQgDCATlCASIBSUkiANIA+Uk5I4AgggByAQIA+UIA0gDpQgEiATlCAMIBSUk5KSOAIEIAcgDSAUlCASIA+UIAwgDpSSkiAQIBOUkzgCACAMIAhBHGoqAgAiE5QgDSAIQRhqKgIAIhSUkyIOIA6SIQ4gECAUlCAMIAhBIGoqAgAiEZSTIg8gD5IhDyAHIAQqAhggESASIA6UIAwgD5QgDSANIBGUIBAgE5STIhEgEZIiEZSTkpKSOAIYIAcgBCoCFCATIBIgD5QgECARlCAMIA6Uk5KSkjgCFCAHIAQqAhAgFCASIBGUIA0gDpQgECAPlJOSkpI4AhAgAioCACEMIAtBGGoiASAJKAIEIgc2AgQgASAJKAIAIAcoAghBB2pBeHFqNgIAIAIgDCAMIAsoAhggCygCHCgCnAERCwAiDSAMIA1dGyANIA1cGzgCACALQRBqIgEgCSgCBCIHNgIEIAEgCSgCACAHKAIIQQdqQXhxajYCACALQSBqIAsoAhAgCEEIaiIIIAsoAhQoAowBEQEAIAIqAgQhDCACIAsqAiAiDSANlCALKgIkIg0gDZSSIAsqAigiDSANlJJDAAAAAJIQkwEgCyoCLJIiDSANIAwgDCANXRsgDCAMXBs4AgQgC0EIaiIBIAkoAgQiAjYCBCABIAkoAgAgAigCCEEHakF4cWo2AgAgCygCDCECIAsoAgghBwJAAkACQAJAIAooAgBBAWsOAgEAAgsgC0HgAGoiAkEIaiAKKAIEIgFBCGopAgA3AwAgAkEQaiABQRBqKQIANwMAIAJBGGogAUEYaikCADcDACACQSBqIAFBIGopAgA3AwAgAkEoaiABQShqKAIANgIAIAsgASkCADcDYAwCCyAKKgIEIgxDAAAAAFsEQCALQfgAakIANwMAIAtBgAFqQgA3AwAgC0GIAWpBADYCACALQgA3A3AgC0IANwNgIAtCgICAgICAgMA/NwNoDAILIAtBkAFqIgEgB0MAAIA/IAIoApABERQAIAEgDBDFCCALQeAAaiICQShqIAFBKGooAgA2AgAgAkEgaiABQSBqKQMANwMAIAJBGGogAUEYaikDADcDACACQRBqIAFBEGopAwA3AwAgAkEIaiABQQhqKQMANwMAIAsgCykDkAE3A2AMAQsgCioCBCIMQwAAAABbBEAgC0H4AGpCADcDACALQYABakIANwMAIAtBiAFqQQA2AgAgC0IANwNwIAtCADcDYCALQoCAgICAgIDAPzcDaAwBCyALQeAAaiAHIAwgAigCkAERFAALIAtBMGogC0HgAGogCBDgAyAAKAIIIgggACgCAEYEQCAAIAgQuAYgACgCCCEICyAAIAhBAWo2AgggACgCBCAIQQN0aiIAIAY2AgQgACAFNgIAIAtBkAFqIgBBKGogC0EwaiIBQShqKAIANgIAIABBIGogAUEgaikDADcDACAAQRhqIAFBGGopAwA3AwAgAEEQaiIFIAFBEGopAwA3AwAgAEEIaiICIAFBCGopAwA3AwAgCyALKQMwNwOQASADQRhqIgEgABCC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IANFDQsgBhC1AQwLC0EBQeSIwABBjIPAABDmByEBDAoLIAIoAkwhAQwKCyAAQQxqIAIpAxA3AgAgAEEUaiACQRhqKAIANgIAIABBKGogDT4CACAAQSBqIAetQoGAgIAQfjcCACAAQRxqIAY2AgAgAEEYaiADNgIAIABBCGogCTYCACAAIAo2AgRBAAwKCyACQoHKADcDSCACQcgAahCJCyEBDAcLIAVBBEHI78MAKAIAIgBBigcgABsRAAAACyACQoHKADcDSCACQcgAahCJCyEBDAQLIAJCgcoANwNIIAJByABqEIkLIQEMAwsgAkKBygA3A0ggAkHIAGoQiQshAQwBC0EQQQRByO/DACgCACIAQYoHIAAbEQAAAAsgA0UNASAGELUBDAELIAIoAjBFDQAgAigCNBC1AQsgCkUNACAJELUBCyAAIAE2AgRBAQshASAAIAE2AgAgAkHgAGokAAvmCQIRfwJ9IwBBgAJrIgMkAAJAIAFBAEgNACACQQBIDQAgA0HYAGoiCCAAKAIIIAEgAhCGAiADQQhqIgFBCGoiESADQeQAaikCADcDACABQRBqIhIgA0HsAGopAgA3AwAgAUEYaiITIANB9ABqKQIANwMAIAFBIGoiByADQfwAaigCADYCACADIAMpAlw3AwggAygCWCECIANBMGoiAUEIaiADQYwBaikCADcDACABQRBqIANBlAFqKQIANwMAIAFBGGogA0GcAWopAgA3AwAgAUEgaiADQaQBaigCADYCACADIANBhAFqKQIANwMwIAMoAoABIQEgACgCICIGQTVqIQkgBkEEaiEEIAhBNWohCiAIQQRyIQUgACgCHCELIAAoAhghDCAAKAIEIQ0gACgCACEOIAAoAhQhDyAAKAIQIRAgACgCDCEIAkACQAJAAkAgAkEBaw4CAAIBCyADQagBaiIAQSBqIAcoAgA2AgAgAEEYaiATKQMANwMAIABBEGogEikDADcDACAAQQhqIBEpAwA3AwAgAyADKQMINwOoASADQdgAaiAIIBAgDyAAQeiwwgAgDiANIAwqAgAgCy0AABBJIAMtAIwBIgBBBUYNAiADQdABaiICQQhqIAVBCGopAgA3AwAgAkEQaiAFQRBqKQIANwMAIAJBGGogBUEYaikCADcDACACQSBqIAVBIGopAgA3AwAgAkEoaiAFQShqKQIANwMAIANBzgFqIApBAmotAAA6AAAgAyAFKQIANwPQASADIAovAAA7AcwBIABBBEYNACADKgJYIRRD//9/fyEVIAYtADRBBEcEfSAGKgIABUP//39/CyAUXkUNACAGIBQ4AgAgBCADKQPQATcCACAGIAA6ADQgCSADLwHMATsAACAEQQhqIANB0AFqIgBBCGopAwA3AgAgBEEQaiAAQRBqKQMANwIAIARBGGogAEEYaikDADcCACAEQSBqIABBIGopAwA3AgAgBEEoaiAAQShqKQMANwIAIAlBAmogA0HOAWotAAA6AAALIAFBAUcNACADQagBaiIBQSBqIANBMGoiAEEgaigCADYCACABQRhqIABBGGopAwA3AwAgAUEQaiAAQRBqKQMANwMAIAFBCGogAEEIaikDADcDACADIAMpAzA3A6gBIANB2ABqIAggECAPIAFB6LDCACAOIA0gDCoCACALLQAAEEkgAy0AjAEiAEEFRg0BIANB0AFqIgFBCGogBUEIaikCADcDACABQRBqIAVBEGopAgA3AwAgAUEYaiAFQRhqKQIANwMAIAFBIGogBUEgaikCADcDACABQShqIAVBKGopAgA3AwAgA0HOAWogCkECai0AADoAACADIAUpAgA3A9ABIAMgCi8AADsBzAEgAEEERg0AIAMqAlghFEP//39/IRUgBi0ANEEERwR9IAYqAgAFQ///f38LIBReRQ0AIAYgFDgCACAEIAMpA9ABNwIAIAYgADoANCAJIAMvAcwBOwAAIARBCGogA0HQAWoiAEEIaikDADcCACAEQRBqIABBEGopAwA3AgAgBEEYaiAAQRhqKQMANwIAIARBIGogAEEgaikDADcCACAEQShqIABBKGopAwA3AgAgCUECaiADQc4Bai0AADoAAAtBACEHDAELQQEhBwsgA0GAAmokACAHC6UKAQZ/IABBCGooAgAhAyAAQQRqKAIAIQUgASgCACIEKAIIIQIgBCgCACACa0EHTQRAIAQgAkEIENoGIAQoAgghAgsgBCACQQhqNgIIIAQoAgQgAmogA603AAAgA0EMbCECAkADQCACBEAgAkEMayECIAUgBBDwBSEDIAVBDGohBSADRQ0BDAILCyAAQRRqKAIAIQMgAEEQaigCACEGIAEoAgAiAigCCCEEIAIoAgAgBGtBB00EQCACIARBCBDaBiACKAIIIQQLIAIgBEEIaiIFNgIIIAIoAgQgBGogA603AAAgAwRAIAYgA0EDdGohBANAIAZBBGooAgAhByAGKAIAIQMgAigCACAFa0EDTQRAIAIgBUEEENoGIAIoAgghBQsgAigCBCAFaiADNgAAIAIgBUEEaiIDNgIIIAIoAgAgA2tBA00EQCACIANBBBDaBiACKAIIIQMLIAIgA0EEaiIFNgIIIAIoAgQgA2ogBzYAACAEIAZBCGoiBkcNAAsLIABBIGooAgAhBCAAQRxqKAIAIQUgASgCACICKAIIIQMgAigCACADa0EHTQRAIAIgA0EIENoGIAIoAgghAwsgAiADQQhqNgIIIAIoAgQgA2ogBK03AAAgBEEUbCEGA0AgBgRAIAUoAgAhBCACKAIAIAIoAggiA2tBA00EQCACIANBBBDaBiACKAIIIQMLIAIoAgQgA2ogBDYAACACIANBBGoiAzYCCCAFKAIEIQQgAigCACADa0EDTQRAIAIgA0EEENoGIAIoAgghAwsgAiADQQRqNgIIIAIoAgQgA2ogBDYAACAGQRRrIQYgBUEIaiEDIAVBFGohBSADIAIQ8AUiA0UNAQwCCwsgAEEsaigCACEGIABBKGooAgAhBSABKAIAIgIoAgghBCACKAIAIARrQQdNBEAgAiAEQQgQ2gYgAigCCCEECyACIARBCGoiAzYCCCACKAIEIARqIAatNwAAIAYEQCAFIAZBBXRqIQYDQCAFQQRqKAIAIQQgBSgCACEHIAIoAgAgA2tBB00EQCACIANBCBDaBiACKAIIIQMLIAIoAgQgA2pCAjcAACACIANBCGoiAzYCCCACKAIAIANrQQNNBEAgAiADQQQQ2gYgAigCCCEDCyACKAIEIANqIAc2AAAgAiADQQRqIgM2AgggAigCACADa0EDTQRAIAIgA0EEENoGIAIoAgghAwsgAigCBCADaiAENgAAIAIgA0EEaiIDNgIIIAVBDGooAgAhBCAFQQhqKAIAIQcgAigCACADa0EHTQRAIAIgA0EIENoGIAIoAgghAwsgAigCBCADakICNwAAIAIgA0EIaiIDNgIIIAIoAgAgA2tBA00EQCACIANBBBDaBiACKAIIIQMLIAIoAgQgA2ogBzYAACACIANBBGoiAzYCCCACKAIAIANrQQNNBEAgAiADQQQQ2gYgAigCCCEDCyACIANBBGo2AgggAigCBCADaiAENgAAIAVBEGoiBCACEPAFIgMNAiAEQQxqLQAAIQcgAigCCCIFIAIoAgBGBEAgAiAFQQEQ2gYgAigCCCEFCyACIAVBAWoiAzYCCCACKAIEIAVqIAc6AAAgBiAEQRBqIgVHDQALCyABIABBNGooAgAgAEE4aigCABCMByIDDQAgASAAQUBrKAIAIABBxABqKAIAEIwHIgMNACABIABBzABqKAIAIABB0ABqKAIAEIwHIgMNACABIABB2ABqKAIAIABB3ABqKAIAEIwHIQMLIAML7gkBDH8jAEHwAWsiCiQAAkACQAJAIABFDQAgACgCACILQX9GDQIgACALQQFqNgIAIAFFDQAgASgCACILQX9GDQIgASALQQFqNgIAIAJFDQAgAigCACILQX9GDQIgAiALQQFqNgIAIANFDQAgAygCACILQX9GDQIgAyALQQFqNgIAIARFDQAgBCgCACILQX9GDQIgBCALQQFqNgIAIAVFDQAgBSgCACILQX9GDQIgBSALQQFqNgIAIAZFDQAgBigCACILQX9GDQIgBiALQQFqNgIAIAdFDQAgBygCACILQX9GDQIgByALQQFqNgIAIApBQGsiDEEIaiACQQRqIgtBCGopAgA3AwAgCiALKQIANwNAIAxBGGogAUEEaiILQQhqKAIANgIAIAogCykCADcDUCAKQeAAaiINQQhqIAZBBGoiC0EIaikCADcDACAKIAspAgA3A2AgDUEYaiAFQQRqIgtBCGooAgA2AgAgCiALKQIANwNwIAogBEEEaiILKAIEIg42AgQgCiALKAIAIA4oAghBB2pBeHFqNgIAQQQhCyAKQbgBaiAMIANBBGogACgCBCAAQQhqKAIAIgwoAghBB2pBeHFqIAwgDSAHQQRqIAooAgAgCigCBCAIIAlBAEcQ0QICQCAKLQDsASIJQQVGDQAgCkGAAWoiDEEwaiIOIApBuAFqIg1BMGoiDygCADYCACAMQShqIhAgDUEoaiIRKQMANwMAIAxBIGoiEiANQSBqIhMpAwA3AwAgDEEYaiANQRhqKQMANwMAIAxBEGoiFCANQRBqIhUpAwA3AwAgDEEIaiANQQhqKQMANwMAIApB/gBqIgwgCkHvAWotAAA6AAAgCiAKKQO4ATcDgAEgCiAKLwDtATsBfCAJQQRGDQAg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5AwhASAAQdwAaiACNgIAIABB2ABqIAE2AgAgACACNgJUIABB0ABqIA02AgAgAEHMAGogAzYCACAAIA02AkggAEHEAGogCTYCACAAQUBrIBM2AgAgACAJNgI8IABBOGogDDYCACAAQTRqIBI2AgAgACAMNgIwIABBLGogCDYCACAAQShqIBE2AgAgACAINgIkIABBIGogCzYCACAAQRxqIBA2AgAgACALNgIYIABBFGogBzYCACAAQRBqIA82AgAgACAHNgIMIAAgCjYCCCAAIA42AgQgACAKNgIADwsgBCAGQcjvwwAoAgAiAEGKByAAGxEAAAALIAMgAkHI78MAKAIAIgBBigcgABsRAAAACyAFIAJByO/DACgCACIAQYoHIAAbEQAAAAsgAyAEQcjvwwAoAgAiAEGKByAAGxEAAAALIAYgAkHI78MAKAIAIgBBigcgABsRAAAACxCgCgALIAUgAUHI78MAKAIAIgBBigcgABsRAAAACyACIARByO/DACgCACIAQYoHIAAbEQAAAAudCgEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAABBAWsOEQECAwQFBgcICQoLDA0ODxARAAsgAiAALQABOgAIIAJBJGpBAjYCACACQSxqQQE2AgAgAkGIncMANgIgIAJBADYCGCACQYUHNgIUIAIgAkEQajYCKCACIAJBCGo2AhAgASACQRhqEJ8JDBELIAIgACkDCDcDCCACQSRqQQI2AgAgAkEsakEBNgIAIAJB7JzDADYCICACQQA2AhggAkH1ADYCFCACIAJBEGo2AiggAiACQQhqNgIQIAEgAkEYahCfCQwQCyACIAApAwg3AwggAkEkakECNgIAIAJBLGpBATYCACACQeycwwA2AiAgAkEANgIYIAJBhgc2AhQgAiACQRBqNgIoIAIgAkEIajYCECABIAJBGGoQnwkMDwsgAiAAKwMIOQMIIAJBJGpBAjYCACACQSxqQQE2AgAgAkHQnMMANgIgIAJBADYCGCACQYcHNgIUIAIgAkEQajYCKCACIAJBCGo2AhAgASACQRhqEJ8JDA4LIAIgACgCBDYCCCACQSRqQQI2AgAgAkEsakEBNgIAIAJBsJzDADYCICACQQA2AhggAkGIBzYCFCACIAJBEGo2AiggAiACQQhqNgIQIAEgAkEYahCfCQwNCyACIAApAgQ3AwggAkEkakEBNgIAIAJBLGpBATYCACACQZycwwA2AiAgAkEANgIYIAJBiQc2AhQgAiACQRBqNgIoIAIgAkEIajYCECABIAJBGGoQnwkMDAsgAkEkakEBNgIAIAJBLGpBADYCACACQYycwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMCwsgAkEkakEBNgIAIAJBLGpBADYCACACQYScwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMCgsgAkEkakEBNgIAIAJBLGpBADYCACACQfCbwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMCQsgAkEkakEBNgIAIAJBLGpBADYCACACQdybwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMCAsgAkEkakEBNgIAIAJBLGpBADYCACACQcSbwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMBwsgAkEkakEBNgIAIAJBLGpBADYCACACQbSbwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMBgsgAkEkakEBNgIAIAJBLGpBADYCACACQaibwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMBQsgAkEkakEBNgIAIAJBLGpBADYCACACQZybwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMBAsgAkEkakEBNgIAIAJBLGpBADYCACACQYibwwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMAwsgAkEkakEBNgIAIAJBLGpBADYCACACQfCawwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMAgsgAkEkakEBNgIAIAJBLGpBADYCACACQdiawwA2AiAgAkHAmsMANgIoIAJBADYCGCABIAJBGGoQnwkMAQsgASgCACAAKAIEIABBCGooAgAgASgCBCgCDBEFAAshACACQTBqJAAgAAuACQIBfxJ9IwBBkAJrIgUkACAFQbABakEANgIAIAVBwAFqQQA2AgAgBUIANwOoASAFQgA3A7gBIAVCgoCAgDA3AxAgBUKAgICAEDcDCCAFQTxqQQBB7AAQ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IAyTkiAUIA0gEpQgByAOlCAFIAiUk5KSkjgCACAAIBogApQgEZIgDSAQlCAKIAuUIAcgD5STkiARk5IgFSANIA6UIAogCJQgByASlJOSkpI4AhAL7wgBC38jAEEQayIMJAAgASAAKAIAIgYoAghPBEAgDEEIaiIFQQA6AAQgBUF/NgIAIAFBAWoiCyEHAkAgBigCCCIIIAtPDQAgDC0ADCEJIAwoAgghCiAIIQcgCyAIayINIAYoAgAgCGtLBEAgBiAIIA0QrwYgBigCCCEHCyAGKAIEIAdBBHRqIQQgDUECTwRAIAEgCGsiBUEDcSEOIAhBf3MgAWpBA08EQCAFQXxxIQUDQCAEQn83AgggBCAJOgAEIAQgCjYCACAEQThqQn83AgAgBEE0aiAJOgAAIARBMGogCjYCACAEQShqQn83AgAgBEEkaiAJOgAAIARBIGogCjYCACAEQRhqQn83AgAgBEEUaiAJOgAAIARBEGogCjYCACAEQUBrIQQgBUEEayIFDQALCyAOBEADQCAEQn83AgggBCAJOgAEIAQgCjYCACAEQRBqIQQgDkEBayIODQALCyAHIA1qQQFrIQcLIAggC0YNACAEQn83AgggBCAJOgAEIAQgCjYCACAHQQFqIQcLIAYgBzYCCAJAIAAoAgQiCSgCCCIIIAtPDQAgCCEFIAsgCGsiCiAJKAIAIAhrSwRAIAkgCCAKELAGIAkoAgghBQsgCSgCBCAFQRhsaiEEIApBAk8EQCABIAhrIgdBA3EhBiAIQX9zIAFqQQNPBEAgB0F8cSEHA0AgBEL////7////v383AhAgBEL////79///v383AgggBEL////79///v/8ANwIAIARB2ABqQv////v///+/fzcCACAEQdAAakL////79///v383AgAgBEHIAGpC////+/f//7//ADcCACAEQUBrQv////v///+/fzcCACAEQThqQv////v3//+/fzcCACAEQTBqQv////v3//+//wA3AgAgBEEoakL////7////v383AgAgBEEgakL////79///v383AgAgBEEYakL////79///v/8ANwIAIARB4ABqIQQgB0EEayIHDQALCyAGBEADQCAEQv////v///+/fzcCECAEQv////v3//+/fzcCCCAEQv////v3//+//wA3AgAgBEEYaiEEIAZBAWsi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AGooAgA2AgAgAEEwaiALQeAAaigCADYCAAwDCyAAQQU6ADQMAgsgAyAEKAKcARELACAGIAcoApwBEQsAkiERIAMgBCgCoAERCwAhECAGIAcoAqABEQsAIhIgEiAQIBAgEl0bIBAgEFwbIRBBAQshCiALQegAaiADIAQoAoABEQAAIAtB+ABqIAYgBygCgAERAAACQCALKgJ0IAsqAoQBYEUEQCALIBA4AiggCyAROAIkIAsgCjYCICALQYgBaiABIAUgDiAPIAYgByACIAwgDSADIAQgCCAJIAtBIGoQOCALLQC8ASIDQQRGBEAgC0EEOgBUDAILIAtBIGoiAUEYaiALQYgBaiICQQxqKAIANgIAIAFBDGogAkEYaigCADYCACABQTBqIAJBJGooAgA2AgAgAUEkaiACQTBqKAIANgIAIAsgCykCjAE3AzAgCyALKQOYATcCJCALIAspAqQBNwNIIAsgCykDsAE3AjwgCyADOgBUIAsgCyoCiAE4AiAMAQsgCyAQOAKQASALIBE4AowBIAsgCjYCiAEgC0EgaiABIAIgDCANIAMgBCAFIA4gDyAGIAcgCCAJIAtBiAFqEDgLIAAgCykDIDcCACAAQTBqIAtBIGoiAUEwaikDADcCACAAQShqIAFBKGopAwA3AgAgAEEgaiABQSBqKQMANwIAIABBGGogAUEYaikDADcCACAAQRBqIAFBEGopAwA3AgAgAEEIaiABQQhqKQMANwIACyALQcABaiQAC/UHAgV/Dn0jAEGQAmsiBSQAIAVBsAFqQQA2AgAgBUHAAWpBADYCACAFQgA3A6gBIAVCADcDuAEgBUKCgICAMDcDECAFQoCAgIAQNwMIIAVBPGpBAEHsABDjDBogAioCDCIMIAyUIAJBEGoqAgAiDSANlJIgAkEUaioCACILIAuUkkMAAAAAkiIREJMBIQogBUE4akEANgIAIAVBMGpCADcDACAFQSxqIAuMIhMgCpUiDyABKgIMIg6UIAEoAghB/////wdxIgYgD7xBgICAgHhxcr6SIAIqAggiD5MiFDgCACAFQShqIA4gDYwiFSAKlSIQlCABKAIEQf////8HcSIHIBC8QYCAgIB4cXK+kiACKgIEIhCTIhY4AgAgBUEkaiAOIAyMIhcgCpUiCpQgASgCAEH/////B3EiCCAKvEGAgICAeHFyvpIg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aiIDQQhqKQMANwIAIAFBHGogA0EQaikDADcCACABQSRqIANBGGooAgA2AgAgAUEwaiACQQhqKQMANwIAIAFBOGogAkEQaikDADcCACABQUBrIAJBGGooAgA2AgAgASAKOgBEIAEgAi8AQDsARSABQccAaiACQcIAai0AADoAACAAQaSWwgA2AgQgACABNgIAIAJBgAFqJAAPCyAEIAdByO/DACgCACIAQYoHIAAbEQAAAAsQoAoACyAGIAdByO/DACgCACIAQYoHIAAbEQAAAAtByABBBEHI78MAKAIAIgBBigcgABsRAAAAC70HAQV/AkACQAJAAkAgACgCAEEBaw4CAQIACyAAKAIEIgIoAoACIQEgAiABQQFrNgKAAiABQQFHDQIgACgCBCIDKAJAIQEgAyADKALQASICIAFyNgJAIAEgAnFFBEAgA0GAAWoQ9AUgA0GgAWoQ9AULIAAoAgQiAS0AiAIhAiABQQE6AIgCIAJFDQIgACgCBCICQcQBaigCAARAIAIoAsABELUBCyACQYQBahDjBSACQaQBahDjBSACELUBDAILIAAoAgQiAigCwAEhASACIAFBAWs2AsABIAFBAUcNASAAKAIEIgEoAkAhAiABIAJBAXI2AkAgAkEBcUUEQCABQYABahD0BQsgACgCBCIBLQDIASECIAFBAToAyAEgAkUNASAAKAIEIgUoAgQhASAFKAIAQX5xIgMgBSgCQEF+cSIERwRAA0AgA0E+cUE+RgRAIAEoAgAhAiABELUBIAIhAQsgBCADQQJqIgNHDQALCyABBEAgARC1AQsgBUGEAWoQ4wUgBRC1AQwBCyAAKAIEIgIoAjghASACIAFBAWs2AjggAUEBRw0AIAAoAgQiARCBBiABLQBAIQIgAUEBOgBAIAJFDQAgACgCBCICQQRqEOMFIAJBHGoQ4wUgAhC1AQsCQAJAAkACQCAAKAIIQQFrDgIBAgALIABBDGooAgAiAigCgAIhASACIAFBAWs2AoACIAFBAUcNAiAAKAIMIgMoAkAhASADIAMoAtABIgIgAXI2AkAgASACcUUEQCADQYABahD0BSADQaABahD0BQsgACgCDCIBLQCIAiECIAFBAToAiAIgAkUNAiAAKAIMIgBBxAFqKAIABEAgACgCwAEQtQELIABBhAFqEOMFIABBpAFqEOMFIAAQtQEP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ACAOOAIAIABBDGogGDgCACAAQQhqIBc4AgAgBEGQAWokAAv2BgEIfyMAQTBrIgIkACACIAA2AggCQAJAAkACQAJAAkAgAEECSQRAAkACQCABIABByABsaigCDCIFQQJPDQAgASAFQcgAbGotAERFDQMgASAAQcgAbGpBEGooAgAiBkECTwRAIAYhBQwBCyABIAZByABsai0AREUNAyABIABByABsakEUaigCACIHQQJJDQEgByEFCyAFQQJBtIXDABDDCAALIAEgB0HIAGxqLQBERQ0BIAJBADYCDCABIABByABsaigCGCIDQQJLDQUgASAFQcgAbGogA0ECdGpBDGoiBCgCACAARw0CIAEgBUHIAGxqIANBAnRqIghBGGoiBCgCAA0DIAIgCEEkaigCACIINgIQIAIgASAAQcgAbGpBKGooAgAiBDYCFCAEIAhHDQQgAiABIAVByABsaiADQQFqQf8BcUEDcEECdGpBJGooAgAiBTYCECACIAEgAEHIAGxqIgMoAiQiBDYCFAJAIAQgBUcNACACQQE2AgwgA0EcaigCACIDQQJLDQYgASAGQcgAbGogA0ECdGoiCUEMaiIEKAIAIABHDQMgCUEYaiIEKAIAQQFHDQQgAiABIAZByABsaiIEIANBAnRqQSRqKAIAIgY2AhAgAiABIABByABsakEsaigCACIJNgIUIAYgCUcNBSACIAQgA0EBakH/AXFBA3BBAnRqQSRqKAIAIgM2AhAgAiAINgIUIAMgCEcNACABIABByABsakEgaigCACEDIAJBAjYCDCADQQJLDQYgASAHQcgAbGogA0ECdGpBDGoiBCgCACAARw0DIAEgB0HIAGxqIANBAnRqIgBBGGoiBCgCAEECRw0EIAIgAEEkaigCACIANgIQIAIgBTYCFCAAIAVHDQUgAiABIAdByABsaiADQQFqQf8BcUEDcEECdGpBJGooAgAiADYCECACIAY2AhQgACAGRg0HCyACQQA2AiAgAkEQaiACQRRqIAJBGGpBwIbDABCOCQALIABBAkGkhcMAEMMIAAtBxIXDAEEsQfCFwwAQ2QkACyACQQA2AiAgBCACQQhqIAJBGGpBkIbDABCOCQALIAJBADYCICAEIAJBDGogAkEYakGghsMAEI4JAAsgAkEANgIgIAJBEGogAkEUaiACQRhqQbCGwwAQjgkA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NgJYIBMgEUHYAGpBABDGAgsgEUGQAWokACASQRBqIghBOGogE0E4aigCADYCACAIQTBqIBNBMGopAwA3AwAgCEEoaiATQShqKQMANwMAIAhBIGogE0EgaikDADcDACAIQRhqIBNBGGopAwA3AwAgCEEQaiATQRBqKQMANwMAIAhBCGogE0EIaikDADcDACASQQ5qIBJBjwFqLQAAOgAAIBIgEikDUDcDECASIBIvAI0BOwEMIBItAIwBIQggBiAGKAIAQQFrNgIAIAUgBSgCAEEBazYCACAEIAQoAgBBAWs2AgAgAyADKAIAQQFrNgIAIAIgAigCAEEBazYCACABIAEoAgBBAWs2AgAgACAAKAIAQQFrNgIAIAhBBEcEQEHEAEEEEPcLIhBFDQIgEEEANgIAIBAgEikDEDcCBCAQIAg6AEAgEEEMaiASQRhqKQMANwIAIBBBFGogEkEgaikDADcCACAQQRxqIBJBKGopAwA3AgAgEEEkaiASQTBqKQMANwIAIBBBLGogEkE4aikDADcCACAQQTRqIBJBQGspAwA3AgAgEEE8aiASQcgAaigCADYCACAQQcMAaiASQQ5qLQAAOgAAIBAgEi8BDDsAQQsgEkGQAWokACAQDwsQ2gwAC0HEAEEEQcjvwwAoAgAiAEGKByAAGxEAAAALENsMAAvDBgIBfwF9IAAoAgAiAigCCCEAIAIoAgAgAGtBB00EQCACIABBCBDaBiACKAIIIQALIAIoAgQgAGpCAzcAACACIABBCGoiADYCCCABKgIAIQMgAigCACAAa0EDTQRAIAIgAEEEENoGIAIoAgghAAsgAigCBCAAaiADOAAAIAIgAEEEaiIANgIIIAEqAgQhAyACKAIAIABrQQNNBEAgAiAAQQQQ2gYgAigCCCEACyACKAIEIABqIAM4AAAgAiAAQQRqIgA2AgggASoCCCEDIAIoAgAgAGtBA00EQCACIABBBBDaBiACKAIIIQALIAIoAgQgAGogAzgAACACIABBBGoiADYCCCABKgIMIQMgAigCACAAa0EDTQRAIAIgAEEEENoGIAIoAgghAAsgAigCBCAAaiADOAAAIAIgAEEEaiIANgIIIAEqAhAhAyACKAIAIABrQQNNBEAgAiAAQQQQ2gYgAigCCCEACyACKAIEIABqIAM4AAAgAiAAQQRqIgA2AgggAUEU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BZQgCSADlCAGIASUk5KSkjgCACAAIBYgApQgD5IgByALIAOUIAogBJQgCSAFlJOSkpI4AhALpQQBAn8gACgCmAEEQCAAQZwBaigCABC1AQsgACgCAARAIABBBGooAgAQtQELIAAoAhAEQCAAQRRqKAIAELUBCyAAKAIgBEAgAEEkaigCABC1AQsgAEGsAWooAgAiAQRAIABBqAFqKAIAIQIgAUEEdCEBA0AgAigCAARAIAJBBGooAgAQtQELIAJBEGohAiABQRBrIgENAAsLIAAoAqQBBEAgAEGoAWooAgAQtQELIAAoArABBEAgAEG0AWooAgAQtQELIAAoAkAEQCAAQcQAaigCABC1AQsgAEHUAGooAgAEQCAAQdgAaigCABC1AQsgACgCxAEEQCAAQcgBaigCABC1AQsgACgCaARAIABB7ABqKAIAELUBCyAAQfwAaigCAARAIABBgAFqKAIAELUBCyAAQegBaigCAARAIABB7AFqKAIAELUBCyAAKALYAQRAIABB3AFqKAIAELUBCyAAQfwBaigCACIBBEAgAEH4AWooAgAhAiABQQR0IQEDQCACKAIABEAgAkEEaigCABC1AQsgAkEQaiECIAFBEGsiAQ0ACwsgACgC9AEEQCAAQfgBaigCABC1AQsgAEGIAmooAgAiAQRAIABBhAJqKAIAIQIgAUEEdCEBA0AgAigCAARAIAJBBGooAgAQtQELIAJBEGohAiABQRBrIgENAAsLIAAoAoACBEAgAEGEAmooAgAQtQELIAAoAjAEQCAAQTRqKAIAELUBCwvzBQMNfwV9BH4jAEHAAmsiBCQAIABBADoADCAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIAIARBCGoiAyABQQBBABCGAiAEQgA3A1ggBCABNgJgIARB6ABqIgUgA0HcABDkDBogBCgCaEEBRiEBIARBlAFqIQggBUEEciEFQ///f38hEgNAIARBmAJqIgNBIGoiCSAFQSBqIgooAgA2AgAgA0EYaiILIAVBGGoiDCkCADcDACADQRBqIg0gBUEQaiIOKQIANwMAIANBCGoiDyAFQQhqIhApAgA3AwAgBEEANgJoIAQgBSkCADcDmAICQCABQQFxDQAgBCgCwAEhBwNAIAQoApABIQEgBEEANgKQASABQQFGBEAgCCEDDAILIAQgBCgCuAFB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aigCADYCACAKIAdB7ABqKQIANwMAIAcgBykCZDcDKAsgB0EQaiILQQhqIAopAwA3AwAgC0EQaiAHQThqKAIANgIAIAcgBykDKDcDECAEIAQoAgBBAWs2AgAgAyADKAIAQQFrNgIAIAIgAigCAEEBazYCACABIAEoAgBBAWs2AgAgACAAKAIAQQFrNgIAIAlFBEBBHEEEEPcLIghFDQIgCCAGNgIEIAhBADYCACAIIAcpAxA3AgggCEEQaiAHQRhqKQMANwIAIAhBGGogB0EgaigCADYCAAsgB0GQAWokACAIDwsQ2gwAC0EcQQRByO/DACgCACIAQYoHIAAbEQAAAAsQ2wwAC4cFAQZ/AkAgAEEYaigCACIGIAFPDQAgASAGIgRrIQUgBSAAKAIQIARrSwRAIABBEGogBiAFELAGIAAoAhghBAsgAEEUaigCACAEQRhsaiEDIAVBAk8EQCAGQX9zIAFqIgdBB3EhCCAFQQJrQQdPBEAgB0F4cSEHA0AgA0IANwIAIANBEGpCADcCACADQQhqQgA3AgAgA0EYakIANwIAIANBIGpCADcCACADQShqQgA3AgAgA0EwakIANwIAIANBOGpCADcCACADQUBrQgA3AgAgA0HIAGpCADcCACADQdAAakIANwIAIANB2ABqQgA3AgAgA0HgAGpCADcCACADQegAakIANwIAIANB8ABqQgA3AgAgA0GIAWpCADcCACADQYABakIANwIAIANB+ABqQgA3AgAgA0GgAWpCADcCACADQZgBakIANwIAIANBkAFqQgA3AgAgA0GoAWpCADcCACADQbABakIANwIAIANBuAFqQgA3AgAgA0HAAWohAyAHQQhrIgcNAAsLIAgEQANAIANCADcCACADQRBqQgA3AgAgA0EIakIANwIAIANBGGohAyAIQQFrIggNAAsLIAQgBWpBAWshBAsgASAGRgRAIAQhAQwBCyADQgA3AgAgA0EQakIANwIAIANBCGpCADcCACAEQQFqIQELIAAgATYCGAJAAkACQCACRQRAQQQhAwwBCyACQf////8BSw0BIAJBAnQiAUEEEPcLIgNFDQIgA0EAIAEQ4wwaCyAAKAIABEAgAEEEaigCABC1AQsgACACNgIMIAAgAjYCCCAAIAI2AgAgAEEEaiADNgIADwsQoAoACyABQQRByO/DACgCACIA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C4kFAgV/AX4jAEFAaiICJAACfyABKAIAIgNFBEAgAEEIakEANgIAQQAMAQsgASADQQFrNgIAIAIgASgCBDYCFCACQQM2AhAgAkEoaiACQRBqEJsDAkACQAJAAkACQAJAIAIoAihFBEAgAkEwaigCACIDRQRAQQAgAkGwg8AAEOYHIQEMBwsgAigCLCEEIAIoAhAiAUUEQEEBIAJBsIPAABDmByEBDAYLIAFBAUcEQCACKAIUIgEoAgQiBkEISQ0DIAJBNGooAgAhBSABIAZBCGs2AgQgASABKAIAIgFBCGo2AgAgASkAACIHQoCAgIAQVA0CIAJBAToAKCACIAc3AzAgAkEoaiACQeyAwAAQrAghAQwGC0ECIAJBsIPAABDmByEBDAULIAIoAiwhAQwFCyAHp0EGbCIBIAVGDQIgAkEcakEBNgIAIAIgATYCICACQQE2AhQgAiAFNgIkIAIgAkEkajYCGCACIAJBIGo2AhAgAkECNgI8IAJBAjYCNCACQZixwAA2AjAgAkEANgIoIAIgAkEQaiIBNgI4IAIgAkEoahCUAyABIAIQ/wggAkEzaiABQQhqKAIANgAAIAIgAikDEDcAK0EQQQQQ9wsiAUUNASABQQg6AAAgASACKQAoNwABIAFBCGogAkEvaikAADcAACACKAIABEAgAigCBBC1AQsgBEUNBCADELUBDAQLIAJCgcoANwMoIAJBKGoQiQshAQwCC0EQQQRByO/DACgCACIAQYoHIAAbEQAAAAsgACAENgIEIABBCGogAzYCACAAQQxqIAWtIAdCIIaENwIAQQAMAgsgBEUNACADELUBCyAAIAE2AgRBAQshASAAIAE2AgAgAkFAayQAC/YEAgN/An0CQAJAQTBBBBD3CyIDBEAgAyABKQIANwIAIANBKGogAUEoaikCADcCACADQSBqIAFBIGopAgA3AgAgA0EYaiABQRhqKQIANwIAIANBEGogAUEQaikCADcCACADQQhqIAFBCGopAgA3AgAgAEHUAWooAgAiBEUNAQJAAn8CQAJAIAQoAgAiASADKAIARw0AIAENASAEQRRqKgIAIANBFGoqAgBcDQAgBEEYaioCACADQRhqKgIAXA0AIARBHGoqAgAgA0EcaioCAFwNACAEQSBqKgIAIANBIGoqAgBcDQAgBEEkaioCACADQSRqKgIAXA0A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AyoADCEJIAEgBUEUayIENgIEIAEgA0EUajYCACAEQQNNBEAgAkEAOgADIAJBJTsAASACQQA2AgQgAkEBOgAADAELIAMqABAhCiABIAVBGGsiBDYCBCABIANBGGo2AgAgBEEETwRAIAMqABQhCyABIAVBHGs2AgQgASADQRxqNgIAQQAhAQJAAkACQCADKAAYIgMOAgIBAAsgAkEBOgAAIAIgA603AwggAkHUh8AAQYyDwAAQrAgMBAtBASEBCyAAIAE6ABggACALOAIUIAAgCjgCECAAIAk4AgwgACAIOAIIIAAgBzgCBCAAIAY2AgAMAwsgAkKBygA3AwALIAIQiQsLIQEgAEEDOgAYIAAgATYCAAsgAkEQaiQAC58FAg9/AX4jAEEQayIDJAAgASkCYCERIAFCgICAgMAANwJgIANBCGoiBiABQegAaiICKAIANgIAIAJBADYCACADIBE3AwAgAUGEAWooAgAhByABQewAaigCACEIIAFBoAFqKAIAIQkgAUGcAWooAgAhCiABQZgBaigCACELIAFBlAFqKAIAIQwgAUGQAWooAgAhDSABQYwBaigCACEOIAEoAlwhDyABKAJYIRACQAJAAkAgAUGIAWooAgAiAkUEQEEEIQQMAQsgAkGz5swZSw0BIAJBKGwiBUEEEPcLIgRFDQILIAQgByAFEOQMIQQgAEHwAGogAUHwAGopAgA3AgAgAEH4AGogAUH4AGooAgA2AgAgACADKQMANwJgIABB6ABqIAYoAgA2AgAgACABKQJANwJAIABByABqIAFByABqKAIANgIAIAAgASkCTDcCTCAAQdQAaiABQdQAaigCADYCACABQfwAaigCACEFIAFBpAFqLwEAIQYgACAPNgJcIAAgEDYCWCAAIAEpAgA3AgAgAEEIaiABQQhqKQIANwIAIABBEGogAUEQaikCADcCACAAQRhqIAFBGGopAgA3AgAgACABKQIgNwIgIABBKGogAUEoaikCADcCACAAQTBqIAFBMGopAgA3AgAgAEE4aiABQThqKQIANwIAIABBpAFqIAY7AQAgAEGgAWogCTYCACAAQZwBaiAKNgIAIABBmAFqIAs2AgAgAEGUAWogDDYCACAAQZABaiANNgIAIABBjAFqIA42AgAgAEGIAWogAjYCACAAQYQBaiAENgIAIABBgAFqIAI2AgAg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BEKAgICA8P//v383AjggBEL////7////v/8ANwIwIARC////+wc3AiggBEKAgICA8P//v383AiAgBEL////7////v/8ANwIYIARC////+wc3AhAgBEKAgICA8P//v383AgggBEL////7////v/8ANwIAIAZBoAVqIgdBGGoiCSAOKAIANgIAIAdBEGoiCCANKQMANwMAIAdBCGoiCiAMKQMANwMAIAYgBikDADcDoAUgBCAHKQIANwLwASAFIAkoAgA2AgAgBEGAAmogCCkCADcCACAEQfgBaiAKKQIANwIAIAZBQGsiBSAEQbACEOQMGiAJIBEoAgA2AgAgCCAQKQMANwMAIAogDykDADcDACAGIAYpAyA3A6AFIAUgBykCADcCjAIgBUGkAmogCSgCADYCACAFQZwCaiAIKQIANwIAIAVBlAJqIAopAgA3AgAgBCAFQbACEOQMGiAFIAQQvQwgAyADKAIAQQFrNgIAIAIgAigCAEEBazYCACABIAEoAgBBAWs2AgAgACAAKAIAQQFrNgIAQbQCQQQQ9wsiAEUNASAAQQA2AgAgAEEEaiAGQUBrQbACEOQMGiAGQcAFaiQAIAAPCxDaDAALQbQCQQRByO/DACgCACIAQYoHIAAbEQAAAAsQ2wwAC/YDAgJ/CX0jAEHQAGsiBiQAIAMqAgAgAioCEJMiDyACQQRqKgIAIgqUIAMqAgQgAkEUaioCAJMiECACKgIAIguUkyIJIAmSIQwgECACQQhqKgIAIgmUIAMqAgggAkEYaioCAJMiCCAKlJMiDiAOkiENIAYgCCACKgIMIg4gDJQgCiANlCALIAggC5QgDyAJlJMiCCAIkiIIlJOSkjgCMCAGIBAgDiAIlCALIAyUIAkgDZSTkpI4AiwgBiAPIA4gDZQgCSAIlCAKIAyUk5KSOAIoIAogA0EMaioCACIPlCALIANBEGoqAgAiEJSTIgwgDJIhDCAJIBCUIAogA0EUaioCACIIlJMiDSANkiENIAYgCCAOIAyUIAogDZQgCyALIAiUIAkgD5STIgggCJIiCJSTkpI4AkAgBiAQIA4gCJQgCyAMlCAJIA2Uk5KSOAI8IAYgDyAOIA2UIAkgCJQgCiAMlJOSkjgCOCAGQRBqIgMgBkEoaiAGQThqIgIQ1gogAUEIaiIHKgIAIQogASoCACELIAEqAgQhCSAC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CCELCyAOKAIEIAtqIBw3AAAgDiALQQhqIgs2AgggCjUCNCEcIA5BCGohDCAOQQRqIRMgDigCACALa0EHTQRAIA4gC0EIENoGIA4oAgghCwsgDiALQQhqIhI2AgggDigCBCALaiAcNwAAIBgoAggiD0EMaigCACELIA9BCGooAgAhDSAOKAIAIBJrQQdNBEAgDiASQQgQ2gYgDigCCCESCyAMIBJBCGoiCjYCACATKAIAIBJqIAutNwAAIAsEQCANIAtBA3RqIREDQCANQQRqKAIAIRIgDSgCACELIA4oAgAgCmtBA00EQCAOIApBBBDaBiAOKAIIIQoLIA4oAgQgCmogCzYAACAOIApBBGoiCzYCCCAOKAIAIAtrQQNNBEAgDiALQQQQ2gYgDigCCCELCyAMIAtBBGoiCjYCACATKAIAIAtqIBI2AAAgESANQQhqIg1HDQALCyAPQRhqKAIAIREgD0EUaigCACENIA4oAgAgCmtBB00EQCAOIApBCBDaBiAOKAIIIQoLIAwgCkEIaiILNgIAIBMoAgAgCmogEa03AAAgEQRAIA0gEUEDdGohEQNAIA1BBGooAgAhEiANKAIAIQogDigCACALa0EDTQRAIA4gC0EEENoGIA4oAgghCwsgDigCBCALaiAKNgAAIA4gC0EEaiIKNgIIIA4oAgAgCmtBA00EQCAOIApBBBDaBiAOKAIIIQoLIAwgCkEEaiILNgIAIBMoAgAgCmogEjYAACARIA1BCGoiDUcNAAsLIA9BJGooAgAhESAPQSBqKAIAIQ0gDigCACALa0EHTQRAIA4gC0EIENoGIA4oAgghCwsgDCALQQhqIgo2AgAgEygCACALaiARrTcAACARBEAgEUECdCESA0AgDTUCACEcIA1BBGohDSAMIA4oAgAgCmtBB0sEfyAKBSAOIApBCBDaBiAOKAIICyILQQhqIgo2AgAgEygCACALaiAcNwAAIBJBBGsiEg0ACwsgDygCACENIA4oAgAgCmtBA00EQCAOIApBBBDaBiAOKAIIIQoLIA4gCkEEaiILNgIIIA4oAgQgCmogDTYAACAYKAIMIhZBDGooAgAhDSAWQQhqKAIAIQ8gDigCACALa0EHTQRAIA4gC0EIENoGIA4oAgghCwsgDCALQQhqIgo2AgAgEygCACALaiANrTcAACANBEAgDyANQSxs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eEcEQCADRQ09IAEgA0HI78MAKAIAIgBBigcgABsRAAAACyACKAKoAyEECyAEIAIoArADIgNGBEAgJSAEELwGIAIoArADIQMLIAIoAqwDIANBFGxqIgEgITYCBCABQQxqIBk2AgAgAUEIaiAUNgIAIAEgCjYCACABICI2AhAgAiADQQFqNgKwAwsgByEEIAUNAAsgAigCmAMhCSACKAKkAyIORQRAIAkhAwwICyACKAKwAyEHIAIoAqwDIRMgAigCqAMhFSACKQKcAyFPIGW8IQMgHkECaw4CBwcICyAHIANByO/DACgCACIAQYoHIAAbEQAAAAsgAkKBygA3A5gDIAJBmANqEIkLIQMMBQsMLQsgAkKBygA3A5gDIAJBmANqEIkLIQMMAwsgByACQYgHakGQgMAAEOYHDAELIAJCgcoANwOABCACQYAEahCJCwshAyACKAKYAyIBBEAgAigCpAMgAUECdEELakF4cWsQtQELIAIoAqgDRQ0AIAIoAqwDELUBCyACKAK0AiEHIAsEQCALQQZ0IQQgByEBA0AgARC7ByABQUBrIQEgBEFAaiIEDQALCyACKAKwAkUNFiAHELUBDBYLIAZBAWshBiACKAKwAiALRgRAIAJBsAJqIAsQvwYgAigCuAIhCyACKAK0AiEMCyAMIAtBBnRqIgEgLjoAPSABICs6ADwgASAwOgA7IAEgKjoAOiABICk6ADkgASAeOgA4IAFCBDcCMCABQgA3AiggAUKAgICAwAA3AiAgASAHNgIcIAEgEzYCGCABIBU2AhQgASAONgIQIAEgTzcCCCABIAk2AgQgASADNgIAIAIgC0EBaiILNgK4AiAGDQALIAIoArACIQMgAigCtAIiDA0TDBQLDCYLQZQBQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAkKBygA3A8ABIAJBwAFqEIkLIQMMFQsgAkKBygA3A8ABIAJBwAFqEIkLIQMMFAsgAigCxAEhAwwUCyACQoHKADcDwAEgAkHAAWoQiQshAwwUCyACKALsAiEDDBULDB4LDCMLIAIoApwDIQEMFwsgAigCnAMhAQwXCyACQoHKADcDmAMgAkGYA2oQiQshAQwXCyACQoHKADcDmAMgAkGYA2oQiQshAQwWCwwYCyACQoHKADcDmAMgAkGYA2oQiQshAQwUCyACQoHKADcDmAMgAkGYA2oQiQshAQwTCyACQoHKADcDmAMgAkGYA2oQiQshAQwSCyACQoHKADcDmAMgAkGYA2oQiQshAQwRC0EAIQsgDEUNAQsgAyEGAkAgDygCBCIDRQRAIAJCgcoANwOYAyACQZgDahCJCyEDDAELIA8gA0EBayIENgIEIA8gDygCACIBQQFqNgIAIARFBEAgAkKBygA3A5gDIAJBmANqEIkLIQMMAQsgAS0AACEWIA8gA0ECayIENgIEIA8gAUECajYCACAEQQdNBEAgAkKBygA3A5gDIAJBmANqEIkLIQMMAQsgAS0AASExIA8gA0EKayIcNgIEIA8gAUEKaiIENgIAIAJBgARqIAEpAAIQhwYgAigChAQhAyACKAKABA0AAn8gA0UEQEEAIQkgAkEANgKgAyACQgA3A5gDIAIpApwDIU9BgJvAACEOQQAhE0EAIQRBBAwBCyACQYAEaiADEIoFIANB////P0sNHSADQQR0IglBAEgNHSADQYCAgMAASUECdCEHIAkEfyAJIAcQ9wsFIAcLIgFFDQQgAkGgA2ogAkGIBGopAwA3AwAgAiACKQOABDcDmANBACEIIAJBADYCsAMgAiABNgKsAyACIAM2AqgDIAJBqANqISkDQAJAAn8gHEEDTQRAIAJCgcoANwOABCACQYAEahCJCwwBCyAPIBxBBGsiATYCBCAPIARBBGo2AgAgAUEDTQRAIAJCgcoANwOABCACQYAEahCJCwwBCyAEKAAAIRsgDyAcQQhrIgE2AgQgDyAEQQhqNgIAIAFBA0sNASACQoHKADcDgAQgAkGABGoQiQsLIQMgAigCmAMiAQRAIAIoAqQDIAFBAnRBC2pBeHFrELUBCyACKAKoA0UNAyACKAKsAxC1AQwDCyADQQFrIQMgBCgABCEZIA8gHEEMayIcNgIEIA8gBEEMaiIVNgIAIAIoAqQDIhdBBGshDiAZIBtBufPd8XlsQQV3c0G5893xeWwiBUEZdiIdrUKBgoSIkKDAgAF+IVEgBCgACCEKQQAhEiACKAKYAyEJIAIoAqwDIQcgBSEEAkACQAJAAkACQANAIFEgBCAJcSIBIBdqKQAAIlCFIk9CgYKEiJCgwIABfSBPQn+Fg0KAgYKEiJCgwIB/gyFPA0AgT1AEQCBQIFBCAYaDQoCBgoSIkKDAgH+DUEUNAyABIBJBCGoiEmohBAwCCyAOIE96p0EDdiABaiAJcUECdGsoAgAiBCAITw0DIE9CAX0gT4MhTyAHIARBBHRqIgQoAgAgG0cNACAEQQRqKAIAIBlHDQALCyAEIAo2AgwMBAsgFyAFIAlxIg5qKQAAQoCBgoSIkKDAgH+DIk9QBEBBCCEEA0AgBCAOaiEBIARBCGohBCAXIAEgCXEiDmopAABCgIGChIiQoMCAf4MiT1ANAAsLIBcgT3qnQQN2IA5qIAlxIgRqLAAAIgFBAE4EQCAXIBcpAwBCgIGChIiQoMCAf4N6p0EDdiIEai0AACEBCyABQQFxISQCQCACKAKcAw0AICRFDQAjAEFAaiIEJAAgBCAINgI0IAQgBzYCMCACQZgDaiIJQQhqKAIAIRcgBCAEQTBqNgI8AkAgF0EBaiIBRQRAEL0JIAQoAgwaDAELAkACQAJAAkACQAJ/IAkoAgAiIUEBaiEaAkAgISAaQQN2QQdsICFBCEkbIgdBAXYgAUkEQCABIAdBAWoiByABIAdLGyIHQQhJDQFBfyAHQQN0QQduQQFrZ3ZBAWogByAHQf////8BcUYNAhoQvQkgBCgCLEGBgICAeEcNCCAEKAIoDAILIAkgBEE8akEIEIcCDAcLQQRBCCAHQQRJGwsiASABQf////8DcUcNACABQQJ0Ig5BB2ohByAHIA5JDQAgB0F4cSIHIAFBCGoiDmoiEiAHSQ0AIBJBAEgNASASQQgQ9wsiE0UNJyAHIBNqQf8BIA4Q4wwhDiABQQFrIhIgAUEDdkEHbCASQQhJGyAXayEBIBpFBEAgCSABNgIEIAkgEjYCACAJKAIMIRQgCSAONgIMIAlBCGogFzYCAAwFCyAJQQxqKAIAIhRBBGshJyAEKAIwISwgBCgCNCEjQQAhEwNAIBMgFGosAABBAE4EQCAnIBNBAnQiLWsoAgAiByAjTw0EIA4gLCAHQQR0aigCCCIvIBJxIiJqKQAAQoCBgoSIkKDAgH+DIk9QBEBBCCEHA0AgByAiaiEiIAdBCGohByAOIBIgInEiImopAABCgIGChIiQoMCAf4MiT1ANAAsLIA4gT3qnQQN2ICJqIBJxIgdqLAAAQQBOBEAgDikDAEKAgYKEiJCgwIB/g3qnQQN2IQcLIAcgDmogL0EZdiIiOgAAIAdBCGsgEnEgDmpBCGogIjoAACAOIAdBAnRrQQRrIBQgLWtBBGsoAAA2AgALIBMgIUYhByATQQFqIRMgB0UNAAsMAwsQvQkgBCgCFBoMBAsQvQkgBCgCHBoMAwsgByAjQfibwAAQwwgACyAJIA42AgwgCSABNgIEIAkgEjYCACAJQQhqIBc2AgAgIQ0ADAELIBQgGkECdEEHakF4cWsQtQELIARBQGskACAFIAIoApgDIglxIhMgAigCpAMiF2opAABCgIGChIiQoMCAf4MiT1AEQEEIIQQDQCAEIBNqIQEgBEEIaiEEIBcgASAJcSITaikAAEKAgYKEiJCgwIB/gyJPUA0ACwsgFyBPeqdBA3YgE2ogCXEiBGosAABBAEgNACAXKQMAQoCBgoSIkKDAgH+DeqdBA3YhBAsgAiACKAKcAyAkazYCnAMgBCAXaiAdOgAAIARBCGsgCXEgF2pBCGogHToAACACIAIoAqADQQFqNgKgAyACKAKkAyAEQQJ0a0EEayAINgIAIAggAigCqAMiBEcNAiACKAKcAyACKAKgA2ogAigCsAMiAWshBCAEIAggAWtNBEAgCCEEDAMLIAEgASAEaiIESw0iIARBBHQhByAEQYCAgMAASUECdCEJIAIgCAR/IAIgAigCrAM2AoAEIAIgCEEEdDYChARBBAVBAAs2AogEIAJBwAFqIAcgCSACQYAEahCGByACKALEASEHIAIoAsABRQRAIAIgBDYCqAMgAiAHNgKsAwwDCyACKALIASIEQYGAgIB4Rg0BIARFDSIMHAsgBCAIQeibwAAQwwgACyACKAKoAyEECyACKAKwAyIJIARGBEAgKSAEELcGIAIoArADIQkLIAIoAqwDIAlBBHRqIgEgCjYCDCABIAU2AgggASAZNgIEIAEgGzYCACACIAlBAWoiCDYCsAMLIBUhBCADDQALIAIoApgDIQQgAigCpAMiDkUEQCAEIQMMAgsgAigCsAMhEyACKAKoAyEJIAIpApwDIU8gAigCrAMLIQcCfyAPKAIEIgFBCE8EQCAPIAFBCGs2AgQgDyAPKAIAIgFBCGo2AgAgASgAACIFRQRAQQQhFUGAm8AAIQhBACEDQQAhAUEAIRwMBwsgAkGYA2ogBRCKBSAFQf///z9LDR4gBUEEdCIDQQBIDR4gBUGAgIDAAElBAnQhASADBH8gAyABEPcLBSABCyIVRQ0EIAIoApgDIgMgAigCpAMiCEUNARogAigCoAMhHCACKAKcAyEBDAYLIAJCgcoANwOYAyACQZgDahCJCwshAyAEBEAgDiAEQQJ0QQtqQXhxaxC1AQsgCUUNACAHELUBCyALBEAgC0EGdCEEIAwhAQNAIAEQuwcgAUFAayEBIARBQGoiBA0ACwsgBkUNACAMELUBCyAQBEAgEEEsbCEEIBhBIGohAQNAAkAgAUEEaygCAEUNACABKAIARQ0AIAEQ1AgLIAFBLGohASAEQSxrIgQNAAsLIA1FDQggGBC1AQwICyADIAFByO/DACgCACIAQYoHIAAbEQAAAAsgCSAHQcjvwwAoAgAiAEGKByAAGxEAAAALIAIgMToAuQEgAiAWOgC4ASACQQA2ArQBIAIgFTYCsAEgAiAFNgKsASACIAg2AqgBIAIgAzYCnAEgAkEANgKYASACQoCAgIDAADcDkAEgAiATNgKMASACIAc2AogBIAIgCTYChAEgAiAONgKAASACIE83A3ggAiAENgJ0IAIgCzYCcCACIAw2AmwgAiAGNgJoIAIgEDYCZCACIBg2AmAgAiANNgJcIAIgETYCWCACIAGtIBytQiCGhDcDoAECQCACKAIIIgFFBEBBBEHsu8AAQYyDwAAQ5gchASAmQQI2AkwgJiABNgIADAELIAIgAUEBazYCCCACKAIMISNBCEEEEPcLIgFFBEBBCEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIAFCgYCAgBA3AgAgAkHYwcAANgIEIAIgATYCACACKAIEIUEgAigCACEvIAIgIzYC9AUgAkECNgLwBSACQZgDaiACQfAFahCqAgJAAkACQCACKAKYA0UEQCACQaADaigCACInRQRAQQBBwIjAAEGMg8AAEOYHIQMMBAsgAigCnAMhByACKALwBSIBBEAgAkGkA2ooAgAhLCACIAFBAWs2AvAFIAIoAvQFIg8oAgQiAUEHTQRAIAJCgcoANwOYAyACQZgDahCJCyEDDAQLIA8gAUEIazYCBCAPIA8oAgAiAUEIajYCACACQYAEaiABKQAAEIcGIAIoAoQEIRggAigCgAQEQCAYIQMMBAtBBCEcIBhBgCAgGEGAIEkbIg4EQCAOQThsIgFBBBD3CyIcRQ0UC0EAIQ0gAkEANgLwAiACIBw2AuwCIAIgDjYC6AIgGARAIAJBgARqIgFBJWohNSACQZgDaiIDQSVqIUYgAUEEciEzIANBBHIhMgNAIAJBmANqISJBACEEQgAhT0EAIQxBACEUQQAhGUEAIRVBACEOQQAhE0EAIRpBACESQQAhG0EAIRZCACFQQQAhBkIAIVEjAEGQAmsiBSQAAkACQAJAAkACQAJAAn8gDyIKKAIEIgNBA00EQCAFQoHKADcDgAEgBUGAAWoQiQsMAQsgCiADQQRrIgk2AgQgCiAKKAIAIgFBBGo2AgAgCUEDSw0BIAVCgcoANwOAASAFQYABahCJCwshASAiQQI6ACQgIiABNgIADAELIAEoAAAhRyAKIANBCGsiCTYCBCAKIAFBCGo2AgACQAJ/IAlBA00EQCAFQoHKADcDgAEgBUGAAWoQiQsMAQsgASgABCFIIAogA0EMayIJNgIEIAogAUEMajYCACAJQQNLDQEgBUKBygA3A4ABIAVBgAFqEIkLCyEBICJBAjoAJCAiIAE2AgAMAQsgASgACCE2IAogA0EQayIJNgIEIAogAUEQajYCAAJAIAlBB00EQCAFQoHKADcDgAEgBUGAAWoQiQshAQwBCyABKAAMIT0gCiADQRhrNgIEIAogAUEYajYCACAFQeABaiABKQAQEIcGIAUoAuQBIQkgBSgC4AEEQCAJIQEMAQsCQAJ/AkAgCUGAICAJQYAgSRsiAUUEQEEEISQMAQsgAUGoAWwiA0EEEPcLIiRFDSULIAVBADYCECAFICQ2AgwgBSABNgIIAkACQAJAAkACQAJAIAkEQCAFQYgBaiEbA0AgCigCBCIBQQdNBEAgBUKBygA3A4ABIAVBgAFqEIkLIQEMCgsgCiABQQhrNgIEIAogCigCACIBQQhqNgIAIAVB4AFqIAEpAAAQhwYgBSgC5AEhESAFKALgAQRAIBEhAQwKCwJAIBFBgCAgEUGAIEkbIgZFBEBBBCEIDAELIAZBMGwiAUEEEPcLIghFDSYLQQAhAyAFQQA2AugBIAUgCDYC5AEgBSAGNgLgASARBEADQCAFQYABaiAKELkEIAUoAoQBIhIgBSgCgAENChogBSkDiAEhTyAFQYABaiAKELkEIAUoAoQBIhUgBSgCgAENChogCigCBCILQQNNBEAgBUEAOgCDASAFQSU7AIEBIAVBADYChAEgBUEBOgCAASAFQYABahCJCwwLCyAFKQOIASFQIAogC0EEayIBNgIEIAogCigCACIMQQRqNgIAIAFBA00EQCAFQoHKADcDgAEgBUGAAWoQiQsMCwsgDCoAACFmIAogC0EIayIBNgIEIAogDEEIajYCACABQQNNBEAgBUKBygA3A4ABIAVBgAFqEIkLDAsLIAwoAAQhBiAKIAtBDGsiATYCBCAKIAxBDGo2AgAgAUEDTQRAIAVBADoAgwEgBUElOwCBASAFQQA2AoQBIAVBAToAgAEgBUGAAWoQiQsMCwsgDCgACCEQIAogC0EQayIBNgIEIAogDEEQajYCACABQQdNBEAgBUKBygA3A4ABIAVBgAFqEIkLDAsLIAw1AAwhUSAKIAtBGGsiBDYCBCAKIAxBGGo2AgAgBUHgAGogDCkAEBCHBiAFKAJkIgEgBSgCYA0KGgJAAkAgAUUEQEEAIQQMAQsgBEEDTQ0LIAogC0EcayIXNgIEIAogDEEcajYCAEEBIQQgAUEBRw0BCyAEIAVByABqQZCAwAAQ5gcMCwsgF0EESQ0JIAwoABghBCAKIAtBIGsiFzYCBCAKIAxBIGo2AgAgAUECRwRAIBdBBEkNCiAKIAtBJGs2AgQgCiAMQSRqNgIAQQIgBUHIAGpBkIDAABDmBwwLCyARQQFrIREgDDUAHCBRQiCGhCFRIAUoAuABIANGBEAgBUHgAWogAxC5BiAFKALkASEIIAUoAugBIQMLIAggA0EwbGoiASBRNwIoIAEgBDYCJCABIBA2AiAgASAGNgIcIAEgZjgCGCABIFA3AhAgASAVNgIMIAEgTzcCBCABIBI2AgAgBSADQQFqIgM2AugBIBENAAsgBSgC4AEhBiAFKALkASEICyAIRQRAIAYhAQwKCyAFQYABaiAKELkEIAUoAoQBIQEgBSgCgAENBiAFKQOIASFRIAVBgAFqIAoQuQQgBSgChAEhECAFKAKAAQRAIBAhAQwHCyAKKAIEIgxBA00EQCAFQoHKADcDgAEgBUGAAWoQiQshAQwHCyAFKQOIASFWIAogDEEEayILNgIEIAogCigCACIEQQRqNgIAIAtBA00EQCAFQoHKADcDgAEgBUGAAWoQiQshAQwHCyAEKAAAITcgCiAMQQhrIgs2AgQgCiAEQQhqNgIAAkACQAJAIAsEQCAEKAAEIUkgCiAMQQlrIiQ2AgQgCiAEQQlqNgIAIAQtAAgiEg4CAwIBCyAFQoHKADcDgAEgBUGAAWoQiQshAQwJC0EQQQQQ9wsiAUUNKCABIBI2AgQgAUEEOgAADAgLIAVBgAFqIAoQxgUgBSgChAEhDiAFKAKAAQRAIA4hAQwICyAFQeABaiIEQRBqIBtBEGopAgA3AwAgBEEIaiAbQQhqKQIANwMAIAUgGykCADcD4AEgCigCBCEkQQEhEgsgBUHIAGoiDEEQaiJCIAVB4AFqIgtBEGoiBCkDADcDACAMQQhqIkMgC0EIaiIMKQMANwMAIAUgBSkD4AE3A0gCQAJAAkAgJARAIAogJEEBazYCBCAKIAooAgAiC0EBajYCACALLQAAIi0OAgMCAQsgBUKBygA3A4ABIAVBgAFqEIkLIQEMCQtBEEEEEPcLIgFFDSggASAtNgIEIAFBBDoAAAwICyAFQYABaiAKEMYFIAUoAoQBIRYgBSgCgAEEQCAWIQEMCAsgBCAbQRBqKQIANwMAIAwgG0EIaikCADcDACAFIBspAgA3A+ABQQEhLQsgBUHgAGoiC0EQaiJKIAQpAwA3AwAgC0EIaiJEIAwpAwA3AwAgBSAFKQPgATcDYCAFIAo2AnwgBUEHNgJ4IAVBgAFqIAVB+ABqEJQFIAUoAoABIhRBA0YNAiAUQQJGBEBBAEGgisAAQYyDwAAQ5gchAQwHCyAFKQKEASFiIAVBgAFqIAVB+ABqEJQFIAUoAoABIhNBA0YNAiATQQJGBEBBAUGgisAAQYyDwAAQ5gchAQwHCwJAIAUoAngiBARAIAUoAnwiGSgCBCIMQQNLDQEgBUKBygA3A4ABIAVBgAFqEIkLIQEMCAtBAkGgisAAQYyDwAAQ5gchAQwHCyAFKQKEASFjIBkgDEEEazYCBCAZIBkoAgAiDEEEajYCAAJAIARBAUcEQCAMKAAAIRcgBUGAAWogGRC5BCAFKAKEASEhIAUoAoABRQ0BICEhAQwIC0EDQaCKwABBjIPAABDmByEBDAcLAkAgBEECRwRAIAUpA4gBIWQgBSAEQQNrNgJ4IBkoAgQiBEEHTQRAIAVCgcoANwOAASAFQYABahCJCyEBDAkLIBkgBEEIayILNgIEIBkgGSgCACIEQQhqNgIAIAVB4AFqIAQpAAAQhwYgBSgC5AEhFSAFKALgAQRAIBUhAQwJCwJAIBVBgCAgFUGAIEkbIgxFBEBBBCEdDAELIAxBKGwiBEEEEPcLIh1FDSoLQQAhESAFQQA2AugBIAUgHTYC5AEgBSAMNgLgASAVBEADQCALRQRAIAVCgcoANwOAASAFQYABahCJCyEBDAoLIBkgC0EBazYCBCAZIBkoAgAiBEEBajYCACAELQAAIUUgBUGAAWogGRC5BCAFKAKEASEEIAUoAoABBEAgBCEBDAoLIBkoAgQiC0EDTQRAIAVBADoAgwEgBUElOwCBASAFQQA2AoQBIAVBAToAgAEgBUGAAWoQiQshAQwKCyAFKQOIASFPIBkgC0EEayIaNgIEIBkgGSgCACIMQQRqNgIAIBpBA00EQCAFQQA6AIMBIAVBJTsAgQEgBUEANgKEASAFQQE6AIABIAVBgAFqEIkLIQEMCgsgDCoAACFmIBkgC0EIayIaNgIEIBkgDEEIajYCACAaQQNNBEAgBUEAOgCDASAFQSU7AIEBIAVBADYChAEgBUEBOgCAASAFQYABahCJCyEBDAoLIAwqAAQheSAZIAtBDGs2AgQgGSAMQQxqNgIAIAwqAAgheiAFQYABaiAZELkEIAUoAoQBIQwgBSgCgAEEQCAMIQEMCgsgGSgCBCILRQ0HIAUpA4gBIVAgGSALQQFrIgs2AgQgGSAZKAIAIhpBAWo2AgAgGi0AACIkQQJPBEBBEEEEEPcLIgFFDSsgASAkOgABIAFBAjoAAAwKCyAVQQFrIRUgBSgC4AEgEUYEQCAFQeABaiARELoGIAUoAuQBIR0gBSgC6AEhEQsgHSARQShsaiIaICQ6ACUgGiBFOgAkIBogUDcCHCAaIAw2AhggGiB6OAIUIBogeTgCECAaIGY4AgwgGiBPNwIEIBogBDYCACAFIBFBAWoiETYC6AEgFQ0ACyAFKALkASEdIAUoAuABIQwLIB0NASAMIQEMCAtBBEGgisAAQYyDwAAQ5gchAQwHCwJAAn8CQCAFKAJ4IhkEQCAFKAJ8IgQoAgQiFUEBSw0BIAVCgcoANwOAASAFQYABahCJCwwCC0EFQaCKwABBjIPAABDmBwwBCyAEIBVBAmsiGjYCBCAEIAQoAgAiC0ECajYCACAZQQFHBEAgGkEDSw0CIAVCgcoANwOAASAFQYABahCJCwwBC0EGQaCKwABBjIPAABDmBwshASAMRQ0HIB0QtQEMBwsgCy8AACFFIAQgFUEGazYCBCAEIAtBBmo2AgACQAJAAkAgFEECaw4CAQACCyAXIQEMCAtBB0HMksAAQYyDwAAQ5gchAQwHCyAJQQFrIQkgCygAAiEEIAVBMGoiC0EQaiIZIEIpAwA3AwAgC0EIaiIaIEMpAwA3AwAgBUEYaiILQQhqIkIgRCkDADcDACALQRBqIkMgSikDADcDACAFIAUpA0g3AzAgBSAFKQNgNwMYIAUoAhAiFSAFKAIIRgRAIAVBCGogFRC7BiAFKAIQIRULIAUoAgwiJCAVQagBbGoiCyAONgIEIAsgEjYCACALIAUpAzA3AgggCyAWNgIkIAsgLTYCICALIAUpAxg3AiggCyABNgJAIAsgUTcCRCALIBA2AkwgCyBWNwJQIAsgNzYCWCALIEk2AlwgCyAGNgJgIAsgCDYCZCALIAM2AmggCyAXNgJsIAsgITYCcCALIGQ3AnQgCyAENgJ8IAsgDDYCgAEgCyAdNgKEASALIBE2AogBIAsgFDYCjAEgCyBiNwKQASALIBM2ApgBIAsgYzcCnAEgCyBFOwGkASALQRBqIBopAwA3AgAgC0EYaiAZKQMANwIAIAtBMGogQikDADcCACALQThqIEMpAwA3AgAgBSAVQQFqIgY2AhAgCQ0ACyAFKAIIIQEMAwsgJA0CDAgLIAUoAoQBIQEMAwsgBUKBygA3A4ABIAVBgAFqEIkLIQEMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAooAgQiCQRAIAogCUEBayIINgIEIAogCigCACIDQQFqNgIAAkAgAy0AACIXQQJPBEBBEEEEEPcLIglFDQEgCSAXOgABIAlBAjoAAAwQCyAIBEAgCiAJQQJrIgg2AgQgCiADQQJqNgIAAkAgAy0AASIhQQJPBEBBEEEEEPcLIglFDQEgCSAhOgABIAlBAjoAAAwSCwJAAkACQCAIBEAgCiAJQQNrIgs2AgQgCiADQQNqNgIAQQAhCCADLQACIh0OAg8CAQsgBUKBygA3A4ABIAVBgAFqEIkLIQkMFAtBEEEEEPcLIglFDQEgCSAdNgIEIAlBBDoAAAwTCyALQQRJDQUgCiAJQQdrIgg2AgQgCiADQQdqNgIAAkACQAJAAkAgAygAAyItDgYBAg4NDAsACyAFQQE6AOABIAUgLa03A+gBIAVB4AFqQZCRwABBjIPAABCsCCEJDBULIAUgCjYCZCAFQQQ2AmAgBUHgAWogBUHgAGoQrwMgBSgC4AFFBEAgBUHoAWooAgAiGUUEQEEAQdSRwABBjIPAABDmByEJDBYLIAUoAuQBIQogBSgCYCIEBEAgBUHsAWooAgAhAyAFIARBAWs2AmAgBUHgAWogBSgCZCIEELkEIAUoAuABBEAgBSgC5AEhCQwWCyAFQewBaigCACEdIAVB6AFqIgwoAgAhCCAFKALkASEJIAVB4AFqIAQQuQQgBSgC4AEEQCAFKALkASEJDBYLIAwpAwAhUCAFKALkASEUIAVB4AFqIAVB4ABqEK8DIAUoAuABDQMgBUHoAWooAgAiDkUEQEECQdSRwABBjIPAABDmByEJDBYLIAVB7AFqKAIAIRIgBSgC5AEhEyAFQeABaiAFQeAAahB9An8gBSgC4AFFBEAgBUHoAWooAgAiGg0MQQNB1JHAAEGMg8AAEOYHDAELIAUoAuQBCyEJIBNFDRUgDhC1AQwVC0EBQdSRwABBjIPAABDmByEJDBQLIAUoAuQBIQkMFAsgBSAKNgI0IAhFDRAgCiAJQQhrIgQ2AgQgCiADQQhqNgIAAkAgAy0AByIZQQJPBEBBEEEEEPcLIglFDQEgCSAZOgABIAlBAjoAAAwVCyAFQQE2AjAgBEEHTQRAIAVCgcoANwPgASAFQeABahCJCyEJDBULIAogCUEQayIaNgIEIAogA0EQaiIINgIAIAVB4ABqIAMpAAgQhwYgBSgCZCEJIAUoAmANFAJAAn8gCUUEQEEAIQsgBUEANgLoASAFQgA3A+ABIAUpAuQBIU9BgJvAACEbQQAhDEEAIQpBBAwBCyAFQeAAaiAJEIoFIAlB////P0sNQSAJQQR0Ig5BAEgNQSAJQYCAgMAASUECdCEEIA4EfyAOIAQQ9wsFIAQLIgNFDQEgBUHoAWogBUHoAGopAwA3AwAgBSAFKQNgNwPgASAFQQA2AvgBIAUgAzYC9AEgBSAJNgLwASAFQfABaiEdQQAhBANAIBpBA00EQCAFQoHKADcDYCAFQeAAahCJCyEJDBYLIAogGkEEayIDNgIEIAogCEEEajYCAAJAAkACQAJAIANBCE8EQCAIKAAAIRYgCiAaQQxrIgM2AgQgCiAIQQxqNgIAIAgpAAQiT0KAgICAEFoEQCAFQQE6AGAgBSBPNwNoIAVB4ABqIAVByABqQeyAwAAQrAghCQwbCyADRQ0BIAogGkENayIaNgIEIAogCEENaiIVNgIAIAgtAAwiEkECTwRAQRBBBBD3CyIJRQ0/IAkgEjoAASAJQQI6AAAMGwsgCUEBayEJIE+nIREgBSgC7AEiFEEEayELIBZBufPd8XlsIg5BGXYiEK1CgYKEiJCgwIABfiFRQQAhEyAFKALgASEIIAUoAvQBIRsgDiEDAkADQCADIAhxIgwgFGopAAAiUCBRhSJPQoGChIiQoMCAAX0gT0J/hYNCgIGChIiQoMCAf4MhTwNAIE9QBEAgUCBQQgGGg0KAgYKEiJCgwIB/g1BFDQMgDCATQQhqIhNqIQMMAgsgBCALIE96p0EDdiAMaiAIcUECdGsoAgAiA00NKCBPQgF9IE+DIU8gGyADQQR0aiIDKAIMIBZHDQALCyADIBJBAEc6AAQgAyARNgIADAULIBQgCCAOcSILaikAAEKAgYKEiJCgwIB/gyJPUARAQQghAwNAIAMgC2ohDCADQQhqIQMgFCAIIAxxIgtqKQAAQoCBgoSIkKDAgH+DIk9QDQALCyAUIE96p0EDdiALaiAIcSIDaiwAACIMQQBOBEAgFCAUKQMAQoCBgoSIkKDAgH+DeqdBA3YiA2otAAAhDAsgDEEBcSELAkAgBSgC5AENACALRQ0AIAVB4AFqIBsgBBDhASAOIAUoAuABIghxIgwgBSgC7AEiFGopAABCgIGChIiQoMCAf4MiT1AEQEEIIQMDQCADIAxqIQwgA0EIaiEDIBQgCCAMcSIMaikAAEKAgYKEiJCgwIB/gyJPUA0ACwsgFCBPeqdBA3YgDGogCHEiA2osAABBAEgNACAUKQMAQoCBgoSIkKDAgH+DeqdBA3YhAwsgBSAFKALkASALazYC5AEgAyAUaiAQOgAAIANBCGsgCHEgFGpBCGogEDoAACAFIAUoAugBQQFqNgLoASAFKALsASADQQJ0a0EEayAENgIAIAQgBSgC8AEiA0cNAyAFKALkASAFKALoAWogBSgC+AEiCGshAyADIAQgCGtNBEAgBCEDDAQLIAggAyAIaiIDSw1HIANBBHQhCCADQYCAgMAASUECdCEMIAUgBAR/IAUgBSgC9AE2AmAgBSAEQQR0NgJkQQQFQQALNgJoIAVByABqIAggDCAFQeAAahCGByAFKAJMIQggBSgCSEUEQCAFIAM2AvABIAUgCDYC9AEMBAsgBSgCUCIDQYGAgIB4Rg0CIANFDUcMJAsgBUKBygA3A2AgBUHgAGoQiQshCQwZCyAFQoHKADcDYCAFQeAAahCJCyEJDBgLIAUoAvABIQMLIAUoAvgBIgggA0YEQCAdIAMQtwYgBSgC+AEhCAsgBSgC9AEgCEEEdGoiAyAWNgIMIAMgDjYCCCADIBJBAEc6AAQgAyARNgIAIAUgCEEBaiIENgL4AQsgFSEIIAkNAAsgBSgC4AEhCyAFKALsASIbRQRAIAshCQwXCyAFKALwASEMIAUpAuQBIU8gBSgC+AEhCiAFKAL0AQshBCAFQeABaiAFQTBqEH0CQAJ/IAUoAuABRQRAIAVB6AFqKAIAIggNAkECQZySwABBjIPAABDmBwwBCyAFKALkAQshCSALBEAgGyALQQJ0QQtqQXhxaxC1AQsgDEUNFiAEELUBDBYLIAUoAuQBIQkgGUECRg0VIAVBhAJqKQIAIVEgBUGAAmooAgAhGiAFQfwBaigCACEWIAVB9AFqKQIAIVAgBUHwAWooAgAhFCAFQewBaigCACEdDA4LDB4LDDULIAUoAuQBIQkMEQsMMwsMMgsgBUKBygA3A4ABIAVBgAFqEIkLIQkMDwsMMAsgBUKBygA3A4ABIAVBgAFqEIkLIQkMDQsgBUKBygA3A+ABIAVB4AFqEIkLIQkMDAsgBUGIAmooAgAhBCAFQYQCaigCACEMIAVBgAJqKAIAIRsgBUH4AWopAwAhTyAFQfQBaigCACELIAVB7AFqKQIAIVEgBSgC5AEhFgwECyAIQQRPBEAgCiAJQQtrNgIEIAogA0ELajYCACADKAAHIQkMBAsgBUKBygA3A+ABIAVB4AFqEIkLIQkMCgsCQAJAIAgEQCAKIAlBCGsiCDYCBCAKIANBCGo2AgACQCADLQAHIhpBAk8EQEEQQQQQ9wsiCUUNASAJIBo6AAEgCUECOgAADA4LIAhBB00EQCAFQoHKADcD4AEgBUHgAWoQiQshCQwOCyAKIAlBEGsiGTYCBCAKIANBEGoiCDYCACAFQeAAaiADKQAIEIcGIAUoAmQhCSAFKAJgDQ0gCUUEQEEAIRYgBUEANgLoASAFQgA3A+ABIAUpAuQBIU9BgJvAACEUQoCAgIDAACFQQQAhCQwECyAFQeAAaiAJEIoFIAlB////P0sNOCAJQQR0Ig5BAEgNOCAJQYCAgMAASUECdCEEIA4EfyAOIAQQ9wsFIAQLIgMEQCAFQegBaiAFQegAaikDADcDACAFIAUpA2A3A+ABIAVBADYC+AEgBSADNgL0ASAFIAk2AvABIAVB8AFqIR1BACEEA0AgGUEDTQRAIAVCgcoANwNgIAVB4ABqEIkLIQkMBQsgCiAZQQRrIgM2AgQgCiAIQQRqNgIAAkACQAJAAkAgA0EITwRAIAgoAAAhFiAKIBlBDGsiAzYCBCAKIAhBDGo2AgAgCCkABCJPQoCAgIAQWgRAIAVBAToAYCAFIE83A2ggBUHgAGogBUHIAGpB7IDAABCsCCEJDAoLIANFDQEgCiAZQQ1rIhk2AgQgCiAIQQ1qIhU2AgAgCC0ADCISQQJPBEBBEEEEEPcLIglFDTcgCSASOgABIAlBAjoAAAwKCyAJQQFrIQkgT6chESAFKALsASIUQQRrIQwgFkG5893xeWwiDkEZdiIQrUKBgoSIkKDAgAF+IVFBACETIAUoAuABIQggBSgC9AEhGyAOIQMCQANAIBQgAyAIcSILaikAACJQIFGFIk9CgYKEiJCgwIABfSBPQn+Fg0KAgYKEiJCgwIB/gyFPA0AgT1AEQCBQIFBCAYaDQoCBgoSIkKDAgH+DUEUNAyATQQhqIhMgC2ohAwwCCyAEIAwgT3qnQQN2IAtqIAhxQQJ0aygCACIDTQ0gIE9CAX0gT4MhTyAbIANBBHRqIgMoAgwgFkcNAAsLIAMgEkEARzoABCADIBE2AgAMBQsgFCAIIA5xIgtqKQAAQoCBgoSIkKDAgH+DIk9QBEBBCCEDA0AgAyALaiELIANBCGohAyAUIAggC3EiC2opAABCgIGChIiQoMCAf4MiT1ANAAsLIBQgT3qnQQN2IAtqIAhxIgNqLAAAIgtBAE4EQCAUIBQpAwBCgIGChIiQoMCAf4N6p0EDdiIDai0AACELCyALQQFxIQsCQCAFKALkAQ0AIAtFDQAgBUHgAWogGyAEEOEBIA4gBSgC4AEiCHEiDCAFKALsASIUaikAAEKAgYKEiJCgwIB/gyJPUARAQQghAwNAIAMgDGohDCADQQhqIQMgFCAIIAxxIgxqKQAAQoCBgoSIkKDAgH+DIk9QDQALCyAUIE96p0EDdiAMaiAIcSIDaiwAAEEASA0AIBQpAwBCgIGChIiQoMCAf4N6p0EDdiEDCyAFIAUoAuQBIAtrNgLkASADIBRqIBA6AAAgA0EIayAIcSAUakEIaiAQOgAAIAUgBSgC6AFBAWo2AugBIAUoAuwBIANBAnRrQQRrIAQ2AgAgBCAFKALwASIDRw0DIAUoAuQBIAUoAugBaiAFKAL4ASIIayEDIAMgBCAIa00EQCAEIQMMBAsgCCADIAhqIgNLDT8gA0EEdCEIIANBgICAwABJQQJ0IQsgBSAEBH8gBSAFKAL0ATYCYCAFIARBBHQ2AmRBBAVBAAsiDDYCaCAFQcgAaiAIIAsgBUHgAGoQhgcgBSgCTCEIIAUoAkhFBEAgBSADNgLwASAFIAg2AvQBDAQLIAUoAlAiA0GBgICAeEYNAiADRQ0/DBwLIAVCgcoANwNgIAVB4ABqEIkLIQkMCAsgBUKBygA3A2AgBUHgAGoQiQshCQwHCyAFKALwASEDCyAFKAL4ASIIIANGBEAgHSADELcGIAUoAvgBIQgLIAUoAvQBIAhBBHRqIgMgFjYCDCADIA42AgggAyASQQBHOgAEIAMgETYCACAFIAhBAWoiBDYC+AELIBUhCCAJDQALIAUoAuABIQkgBSgC7AEiFEUNDiAaQQJGDQ4gBSgC+AEhFiAFKQPwASFQIAUpAuQBIU8MBAsMFwsMLgsgBUKBygA3A+ABIAVB4AFqEIkLIQkMCwsgBSgC4AEiAwRAIAUoAuwBIANBAnRBC2pBeHFrELUBCyAFKALwAUUNCiAFKAL0ARC1AQwKCyBPQiCIpyEdIE+nIQgMAgsCQAJAIAgEQCAKIAlBCGsiCDYCBCAKIANBCGo2AgACQCADLQAHIhpBAk8EQEEQQQQQ9wsiCUUNASAJIBo6AAEgCUECOgAADA0LIAhBB00EQCAFQoHKADcD4AEgBUHgAWoQiQshCQwNCyAKIAlBEGsiFDYCBCAKIANBEGoiCDYCACAFQeAAaiADKQAIEIcGIAUoAmQhCSAFKAJgDQwgCUUEQEEAIRYgBUEANgLoASAFQgA3A+ABIAUpAuQBIU9BgJvAACEUQoCAgIDAACFQQQAhCQwECyAFQeAAaiAJEIoFIAlB5syZM0sNNyAJQRRsIg5BAEgNNyAJQefMmTNJQQJ0IQQgDgR/IA4gBBD3CwUgBAsiAwRAIAVB4AFqIgRBCGogBUHoAGopAwA3AwAgBSAFKQNgNwPgASAFQQA2AvgBIAUgAzYC9AEgBSAJNgLwASAEQRBqITdBACEEA0AgFEEDTQRAIAVCgcoANwNgIAVB4ABqEIkLIQkMBQsgCiAUQQRrIgM2AgQgCiAIQQRqNgIAIANBA00EQCAFQoHKADcDYCAFQeAAahCJCyEJDAULIAgoAAAhFiAKIBRBCGsiAzYCBCAKIAhBCGo2AgACQAJAAkACQCADQQhPBEAgCCgABCEZIAogFEEQayIDNgIEIAogCEEQajYCACAIKQAIIk9CgICAgBBaBEAgBUEBOgBgIAUgTzcDaCAFQeAAaiAFQcgAakHsgMAAEKwIIQkMCgsgA0UNASAKIBRBEWsiFDYCBCAKIAhBEWoiFTYCACAILQAQIhFBAk8EQEEQQQQQ9wsiCUUNNiAJIBE6AAEgCUECOgAADAoLIAlBAWshCSBPpyEQIAUoAuwBIhNBBGshDCAZIBZBufPd8XlsQQV3c0G5893xeWwiEkEZdiIdrUKBgoSIkKDAgAF+IVFBACEOIAUoAuABIQggBSgC9AEhGyASIQMCQANAIBMgAyAIcSILaikAACJQIFGFIk9CgYKEiJCgwIABfSBPQn+Fg0KAgYKEiJCgwIB/gyFPA0AgT1AEQCBQIFBCAYaDQoCBgoSIkKDAgH+DUEUNAyAOQQhqIg4gC2ohAwwCCyAEIAwgT3qnQQN2IAtqIAhxQQJ0aygCACIDTQ0fIE9CAX0gT4MhTyAbIANBFGxqIgMoAgAgFkcNACADQQRqKAIAIBlHDQALCyADIBA2AgggA0EMaiARQQBHOgAADAULIBMgCCAScSILaikAAEKAgYKEiJCgwIB/gyJPUARAQQghAwNAIAMgC2ohCyADQQhqIQMgEyAIIAtxIgtqKQAAQoCBgoSIkKDAgH+DIk9QDQALCyATIE96p0EDdiALaiAIcSIDaiwAACILQQBOBEAgEyATKQMAQoCBgoSIkKDAgH+DeqdBA3YiA2otAAAhCwsgC0EBcSELAkAgBSgC5AENACALRQ0AIAVB4AFqIBsgBBDiASASIAUoAuABIghxIgwgBSgC7AEiE2opAABCgIGChIiQoMCAf4MiT1AEQEEIIQMDQCADIAxqIQwgA0EIaiEDIBMgCCAMcSIMaikAAEKAgYKEiJCgwIB/gyJPUA0ACwsgEyBPeqdBA3YgDGogCHEiA2osAABBAEgNACATKQMAQoCBgoSIkKDAgH+DeqdBA3YhAwsgBSAFKALkASALazYC5AEgAyATaiAdOgAAIANBCGsgCHEgE2pBCGogHToAACAFIAUoAugBQQFqNgLoASAFKALsASADQQJ0a0EEayAENgIAIAQgBSgC8AEiA0cNAyAFKALkASAFKALoAWogBSgC+AEiCGshAyADIAQgCGtNBEAgBCEDDAQLIAggAyAIaiIDSw0+IANBFGwhCCADQefMmTNJQQJ0IQsgBSAEBH8gBSAFKAL0ATYCYCAFIARBFGw2AmRBBAVBAAsiDDYCaCAFQcgAaiAIIAsgBUHgAGoQhgcgBSgCTCEIIAUoAkhFBEAgBSADNgLwASAFIAg2AvQBDAQLIAUoAlAiA0GBgICAeEYNAiADRQ0+DBsLIAVCgcoANwNgIAVB4ABqEIkLIQkMCAsgBUKBygA3A2AgBUHgAGoQiQshCQwHCyAFKALwASEDCyAFKAL4ASIIIANGBEAgNyADELwGIAUoAvgBIQgLIAUoAvQBIAhBFGxqIgMgEjYCECADIBFBAEc6AAwgAyAQNgIIIAMgGTYCBCADIBY2AgAgBSAIQQFqIgQ2AvgBCyAVIQggCQ0ACyAFKALgASEJIAUoAuwBIhRFDQ0gGkECRg0NIAUoAvgBIRYgBSkD8AEhUCAFKQLkASFPDAQLDBYLDC0LIAVCgcoANwPgASAFQeABahCJCyEJDAoLIAUoAuABIgMEQCAFKALsASADQQJ0QQtqQXhxaxC1AQsgBSgC8AFFDQkgBSgC9AEQtQEMCQsgT0IgiKchHSBPpyEIDAELIAUgCjYCNCAIRQ0CIAogCUEIayIENgIEIAogA0EIajYCACADLQAHIhlBAk8EQEEQQQQQ9wsiCUUNKiAJIBk6AAEgCUECOgAADAgLIAVBATYCMCAEQQdNBEAgBUKBygA3A+ABIAVB4AFqEIkLIQkMCAsgCiAJQRBrIhQ2AgQgCiADQRBqIgg2AgAgBUHgAGogAykACBCHBiAFKAJkIQkgBSgCYA0HAn8gCUUEQEEAIQsgBUEANgLoASAFQgA3A+ABIAUpAuQBIU9BgJvAACEbQQAhDEEAIQpBBAwBCyAFQeAAaiAJEIoFIAlB5syZM0sNMyAJQRRsIg5BAEgNMyAJQefMmTNJQQJ0IQQgDgR/IA4gBBD3CwUgBAsiA0UNEiAFQeABaiIEQQhqIAVB6ABqKQMANwMAIAUgBSkDYDcD4AEgBUEANgL4ASAFIAM2AvQBIAUgCTYC8AEgBEEQaiE3QQAhBANAIBRBA00EQCAFQoHKADcDYCAFQeAAahCJCyEJDAYLIAogFEEEayIDNgIEIAogCEEEajYCACADQQNNBEAgBUKBygA3A2AgBUHgAGoQiQshCQwGCyAIKAAAIRYgCiAUQQhrIgM2AgQgCiAIQQhqNgIAAkACQAJAAkAgA0EITwRAIAgoAAQhESAKIBRBEGsiAzYCBCAKIAhBEGo2AgAgCCkACCJPQoCAgIAQWgRAIAVBAToAYCAFIE83A2ggBUHgAGogBUHIAGpB7IDAABCsCCEJDAsLIANFDQEgCiAUQRFrIhQ2AgQgCiAIQRFqIhU2AgAgCC0AECIQQQJPBEBBEEEEEPcLIglFDTEgCSAQOgABIAlBAjoAAAwLCyAJQQFrIQkgT6chGyAFKALsASITQQRrIQsgESAWQbnz3fF5bEEFd3NBufPd8XlsIhJBGXYiGq1CgYKEiJCgwIABfiFRQQAhDiAFKALgASEIIAUoAvQBIR0gEiEDAkADQCADIAhxIgwgE2opAAAiUCBRhSJPQoGChIiQoMCAAX0gT0J/hYNCgIGChIiQoMCAf4MhTwNAIE9QBEAgUCBQQgGGg0KAgYKEiJCgwIB/g1BFDQMgDCAOQQhqIg5qIQMMAgsgBCALIE96p0EDdiAMaiAIcUECdGsoAgAiA00NGiBPQgF9IE+DIU8gHSADQRRsaiIDKAIAIBZHDQAgA0EEaigCACARRw0ACwsgAyAbNgIIIANBDGogEEEARzoAAAwFCyATIAggEnEiC2opAABCgIGChIiQoMCAf4MiT1AEQEEIIQMDQCADIAtqIQwgA0EIaiEDIBMgCCAMcSILaikAAEKAgYKEiJCgwIB/gyJPUA0ACwsgEyBPeqdBA3YgC2ogCHEiA2osAAAiDEEATgRAIBMgEykDAEKAgYKEiJCgwIB/g3qnQQN2IgNqLQAAIQwLIAxBAXEhCwJAIAUoAuQBDQAgC0UNACAFQeABaiAdIAQQ4gEgEiAFKALgASIIcSIMIAUoAuwBIhNqKQAAQoCBgoSIkKDAgH+DIk9QBEBBCCEDA0AgAyAMaiEMIANBCGohAyATIAggDHEiDGopAABCgIGChIiQoMCAf4MiT1ANAAsLIBMgT3qnQQN2IAxqIAhxIgNqLAAAQQBIDQAgEykDAEKAgYKEiJCgwIB/g3qnQQN2IQMLIAUgBSgC5AEgC2s2AuQBIAMgE2ogGjoAACADQQhrIAhxIBNqQQhqIBo6AAAgBSAFKALoAUEBajYC6AEgBSgC7AEgA0ECdGtBBGsgBDYCACAEIAUoAvABIgNHDQMgBSgC5AEgBSgC6AFqIAUoAvgBIghrIQMgAyAEIAhrTQRAIAQhAwwECyAIIAMgCGoiA0sNOSADQRRsIQggA0HnzJkzSUECdCEMIAUgBAR/IAUgBSgC9AE2AmAgBSAEQRRsNgJkQQQFQQALNgJoIAVByABqIAggDCAFQeAAahCGByAFKAJMIQggBSgCSEUEQCAFIAM2AvABIAUgCDYC9AEMBAsgBSgCUCIDQYGAgIB4Rg0CIANFDTkMFgsgBUKBygA3A2AgBUHgAGoQiQshCQwJCyAFQoHKADcDYCAFQeAAahCJCyEJDAgLIAUoAvABIQMLIAUoAvgBIgggA0YEQCA3IAMQvAYgBSgC+AEhCAsgBSgC9AEgCEEUbGoiAyASNgIQIAMgEEEARzoADCADIBs2AgggAyARNgIEIAMgFjYCACAFIAhBAWoiBDYC+AELIBUhCCAJDQALIAUoAuABIQsgBSgC7AEiG0UEQCALIQkMCQsgBSgC8AEhDCAFKQLkASFPIAUoAvgBIQogBSgC9AELIQQgBUHgAWogBUEwahB9AkACfyAFKALgAUUEQCAFQegBaigCACIIDQJBAkGgk8AAQYyDwAAQ5gcMAQsgBSgC5AELIQkgCwRAIBsgC0ECdEELakF4cWsQtQELIAxFDQggBBC1AQwICyAFKALkASEJIBlBAkYNByAFQYQCaikCACFRIAVBgAJqKAIAIRogBUH8AWooAgAhFiAFQfQBaikCACFQIAVB8AFqKAIAIRQgBUHsAWooAgAhHQsgBSASNgLYASAFIA42AtQBIAUgEzYC0AEgBSADNgLMASAFIBk2AsgBIAUgCjYCxAEgBSAENgLAASAFIAw2ArwBIAUgGzYCuAEgBSBPNwOwASAFIAs2AqwBIAUgUTcCpAEgBSAaNgKgASAFIBY2ApwBIAUgUDcClAEgBSAUNgKQASAFIB02AowBIAUgCDYCiAEgBSAJNgKEASAFIC02AoABQQAhCUEAIQMCQAJAAkACQAJAAkACQAJAIAVBgAFqIgQoAgBBAWsOBQECAwQFAAtB2ABBBBD3CyIJRQ0FIAkgBEEEakHYABDkDBpB5JbCACEDDAQLQcgAQQQQ9wsiCUUNMiAJIARBBGpByAAQ5AwaQaSWwgAhAwwDC0HIAEEEEPcLIglFDTEgCSAEQQRqQcgAEOQMGkHklcIAIQMMAgtBIEEEEPcLIglFDTEgCSAEKQIENwIAIAlBGGogBEEcaikCADcCACAJQRBqIARBFGopAgA3AgAgCUEIaiAEQQxqKQIANwIAQeSUwgAhAwwBC0EgQQQQ9wsiCUUNMCAJIAQpAgQ3AgAgCUEYaiAEQRxqKQIANwIAIAlBEGogBEEUaikCADcCACAJQQhqIARBDGopAgA3AgBBpJXCACEDCyAFIAM2AgQgBSAJNgIADAELQdgAQQRByO/DACgCACIAQYoHIAAbEQAAAAsgBSgCBCEVIAUoAgAhCCAFEJMHIgk2AoABIAhFDQYgBUGAAWoQwwcLICIgIToAJSAiIBc6ACQgIiAGNgIgICIgJDYCHCAiIAE2AhggIiAVNgIUICIgCDYCECAiID02AgwgIiA2NgIIICIgSDYCBCAiIEc2AgAMDAsgBUKBygA3A+ABIAVB4AFqEIkLIQkMBAsgBSgC4AEiAwRAIAUoAuwBIANBAnRBC2pBeHFrELUBCyAFKALwAUUNAyAFKAL0ARC1AQwDCyAFQoHKADcD4AEgBUHgAWoQiQshCQwCCyAFKALgASIDBEAgBSgC7AEgA0ECdEELakF4cWsQtQELIAUoAvABRQ0BIAUoAvQBELUBDAELIApFDQAgGRC1AQsgIkECOgAkICIgCTYCACAGBEAgBkGoAWwhAyAkQYQBaiEKA0AgCkEkaygCAARAIApBIGsoAgAQtQELIApBBGsoAgAEQCAKKAIAELUBCyAKQagBaiEKIANBqAFrIgMNAAsLIAFFDQYgJBC1AQwGCyAFKALgAUUNACAFKALkARC1AQsgBkUNAiAIELUBDAILIAVBADoAgwEgBUElOwCBASAFQQA2AoQBIAVBAToAgAEgBUGAAWoQiQsLIQEgBSgC4AFFDQAgBSgC5AEQtQELIAUoAgwhAyAFKAIQIgQEQCAEQagBbCEGIANBhAFqIQoDQCAKQSRrKAIABEAgCkEgaygCABC1AQsgCkEEaygCAARAIAooAgAQtQELIApBqAFqIQogBkGoAWsiBg0ACwsgBSgCCEUNACADELUBCyAiQQI6ACQgIiABNgIACyAFQZACaiQADAMLIAggA0HI78MAKAIAIgBBigcgABsRAAAACyADIARB6JvAABDDCAALIA4gBEHI78MAKAIAIgBBigcgABsRAAAACyACKAKYAyEDAkAgAi0AvAMiCUECRwRAIDMgMikCADcCACAzQRhqIDJBGGopAgA3AgAgM0EQaiAyQRBqKQIANwIAIDNBCGogMkEIaikCADcCACACIEYvAAAiATsBiAUgAiBGQQJqLQAAIgQ6AIoFIDUgATsAACA1QQJqIgggBDoAACACIAk6AKQEIAIgAzYCgAQCfyAPKAIEIgNBA00EQCACQoHKADcDmAMgAkGYA2oQiQsMAQsgDyADQQRrIgQ2AgQgDyAPKAIAIgFBBGo2AgAgBEEDTQRAIAJCgcoANwOYAyACQZgDahCJCwwBCyABKAAAIQ4gDyADQQhrIgQ2AgQgDyABQQhqNgIAIARBA00EQCACQoHKADcDmAMgAkGYA2oQiQsMAQsgASgABCELIA8gA0EMayIENgIEIA8gAUEMajYCACAEQQNLDQIgAkKBygA3A5gDIAJBmANqEIkLCyEDIAJBgARqEJUGCyANBEAgDUE4bCEJIBxBEGohBANAIAQQlQYgBEE4aiEEIAlBOGsiCQ0ACwsgAigC6AJFDQYgHBC1AQwGCyAYQQFrIRggASgACCEFIA8gA0EQazYCBCAPIAFBEGo2AgAgAkGwAmoiA0EIaiIMIAJBgARqIgRBCGopAwA3AwAgA0EQaiIKIARBEGopAwA3AwAgA0EYaiISIARBGGopAwA3AwAgA0EgaiIRIARBIGooAgA2AgAgAiACKQOABDcDsAIgAiA1LwAAOwGIAiACIAgtAAA6AIoCIAEoAAwhAyACQZgDaiIBQQhqIhYgDCkDADcDACABQRBqIgQgCikDADcDACABQRhqIgwgEikDADcDACABQSBqIgogESgCADYCACACIAIpA7ACNwOYAyACIAIvAYgCOwGABCACIAItAIoCOgCCBCACKALoAiANRgRAIAJB6AJqIA0QwQYgAigC7AIhHCACKALwAiENCyAcIA1BOGxqIgEgAzYCDCABIAU2AgggASALNgIEIAEgDjYCACABIAIpA5gDNwIQIAooAgAhAyAMKQMAIU8gBCkDACFQIBYpAwAhUSABIAk6ADQgAUEYaiBRNwIAIAFBIGogUDcCACABQShqIE83AgAgAUEwaiADNgIAIAEgAi8BgAQ7ADUgAUE3aiACLQCCBDoAACACIA1BAWoiDTYC8AIgGA0ACyACKALsAiEcIAIoAugCIQ4LIBwNAiAOIQMMAwtBAUHAiMAAQYyDwAAQ5gchAwwCCyACKAKcAyEDDAILIAIgIzYCtAIgAkECNgKwAiACQZgDaiACQbACahCqAgJAIAIoApgDBEAgAigCnAMhAwwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACQaADaigCACIIBEAgAigCnAMhEyACKAKwAiIBBEAgAkGkA2ooAgAhEiACIAFBAWs2ArACIAIoArQCIgkoAgQiAUEHTQRAIAJCgcoANwOYAyACQZgDahCJCyEDDCALIAkgAUEIayIBNgIEIAkgCSgCACIDQQhqNgIAIAJBgARqIAMpAAAQhwYgAigChAQhAyACKAKABA0fAkAgA0GAICADQYAgSRsiGEUEQEEEIRcMAQsgGEEUbCIEQQQQ9wsiF0UNNAtBACEVIAJBADYCoAMgAiAXNgKcAyACIBg2ApgDIAMEQANAIAFFDQUgCSABQQFrIgE2AgQgCSAJKAIAIgRBAWo2AgAgBC0AACIFQQJPBEBBEEEEEPcLIgNFDTUgAyAFOgABIANBAjoAAAwhCyABRQ0GIAkgAUEBayIBNgIEIAkgBEECajYCACAELQABIhhBAk8EQEEQQQQQ9wsiA0UNNSADIBg6AAEgA0ECOgAADCELIAFBA00EQCACQoHKADcDgAQgAkGABGoQiQshAwwhCyAJIAFBBGsiATYCBCAJIARBBmo2AgAgAUEDTQRAIAJCgcoANwOABCACQYAEahCJCyEDDCELIAQoAAIhCyAJIAFBBGsiATYCBCAJIARBCmo2AgAgAUEDTQRAIAJCgcoANwOABCACQYAEahCJCyEDDCELIAQoAAYhDCAJIAFBBGsiATYCBCAJIARBDmo2AgAgAUEDTQRAIAJCgcoANwOABCACQYAEahCJCyEDDCELIANBAWshAyAEKAAKIQogCSABQQRrIgE2AgQgCSAEQRJqNgIAIAQoAA4hESACKAKYAyAVRgRAIAJBmANqIBUQvAYgAigCnAMhFyACKAKgAyEVCyAXIBVBFGxqIgQgGDoAESAEIAU6ABAgBCARNgIMIAQgCjYCCCAEIAw2AgQgBCALNgIAIAIgFUEBaiIVNgKgAyADDQALIAIoApwDIRcgAigCmAMhGAsgFw0CIBghAwwfC0EBQcCIwABBjIPAABDmByEDDB4LQQBBwIjAAEGMg8AAEOYHIQMMHgsgIygCBCIBQQhJDRkgIyABQQhrIgY2AgQgIyAjKAIAIgFBCGo2AgAgAkGABGogASkAABCHBiACKAKEBCEDIAIoAoAEDRoCQCADQYAgIANBgCBJGyIERQRAQQQhBQwBCyAEQQxsIgFBBBD3CyIFRQ0vC0EAIQEgAkEANgKgAyACIAU2ApwDIAIgBDYCmAMgAwRAA0ACQAJ/IAZBA00EQCACQoHKADcDgAQgAkGABGoQiQsMAQsgIyAGQQRrIgk2AgQgIyAjKAIAIgRBBGo2AgAgCUEDTQRAIAJCgcoANwOABCACQYAEahCJCwwBCyAEKAAAIQsgIyAJQQRrIgk2AgQgIyAEQQhqNgIAIAlBA0sNASACQoHKADcDgAQgAkGABGoQiQsLIQMgAigCmANFDR0gAigCnAMQtQEMHQsgA0EBayEDIAQ1AAQhTyAjIAlBBGsiBjYCBCAjIARBDGo2AgAgTyAENQAIQiCGhCFPIAIoApgDIAFGBEAgAkGYA2ogARC0BiACKAKcAyEFIAIoAqADIQELIAUgAUEMbGoiBCBPNwIEIAQgCzYCACACIAFBAWoiATYCoAMgAw0ACyACKAKcAyEFIAIoApgDIQQLIAVFBEAgBCEDDBsLIAIgATYCgAIgAiAFNgL8ASACIAQ2AvgBIAIgFTYC9AEgAiAXNgLwASACIBg2AuwBIAIgEjYC6AEgAiAINgLkASACIBM2AuABIAIgDTYC3AEgAiAcNgLYASACIA42AtQBIAIgLDYC0AEgAiAnNgLMASACIAc2AsgBIAIgQTYCxAEgAiAvNgLAAQJAIAIoAggiAwRAIAIgA0EBazYCCCACKAIMIQYgAkEBNgLgBCACIAY2AuQEIAYoAgQiA0EHTQRAIAJCgcoANwOYAyACQZgDahCJCyEDDBoLIAYgA0EIazYCBEEIIQ0gBiAGKAIAIgNBCGo2AgAgAkGABGogAykAABCHBiACKAKEBCEJIAIoAoAEBEAgCSEDDBoLIAlBgCAgCUGAIEkbIgMEQCADQegCbCIEQQgQ9wsiDUUNBQtBACEQIAJBADYC8AQgAiANNgLsBCACIAM2AugEAkAgCQRAIAJBoANqIRgDQAJAAkAgBigCBCINQQRPBEAgBiANQQRrIgM2AgQgBiAGKAIAIgRBBGo2AgACQAJAAkAgBCgAACIPDgIBAgALIAJBAToAmAMgAiAPrTcDoAMgAkGYA2pB1IfAAEGMg8AAEKwIIQMMIAsCQAJAIAMEQCAGIA1BBWsiITYCBCAGIARBBWo2AgBBACEVIAQtAAQiFA4CBgIBCyACQoHKADcDmAMgAkGYA2oQiQshAwwhC0EQQQQQ9wsiA0UNOSADIBQ2AgQgA0EEOgAADCALICFBBE8EQCAGIA1BCWs2AgQgBiAEQQlqNgIAIAQoAAUhOkEBIRUMBAsgAkKBygA3A5gDIAJBmANqEIkLIQMMHwsgA0EDTQRAIAJCgcoANwOYAyACQZgDahCJCyEDDB8LIAYgDUEIazYCBCAGIARBCGo2AgAgBCgABCEVIAJBmANqIAYQxgUgAigCnAMhAyACKAKYAw0eIAJBgARqIgFBEGoiByAYQRBqIgwpAgA3AwAgAUEIaiIFIBhBCGoiCikCADcDACACIBgpAgA3A4AEIAJBmANqIAYQxgUgAigCnAMhCCACKAKYAwRAIAghAwwfCyACQdAGaiIBQRBqIiEgDCkCADcDACABQQhqIhQgCikCADcDACACQegGaiIBQQhqIhsgBSkDADcDACABQRBqIhkgBykDADcDACACIBgpAgA3A9AGIAIgAikDgAQ3A+gGIAYoAgQiAUUEQCACQoHKADcDmAMgAkGYA2oQiQshAwwfCyAGIAFBAWs2AgQgBiAGKAIAIgFBAWo2AgAgAS0AACEnIAJBmANqIAYQxwQgAigCnAMhASACKAKYAwRAIAEhAwwfCyACQbACaiIEQSBqIhIgGEEgaiIWKQIANwMAIARBGGoiESAYQRhqIh4pAgA3AwAgBEEQaiIaIAwpAgA3AwAgBEEIaiIdIAopAgA3AwAgAiAYKQIANwOwAgJAAkACQCAGKAIEIgsEQCAGIAtBAWsiDTYCBCAGIAYoAgAiBEEBajYCAEEAIQ4gBC0AACIXDgIDAgELIAJCgcoANwOYAyACQZgDahCJCyEDDCELQRBBBBD3CyIDRQ05IAMgFzYCBCADQQQ6AAAMIAsCfwJAAkACQAJAIA1BBE8EQCAGIAtBBWsiDjYCBCAGIARBBWo2AgAgBCgAASINDgICAwELIAJCgcoANwOYAyACQZgDahCJCyEDDCQLIAJBAToAmAMgAiANrTcDoAMgAkGYA2pB1IfAAEGMg8AAEKwIIQMMIwsgAkGYA2ogBhDHBCACKAKYA0UNASACKAKcAyEDDCILIA5BBE8EQCAGIAtBCWs2AgQgBiAEQQlqNgIAIAQoAAUMAgsgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCyEDDCELIAUgCikCADcDACAHIAwpAgA3AwAgAkGABGoiBEEYaiAeKQIANwMAIARBIGogFikCADcDACACIBgpAgA3A4AEIAIoApwDCyEEQTBBBBD3CyIORQ0MIA4gBDYCBCAOIA02AgAgDiACKQOABDcCCCAOQRBqIAUpAwA3AgAgDkEYaiAHKQMANwIAIA5BIGogAkGABGoiBEEYaikDADcCACAOQShqIARBIGopAwA3AgALIAJBmANqIAYQuQQCQAJ/IAIoApwDIhMgAigCmAMNABogAikDoAMhTyACQZgDaiAGELkEIAIoApwDIhwgAigCmAMNABogBigCBCIHQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCwwBCyACKQOgAyFQIAYgB0EEayIMNgIEIAYgBigCACIEQQRqNgIAIAxBA00EQCACQQA6AJsDIAJBJTsAmQMgAkEANgKcAyACQQE6AJgDIAJBmANqEIkLDAELIAQoAAAhFyAGIAdBCGsiDDYCBCAGIARBCGo2AgAgDEEDTQRAIAJBADoAmwMgAkElOwCZAyACQQA2ApwDIAJBAToAmAMgAkGYA2oQiQsMAQsgBCoABCFlIAYgB0EMayIMNgIEIAYgBEEMajYCACAMQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCwwBCyAEKgAIIWcgBiAHQRBrIgw2AgQgBiAEQRBqNgIAIAxBA00EQCACQQA6AJsDIAJBJTsAmQMgAkEANgKcAyACQQE6AJgDIAJBmANqEIkLDAELIAQqAAwhaCAGIAdBFGsiDDYCBCAGIARBFGo2AgAgDEEDSw0BIAJBADoAmwMgAkElOwCZAyACQQA2ApwDIAJBAToAmAMgAkGYA2oQiQsLIQMgDgRAIA4QtQELDB8LIAQqABAhaSAGIAdBGGs2AgQgBiAEQRhqNgIAIAJB6AJqIgdBCGoiIiAdKQMANwMAIAdBEGoiHSAaKQMANwMAIAdBGGoiGiARKQMANwMAIAdBIGoiJCASKQMANwMAIAIgAikDsAI3A+gCIAQqABQhaiACQZgDaiAGELkEIAIoApwDIQcgAigCmAMNHSACKQOgAyFRIAJBmANqIAYQuQQgAigCnAMhEiACKAKYAwRAIBIhBwweCyACKQOgAyFbIAJBmANqIAYQuQQgAigCnAMhBSACKAKYAwRAIAUhBwweCyACKQOgAyFZIAJBmANqIAYQuQQgAigCnAMhCyACKAKYAwRAIAshBwweCyAGKAIEIgxBA00EQCACQQA6AJsDIAJBJTsAmQMgAkEANgKcAyACQQE6AJgDIAJBmANqEIkLIQcMHgsgAikDoAMhWiAGIAxBBGsiCjYCBCAGIAYoAgAiBEEEajYCACAKQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCyEHDB4LIAQqAAAhayAGIAxBCGs2AgQgBiAEQQhqNgIAIAQqAAQhbCACQZgDaiAGELkEIAIoApwDIQwgAigCmAMEQCAMIQcMHgsgAikDoAMhVyACQZgDaiAGELkEIAIoApwDIQogAigCmAMEQCAKIQcMHgsgBigCBCIEQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCyEHDB4LIAIpA6ADIVQgBiAEQQRrNgIEIAYgBigCACIEQQRqNgIAIAQqAAAhbSACQZgDaiAGELkEIAIoApwDIREgAigCmAMEQCARIQcMHgsgAikDoAMhWCACQZgDaiAGELkEIAIoApwDIRYgAigCmAMEQCAWIQcMHgsgBigCBCINQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCyEHDB4LIAIpA6ADIVUgBiANQQRrIh42AgQgBiAGKAIAIgRBBGo2AgAgHkEDTQRAIAJBADoAmwMgAkElOwCZAyACQQA2ApwDIAJBAToAmAMgAkGYA2oQiQshBwweCyAEKAAAITEgBiANQQhrIh42AgQgBiAEQQhqNgIAIB5FDQwgBCgABCEpIAYgDUEJayIeNgIEIAYgBEEJajYCACAELQAIIixBAk8EQEEQQQQQ9wsiB0UNOCAHICw6AAEgB0ECOgAADB4LIB5FDQ0gBiANQQprIh42AgQgBiAEQQpqNgIAIAQtAAkiMEECTwRAQRBBBBD3CyIHRQ04IAcgMDoAASAHQQI6AAAMHgsgHkEISQ0OIAYgDUESayIeNgIEIAYgBEESajYCACAEKQAKIlJCgICAgBBaBEAgAkEBOgCYAyACIFI3A6ADIAJBmANqIAJBiAdqQeyAwAAQrAghBwweCyAeQQhJDQ8gBiANQRprIh42AgQgBiAEQRpqNgIAIAQpABIiU0KAgICAEFoEQCACQQE6AJgDIAIgUzcDoAMgAkGYA2ogAkGIB2pB7IDAABCsCCEHDB4LIB5BCEkNECAGIA1BImsiHjYCBCAGIARBImo2AgAgBCkAGiJWQoCAgIAQWgRAIAJBAToAmAMgAiBWNwOgAyACQZgDaiACQYgHakHsgMAAEKwIIQcMHgsgHkEDTQRAIAJCgcoANwOYAyACQZgDahCJCyEHDB4LIAYgDUEmazYCBCAGIARBJmo2AgAgBCgAIiEuIAJBmANqIAYQtwMgAigCmAMhHiACKAKcAyIrRQRAIB4hBwweCyAGKAIEIg1BA00EQCACQQA6AJsDIAJBJTsAmQMgAkEANgKcAyACQQE6AJgDIAJBmANqEIkLIQcMHQsgAigCoAMhKiAGIA1BBGsiJTYCBCAGIAYoAgAiBEEEajYCACAlQQNNBEAgAkEAOgCbAyACQSU7AJkDIAJBADYCnAMgAkEBOgCYAyACQZgDahCJCyEHDB0LIAQoAAAhPiAGIA1BCGsiJTYCBCAGIARBCGo2AgAgJUEDTQRAIAJBADoAmwMgAkElOwCZAyACQQA2ApwDIAJBAToAmAMgAkGYA2oQiQshBwwdCyAEKgAEIW4gBiANQQxrIiU2AgQgBiAEQQxqNgIAICVBA00EQCACQQA6AJsDIAJBJTsAmQMgAkEANgKcAyACQQE6AJgDIAJBmANqEIkLIQcMHQsgBCoACCFvIAYgDUEQayIlNgIEIAYgBEEQajYCACAlRQ0RIAQqAAwhcCAGIA1BEWsiIzYCBCAGIARBEWo2AgAgBC0AECIlQQJPBEBBEEEEEPcLIgdFDTggByAlOgABIAdBAjoAAAwdCyAjQQNNBEAgAkKBygA3A5gDIAJBmANqEIkLIQcMHQsgBiANQRVrIiM2AgQgBiAEQRVqNgIAICNBBEkNEiAEKAARIT8gBiANQRlrIiM2AgQgBiAEQRlqNgIAIAQoABUiOEEETwRAIAJBAToAmAMgAiA4rTcDoAMgAkGYA2pB6IvAAEGMg8AAEKwIIQcMHQsgI0UEQCACQoHKADcDmAMgAkGYA2oQiQshBwwdCyAGIA1BGmsiIzYCBCAGIARBGmo2AgAgI0UNEyAELQAZIUAgBiANQRtrIiM2AgQgBiAEQRtqNgIAIAQtABoiOUECTwRAQRBBBBD3CyIHRQ04IAcgOToAASAHQQI6AAAMHQsgI0EPSw0BIAJCgcoANwOYAyACQZgDahCJCyEHDBwLIAJCgcoANwOYAyACQZgDahCJCyEDDB0LIFKnITogU6chOyBWpyE0IARBJ2o1AAAhUyAEKQAfIVIgBCgAGyE8IAYgDUErazYCBCAGIARBK2o2AgAgAkGwBmoiBEEIaiAbKQMANwMAIARBEGogGSkDADcDACACQZgGaiIEQQhqIBQpAwA3AwAgBEEQaiAhKQMANwMAIAJB8AVqIgRBIGogJCkDADcDACAEQRhqIBopAwA3AwAgBEEQaiAdKQMANwMAIARBCGogIikDADcDACACIAIpA+gGNwOwBiACIAIpA9AGNwOYBiACIAIpA+gCNwPwBSACQe4FaiACQYcHai0AADoAACACQeoFaiACQc8Gai0AADoAACACQeQFaiACQcwGai0AADoAACACIAIvAIUHOwHsBSACIAIvAM0GOwHoBSACIAIoAMgGNgLgBQsgCUEBayEJIAJByAVqIgRBEGoiFCACQbAGaiINQRBqKQMANwMAIARBCGoiGyANQQhqKQMANwMAIAJBsAVqIgRBCGoiGSACQZgGaiINQQhqKQMANwMAIARBEGoiGiANQRBqKQMANwMAIAJBiAVqIgRBCGoiHSACQfAFaiINQQhqKQMANwMAIARBEGoiIiANQRBqKQMANwMAIARBGGoiJCANQRhqKQMANwMAIARBIGoiIyANQSBqKQMANwMAIAIgAikDsAY3A8gFIAIgAikDmAY3A7AFIAIgAikD8AU3A4gFIAJBhgVqIi0gAkHuBWotAAA6AAAgAkGCBWoiLyACQeoFai0AADoAACACQfwEaiIzIAJB5AVqLQAAOgAAIAIgAi8B7AU7AYQFIAIgAi8B6AU7AYAFIAIgAigC4AU2AvgEIAIoAugEIBBGBEAgAkHoBGohDSMAQSBrIgQkAAJAIBBBAWoiEEUNPyANKAIAIiFBAXQiMiAQIBAgMkkbIhBBBCAQQQRLGyIQQegCbCEyIBBBsYvsAklBA3QhNQJAICEEQCAEQQg2AhggBCAhQegCbDYCFCAEIA1BBGooAgA2AhAMAQsgBEEANgIYCyAEIDIgNSAEQRBqEIYHIAQoAgQhISAEKAIARQRAIA0gEDYCACANICE2AgQMAQsgBEEIaigCACINQYGAgIB4Rg0AIA1FDT8gISANQcjvwwAoAgAiAEGKByAAGxEAAAALIARBIGokACACKALwBCEQCyACKALsBCINIBBB6AJsaiIEIFI3AhwgBCADNgIoIAQgPDYCGCAEIC42AhQgBCA0NgIQIAQgOzYCDCAEIDo2AgggBCAVNgIEIAQgDzYCACAEIAIpA8gFNwIsIAQgCDYCRCAEIAIpA7AFNwNIIARBJGogUz4CACAEQTRqIBspAwA3AgAgBEE8aiAUKQMANwIAIARB0ABqIBkpAwA3AwAgBEHYAGogGikDADcDACAEIAE2ArABIAQgajgCrAEgBCBpOAKoASAEIGg4AqQBIAQgZzgCoAEgBCBlOAKcASAEIBc2ApgBIAQgbDgClAEgBCBrOAKQASAEIFo3A4gBIAQgCzYChAEgBCBZNwJ8IAQgBTYCeCAEIFs3A3AgBCASNgJsIAQgUTcCZCAEIAc2AmAgBCAONgLcASAEIBM2AuABIAQgTzcC5AEgBCAcNgLsASAEIFA3A/ABIAQgJzoA+AEgBEHUAWogIykDADcCACAEQcwBaiAkKQMANwIAIARBxAFqICIpAwA3AgAgBEG8AWogHSkDADcCACAEIAIpA4gFNwK0ASAEIAIvAYQFOwD5ASAEQfsBaiAtLQAAOgAAIAQgJToA3AIgBCBwOALYAiAEIG84AtQCIAQgbjgC0AIgBCA+NgLMAiAEIDA6AMkCIAQgLDoAyAIgBCApNgLEAiAEIDE2AsACIAQgKjYCvAIgBCArNgK4AiAEIB42ArQCIAQgPzYCsAIgBCBVNwOoAiAEIBY2AqQCIAQgWDcCnAIgBCARNgKYAiAEIG04ApQCIAQgVDcCjAIgBCAKNgKIAiAEIFc3A4ACIAQgDDYC/AEgBCA5OgDiAiAEIDg6AOECIAQgQDoA4AIgBEHfAmogLy0AADoAACAEIAIvAYAFOwDdAiAEIAIoAvgENgDjAiAEQecCaiAzLQAAOgAAIAIgEEEBaiIQNgLwBCAJDQALIAIoAugEIQMMAQsgDUUNGgsgBigCBCIEQQNNBEAgAkKBygA3A5gDIAJBmANqEIkLIQkMFgsgBiAEQQRrIgc2AgQgBiAGKAIAIgFBBGo2AgACQAJAAkAgBwRAIAEoAAAhCSAGIARBBWsiGDYCBCAGIAFBBWoiDjYCACABLQAEIgcOAgMCAQsgAkKBygA3A5gDIAJBmANqEIkLIQkMGAtBEEEEEPcLIglFDTMgCSAHNgIEIAlBBDoAAAwXCyAYQQRJDQ8gBiAEQQlrIhg2AgQgBiABQQlqIg42AgAgASgABSETQQEhBwsgGEEISQ0PIAYgGEEIazYCBCAGIA5BCGo2AgAgDikAACJPQoCAgIAQWgRAIAJBAToAmAMgAiBPNwOgAyACQZgDaiACQYgHakHsgMAAEKwIIQkMFgsgAkGYA2ogAkHgBGoQ+gICfyACKAKYA0UEQCACQaADaigCACIBDQNBAUGQicAAQYyDwAAQ5gcMAQsgAigCnAMLIQcgEARAIBBB6AJsIQQgDSEBA0ACQCABKAIARQ0AIAFB3AFqKAIAIgkEQCAJELUBCyABQbQCaigCAEUNACABQbgCaigCABC1AQsgAUHoAmohASAEQegCayIEDQALCyADBEAgDRC1AQsgByEDDBkLQQVB7LvAAEGMg8AAEOYHIQEgJkECNgJMICYgATYCAAwZCyACIBA2AqwCIAIgDTYCqAIgAiADNgKkAiACIE8+AqACIAIgCTYCnAIgAiATNgKYAiACIAc2ApQCIAIgAigCnAM2AogCIAIgAa0gAkGkA2o1AgBCIIaENwKMAiACQZgDaiEKQQAhEEEAIQlBACEMQQAhDkEAIRJCACFPQQAhBkEAIRZBACEeQQAhF0EAIRNBACEhQQAhHEEAIRlBACEbQQAhIkEAIRpBACEdQQAhI0EAISRBACEpQQAhJ0EAISVBACErQQAhKkMAAAAAIWVCACFQQgAhUSMAQcAEayIIJAACQCACQQhqIgEoAgAiA0UEQCAKQQI2AhgMAQsgASADQQFrNgIAAkACQCABKAIEIgUoAgQiAUEHTQRAIAhCgcoANwP4AiAIQfgCahCJCyEBDAELIAUgAUEIazYCBEEIIQcgBSAFKAIAIgFBCGo2AgAgCEGwAWogASkAABCHBiAIKAK0ASEDIAgoArABBEAgAyEBDAELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADQYAgIANBgCBJGyIEBEAgBEGoAWwiAUEIEPcLIgdFDQELIAhBADYCGCAIIAc2AhQgCCAENgIQIAMEQCAIQfgCaiIBQQhqIRggAUEEciEVIAhBuAFqIRIDQAJAAkAgBSgCBCILQQRPBEAgBSALQQRrIgE2AgQgBSAFKAIAIgRBBGo2AgACQAJAAkAgBCgAACIwDgIBAgALIAhBAToA+AIgCCAwrTcDgAMgCEH4AmpB1IfAAEGMg8AAEKwIIQEMFAsCQAJAIAEEQCAFIAtBBWsiDTYCBCAFIARBBWo2AgBBACEUIAQtAAQiEQ4CBgIBCyAIQoHKADcD+AIgCEH4AmoQiQshAQwVC0EQQQQQ9wsiAUUNRyABIBE2AgQgAUEEOgAADBQLIA1BBE8EQCAFIAtBCWs2AgQgBSAEQQlqNgIAIAQoAAUhEEEBIRQMBAsgCEKBygA3A/gCIAhB+AJqEIkLIQEMEwsgAUEDTQRAIAhCgcoANwP4AiAIQfgCahCJCyEBDBMLIAUgC0EIayIBNgIEIAUgBEEIajYCAAJAAkACQCABQQRPBEAgBCgABCEUIAUgC0EMazYCBCAFIARBDGo2AgBBACEWIAQoAAgiAQ4CAwIBCyAIQoHKADcD+AIgCEH4AmoQiQshAQwUCyAIQQE6APgCIAggAa03A4ADIAhB+AJqQdSHwABBjIPAABCsCCEBDBMLQQEhFgsgCEH4AmogBRAYIAgoAvwCIQEgCCgC+AIiBEETRg0RIBIgGEHAARDkDCERIAggATYCtAEgCCAENgKwASAIQQhqIAhBsAFqEKUBIAgoAgwhHiAIKAIIIQ4gCBCTByIBNgL4AiAORQ0RIAhB+AJqEMMHAkACQAJAAkACQCAFKAIEIgRBBE8EQCAFIARBBGsiCTYCBCAFIAUoAgAiAUEEajYCACABKAAAIg8OAwIDBAELIAhCgcoANwP4AiAIQfgCahCJCyEBDBULIAhBAToA+AIgCCAPrTcDgAMgCEH4AmpBoIvAAEGMg8AAEKwIIQEMFAsgCUEETwRAIAUgBEEIayIENgIEIAUgAUEIajYCACABKAAEIQsMAwsgCEEAOgD7AiAIQSU7APkCIAhBADYC/AIgCEEBOgD4AiAIQfgCahCJCyEBDBMLIAlBBE8EQCAFIARBCGsiBDYCBCAFIAFBCGo2AgAgASgABCELDAILIAhBADoA+wIgCEElOwD5AiAIQQA2AvwCIAhBAToA+AIgCEH4AmoQiQshAQwSCyAIQfgCaiAFEMcEIAgoAvgCDQhBLEEEEPcLIgtFDQcgCyAVKQIANwIAIAtBKGogFUEoaigCADYCACALQSBqIBVBIGopAgA3AgAgC0EYaiAVQRhqKQIANwIAIAtBEGogFUEQaikCADcCACALQQhqIBVBCGopAgA3AgAgBSgCBCEECyAEQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBSAEQQRrIgE2AgQgBSAFKAIAIglBBGo2AgACQAJAAkAgAQRAIAkoAAAhHCAFIARBBWsiDTYCBCAFIAlBBWo2AgAgCS0ABCIGDgIDAgELIAhCgcoANwP4AiAIQfgCahCJCyEBDBILQRBBBBD3CyIBRQ1HIAEgBjYCBCABQQQ6AAAMEQsgDUEDTQRAIAhCgcoANwP4AiAIQfgCahCJCyEBDBELIAUgBEEJayIBNgIEIAUgCUEJajYCACABQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEQsgCSgABSEZIAUgBEENazYCBCAFIAlBDWo2AgAgCSgACSEbIAhB+AJqIAUQxgUgCCgC/AIhASAIKAL4Ag0QIAhBwAFqIBhBEGopAgA3AwAgESAYQQhqKQIANwMAIAggGCkCADcDsAFBASEGCyAIQZgBaiIEQRBqIiwgCEHAAWoiLikDADcDACAEQQhqIjEgESkDADcDACAIIAgpA7ABNwOYASAIQfgCaiAFEMYFIAgoAvwCIQkgCCgC+AIEQCAJIQEMEAsgLiAYQRBqKQIANwMAIBEgGEEIaikCADcDACAIIBgpAgA3A7ABIAUoAgQiDUEDTQRAIAhBADoA+wIgCEElOwD5AiAIQQA2AvwCIAhBAToA+AIgCEH4AmoQiQshAQwQCyAFIA1BBGsiEDYCBCAFIAUoAgAiBEEEajYCACAQQQNNBEAgCEEAOgD7AiAIQSU7APkCIAhBADYC/AIgCEEBOgD4AiAIQfgCahCJCyEBDBALIAQoAAAhIiAFIA1BCGsiEDYCBCAFIARBCGo2AgAgEEEESQ0IIAQoAAQhGiAFIA1BDGsiEDYCBCAFIARBDGo2AgAgBCgACCIXQQRPBEAgCEEBOgD4AiAIIBetNwOAAyAIQfgCakHoi8AAQYyDwAAQrAghAQwQCyAQQQRJDQkgBSANQRBrIhA2AgQgBSAEQRBqNgIAIAQoAAwiE0EETwRAIAhBAToA+AIgCCATrTcDgAMgCEH4AmpB6IvAAEGMg8AAEKwIIQEMEAsgEEEBTQRAIAhCgcoANwP4AiAIQfgCahCJCyEBDBALIAUgDUESayIQNgIEIAUgBEESajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBC8AECEdIAUgDUEWayIQNgIEIAUgBEEWajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBCgAEiEjIAUgDUEaayIQNgIEIAUgBEEaajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBCgAFiEkIAUgDUEeayIQNgIEIAUgBEEeajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBCgAGiEpIAUgDUEiayIQNgIEIAUgBEEiajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBCgAHiEnIAUgDUEmayIQNgIEIAUgBEEmajYCACAQQQNNBEAgCEKBygA3A/gCIAhB+AJqEIkLIQEMEAsgBCgAIiElIAUgDUEqayIQNgIEIAUgBEEqajYCACAQQQRJDQogBCgAJiErIAUgDUEuayIQNgIEIAUgBEEuajYCACAEKAAqIiFBA08EQCAIQQE6APgCIAggIa03A4ADIAhB+AJqQaCLwABBjIPAABCsCCEBDBALIBBBA00EQCAIQoHKADcD+AIgCEH4AmoQiQshAQwQCyAFIA1BMmsiEDYCBCAFIARBMmo2AgAgEEEDTQRAIAhBADoA+wIgCEElOwD5AiAIQQA2AvwCIAhBAToA+AIgCEH4AmoQiQshAQwQCyAEKAAuISogBSANQTZrIhA2AgQgBSAEQTZqNgIAIBBBD0sNASAIQoHKADcD+AIgCEH4AmoQiQshAQwPCyAIQoHKADcD+AIgCEH4AmoQiQshAQwRCyAEKgAyIWUgBEHCAGo1AAAhUCAEKQA6IVEgBCgANiEQIAUgDUHGAGs2AgQgBSAEQcYAajYCACAIQfgAaiIEQQhqIDEpAwA3AwAgBEEQaiAsKQMANwMAIAhB4ABqIgRBCGogESkDADcDACAEQRBqIC4pAwA3AwAgCCAIKQOYATcDeCAIIAgpA7ABNwNgIAggCEGUAWooAAA2AFsgCCAIKACRATYCWCAPrSALrUIghoQhTwsgA0EBayEDIAhBQGsiBEEQaiILIAhB+ABqIg1BEGopAwA3AwAgBEEIaiIEIA1BCGopAwA3AwAgCEEoaiINQQhqIhEgCEHgAGoiD0EIaikDADcDACANQRBqIg0gD0EQaikDADcDACAIIAgpA3g3A0AgCCAIKQNgNwMoIAggCCgCWDYCICAIIAgoAFs2ACMgGCAEKQMANwMAIAhBiANqIg8gCykDADcDACAIIAgpA0A3A/gCIBIgESkDADcDACAIQcABaiIRIA0pAwA3AwAgCCAIKQMoNwOwASAIIAgoAiA2ApgBIAggCCgAIzYAmwEgT0IgiKchLiBPpyEsIAgoAhAgDEYEQCAIQRBqIQQjAEEgayILJAACQCAMQQFqIgdFDU0gBCgCACIMQQF0Ig0gByAHIA1JGyIHQQQgB0EESxsiDUGoAWwhByANQbGYjAZJQQN0ITECQCAMBEAgC0EINgIYIAsgDEGoAWw2AhQgCyAEQQRqKAIANgIQDAELIAtBADYCGAsgCyAHIDEgC0EQahCGByALKAIEIQcgCygCAEUEQCAEIA02AgAgBCAHNgIEDAELIAtBCGooAgAiBEGBgICAeEYNACAERQ1NDEcLIAtBIGokACAIKAIYIQwgCCgCFCEHCyAHIAxBqAFsaiIEIFE3AgwgBCABNgI0IAQgGzYCMCAEIBk2AiwgBCAGNgIoIAQgLjYCJCAEICw2AiAgBCAeNgIcIAQgDjYCGCAEIBA2AgggBCAUNgIEIAQgMDYCACAEQRRqIFA+AgAgBCAIKQP4AjcDOCAEQUBrIBgpAwA3AwAgBEHIAGogDykDADcDACAEIAk2AlQgBCAcNgJQIAQgCCkDsAE3A1ggBEHgAGogEikDADcDACAEQegAaiARKQMANwMAIAQgKjYCcCAEIGU4AnQgBCAiNgJ4IAQgGjYCfCAEICM2AoQBIAQgJDYCiAEgBCApNgKMASAEICc2ApABIAQgJTYClAEgBCArNgKYASAEIBY6AKABIAQgIToAngEgBCAdOwGcASAEIBM6AIEBIAQgFzoAgAEgBEGkAWogCCgAmwE2AAAgBCAIKAKYATYAoQEgCCAMQQFqIgw2AhggAw0ACyAIKAIUIQcgCCgCECEECyAHRQRAIAQhAQwPCyAFKAIEIglBA00EQCAIQoHKADcD+AIgCEH4AmoQiQshAQwKCyAFIAlBBGsiAzYCBCAFIAUoAgAiAUEEajYCAAJAAkACQCADBEAgASgAACELIAUgCUEFayIDNgIEIAUgAUEFaiINNgIAIAEtAAQiDg4CAwIBCyAIQoHKADcD+AIgCEH4AmoQiQshAQwMC0EQQQQQ9wsiAUUNQiABIA42AgQgAUEEOgAADAsLIANBBEkNByAFIAlBCWsiAzYCBCAFIAFBCWoiDTYCACABKAAFIRJBASEOCyADQQhJDQcgBSADQQhrNgIEIAUgDUEIajYCACANKQAAIk9CgICAgBBaBEAgCEEBOgD4AiAIIE83A4ADIAhB+AJqIAhBsAFqQeyAwAAQrAghAQwKCyAIQfgCaiAFELcDIAgoAvgCIQEgCCgC/AIiCQRAIAgoAoADIQ0gCEH4AmogBRC3AyAIKAL4AiEDIAgoAvwCIgUNCSABBEAgCRC1AQsgAyEBCyAMBEAgDEGoAWwhCSAHIQMDQAJAIAMoAgBFDQAgA0EYaiIOKAIAIgUoAgAhDCAFIAxBAWs2AgAgDEEBRgRAIA4oAgAgA0EcaigCABC+CAsgA0EgaigCAEECSQ0AIANBJGooAgAQtQELIANBqAFqIQMgCUGoAWsiCQ0ACwsgBEUNDiAHELUBDA4LIAFBCEHI78MAKAIAIgBBigcgABsRAAAAC0EsQQRByO/DACgCACIAQYoHIAAbEQAAAAsgCCgC/AIhAQwICyAIQoHKADcD+AIgCEH4AmoQiQshAQwGCyAIQoHKADcD+AIgCEH4AmoQiQshAQwFCyAIQoHKADcD+AIgCEH4AmoQiQshAQwECyAIQoHKADcD+AIgCEH4AmoQiQshAQwCCyAIQoHKADcD+AIgCEH4AmoQiQshAQwBCyAIKAKAAyEYIAogDDYCMCAKIAc2AiwgCiAENgIoIAogTz4CJCAKIAs2AiAgCiASNgIcIAogDjYCGCAKIBg2AhQgCiAFNgIQIAogAzYCDCAKIA02AgggCiAJNgIEDAYLIAwEQCAMQagBbCEJIAchAwNAAkAgAygCAEUNACADQRhqIg4oAgAiBSgCACEMIAUgDEEBazYCACAMQQFGBEAgDigCACADQRxqKAIAEL4ICyADQSBqKAIAQQJJDQAgA0EkaigCABC1AQsgA0GoAWohAyAJQagBayIJDQALCyAERQ0EIAcQtQEMBAsgD0ECSQ0AIAsQtQELIA4gDigCACIDQQFrNgIAIANBAUcNACAOIB4QvggLIAgoAhghDCAIKAIUIQcLIAwEQCAMQagBbCEDA0ACQCAHKAIARQ0AIAdBGGoiCSgCACIMKAIAIQQgDCAEQQFrNgIAIARBAUYEQCAJKAIAIAdBHGooAgAQvggLIAdBIGooAgBBAkkNACAHQSRqKAIAELUBCyAHQagBaiEHIANBqAFrIgMNAAsLIAgoAhBFDQAgCCgCFBC1AQsgCkEDNgIYCyAKIAE2AgALIAhBwARqJAACQAJAAkAgAigCsAMiA0ECaw4CAQACCyACKAKYAyEBDBMLQQZB7LvAAEGMg8AAEOYHIQEMEgsgAkGwAmoiAUEQaiACQZgDaiIKQRBqIiEpAwA3AwAgAUEIaiAKQQhqIhMpAwA3AwAgAUEkaiAKQSRqKQIANwIAIAFBLGogCkEsaikCADcCACACIAIpA5gDNwOwAiACIAIpArQDNwLMAiACIAM2AsgCQQAhC0EAIRhBACESQQAhBiMAQcAPayIHJAACQCACQQhqIgEoAgAiA0UEQCAKQQI2AjAMAQsgASADQQFrNgIAIAEoAgQhBCAHQQM2AgAgByAENgIEAkAgBCgCBCIBQQdNBEAgB0KBygA3A/gMIAdB+AxqEIkLIQEMAQsgBCABQQhrIgk2AgQgBCAEKAIAIgFBCGo2AgAgB0HICmogASkAABCHBiAHKALMCiEBIAcoAsgKDQACQAJAAkACQAJ/AkAgAUGAICABQYAgSRsiBUUEQEEEIQ4MAQsgBUEDdCIDQQQQ9wsiDkUNPQsgB0EANgKADSAHIA42AvwMIAcgBTYC+AwgAQRAA0ACQAJ/IAlBA00EQCAHQoHKADcDyAogB0HICmoQiQsMAQsgBCAJQQRrIgk2AgQgBCAEKAIAIgNBBGo2AgAgCUEDSw0BIAdCgcoANwPICiAHQcgKahCJCwshASAHKAL4DEUNCCAHKAL8DBC1AQwICyABQQFrIQEgAygAACEIIAQgCUEEayIJNgIEIAQgA0EIajYCACADKAAEIQMgBygC+AwgC0YEQCAHQfgMaiALELgGIAcoAoANIQsgBygC/AwhDgsgDiALQQN0aiIMIAM2AgQgDCAINgIAIAcgC0EBaiILNgKADSABDQALIAcoAvgMIQUgBygC/AwhDgsgDkUEQCAFIQEMBgsCQAJAAkACQCAHKAIAIgEEQCAHIAFBAWs2AgAgBygCBCINKAIEIgFBB00EQCAHQoHKADcD+AwgB0H4DGoQiQshAQwKCyANIAFBCGsiCDYCBCANIA0oAgAiAUEIajYCACAHQcgKaiABKQAAEIcGIAcoAswKIQEgBygCyAoNCQJAIAFBgCAgAUGAIEkbIglFBEBBBCEMDAELIAlBDGwiA0EEEPcLIgxFDUILIAdBADYC0AogByAMNgLMCiAHIAk2AsgKIAEEQANAAkACQAJAIAhBBE8EQCANIAhBBGsiAzYCBCANIA0oAgAiCUEEajYCAAJAAkACQCAJKAAAIgYOAgECAAsgB0EBOgD4DCAHIAatNwOADSAHQfgMakHUh8AAQYyDwAAQrAghAQwDCwJAAkAgAwRAIA0gCEEFayIDNgIEIA0gCUEFajYCAEEAIQQgCS0ABCIVDgIHAgELIAdCgcoANwP4DCAHQfgMahCJCyEBDAQLQRBBBBD3CyIBRQ1DIAEgFTYCBCABQQQ6AAAMAwsgA0EETwRAIA0gCEEJayIDNgIEIA0gCUEJajYCACAJKAAFIRJBASEEDAULIAdCgcoANwP4DCAHQfgMahCJCyEBDAILIANBA00EQCAHQoHKADcD+AwgB0H4DGoQiQshAQwCCyANIAhBCGsiAzYCBCANIAlBCGo2AgAgA0EDSw0CIAdCgcoANwP4DCAHQfgMahCJCyEBDAELIAdCgcoANwP4DCAHQfgMahCJCyEBCyAHKALICkUNDSAHKALMChC1AQwNCyAJKAAEIQQgDSAIQQxrIgM2AgQgDSAJQQxqNgIAIAkoAAghEgsgAUEBayEBIAcoAsgKIBhGBEAgB0HICmogGBC0BiAHKALQCiEYIAcoAswKIQwLIAwgGEEMbGoiCSASNgIIIAkgBDYCBCAJIAY2AgAgByAYQQFqIhg2AtAKIAMhCCABDQALIAcoAswKIQwgBygCyAohCQsgDEUEQCAJIQEMCgsgDSgCBCIIQQNNBEAgB0KBygA3A/gMIAdB+AxqEIkLIQEMCQsgDSAIQQRrIgM2AgQgDSANKAIAIgFBBGo2AgACQAJAAkAgAwRAIAEoAAAhFCANIAhBBWsiAzYCBCANIAFBBWoiBDYCACABLQAEIhIOAgMCAQsgB0KBygA3A/gMIAdB+AxqEIkLIQEMCwtBEEEEEPcLIgFFDT0gASASNgIEIAFBBDoAAAwKCyADQQRJDQMgDSAIQQlrIgM2AgQgDSABQQlqIgQ2AgAgASgABSEGQQEhEgsgA0EISQ0DIA0gA0EIazYCBCANIARBCGo2AgAgBCkAACJPQoCAgIAQVA0BIAdBAToA+AwgByBPNwOADSAHQfgMaiAHQcgKakHsgMAAEKwIIQEMCAtBAUGYj8AAQYyDwAAQ5gchAQwICwJAIAcoAgAiAQRAIAcgAUEBazYCACAHIAcoAgQ2AgwgB0ECNgIIIAdB+AxqIAdBCGoQqgICQCAHKAL4DEUEQCAHQYANaigCACIeRQRAQQBBwIjAAEGMg8AAEOYHIQEMCgsgBygC/AwhDyAHKAIIIgEEQCAHQYQNaigCACEcIAcgAUEBazYCCCAHKAIMIggoAgQiAUEHTQRAIAdCgcoANwP4DCAHQfgMahCJCyEBDAoLIAggAUEIazYCBCAIIAgoAgAiAUEIajYCACAHQcgKaiABKQAAEIcGIAcoAswKIQQgBygCyAoEQCAEIQEMCgtBBCENIARBgCAgBEGAIEkbIgMEQCADQfACbCIBQQQQ9wsiDUUNPgtBACEVIAdBADYCGCAHIA02AhQgByADNgIQIAQEQCAHQfgMaiIBQQRyIRYgAUHhAGohGwNAIAcgCDYCxAoCQAJAIAgoAgQiA0EDTQRAIAdCgcoANwP4DCAHQfgMahCJCyEBDAELIAggA0EEayIRNgIEIAggCCgCACIBQQRqNgIAIBFBA00EQCAHQoHKADcD+AwgB0H4DGoQiQshAQwBCyABKAAAIRkgCCADQQhrIhE2AgQgCCABQQhqNgIAIAdBAzYCwAogEUEDTQRAIAdCgcoANwP4DCAHQfgMahCJCyEBDAELIAEoAAQhGiAIIANBDGsiETYCBCAIIAFBDGo2AgAgEUEDTQRAIAdCgcoANwP4DCAHQfgMahCJCyEBDAELIAEoAAghHSAIIANBEGs2AgQgCCABQRBqNgIAIAEoAAwhIiAHQfgMaiAHQcAKahA+AkACQAJAIActANgNIhBBAmsOAgEAAgsgBygC+AwhAQwCC0ECQdiNwABBjIPAABDmByEBDAELIAcoAvgMIQEgB0GcDGogFkHcABDkDBogB0HICmogG0HPARDkDBogB0H4DGogB0HACmoQ4wICQAJAAkAgBygC+AwOAwECAAILIAcoAvwMIQEMAgtBA0HYjcAAQYyDwAAQ5gchAQwBCyAHQagPaiIDQRBqIiQgFkEQaikCADcDACADQQhqIiUgFkEIaikCADcDACAHIBYpAgA3A6gPAkAgBygCwAoEQCAHKALECiIDKAIEIhdBA00EQCAHQoHKADcD+AwgB0H4DGoQiQshAQwDCyADIBdBBGsiKTYCBCADIAMoAgAiEUEEajYCACApQQNLDQEgB0KBygA3A/gMIAdB+AxqEIkLIQEMAgtBBEHYjcAAQYyDwAAQ5gchAQwBCyARKAAAISkgAyAXQQhrNgIEIAMgEUEIajYCACARKAAEIRcgB0GQCGogB0HICmpBzwEQ5AwaIAdB+AdqIgNBEGoiESAkKQMANwMAIANBCGoiAyAlKQMANwMAIAcgBykDqA83A/gHIAdB5AlqIAdBnAxqQdwAEOQMGiAQQQJGDQAgB0GcB2ogB0HkCWpB3AAQ5AwaIAdBzQVqIAdBkAhqQc8BEOQMGiAHQbAFaiIkQRBqIiUgESkDADcDACAkQQhqIhEgAykDADcDACAHIAcpA/gHNwOwBSAQQQNGDQAgB0HUBGogB0GcB2pB3AAQ5AwaIAdBhQNqIAdBzQVqQc8BEOQMGiAHQegCaiIDQRBqIiQgJSkDADcDACADQQhqIiUgESkDADcDACAHIAcpA7AFNwPoAiAIKAIEIhFBA00EQCAHQoHKADcD+AwgB0H4DGoQiQshAQwBCyAIIBFBBGsiKjYCBCAIIAgoAgAiA0EEajYCACAqQQNNBEAgB0KBygA3A/gMIAdB+AxqEIkLIQEMAQsgAygAACEqIAggEUEIayIjNgIEIAggA0EIajYCACAjQQNNBEAgB0KBygA3A/gMIAdB+AxqEIkLIQEMAQsgAygABCEjIAggEUEMayIrNgIEIAggA0EMajYCACArQQNLDQEgB0KBygA3A/gMIAdB+AxqEIkLIQELIAcoAhBFDQwgDRC1AQwMCyAEQQFrIQQgAygACCErIAggEUEQazYCBCAIIANBEGo2AgAgAygADCERIAdBjAJqIgMgB0HUBGpB3AAQ5AwaIAdBPWoiJyAHQYUDakHPARDkDBogB0EgaiIwQRBqIi4gJCkDADcDACAwQQhqIiQgJSkDADcDACAHIAcpA+gCNwMgIAdByApqIANB3AAQ5AwaIAdB+AxqICdBzwEQ5AwaIAdBkAhqIgNBEGoiJSAuKQMANwMAIANBCGoiJyAkKQMANwMAIAcgBykDIDcDkAggBygCECAVRgRAIAdBEGogFRDEBiAHKAIYIRUgBygCFCENCyANIBVB8AJsaiIDIAE2AgAgA0EEaiAHQcgKakHcABDkDBogAyAQOgBgIANB4QBqIAdB+AxqQc8BEOQMGiADICI2ArwCIAMgHTYCuAIgAyAaNgK0AiADIBk2ArACIAMgBykDkAg3AsACIANByAJqICcpAwA3AgAgA0HQAmogJSkDADcCACADIBE2AuwCIAMgKzYC6AIgAyAjNgLkAiADICo2AuACIAMgFzYC3AIgAyApNgLYAiAHIBVBAWoiFTYCGCAEDQALIAcoAhQhDSAHKAIQIQMLIA0NAiADIQEMCQtBAUHAiMAAQYyDwAAQ5gchAQwICyAHKAL8DCEBDAgLIAdB+AxqIAcQ+gIgBygC+AxFDQEgBygC/AwMBQtBAkGYj8AAQYyDwAAQ5gchAQwGCyAHQYANaigCACIBRQ0CIAdBhA1qKAIAIQQgBygC/AwhCCAKIBg2AkggCiAMNgJEIAogCTYCQCAKIE8+AjwgCiAUNgI4IAogBjYCNCAKIBI2AjAgCiAENgIsIAogATYCKCAKIAg2AiQgCiALNgIgIAogDjYCHCAKIAU2AhggCiAVNgIUIAogDTYCECAKIAM2AgwgCiAcNgIIIAogHjYCBCAKIA82AgAMCQsgB0KBygA3A/gMIAdB+AxqEIkLIQEMBQsgB0KBygA3A/gMIAdB+AxqEIkLIQEMBAtBA0GYj8AAQYyDwAAQ5gcLIQEgDwRAIB4QtQELIANFDQEgDRC1AQwBCyAPRQ0AIB4QtQELIAlFDQEgDBC1AQwBCyAJRQ0AIAwQtQELIAVFDQAgDhC1AQsgCkEDNgIwIAogATYCAAsgB0HAD2okAAJAAkACQCACKALIAyIDQQJrDgIBAAILIAIoApgDIQEMEQtBB0Hsu8AAQYyDwAAQ5gchAQwQCyACQYAEaiIBQShqIAJBmANqIg9BKGoiPykDADcDACABQSBqIA9BIGoiQCkDADcDACABQRhqIA9BGGoiQSkDADcDACABQRBqICEpAwA3AwAgAUEIaiATKQMANwMAIAFBPGogD0E8aiJGKQIANwIAIAFBxABqIA9BxABqIkcpAgA3AgAgAiACKQOYAzcDgAQgAiACKQLMAzcCtAQgAiADNgKwBEEAIRBBACEFQQAhDEEAIRZBACELQQAhDUEAIQ5BACEXQQAhHkEAIRNBACEUQQAhGEEAIRJBACEVQQAhGUEAIRtCACFPQQAhIkEAIRpBACEdQQAhI0EAISRBACEpQgAhUEIAIVFCACFUQQAhO0EAITRBACE8QgAhUkEAISdBACElQQAhK0EAISpBACEwQQAhM0EAISxBACEyQQAhOEEAIS5BACExQQAhOUEAIS1BACEIIwBB0BNrIgYkAAJAIAJBCGoiASgCACIDRQRAIA9BAjYCMAwBCyABIANBAWs2AgAgASgCBCERIAZBAzYCACAGIBE2AgQCQCARKAIEIgFBB00EQCAGQoHKADcD+BAgBkH4EGoQiQshAQwBCyARIAFBCGs2AgQgESARKAIAIgFBCGo2AgAgBkHoC2ogASkAABCHBiAGKALsCyEEIAYoAugLBEAgBCEBDAELQQQhCQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8gBEGAICAEQYAgSRsiAQRAIAFBlAJsIgdBBBD3CyIJRQ1ICyAGQQA2AhAgBiAJNgIMIAYgATYCCAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBARAIAZB+BBqIgFBIGohOiAGQYQRaiEcIAFBCGohLyAGQbcNaiE1IAFBBHIhPiAGQdkRaiFIA0ACQAJAAkACQAJAAkAgESgCBCIHQQRPBEAgESAHQQRrIgM2AgQgESARKAIAIgFBBGo2AgAgASgAACIJDgICAwELIAZCgcoANwP4ECAGQfgQahCJCyEBDC8LIAZBAToA+BAgBiAJrTcDgBEgBkH4EGpB1IfAAEGMg8AAEKwIIQEMLgsCQAJAIAMEQCARIAdBBWsiCTYCBCARIAFBBWo2AgBBACEKQQIhISABLQAEIhAOAgQCAQsgBkKBygA3A/gQIAZB+BBqEIkLIQEMLwtBEEEEEPcLIgFFDWAgASAQNgIEIAFBBDoAAAwuCyAJQQRPBEAgESAHQQlrNgIEIBEgAUEJajYCACABKAAFIRdBASEKDAILIAZCgcoANwP4ECAGQfgQahCJCyEBDC0LIANBA00EQCAGQoHKADcD+BAgBkH4EGoQiQshAQwtCyARIAdBCGsiAzYCBCARIAFBCGo2AgAgASgABCETIAZBDzYCmAMgBiARNgKcAyADQQdNBEAgBkKBygA3A/gQIAZB+BBqEIkLIQEMLQsgESAHQRBrNgIEIBEgAUEQajYCACAGQegLaiABKQAIEIcGIAYoAuwLIQMgBigC6AsEQCADIQEMLQsCQCADQYAgIANBgCBJGyIMRQRAQQQhHgwBCyAMQdQDbCIHQQQQ9wsiHkUNYQtBACEUIAZBADYCqAMgBiAeNgKkAyAGIAw2AqADIAMEQANAIBEoAgQiB0EISQ0IIBEgB0EIayIJNgIEIBEgESgCACIBQQhqNgIAIAEpAAAiT0KAgICAEFoEQCAGQQE6APgQIAYgTzcDgBEgBkH4EGogBkGgCGpB7IDAABCsCCEBDC4LIAlBCEkNCSARIAdBEGsiCTYCBCARIAFBEGo2AgAgASkACCJQQoCAgIAQWgRAIAZBAToA+BAgBiBQNwOAESAGQfgQaiAGQaAIakHsgMAAEKwIIQEMLgsgCUEISQ0KIBEgB0EYayIJNgIEIBEgAUEYajYCACABKQAQIlFCgICAgBBaBEAgBkEBOgD4ECAGIFE3A4ARIAZB+BBqIAZBoAhqQeyAwAAQrAghAQwuCyAJQQNNBEAgBkKBygA3A/gQIAZB+BBqEIkLIQEMLgsgESAHQRxrIgk2AgQgESABQRxqNgIAIAlBA00EQCAGQoHKADcD+BAgBkH4EGoQiQshAQwuCyABKAAYIRggESAHQSBrNgIEIBEgAUEgajYCACABKAAcIRUgBiARNgLEDiAGQQM2AsAOIAZB+BBqIAZBwA5qED4CQAJAAkAgBi0A2BEiC0ECaw4CAQACCyAGKAL4ECEBDC8LQQBB6I7AAEGMg8AAEOYHIQEMLgsgBkGYEGogBkH4EGoiAUHgABDkDBogBkHIDmogSEHPARDkDBogASAGQcAOahDjAgJAAkACQCAGKAL4EA4DAQIAAgsgBigC/BAhAQwvC0EBQeiOwABBjIPAABDmByEBDC4LIAZBqBNqIgFBEGoiCSA+QRBqKQIANwMAIAFBCGoiASA+QQhqKQIANwMAIAYgPikCADcDqBMgBkH4EGogBkHADmoQwQMCQAJAAkAgBigC+BAOAwECAAILIAYoAvwQIQEMLwtBAkHojsAAQYyDwAAQ5gchAQwuCyAGQcgTaiIMIC9BCGoiCCgCADYCACAGIC8pAgA3A8ATIAYoAvwQIQcgHCAGQZgQakHgABDkDBogBkHoC2ogBkHIDmpBzwEQ5AwaIDVBEGogCSkDADcAACA1QQhqIAEpAwA3AAAgNSAGKQOoEzcAACAvIAwoAgA2AgAgBiAGKQPAEzcD+BAgBkHQDWogBkH4EGpB7AAQ5AwaIAtBAkYEQCAHIQEMLgsgBkH4CmogBkHQDWpB7AAQ5AwaIAZBkAlqIAZB6AtqQecBEOQMGiALQQNGBEAgByEBDC4LIAZBoAhqIAZB+ApqQewAEOQMGiAGQbgGaiAGQZAJakHnARDkDBogBkH4EGogERDGBSAGKAL8ECEBIAYoAvgQDS0gBkGQCWoiCUEQaiINIC9BEGoiDCkCADcDACAJQQhqIhIgCCkCADcDACAGIC8pAgA3A5AJIAZB+BBqIBEQxgUgBigC/BAhCSAGKAL4EARAIAkhAQwuCyAGQegLaiIOQRBqIhYgDCkCADcDACAOQQhqIhAgCCkCADcDACAGIC8pAgA3A+gLIAZB+BBqIBEQuQQgBigC/BAhCCAGKAL4EARAIAghAQwuCyAGKQOAESFUIAZB+BBqIBEQuQQgBigC/BAhDCAGKAL4EARAIAwhAQwuCyAGKQOAESFSIAZB+BBqIBEQuQQgBigC/BAhDiAGKAL4EARAIA4hAQwuCyAGKQOAESFTIAZB+BBqIBEQuQQgBigC/BAhBSAGKAL4EARAIAUhAQwuCyADQQFrIQMgT6chFyBQpyEhIFGnIRsgBikDgBEhTyAGQcwFaiIZIAZBoAhqQewAEOQMGiAGQeADaiIaIAZBuAZqIgpB5wEQ5AwaIAZByANqIh1BEGoiIiANKQMANwMAIB1BCGoiHSASKQMANwMAIAZBsANqIiRBCGoiJSAQKQMANwMAICRBEGoiECAWKQMANwMAIAYgBikDkAk3A8gDIAYgBikD6As3A7ADIAZB6AtqIBlB7AAQ5AwaIAZB+BBqIBpB5wEQ5AwaIA0gIikDADcDACASIB0pAwA3AwAgCkEIaiIWICUpAwA3AwAgCkEQaiIZIBApAwA3AwAgBiAGKQPIAzcDkAkgBiAGKQOwAzcDuAYgBigCoAMgFEYEQCAGQaADaiAUEMIGIAYoAqgDIRQgBigCpAMhHgsgHiAUQdQDbGoiCiAHNgIgIAogTzcCGCAKIAU2AhQgCiBTNwIMIAogDjYCCCAKIBU2AgQgCiAYNgIAIApBJGogBkHoC2pB7AAQ5AwaIAogCzoAkAEgCkGRAWogBkH4EGpB5wEQ5AwaIAogATYChAMgCiAbNgKAAyAKICE2AvwCIAogFzYC+AIgCiAGKQOQCTcCiAMgCkGQA2ogEikDADcCACAKQZgDaiANKQMANwIAIAogCTYCoAMgCiAGKQO4BjcCpAMgCkGsA2ogFikDADcCACAKQbQDaiAZKQMANwIAIAogUjcCzAMgCiAMNgLIAyAKIFQ3AsADIAogCDYCvAMgBiAUQQFqIhQ2AqgDIAMNAAsgBigCpAMhHiAGKAKgAyEMCyAeRQRAIAwhAQwtCyAGQfgQaiAGQZgDahDNAiAGKAL4EA0JIAYoAoARIhdFBEBBAUGEjcAAQYyDwAAQ5gchAQwrCyAGKAL8ECEKIAYpAoQRIVAgBkH4EGogBkGYA2oQzQIgBigC+BANCiAGKAKAESIwRQRAQQJBhI3AAEGMg8AAEOYHIQEMKgsgBigC/BAhIiAGKQKEESFRIAZB+BBqIAZBmANqEM0CIAYoAvgQDQsgBigCgBEiM0UEQEEDQYSNwABBjIPAABDmByEBDCkLIAYoAvwQIRoCQCAGKAKYAyIBBEAgBikChBEhVCAGIAFBAWs2ApgDIAYoApwDIgMoAgQiAUEHTQRAIAZCgcoANwP4ECAGQfgQahCJCyEBDCoLIAMgAUEIazYCBCADIAMoAgAiAUEIajYCACAGQegLaiABKQAAEIcGIAYoAuwLIQEgBigC6AsNKSAGIAM2ApQJIAYgATYCkAkCQCABQYAgIAFBgCBJGyIBRQRAQQQhCQwBCyABQQR0IgNBBBD3CyIJRQ1nCyAGQQA2AvALIAYgCTYC7AsgBiABNgLoCyAGQfgQaiAGQZAJahDOAiAGKAL4EA0OQQAhAwNAIAYoAoARIggEQCAGKQKEESFPIAYoAvwQIQ4gAyAGKALoC0YEQCAGQegLaiADELcGIAYoAuwLIQkgBigC8AshAwsgAyIHQQR0IAlqIgEgTzcCCCABIAg2AgQgASAONgIAIAYgA0EBaiIDNgLwCyAGQfgQaiAGQZAJahDOAiAGKAL4EEUNAQwpCwsgBigC6AshCyAGKALsCyISDQEgCyEBDCkLQQRBhI3AAEGMg8AAEOYHIQEMKAsgBkH4EGogBkGYA2oQkwIgBigC+BANDSAGKAKAESIsRQRAQQVBhI3AAEGMg8AAEOYHIQEMJQsgBigC/BAhGSAGQYALaiIQIBxBCGoiASgCADYCACAGIBwpAgA3A/gKIAZB+BBqIAZBmANqEJgBIAYoAvgQDQ4gBigCgBEiMkUEQEEGQYSNwABBjIPAABDmByEBDCQLIAZB0A5qIjsgASgCADYCACAGQdgNaiI0IDpBCGoiBygCADYCACAGIBwpAgA3A8gOIAYgOikCADcD0A0gBigC/BAhHSAGKAKQESEbIAYoApQRITggBkH4EGogBkGYA2oQkwIgBigC+BANDyAGKAKAESIuRQRAQQdBhI3AAEGMg8AAEOYHIQEMIwsgBigC/BAhIyAGQegDaiI8IAEoAgA2AgAgBiAcKQIANwPgAyAGQfgQaiAGQZgDahCYASAGKAL4EA0QIAYoAoARIjFFBEBBCEGEjcAAQYyDwAAQ5gchAQwiCyAGQZgJaiI2IAEoAgA2AgAgBkHABmoiPSAHKAIANgIAIAYgHCkCADcDkAkgBiA6KQIANwO4BiAGKAL8ECEkIAYoApARISkgBigClBEhOQJAIAYoApgDIgcEQCAGKAKcAyIJKAIEIghBCEkNEyAJIAhBCGsiDjYCBCAJIAkoAgAiAUEIajYCACABKQAAIlNCgICAgBBUDQEgBkEBOgD4ECAGIFM3A4ARIAZB+BBqIAZBoAhqQeyAwAAQrAghAQwiC0EJQYSNwABBjIPAABDmByEBDCELAkAgB0EBRwRAIA5FDRQgCSAIQQlrIg42AgQgCSABQQlqNgIAIAEtAAgiIUECSQ0BQRBBBBD3CyIBRQ1gIAEgIToAASABQQI6AAAMIgtBCkGEjcAAQYyDwAAQ5gchAQwhCwJAIAdBAkcEQCAOQQhJDRUgCSAIQRFrIg42AgQgCSABQRFqNgIAIAEpAAkiVUKAgICAEFQNASAGQQE6APgQIAYgVTcDgBEgBkH4EGogBkGgCGpB7IDAABCsCCEBDCILQQtBhI3AAEGMg8AAEOYHIQEMIQsCQCAHQQNHBEAgBiAHQQRrNgKYAyAGQQE2AqAIIAYgCTYCpAggDkEHTQRAIAZCgcoANwP4ECAGQfgQahCJCyEBDCMLIAkgCEEZazYCBCAJIAFBGWo2AgAgBkHoC2ogASkAERCHBiAGKALsCyENIAYoAugLBEAgDSEBDCMLAkAgDUGAICANQYAgSRsiDkUEQEEEIQUMAQsgDkEYbCIHQQQQ9wsiBUUNYwtBACEWIAZBADYC8AsgBiAFNgLsCyAGIA42AugLIA0EQANAIAZB+BBqIAkQuQQgBigC/BAhAQJAIAYoAvgQRQRAIAYpA4ARIU8gBkH4EGogCRC5BCAGKAL8ECEHIAYoAvgQRQ0BIAchAQsgBigC6AtFDSUgBRC1AQwlCyANQQFrIQ0gBikDgBEhUiAGKALoCyAWRgRAIAZB6AtqIBYQvgYgBigC8AshFiAGKALsCyEFCyAFIBZBGGxqIgggUjcCECAIIAc2AgwgCCBPNwIEIAggATYCACAGIBZBAWoiFjYC8AsgDQ0ACyAGKALsCyEFIAYoAugLIQ4LIAVFBEAgDiEBDCMLIAZB+BBqIAZBoAhqEM0CAn8gBigC+BBFBEAgBigCgBEiLQ0DQQFB/I/AAEGMg8AAEOYHDAELIAYoAvwQCyEBIA5FDSIgBRC1AQwiC0EMQYSNwABBjIPAABDmByEBDCELIAYoAvwQIQ0gBikChBEhTyAGQfgQaiAGQZgDahDBASAGKAL4EA0UIAYoAoARIhhFBEBBDUGEjcAAQYyDwAAQ5gchAQwgCyAGKAL8ECEnIAYoAoQRISUgBkH4EGogBkGYA2oQwQECQAJAIAYoAvgQRQRAIAYoAoARIhVFBEBBDkGEjcAAQYyDwAAQ5gchAQwCCyAGKAL8ECErIAYoAoQRISogBkH4EGogBkGYA2oQzgICfyAGKAL4EEUEQCAGKAKAESIIDQRBD0GEjcAAQYyDwAAQ5gcMAQsgBigC/BALIQEgKgRAICpBBHQhECAVIQcDQCAHKAIABEAgB0EEaigCABC1AQsgB0EQaiEHIBBBEGsiEA0ACwsgK0UNASAVELUBDAELIAYoAvwQIQELICUEQCAlQQR0IRAgGCEHA0AgBygCAARAIAdBBGooAgAQtQELIAdBEGohByAQQRBrIhANAAsLICdFDSAgGBC1AQwgCyAGQZADaiIBIDsoAgA2AgAgBkGAA2oiByA0KAIANgIAIAZB8AJqIgkgNigCADYCACAGQeACaiI0ID0oAgA2AgAgBiAGKQPIDjcDiAMgBiAGKQPQDTcD+AIgBiAGKQOQCTcD6AIgBiAGKQO4BjcD2AIgBigC/BAhOyAGKQKEESFSIAZB0AJqIjYgECgCADYCACAGQcACaiIQIDwoAgA2AgAgBiAGKQP4CjcDyAIgBiAGKQPgAzcDuAIgIUECRg0BIAZBsAJqIj0gASgCADYCACAGQaACaiIBIAcoAgA2AgAgBkGQAmoiByAJKAIANgIAIAZBgAJqIgkgNCgCADYCACAGQfABaiI3IDYoAgA2AgAgBiAGKQOIAzcDqAIgBiAGKQP4AjcDmAIgBiAGKQPoAjcDiAIgBiAGKQPYAjcD+AEgBiAGKQPIAjcD6AEgBkHgAWoiNiAQKAIANgIAIAZB1gFqIhAgBkG3AmotAAA6AAAgBiAGKQO4AjcD2AEgBiAGLwC1AjsB1AEgIUEDRg0BIFOnITQgVachPCAGQdABaiA9KAIANgIAIAZBwAFqIAEoAgA2AgAgBkGwAWogBygCADYCACAGQaABaiAJKAIANgIAIAZBkAFqIDcoAgA2AgAgBiAGKQOoAjcDyAEgBiAGKQOYAjcDuAEgBiAGKQOIAjcDqAEgBiAGKQP4ATcDmAEgBiAGKQPoATcDiAEgBkGAAWogNigCADYCACAGQfYAaiAQLQAAOgAAIAYgBikD2AE3A3ggBiAGLwHUATsBdAsgBkHwAGoiNiAGQdABaigCADYCACAGQeAAaiI9IAZBwAFqKAIANgIAIAZB0ABqIjcgBkGwAWooAgA2AgAgBkFAayJJIAZBoAFqKAIANgIAIAZBMGoiQiAGQZABaigCADYCACAGIAYpA8gBNwNoIAYgBikDuAE3A1ggBiAGKQOoATcDSCAGIAYpA5gBNwM4IAYgBikDiAE3AyggBkEgaiJDIAZBgAFqKAIANgIAIAZBFmoiSiAGQfYAai0AADoAACAGIAYpA3g3AxggBiAGLwF0OwEUICFBBEcNAQsgCiEBDCoLIARBAWshBCAGKAIQIgEgBigCCEYEQCAGQQhqIQkjAEEgayIHJAACQCABQQFqIgFFDWYgCSgCACIQQQF0IkQgASABIERJGyIBQQQgAUEESxsiAUGUAmwhRCABQYLz2gNJQQJ0IUUCQCAQBEAgByAQQZQCbDYCFCAHQQQ2AhggByAJQQRqKAIANgIQDAELIAdBADYCGAsgByBEIEUgB0EQahCGByAHKAIEIRAgBygCAEUEQCAJIAE2AgAgCSAQNgIEDAELIAdBCGooAgAiAUGBgICAeEYNACABRQ1mIBAgAUHI78MAKAIAIgBBigcgABsRAAAACyAHQSBqJAAgBigCECEBCyAGKAIMIgkgAUGUAmxqIgcgMjYCRCAHIB02AkAgByBSNwI4IAcgCDYCNCAHIDs2AjAgByBUNwIoIAcgMzYCJCAHIBo2AiAgByBRNwIYIAcgMDYCFCAHICI2AhAgByBQNwIIIAcgFzYCBCAHIAo2AgAgByAGKQNoNwJIIAdB0ABqIDYoAgA2AgAgByA4NgJYIAcgGzYCVCAHICQ2AmggByAxNgJsIAcgKTYCfCAHIDk2AoABIAcgBikDWDcCXCAHQeQAaiA9KAIANgIAIAcgBikDSDcCcCAHQfgAaiA3KAIANgIAIAcgBikDODcChAEgB0GMAWogSSgCADYCACAHICw2ArQBIAcgGTYCsAEgByADNgKsASAHIBI2AqgBIAcgCzYCpAEgByAUNgKgASAHIB42ApwBIAcgDDYCmAEgByA8NgKUASAHIDQ2ApABIAcgLjYCyAEgByAjNgLEASAHIAYpAyg3ArgBIAdBwAFqIEIoAgA2AgAgByAGKQMYNwLMASAHQdQBaiBDKAIANgIAIAcgIToAjAIgByAqNgKIAiAHIBU2AoQCIAcgKzYCgAIgByAlNgL8ASAHIBg2AvgBIAcgJzYC9AEgByAWNgLwASAHIAU2AuwBIAcgDjYC6AEgByBPNwLgASAHIC02AtwBIAcgDTYC2AEgB0GPAmogSi0AADoAACAHIAYvARQ7AI0CIAcgEzYCkAIgBiABQQFqIhA2AhAgBA0ACyAGKAIIIQEMAQsgCUUNKAsgESgCBCIEQQNNBEAgBkKBygA3A/gQIAZB+BBqEIkLIQQMGQsgESAEQQRrIgc2AgQgESARKAIAIgNBBGo2AgACQAJAAkAgBwRAIAMoAAAhDSARIARBBWsiFjYCBCARIANBBWoiBTYCACADLQAEIh4OAgMCAQsgBkKBygA3A/gQIAZB+BBqEIkLIQQMGwtBEEEEEPcLIgRFDVogBCAeNgIEIARBBDoAAAwaCyAWQQRJDRAgESAEQQlrIhY2AgQgESADQQlqIgU2AgAgAygABSEMQQEhHgsgFkEISQ0QIBEgFkEIazYCBCARIAVBCGo2AgAgBSkAACJPQoCAgIAQWgRAIAZBAToA+BAgBiBPNwOAESAGQfgQaiAGQaAIakHsgMAAEKwIIQQMGQsCQCAGKAIAIgMEQCAGIANBAWs2AgAgBigCBCIIKAIEIgNBB00EQCAGQoHKADcD+BAgBkH4EGoQiQshAwwaCyAIIANBCGsiBTYCBCAIIAgoAgAiA0EIajYCACAGQegLaiADKQAAEIcGIAYoAuwLIQMgBigC6AsNGQJAIANBgCAgA0GAIEkbIgRFBEBBBCETDAELIARBFGwiB0EEEPcLIhNFDV0LQQAhFiAGQQA2AvALIAYgEzYC7AsgBiAENgLoCyADBEADQCAFQQNNBEAgBkKBygA3A/gQIAZB+BBqEIkLIQMMGwsgCCAFQQRrIgc2AgQgCCAIKAIAIgRBBGo2AgAgB0EDTQRAIAZCgcoANwP4ECAGQfgQahCJCyEDDBsLIAQoAAAhDiAIIAdBBGsiBzYCBCAIIARBCGo2AgAgB0EDTQRAIAZCgcoANwP4ECAGQfgQahCJCyEDDBsLIAQoAAQhCiAIIAdBBGsiBzYCBCAIIARBDGo2AgAgB0EDTQRAIAZCgcoANwP4ECAGQfgQahCJCyEDDBsLIAQoAAghCyAIIAdBBGsiBzYCBCAIIARBEGo2AgAgB0EISQ0VIAQoAAwhEiAIIAdBCGsiBTYCBCAIIARBGGo2AgAgBCkAECJQQoCAgIAQWgRAIAZBAToA+BAgBiBQNwOAESAGQfgQaiAGQaAIakHsgMAAEKwIIQMMGwsgA0EBayEDIFCnIQcgBigC6AsgFkYEQCAGQegLaiAWELwGIAYoAuwLIRMgBigC8AshFgsgEyAWQRRsaiIEIAc2AhAgBCAKNgIMIAQgEjYCCCAEIAs2AgQgBCAONgIAIAYgFkEBaiIWNgLwCyADDQALIAYoAuwLIRMgBigC6AshBAsgEw0BIAQhAwwZC0EBQciPwABBjIPAABDmByEDDBgLAkAgBigCACIDBEAgBiADQQFrNgIAIAYgBigCBDYClAkgBkECNgKQCSAGQfgQaiAGQZAJahCqAgJAIAYoAvgQRQRAIAZBgBFqKAIAIg5FBEBBAEHAiMAAQYyDwAAQ5gchAwwaCyAGKAL8ECELIAYoApAJIgMEQCAGQYQRaigCACESIAYgA0EBazYCkAkgBigClAkiCCgCBCIDQQdNBEAgBkKBygA3A/gQIAZB+BBqEIkLIQMMGgsgCCADQQhrIiE2AgQgCCAIKAIAIgNBCGo2AgAgBkHoC2ogAykAABCHBiAGKALsCyEDIAYoAugLDRkCQCADQYAgIANBgCBJGyIFRQRAQQQhFwwBCyAFQQR0IgdBBBD3CyIXRQ1gC0EAIQogBkEANgKAESAGIBc2AvwQIAYgBTYC+BAgAwRAA0ACQAJ/ICFBA00EQCAGQoHKADcD6AsgBkHoC2oQiQsMAQsgCCAhQQRrIgU2AgQgCCAIKAIAIgdBBGo2AgAgBUEDTQRAIAZCgcoANwPoCyAGQegLahCJCwwBCyAHKAAAIRggCCAFQQRrIgU2AgQgCCAHQQhqNgIAIAVBA00EQCAGQoHKADcD6AsgBkHoC2oQiQsMAQsgBygABCEVIAggBUEEayIFNgIEIAggB0EMajYCACAFQQNLDQEgBkKBygA3A+gLIAZB6AtqEIkLCyEDIAYoAvgQRQ0cIAYoAvwQELUBDBwLIANBAWshAyAHKAAIIREgCCAFQQRrIiE2AgQgCCAHQRBqNgIAIAcoAAwhBSAGKAL4ECAKRgRAIAZB+BBqIAoQtwYgBigC/BAhFyAGKAKAESEKCyAXIApBBHRqIgcgBTYCDCAHIBE2AgggByAVNgIEIAcgGDYCACAGIApBAWoiCjYCgBEgAw0ACyAGKAL8ECEXIAYoAvgQIQULIBcNAiAFIQMMGQtBAUHAiMAAQYyDwAAQ5gchAwwYCyAGKAL8ECEDDBgLIAZB+BBqIAYQ+gIgBigC+BBFDQEgBigC/BAMFQtBAkHIj8AAQYyDwAAQ5gchAwwWCyAGQYARaigCACIDRQ0SIAZBhBFqKAIAIQcgBigC/BAhCCAPIBA2AkggDyAJNgJEIA8gATYCQCAPIE8+AjwgDyANNgI4IA8gDDYCNCAPIB42AjAgDyAHNgIsIA8gAzYCKCAPIAg2AiQgDyAWNgIgIA8gEzYCHCAPIAQ2AhggDyAKNgIUIA8gFzYCECAPIAU2AgwgDyASNgIIIA8gDjYCBCAPIAs2AgAMKAsgBkKBygA3A/gQIAZB+BBqEIkLIQEMJAsgBkKBygA3A/gQIAZB+BBqEIkLIQEMIwsgBkKBygA3A/gQIAZB+BBqEIkLIQEMIgsgBigC/BAhAQwgCyAGKAL8ECEBDB4LIAYoAvwQIQEMHAsgBigC/BAhAQwZCyAGKAL8ECEBDBYLIAYoAvwQIQEMFAsgBigC/BAhAQwSCyAGKAL8ECEBDBALIAZCgcoANwP4ECAGQfgQahCJCyEBDA4LIAZCgcoANwP4ECAGQfgQahCJCyEBDA0LIAZCgcoANwP4ECAGQfgQahCJCyEBDAwLIAYoAvwQIQEMCgsgBkKBygA3A/gQIAZB+BBqEIkLIQQMCAsgBkKBygA3A/gQIAZB+BBqEIkLIQQMBwsgBkKBygA3A/gQIAZB+BBqEIkLIQMMBAtBA0HIj8AAQYyDwAAQ5gcLIQMgCwRAIA4QtQELIAVFDQEgFxC1AQwBCyALRQ0AIA4QtQELIARFDQEgExC1AQwBCyAGKALoC0UNACAGKALsCxC1AQsgEARAIBBBlAJsIRAgCSEHA0AgB0GMAmotAABBAkcEQCAHEIsCCyAHQZQCaiEHIBBBlAJrIhANAAsLIAEEQCAJELUBCyADIQEMDwsgEARAIBBBlAJsIRAgCSEHA0AgB0GMAmotAABBAkcEQCAHEIsCCyAHQZQCaiEHIBBBlAJrIhANAAsLIAFFBEAgBCEBDA8LIAkQtQEgBCEBDA4LIA4EQCAFELUBCyANRQ0AIC0QtQELICQEQCAxELUBCyApRQ0AIDkQtQELICNFDQAgLhC1AQsgHQRAIDIQtQELIBtFDQAgOBC1AQsgGUUNACAsELUBCyADBEAgA0EEdCEQIBIhBwNAIAcoAgAEQCAHQQRqKAIAELUBCyAHQRBqIQcgEEEQayIQDQALCyALRQ0CIBIQtQEMAgsgBigC/BAhASAGKALsCyEJIANFDQAgB0EEdEEQaiEDQQAhBwNAIAcgCWoiBCgCAARAIARBBGooAgAQtQELIAMgB0EQaiIHRw0ACwsgBigC6AtFDQAgCRC1AQsgGkUNACAzELUBCyAiRQ0AIDAQtQELIApFDQAgFxC1AQsgDEUNASAeELUBDAELIAYoAqADRQ0AIB4QtQELIAYoAgwhAyAGKAIQIgQEQCAEQZQCbCEQIAMhBwNAIAdBjAJqLQAAQQJHBEAgBxCLAgsgB0GUAmohByAQQZQCayIQDQALCyAGKAIIRQ0AIAMQtQELIA9BAzYCMCAPIAE2AgALIAZB0BNqJAACQAJAAkAgAigCyAMiBEECaw4CAQACCyACKAKYAyEBDBALQQhB7LvAAEGMg8AAEOYHIQEMDwsgJiACKQLMAzcCjAQgAkHoAmoiAUEoaiIHID8pAwA3AwAgAUEgaiIJIEApAwA3AwAgAUEYaiIIIEEpAwA3AwAgAUEQaiIMIAJBmANqIgNBEGoiDikDADcDACABQQhqIgUgA0EIaiIBKQMANwMAICZBlARqIEYpAgA3AgAgJkGcBGogRykCADcCACACIAIpA5gDNwPoAiAmQdcCaiACQRdqLQAAOgAAICYgAi8AFTsA1QIgASACQRhqIgFBCGopAwA3AwAgDiABQRBqKQMANwMAIEEgAUEYaikDADcDACBAIAFBIGopAwA3AwAgPyABQShqKQMANwMAIANBMGogAUEwaikDADcDACADQThqIAFBOGopAwA3AwAgAiACKQMYNwOYAyAmQfQAaiACQdgAakHkABDkDBogJkHYAWogAkHAAWpBxAAQ5AwaIAJB+ANqIAJBiAJqIgFBIGopAwA3AwAgAkHwA2ogAUEYaikDADcDACACQegDaiABQRBqKQMANwMAIAJB4ANqIAFBCGopAwA3AwAgAiACKQOIAjcD2AMgJiADQegAEOQMIgEgTDoA1AIgASBgPgLQAiABIF8+AswCIAEgXj4CyAIgASBdPgLEAiABIFw+AsACIAEgeDgCvAIgASB3OAK4AiABIHY4ArQCIAEgdTgCsAIgASB0OAKsAiABIHM4AqgCIAEgcjgCpAIgASBxOAKgAiABIE42ApwCIAEgYTcCbCABIE02AmggASACKQOwAjcC2AIgAUHgAmogAkGwAmoiA0EIaikDADcCACABQegCaiADQRBqKQMANwIAIAFB8AJqIANBGGopAwA3AgAgAUH4AmogA0EgaikDADcCACABQYADaiADQShqKQMANwIAIAFBiANqIANBMGooAgA2AgAgAUGMA2ogAkGABGpBzAAQ5AwaIAEgBDYCiAQgAUGABGogBykDADcCACABQfgDaiAJKQMANwIAIAFB8ANqIAgpAwA3AgAgAUHoA2ogDCkDADcCACABQeADaiAFKQMANwIAIAEgAikD6AI3AtgDDC0LIAJCgcoANwOABCACQYAEahCJCyEDDBoLIAJCgcoANwOABCACQYAEahCJCyEDDBkLIARBCEHI78MAKAIAIgBBigcgABsRAAAAC0EwQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAkKBygA3A5gDIAJBmANqEIkLIQcMEAsgAkKBygA3A5gDIAJBmANqEIkLIQcMDwsgAkKBygA3A5gDIAJBmANqEIkLIQcMDgsgAkKBygA3A5gDIAJBmANqEIkLIQcMDQsgAkKBygA3A5gDIAJBmANqEIkLIQcMDAsgAkKBygA3A5gDIAJBmANqEIkLIQcMCgsgAkKBygA3A5gDIAJBmANqEIkLIQcMCQsgAkKBygA3A5gDIAJBmANqEIkLIQcMCAsgAkKBygA3A5gDIAJBmANqEIkLIQkMBgsgAkKBygA3A5gDIAJBmANqEIkLIQkMBQsgJkECNgJMICYgATYCACACQYAEahCnBwwBCyAmQQI2AkwgJiABNgIACyACQbACahD+BQwBCyAmQQI2AkwgJiABNgIACyACQYgCahD+BgwFCyAQBEAgEEHoAmwhBCANIQEDQAJAIAEoAgBFDQAgAUHcAWooAgAiBwRAIAcQtQELIAFBtAJqKAIARQ0AIAFBuAJqKAIAELUBCyABQegCaiEBIARB6AJrIgQNAAsLIAMEQCANELUBCyAJIQMMAwsgHkUNACArELUBCyAOBEAgDhC1AQsgByEDCyACKALsBCEHIBAEQCAQQegCbCEEIAchAQNAAkAgASgCAEUNACABQdwBaigCACIJBEAgCRC1AQsgAUG0AmooAgBFDQAgAUG4AmooAgAQtQELIAFB6AJqIQEgBEHoAmsiBA0ACwsgAigC6ARFDQAgBxC1AQsgJkECNgJMICYgAzYCAAsgAkHAAWoQxAUMBwsgAkKBygA3A5gDIAJBmANqEIkLIQMLIBMEQCAIELUBCyAYRQ0CIBcQtQEMAgsgAigCmANFDQAgAigCnAMQtQELIBNFDQAgCBC1AQsgBwRAICcQtQELIA0EQCANQThsIQkgHEEQaiEEA0AgBBCVBiAEQThqIQQgCUE4ayIJDQALCyAORQ0BIBwQtQEMAQsgB0UNACAnELUBCyAvIC8oAgAiAUEBazYCACABQQFGBEAgLyBBEL4ICyAmQQI2AkwgJiADNgIACyACQdgAahDHAwwGCyALRQ0AIAUQtQELIAhFDQEgBxC1AQwBCyAIRQ0AIAcQtQELIAJBmANqEOAGCyAQBEAgEEEsbCEEIBhBIGohAQNAAkAgAUEEaygCAEUNACABKAIARQ0AIAEQ1AgLIAFBLGohASAEQSxrIgQNAAsLIAIoAogFRQ0AIBgQtQELICZBAjYCTCAmIAM2AgALIAJBGGoQrwcMBQsgDEUNACAIELUBCyAJRQ0AIAcQtQELIARFDQAgAxC1AQsgJkECNgJMICYgATYCAAwBCyAmQQI2AkwgJiABNgIACyACQZAHaiQADAkLIAFBBEHI78MAKAIAIgBBigcgABsRAAAAC0EQQQRByO/DACgCACIAQYoHIAAbEQAAAAsgBEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIAdBBEHI78MAKAIAIgBBigcgABsRAAAACyAHIARByO/DACgCACIAQYoHIAAbEQAAAAtByABBBEHI78MAKAIAIgBBigcgABsRAAAAC0EgQQRByO/DACgCACIAQYoHIAAbEQAAAAsgA0EEQcjvwwAoAgAiAEGKByAAGxEAAAALIBJBCEHI78MAKAIAIgBBigcgABsRAAAACyAfKALIBCEEAkACQCAfKAKUBSIHQQJHBEAgH0H4A2oiAyAfQcgEakEEckHIABDkDBogH0EkaiIBIB9BmAVqQdQDEOQMGiAgQcwAaiABQSBqKAIANgIAICAgHykCPDcCRCAgIAQ2AgAgICAfKQL4AzcCBCAgQQxqIANBCGopAgA3AgAgIEEUaiADQRBqKQIANwIAICBBHGogH0GQBGopAgA3AgAgIEEkaiADQSBqKQIANwIAICBBLGogH0GgBGopAgA3AgAgIEE0aiAfQagEaikCADcCACAgQTxqIB9BsARqKAIANgIAICBBATYCQCAgIAc2AlwgICAfKQK0BDcCUCAgQdgAaiADQcQAaigCADYCACAgIB8pAiQ3AmAgIEHoAGogAUEIaikCADcCACAgQfAAaiABQRBqKQIANwIAICBB+ABqIAFBJGpB5AAQ5AwaICBB3AFqIB9BrAFqQcQAEOQMGiAgQdgCaiAfQagCaigCADYCACAgQdACaiAfQaACaikCADcCACAgQcgCaiAfQZgCaikCADcCACAgQcACaiAfQZACaikCADcCACAgQbgCaiAfQYgCaikCADcCACAgQbACaiABQdwBaikCADcCACAgQagCaiAfQfgBaikCADcCACAgIB8pAvABNwKgAiAgIB8pAqwCNwLcAiAgQeQCaiAfQbQCaikCADcCACAgQewCaiAfQbwCaikCADcCACAgQfQCaiAfQcQCaikCADcCACAgQfwCaiABQagCaikCADcCACAgQYQDaiABQbACaikCADcCACAgQYwDaiABQbgCaigCADYCACAgQZADaiAfQeACakHMABDkDBogIEHcA2ogH0GsA2pBzAAQ5AwaIB8oAhgEQCAfKAIcELUBCyAfKAIUIgFBI0sNAQwCCyAfIAQ2AsgEIB9ByARqEMMHICBBAjYCQCAfKAIYBEAgSxC1AQsgHygCFCIBQSRJDQELIAEQAAsgH0HwCGokACAoQegDaiIBQThqICBBOGopAwA3AwAgAUEwaiAgQTBqKQMANwMAIAFBKGogIEEoaikDADcDACABQSBqICBBIGopAwA3AwAgAUEYaiAgQRhqKQMANwMAIAFBEGogIEEQaikDADcDACABQQhqICBBCGopAwA3AwAgKCAoKQOoBDcD6AMgKCgC6AQhASAoQQRqIChB7ARqQeQDEOQMGiAAIAAoAgBBAWs2AgBBACEAAkAgAUECRwRAQawEQQQQ9wsiAEUNASAAQQA2AgAgACAoKQPoAzcCBCAAIAE2AkQgAEEMaiAoQfADaikDADcCACAAQRRqIChB+ANqKQMANwIAIABBHGogKEGABGopAwA3AgAgAEEkaiAoQYgEaikDADcCACAAQSxqIChBkARqKQMANwIAIABBNGogKEGYBGopAwA3AgAgAEE8aiAoQaAEaikDADcCACAAQcgAaiAoQQRqQeQDEOQMGgsgKEHQCGokACAADwtBrARBBEHI78MAKAIAIgBB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AyAKNgKAAQJAAkAgBEEoaigCACIZBEAgA0EANgKgASADQoCAgIDAADcDmAEgA0GYAWoiAkEAELgGIAMoApwBIAMoAqABIgRBA3RqQoCAgIDw////fjcCACADIARBAWo2AqABIANBwAFqIAIQ9gICQAJAIAMoAsABQQFHBEBBBCEBDAELIAFByABqKAIAIRYgAUHMAGooAgAhESABQSRqKAIAISAgA0GIBGoiAUEDaiEeIANB3ANqIQogA0G8A2ohDCADQZwDaiEXIAFBDWohH0P//39/ISMgA0HYAWohGkEEIQECQAJAA0AgIyADKgLIAYxfDQMgAygCxAEiAiAZSQRAICAgAkEHdGoiDS0AeEEBcSICBEAgFiANKAJgIgRBBHRqQQAgBCARSRsiBEEIakEAIAQbIRsgFiANQewAaigCACIEQQR0akEAIAQgEUkbIgRBCGpBACAEGyEcIBYgDUHoAGooAgAiBEEEdGpBACAEIBFJGyIEQQhqQQAgBBshHSAWIA1B5ABqKAIAIgRBBHRqQQAgBCARSRsiBEEIakEAIAQbIRgLIANB0AJqIA0gA0HQAGoQ9AEgAyoC0AIgI12tISkgAyoC3AIhJCADKgLYAiElIAMqAtQCISYCfyACBEAgAyAcNgLsAiADIB02AugCIAMgGDYC5AIgAyAbNgLgAkIAISggA0H4AmoiD0IANwMAIANCADcD8AIgA0EENgL4AyADQQQ2AtgDIANBBDYCuAMgA0EENgKYAyAjICZerUIBhiAphCAjICVerUIChoQgIyAkXq1CA4aEISpBACECQQAhCwNAAkAgKiAoiEIBg1ANACADQeACaiACaigCACIIRQ0AIAgoAgAiByADKAKAASIOKAI4IgRBMGooAgAiCU8NACAEQSxqKAIAIAdBqAFsakEAIAcgCUkbIgQoAgBBAUcNACAIKAIEIgkgBCgCBEcNACADKAKEASEFIA4gDigCNCIIQSBqKAIAIAhBJGooAgAgByAJIARBCGoQzgNFDQAgA0EIaiIIIARBGGoiDigCBCIVNgIEIAggDigCACAVKAIIQQdqQXhxajYCACADQYgEaiADKAIIIARB1ABqIAUgAygCDCgCRBECACADQYYEaiIVIB9BAmotAAA6AAAgAyAfLwAAOwGEBCADKAKYBCEIIAMoApwEIQQgAy0AlAQhDiAD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IAMgIjgCUCADIAc2AoABAkACQCAGQShqKAIAIh8EQCADQQA2ApgBIANCgICAgMAANwOQASADQZABaiICQQAQuAYgAygClAEgAygCmAEiAUEDdGpCgICAgPD///9+NwIAIAMgAUEBajYCmAEgA0GwAWogAhD2AkECIQECQAJAIAMoArABQQFHDQAgBkHIAGooAgAhGyAGQcwAaigCACEXIAZBJGooAgAhGiADQfgCaiEcIANB0wJqIRkgA0G1A2ohHSADQZ0DaiETIANBhQNqIRQgA0HtAmohHkP//39/ISMgA0HLAWoiIEEIaiEhA0AgIyADKgK4AYxfDQECQCADKAK0ASICIB9JBEAgGiACQQd0aiIOLQB4QQFxIgQEQCAbIA4oAmAiAkEEdGpBACACIBdJGyICQQhqQQAgAhshESAbIA5B7ABqKAIAIgJBBHRqQQAgAiAXSRsiAkEIakEAIAIbIRggGyAOQegAaigCACICQQR0akEAIAIgF0kbIgJBCGpBACACGyEVIBsgDkHkAGooAgAiAkEEdGpBACACIBdJGyICQQhqQQAgAhshDwsgA0GwAmogDiADQdAAahD0ASADKgKwAiAjXa0hJiADKgK8AiElIAMqArgCISQgAyoCtAIhIiAEBEAgAyAYNgLMAiADIBU2AsgCIAMgDzYCxAIgAyARNgLAAkIAIScgA0HYAmoiFkIANwMAIANCADcD0AIgA0ECOgC0AyADQQI6AJwDIANBAjoAhAMgA0ECOgDsAiAiICNdrUIBhiAmhCAjICRerUIChoQgIyAlXq1CA4aEIShBACEEQQAhCgNAAkAgKCAniEIBg1ANACADQcACaiAEaigCACIHRQ0AIAMoAoABIgsoAjgiBkEwaigCACICIAcoAgAiCE0NACAGQSxqKAIAIAhBqAFsakEAIAIgCEsbIhAoAgBBAUcNACAHKAIEIgYgECgCBEcNACADKAKEASEJIAsgCygCNCICQSBqKAIAIAJBJGooAgAgCCAGIBBBCGoQzgNFDQAgA0EIaiIHIBBBGGoiCygCBCICNgIEIAcgCygCACACKAIIQQdqQXhxajYCACADQcADaiICIAMoAgggEEHUAGogCSADLQCIASADKAIMKAI8EQgAIAMtAMwDIQsgA0HQAmogBGogAyoCwAMgCSoCAJMiIiAilCADKgLEAyAJ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IABrQQNNBEAgAiAAQQQQ2gYgAigCCCEACyACKAIEIABqIAM4AAAgAiAAQQRqIgA2AgggASoCCCEDIAIoAgAgAGtBA00EQCACIABBBBDaBiACKAIIIQALIAIoAgQgAGogAzgAACACIABBBGoiADYCCCABKgIMIQMgAigCACAAa0EDTQRAIAIgAEEEENoGIAIoAgghAAsgAigCBCAAaiADOAAAIAIgAEEEaiIANgIIIAEqAhAhAyACKAIAIABrQQNNBEAgAiAAQQQQ2gYgAigCCCEACyACKAIEIABqIAM4AAAgAiAAQQRqIgA2AgggASoCFCEDIAIoAgAgAGtBA00EQCACIABBBBDaBiACKAIIIQALIAIgAEEEajYCCCACKAIEIABqIAM4AABBAAvHAgIBfgF/IAEpAwAhAiAAQQhqKAIAIgMEfiACIANBDGxBDGtBDG6tQhR+fEIcfAUgAkIIfAshAiAAQRRqKAIAIgMEfiACIANBA3RBCGutfEIQfAUgAkIIfAshAiAAQSBqKAIAIgMEfiACIANBFGxBFGtBFG6tQhx+fEIkfAUgAkIIfAshAiAAQSxqKAIAIgMEfiACIANBBXRBIGtBBXatQjV+fEI9fAUgAkIIfAshAiAAQThqKAIAIgMEfiACIANBAnRBBGutfEIMfAUgAkIIfAshAiAAQcQAaigCACIDBH4gAiADQQJ0QQRrrXxCDHwFIAJCCHwLIQIgAEHQAGooAgAiAwR+IAIgA0ECdEEEa618Qgx8BSACQgh8CyECIAEgAEHcAGooAgAiAAR+IAIgAEECdEEEa618Qgx8BSACQgh8CzcDAEEAC7sDAQh/IwBBEGsiByQAIAdBCGoiBSACNgIEIAUgATYCACAHKAIMIQsgAEEIaigCACIEIAcoAggiBk0EQCAAQQhqAn8gBkEBaiIJIARNBEAgCQwBCyAEIQUgCSAEayIKIAAoAgAgBGtLBEAgACAEIAoQrQYgAEEIaigCACEFCyAAKAIEIAVBA3RqIQIgCkECTwR/IAYgBGsiCEEHcSEBIAYgBEF/c2pBB08EQCAIQXhxIQgDQCACQv////8PNwIAIAJBOGpC/////w83AgAgAkEwakL/////DzcCACACQShqQv////8PNwIAIAJBIGpC/////w83AgAgAkEYakL/////DzcCACACQRBqQv////8PNwIAIAJBCGpC/////w83AgAgAkFAayECIAhBCGsiCA0ACwsgAQRAA0AgAkL/////DzcCACACQQhqIQIgAUEBayIBDQALCyAFIApqQQFrBSAFCyIBIAQgCUYNABogAkL/////DzcCACABQQFqCyIENgIACyAEIAZLBEAgAEEEaigCACAGQQN0aiIAIAM2AgQgACALNgIAIAdBEGokAA8LIAYgBEHMosAAEMMIAAu/GQMffwl9A34jAEHwAGsiBiQAIAEoAgAoAgAhECABKAIEIg0oAgAiFwRAIAZBEGoiBSANKAIEIgRB//8DcTYCBCAFIARBEHY2AgAgBigCFCENIAYoAhAhEQsgASgCCCIOKAIAIhgEQCAGQQhqIgQgDikDCCIrQiCIPgIEIAQgKz4CACAGKAIIIQ4gBigCDCEZCyABKAIMIg8oAgAiHgRAIAYgDykDCCIrQiCIPgIEIAYgKz4CACAGKAIAIQ8gBigCBCEICyAGQTBqIgdBCGogASgCECgCACIEQQhqKAIANgIAIAYgBCkCADcDMCAGQUBrIgVBCGogASgCFCgCACIEQQhqKAIANgIAIAYgBCkCADcDQCAGQRhqIgQgByAFENYKIAEoAigtAAAhCiABKAIkKgIAISIgASgCICgCACELIAEoAhwoAgAhByABKAIYKAIAIQEgBiAINgJsIAYgDzYCaCAGIB42AmQgBiAZNgJgIAYgDjYCXCAGIBg2AlggBiANNgJUIAYgETYCUCAGIBc2AkwgBkEAIBAgEEFBcRs2AkggBkGou8AANgJEIAYgAjYCQEEAIQ1BACEPIwBBkANrIgMkACADQUBrIghBKGogBUEoaikCADcDACAIQSBqIAVBIGopAgA3AwAgCEEYaiAFQRhqKQIANwMAIAhBEGogBUEQaikCADcDACAIQQhqIAVBCGopAgA3AwAgAyALNgJ4IAMgBzYCdCADIAE2AnAgAyAFKQIANwNAIANBoAJqIgJBEGogBEEQaikCADcDACACQQhqIARBCGopAgA3AwAgAyAEKQIANwOgAiADQYABaiACEIoGIAMgBDYC6AEgAyAKOgDsASADICI4AuABIAMgCDYC5AEgACICAn9BACABQShqKAIAIg5FDQAaIANBADYC+AEgA0KAgICAwAA3A/ABIANB8AFqIgRBABC4BiADKAL0ASADKAL4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B0HUAGogAygCyAEgAyoCwAEgAy0AzAEgAygCFCgCHBEJACADKAKgAkEERg0AIAwoAgQhESAMKAIAIRogA0HYA2ogGEEIaigCADYCACADIBgpAgA3A9ADIAMpA6ACIjpCgICAgHCDIT5BgAIhEyADKgKoAiEvC0IEIUJDAAAAACExQQAhAkIAIUFCBCE7QQAhAEMAAAAAITICfkIAIDdCBINQDQAaQgAgFkUNABoCQCADKALEASIHKAI4IgVBMGooAgAiBCAWKAIAIghNDQAgBUEsaigCACAIQagBbGpBACAEIAhLGyINKAIAQQFHDQAgFigCBCIEIA0oAgRHDQBCACAHIAcoAjQiHUEgaigCACAdQSRqKAIAIAggBCANQQhqEM4DRQ0BGiADQQhqIgcgDUEYaiIFKAIEIgQ2AgQgByAFKAIAIAQoAghBB2pBeHFqNgIAIANBoAJqIAMoAgggDUHUAGogAygCyAEgAyoCwAEgAy0AzAEgAygCDCgCHBEJAEIAIAMoAqACQQRGDQEaIBYoAgQhJSAWKAIAISYgA0HIA2ogGEEIaigCADYCACADIBgpAgA3A8ADQYCABCEAIAMqAqgCITIgAykDoAIiO0KAgICAcIMMAQtCAAshOAJAIApB/wFxQQhJDQAgFUUNACADKALEASIHKAI4IgVBMGooAgAiBCAVKAIAIgpNDQAgBUEsaigCACAKQagBbGpBACAEIApLGyIIKAIAQQFHDQAgFSgCBCIFIAgoAgRHDQAgByAHKAI0IgRBIGooAgAgBEEkaigCACAKIAUgCEEIahDOA0UNACADIAhBGGoiBSgCBCIENgIEIAMgBSgCACAEKAIIQQdqQXhxajYCACADQaACaiADKAIAIAhB1ABqIAMoAsgBIAMqAsABIAMtAMwBIAMoAgQoAhwRCQAgAygCoAJBBEYNACAVKAIEIScgFSgCACEdIANBuANqIBhBCGooAgA2AgAgAyAYKQIANwOwAyADKQOgAiJCQoCAgIBwgyFBQYCAgAghAiADKgKoAiExCyADQZgCaiADQdgDaigCADYCACADQYgCaiADQcgDaigCADYCACADQfgBaiADQbgDaigCADYCACADIAMpA9ADNwOQAiADIAMpA8ADNwOAAiADIAMpA7ADNwPwASA+IDpC/////w+DhCE/IDZCIIghNSBAQv//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IgQgA4siAyADIARdG0MAAAA0lF9FDQELQQEhByACQQhqKgIAIgMgAUEIaioCACIEWw0AQQAhByADQwAAgH9bDQAgA0MAAID/Ww0AIARDAACAf1sNACAEQwAAgP9bDQBBASEHIAMgBJOLIgVDAAAANF8NACAFIASLIgQgA4siAyADIARdG0MAAAA0lF8hBwsgBkEIaiIBIAJBCGooAgA2AgAgBiACKQIANwMAIAAgBzoADCAAIAYpAgA3AgAgAEEIaiABKAIANgIAIAZBEGokAAv2AgIEfwF+IwBBQGoiAiQAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACAAQQxqIgMoAgAhBCADQQA2AgAgACkCBCEFIAJBCGoiA0EwaiAAQUBrKAIANgIAIANBKGogAEE4aikCADcDACADQSBqIABBMGopAgA3AwAgA0EYaiAAQShqKQIANwMAIANBEGogAEEgaikCADcDACACQRBqIABBGGopAgA3AwAgAiAAQRBqKQIANwMIAkAgBARAQcQAQQQQ9wsiAUUNASABIAQ2AgwgASAFNwIEIAFBADYCACABIAIpAwg3AhAgAUEYaiACQRBqKQMANwIAIAFBIGogAkEYaikDADcCACABQShqIAJBCGoiAEEYaikDADcCACABQTBqIABBIGopAwA3AgAgAUE4aiAAQShqKQMANwIAIAFBQGsgAEEwaigCADYCAAsgAkFAayQAIAEPC0HEAEEEQcjvwwAoAgAiAEGKByAAGxEAAAALkAMBBX8jAEHAAWsiASQAIAFB2ABqIgNBIGoiBSAAQSBqKAIANgIAIANBGGoiByAAQRhqKQIANwMAIANBEGogAEEQaikCADcDACADQQhqIABBCGoiBikCADcDACABIAApAgA3A1ggAUGAAWoiBEEUaiADQRRqKAIANgIAIARBCGoiAyAGKAIANgIAIAEgASkCZDcCjAEgASAAKQIANwOAASAEQRhqIgAgBykDADcDACAEQSBqIgYgBSgCADYCACABQawBaiAFKAIANgIAIAEgBykDADcCpAEgAUKCgICAIDcCuAEgAUKAgICAEDcCsAEgAUEwaiABQbABaiIFENQFIAFCgoCAgCA3ArgBIAFCgICAgBA3ArABIAFBQGsgBRDVBSABQQhqIAMpAwA3AwAgAUEQaiAEQRBqKQMA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lCAIIAeUIAkgBSAJlCALIAqUkyIFIAWSIgWUk5KSOAIgIAQgDCANIAWUIAkgBpQgCiAHlJOSkjgCHCAEIAsgDSAHlCAKIAWUIAggBpSTkpI4AhggBEE4aiIDIAEgBEEYakEBEHYgBEEwaiADQQhqKQMAIg43AwAgBEEIaiAONwMAIARBFGogA0EUaigCAEEAIAQoAkgiAUEDSSIDGzYCACAEIAQpAzgiDjcDKCAEIA43AwAgBCABQQIgAxs2AhAgACAEIAIQhQYgACAEKQMQNwIQIARB4ABqJAALhQMBBH8jAEFAaiIBJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABB4AFqIgQoAgAhAyAEQQA2AgAgAUE4aiAAQZwCaikCADcDACABQTBqIABBlAJqKQIANwMAIAFBKGogAEGMAmopAgA3AwAgAUEgaiAAQYQCaikCADcDACABQRhqIABB/AFqKQIANwMAIAFBEGogAEH0AWopAgA3AwAgAUEIaiAAQewBaikCADcDACABIABB5AFqKQIANwMAAkAgAwRAQcgAQQQQ9wsiAkUNASACIAM2AgQgAkEANgIAIAIgASkDADcCCCACQRBqIAFBCGopAwA3AgAgAkEYaiABQRBqKQMANwIAIAJBIGogAUEYaikDADcCACACQShqIAFBIGopAwA3AgAgAkEwaiABQShqKQMANwIAIAJBOGogAUEwaikDADcCACACQUBrIAFBOGopAwA3AgALIAFBQGskACACDwtByABBBEHI78MAKAIAIgBBigcgABsRAAAAC40DAgN/A30jAEEQayECAkACfwJAAkACQCAAvCIDQf////8HcSIBQf///+METQRAIAFBgICA9wNJDQEgAb4hACABQYCA4PwDSQ0CIAFBgIDwgARJDQNDAACAvyAAlSEAQQMMBAsgACAAXA0EQ9oPyT9D2g/JvyADQQBOGw8LQX8gAUH////LA0sNAhogAUH///8DSw0DIAIgACAAlDgCDCACKgIMGiAADwsgAUGAgMD5A08EQCAAQwAAgL+SIABDAACAP5KVIQBBAQwCCyAAIACSQwAAgL+SIABDAAAAQJKVIQBBAAwBCyAAQwAAwL+SIABDAADAP5RDAACAP5KVIQBBAgshAiAAIACUIgUgBZQiBCAEQ0cS2r2UQ5jKTL6SlCEG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IANqIAJBDGogARDkDBogACABIANqNgIICyACQRBqJABBAAvdAgIFfwF+IwBBsAFrIgEkACABQdgAaiIDQRBqIABBEGopAgA3AwAgA0EIaiAAQQhqIgUpAgA3AwAgASAAKQIANwNYIAFB8ABqIgRBFGogA0EUaigCACIDNgIAIARBGGoiBiABKQJkIgg3AwAgBEEgaiIHIAM2AgAgAUGcAWogAzYCACAEQQhqIgMgBSgCADYCACABIAg3AnwgASAINwKUASABIAApAgA3A3AgAUKBgICAEDcCqAEgAUKAgICAEDcCoAEgAUEwaiABQaABaiIAENQFIABBCGpCADcDACABQgA3A6ABIAFBQGsgABDVBSABQQhqIAMpAwA3AwAgAUEQaiAEQRBqKQMANwMAIAFBGGogBikDADcDACABQSBqIAcpAwA3AwAgAUEoaiAEQShqKQMANwMAIAFCgICAgCw3A1AgASABKQNwNwMAIAIgAUHYABDkDBogAUGwAWokAAvtAgIDfwd9IwBBMGsiAyQAIANBADYCECADQoCAgPwDNwMIIANBGGoiBCABIAIgA0EIaiIFEIEEIANBgICA/Hs2AgggAyoCGCEHIAQgASACIAUQgQQgA0KAgICAgICAwD83AwggAyoCGCEIIAQgASACIAUQgQQgA0GAgID8ezYCDCADKgIcIQkgBCABIAIgBRCBBCADQoCAgICAgIDAPzcCDCADKgIcIQogBCABIAIgBRCBBCADQYCAgPx7NgIQIAMqAiAhCyAEIAEgAiAFEIEEIAEqAggiBkMAAAAAYEUEQCADQSRqQQE2AgAgA0EsakEANgIAIANBqP/BADYCICADQeTvwQA2AiggA0EANgIYIANBGGpBsP/BABDTCgALIAMqAiAhDCAAQRRqIAsgBpI4AgAgAEEQaiAJIAaSOAIAIAAgByAGkjgCDCAAIAwgBpM4AgggACAKIAaTOAIEIAAgCCAGkzgCACADQTBqJAAL7QICA38HfSMAQTBrIgMkACADQQA2AhAgA0KAgID8AzcDCCADQRhqIgQgASACIANBCGoiBRCaAyADQYCAgPx7NgIIIAMqAhghByAEIAEgAiAFEJoDIANCgICAgICAgMA/NwMIIAMqAhghCCAEIAEgAiAFEJoDIANBgICA/Hs2AgwgAyoCHCEJIAQgASACIAUQmgMg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AiAGQQFqNgIAIAdBsAJqIQwgAEEEaiEOIAFBBGohDyADQQBHIRMjAEGQB2siBiQAAkACQAJAIAJBBGoiAyoCACIWIBaUIAMqAgQiFyAXlJIgAyoCCCIVIBWUkkMAAAAAkiIYQwAAAABeBEAgBiAVIBgQkwEiFZU4ArgCIAYgFyAVlTgCtAIgBiAWIBWVOAKwAiMAQRBrIggkACAIQQhqIgkgBkGwAmoiDUEIaigCADYCACAIIA0pAgA3AwAjAEGwBWsiAyQAIANBuARqQQA2AgAgA0HUBGpBADYCACADQfwCakIANwIAIANBhANqQQA2AgAgA0ELakIANwAAIANBnQVqIgpBC2pCADcAACADQYoFaiIQQQtqQgA3AAAgA0IANwOwBCADQgA3AswEIANCADcC9AIgA0IANwADIANCADcAoAUgA0IANwCNBSADQfcEaiIRQQtqQgA3AAAgA0IANwD6BCADQeQEaiISQQtqQgA3AAAgA0IANwDnBCADQZkDaiADQQhqIhQpAAA3AAAgA0GgA2ogA0EPaigAADYAACADIAMpAAA3AJEDIANBtQNqIApBCGopAAA3AAAgA0G8A2ogCkEPaigAADYAACADIAMpAJ0FNwCtAyADQdgDaiAQQQ9qKAAANgAAIANB0QNqIBBBCGopAAA3AAAgAyADKQCKBTcAyQMgA0H0A2ogEUEPaigAADYAACADQe0DaiARQQhqKQAANwAAIAMgAykA9wQ3AOUDIANBkARqIBJBD2ooAAA2AAAgA0GJBGogEkEIaikAADcAACADIAMpAOQENwCBBCADQYACOwHcBCADQT42AtgEIANCgICAgICAgMA/NwLEBCADQgA3ArwEIANCgICAgICAgMA/NwOoBCADQgA3A6AEIANBADoAnAQgA0L////7BzcClAQgA0EAOgCABCADQv////sHNwP4AyADQQA6AOQDIANC////+wc3AtwDIANBADoAyAMgA0L////7BzcDwAMgA0EAOgCsAyADQv////sHNwKkAyADQQA6AJADIANC////+wc3A4gDIANB////+wc2AvACIANCgICAgPD//79/NwPoAiADQv////v///+//wA3A+ACIANC////+wc3A9gCIANCgICAgPD//79/NwPQAiADQv////v///+//wA3A8gCIANC////+wc3A8ACIANC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ajYCACABRQ0AIAEoAgAiA0F/Rg0CIAEgA0EBajYCACACRQ0AIAIoAgAiA0F/Rg0CIAIgA0EBajYCACAFQbACaiEJIABBBGohCiABQQRqIQsjAEHwBGsiBCQAAkAgAkEEaiIDKgIAIhEgEZQgAyoCBCISIBKUkiADKgIIIhAgEJSSQwAAAACSIhNDAAAAAF4EQCAEIBAgExCTASIQlTgCCCAEIBIgEJU4AgQgBCARIBCVOAIAIwBBEGsiBiQAIAZBCGoiByAEQQhqKAIANgIAIAYgBCkCADcDACMAQbAFayIDJAAgA0G4BGpBADYCACADQdQEakEANgIAIANB/AJqQgA3AgAgA0GEA2pBADYCACADQQtqQgA3AAAgA0GdBWoiCEELakIANwAAIANBigVqIgxBC2pCADcAACADQgA3A7AEIANCADcCzAQgA0IANwL0AiADQgA3AAMgA0IANwCgBSADQgA3AI0FIANB9wRqIg1BC2pCADcAACADQgA3APoEIANB5ARqIg5BC2pCADcAACADQgA3AOcEIANBmQNqIANBCGoiDykAADcAACADQaADaiADQQ9qKAAANgAAIAMgAykAADcAkQMgA0G1A2ogCEEIaikAADcAACADQbwDaiAIQQ9qKAAANgAAIAMgAykAnQU3AK0DIANB2ANqIAxBD2ooAAA2AAAgA0HRA2ogDEEIaikAADcAACADIAMpAIoFNwDJAyADQfQDaiANQQ9qKAAANgAAIANB7QNqIA1BCGopAAA3AAAgAyADKQD3BDcA5QMgA0GQBGogDkEPaigAADYAACADQYkEaiAOQQhqKQAANwAAIAMgAykA5AQ3AIEEIANBgAI7AdwEIANBNzYC2AQgA0KAgICAgICAwD83AsQEIANCADcCvAQgA0KAgICAgICAwD83A6gEIANCADcDoAQgA0EAOgCcBCADQv////sHNwKUBCADQQA6AIAEIANC////+wc3A/gDIANBADoA5AMgA0L////7BzcC3AMgA0EAOgDIAyADQv////sHNwPAAyADQQA6AKwDIANC////+wc3AqQDIANBADoAkAMgA0L////7BzcDiAMgA0H////7BzYC8AIgA0KAgICA8P//v383A+gCIANC////+////7//ADcD4AIgA0L////7BzcD2AIgA0KAgICA8P//v383A9ACIANC////+////7//ADcDyAIgA0L////7BzcDwAIgA0KAgICA8P//v383A7gCIANC////+////7//ADcDsAIgDyAHKAIANgIAIAMgBikCADcDACADQaAEaiADEO4DIAMgA0GwAmpBsAIQ5AwiA0GwAmoiCEEIaiAHKAIANgIAIAMgBikCADcDsAIgA0GMAmogCBDuAyAIIANBsAIQ5AwaIARBsAJqIgcgCEGwAhDkDBogA0GwBWokACAGQRBqJAAgBEHgBGoiA0EIaiIGIApBCGooAgA2AgAgBCAKKQIANwPgBCAEIAcgAxCSCyAGIAtBCGooAgA2AgAgBCALKQIANwPgBCAHIAQgAxCTCyAEIAcQvQwgCSAEQbACEOQMGgwBCyAJQQI6AGALIARB8ARqJAAgBUHQAWogCUHgABDkDBogBS0AkAMhAyAFQQFqIAVBkQNqQc8BEOQMGiACIAIoAgBBAWs2AgAgASABKAIAQQFrNgIAIAAgACgCAEEBazYCAEEAIQAgA0ECRwRAQbQCQQQQ9wsiAEUNAiAAQQA2AgAgAEEEaiAFQdABakHgABDkDBogACADOgBkIABB5QBqIAVBAWpBzwEQ5AwaCyAFQeAEaiQAIAAPCxDaDAALQbQCQQRByO/DACgCACIAQYoHIAAbEQAAAAsQ2wwAC+sCAgV/AX4jAEEwayIEJAACQAJAAkACQCAARQ0AIAAoAgAiBUF/Rg0DIAAgBUEBajYCACACRQ0AIAIoAgAiBUF/Rg0DIAIgBUEBajYCACAEQQhqIgUgAb0iCUIgiD4CBCAFIAk+AgAgAEEEaiAEKAIIIAQoAgwQwQkiBUUNASAEQSBqIgZBCGogAkEMaigCADYCACAEIAIpAgQ3AyAgBCAFQRBqIgcoAgQiCDYCBCAEIAcoAgAgCCgCCEEHakF4cWo2AgAgBEEQaiAEKAIAIAVBzABqIAYgA0EARyAEKAIEKAI8EQgAIAIgAigCAEEBazYCACAAIAAoAgBBAWs2AgBBFEEEEPcLIgBFDQIgAEEANgIAIAAgBCkDEDcCBCAAQQxqIARBGGopAwA3AgAgBEEwaiQAIAAPCxDaDAALQeC1wABBzABB1LbAABDODAALQRRBBEHI78MAKAIAIgBBigcgABsRAAAACxDbDAALxQIBBH8jAEEwayIBJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABB+AJqIgMoAgAhBCADQQI2AgAgAUEYaiIDQQhqIABB6AJqKQIANwMAIANBEGogAEHwAmopAgA3AwAgAUEIaiAAQYQDaikCADcDACABQRBqIABBjANqKQIANwMAIAEgAEHgAmopAgA3AxggASAAQfwCaikCADcDAAJAIARBAkcEQEE4QQQQ9wsiAkUNASACQQA2AgAgAiABKQMYNwIEIAIgBDYCHCACIAEpAwA3AiAgAkEMaiABQRhqIgBBCGopAwA3AgAgAkEUaiAAQRBqKQMANwIAIAJBKGogAUEIaikDADcCACACQTBqIAFBEGopAwA3AgALIAFBMGokACACDwtBOEEEQcjvwwAoAgAiAEGKByAAGxEAAAAL1AEBAX8gACgCACIBKAIIBEAgAUEMaigCABC1AQsgASgCFARAIAFBGGooAgAQtQELIAFBKGooAgAEQCABQSxqKAIAELUBCyABQTRqKAIABEAgAUE4aigCABC1AQsgAUHIAGooAgAEQCABQcwAaigCABC1AQsgAUHUAGooAgAEQCABQdgAaigCABC1AQsgAUHkAGooAgAEQCABQegAaigCABC1AQsgASgCeARAIAFB/ABqKAIAELUBCyABKAKEAQRAIAFBiAFqKAIAELUBCyAAKAIAELUBC9ECAgR/An4jAEFAaiIDJAAgAAJ/IAAtAAgEQCAAKAIAIQVBAQwBCyAAKAIAIQUgAEEEaigCACIEKAIYIgZBBHFFBEBBASAEKAIAQeHKwwBB+8rDACAFG0ECQQEgBRsgBCgCBCgCDBEFAA0BGiABIAQgAigCDBEDAAwBCyAFRQRAIAQoAgBB+crDAEECIAQoAgQoAgwRBQAEQEEAIQVBAQwCCyAEKAIYIQYLIANBAToAFyADQcDKwwA2AhwgAyAEKQIANwMIIAMgA0EXajYCECAEKQIIIQcgBCkCECEIIAMgBC0AIDoAOCADIAQoAhw2AjQgAyAGNgIwIAMgCDcDKCADIAc3AyAgAyADQQhqNgIYQQEgASADQRhqIAIoAgwRAwANABogAygCGEHfysMAQQIgAygCHCgCDBEFAAs6AAggACAFQQFqNgIAIANBQGskACAAC8ECAgF/AX0gACgCACICKAIIIQAgAigCACAAa0EHTQRAIAIgAEEIENoGIAIoAgghAAsg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BEAgDEEgagJ/IBNBAWoiCiAHTQRAIAoMAQsgByEJIAogB2siFyAMKAIYIAdrSwRAIAxBGGogByAXEK0GIAxBIGooAgAhCQsgDEEcaigCACAJQQN0aiELIBdBAk8EQCATIAdrIgZBB3EhCCATIAdBf3NqQQdPBEAgBkF4cSEGA0AgC0L/////DzcCACALQThqQv////8PNwIAIAtBMGpC/////w83AgAgC0EoakL/////DzcCACALQSBqQv////8PNwIAIAtBGGpC/////w83AgAgC0EQakL/////DzcCACALQQhqQv////8PNwIAIAtBQGshCyAGQQhrIgYNAAsLIAgEQANAIAtC/////w83AgAgC0EIaiELIAhBAWsiCA0ACwsgCSAXakEBayEJCyAJIAcgCkYNABogC0L/////DzcCACAJQQFqCyIHNgIACyAHIBNNBEAgEyAHQYiOwQAQwwgACyAMQRxqKAIAIBNBA3RqIgYgFjYCBCAGIA02AgALIB1B4AJqJAAgESgC0AIEQCARKALUAhC1AQtBACEIIwBBEGsiGiQAAkAgFEEgaigCACAbTQ0AIBRBHGooAgAgG0EUbGoiBigCACAcRw0AIAZBDGooAgAhFSAaQQA2AgggGkKAgICAwAA3AwAgFEEUaiELIBRBEGohHkF/IQlBfyEGIBUgFEEIaiIXKAIASQRAIBRBBGooAgAgFUEEdGoiBygCCCEGIAdBDGooAgAhCQsgCygCACEgIB4oAgAhISAUQSRqIRIgFEEUaiENQQQhCgJAA0ACQAJAAkACQCAGICBJBEAgISAGQQR0aigCACEHDAELA0AgICAJIgtNDQIgISALQQR0aiIHKAIEIQkgBygCCCAVRg0ACyAGIQcgCyEGCyANKAIAIAZNDQIgHigCACAGQQR0aiIGQQhqKAIAIhwgFygCACILTw0EIAZBDGooAgAiBiALSQ0BIAYgC0Hg48EAEMMIAAsgGigCACEHIAgEQCAKIAhBA3RqIQYgCiEJA0AgFCAJKAIAIAkoAgRBARAmIAYgCUEIaiIJRw0ACwsgB0UNBCAKELUBDAQLIBRBBGooAgAiCyAGQQR0aiIGKAIEIQ4gBigCACETIAsgHEEEdGoiBigCACEPIAYoAgQhGyAaKAIAIAhGBEAgGiAIELgGIBooAgghCCAaKAIEIQoLIAog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/7//ADcCACACQcwAakIANwIAIAJCADcCRCACQgA3AoACIAJBiAJqQQA2AgAgAkIANwKcAiACQYACOwGsAiACQaQCakKAgICA8AA3AgAgAkKAgICAgICAwD83ApQCIAJCADcCjAIgAkKAgICAgICAwD83AvgBIAJCADcC8AEgAkEAOgDsASACQv////sHNwLkASACQQA6ANABIAJC////+wc3AsgBIAJBADoAtAEgAkL////7BzcCrAEgAkEAOgCYASACQv////sHNwKQASACQQA6AHwgAkL////7BzcCdCACQQA6AGAgAkEANgJcIAJB////+wc2AkAgAkKAgICA8P//v383AjggAkL////7////v/8ANwIwIAJC////+wc3AiggAkKAgICA8P//v383AiAgAkL////7////v/8ANwIYIAJC////+wc3AhAgAkKAgICA8P//v383AgggAkL////7////v/8ANwIAIARB4ARqIgNBCGoiBSAAQQRqIgZBCGooAgA2AgAgBCAGKQIANwPgBCAEIAIgAxCSCyAFIAFBDGooAgA2AgAgBCABKQIENwPgBCACIAQgAxCTCyAEIAIQvQwgASABKAIAQQFrNgIAIAAgACgCAEEBazYCAEG0AkEEEPcLIgBFDQEgAEEANgIAIABBBGogBEGwAhDkDBogBEHwBGokACAADwsQ2gwAC0G0AkEEQcjvwwAoAgAiAEGKByAAGxEAAAALENsMAAvwAQECfyMAQeAAayIBJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIAFBMGoiAkEQaiAAQRBqKQIANwMAIAJBCGogAEEIaikCADcDACACQRhqIABBGGopAgA3AwAgAkEgaiAAQSBqKQIANwMAIAJBKGogAEEoaigCADYCACABQQhqIgJBCGogAUE8aikCADcDACACQRBqIAFBxABqKQIANwMAIAJBGGogAUHMAGopAgA3AwAgAkEgaiABQdQAaikCADcDACABIAApAgA3AzAgASABKQI0NwMIIAAQtQEgAhD+BiABQeAAaiQAC/IBAgF/CX0jAEFAaiIDJAAgAioCACABKgIQkyIKIAFBBGoqAgAiB5QgAioCBCABQRRqKgIAkyILIAEqAgAiCJSTIgUgBZIhBSALIAFBCGoqAgAiCZQgAioCCCABQRhqKgIA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CyADlCAHIASUIAggBZSTkpKSOAIAIAxBEGokAAvyAQEBfyMAQRBrIgIkACAAKAIAIQAgAkEANgIMIAAgAkEMagJ/AkACQCABQYABTwRAIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyACIAE6AAxBAQwCCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQLEPEDIQAgAkEQaiQAIAALhAICAn8BfiMAQbABayIFJAACQAJAIABFDQAgACgCAA0BIABBfzYCACACRQ0AIAIoAgANASACQX82AgAgA0UNACADKAIADQEgA0F/NgIAIAVBCGoiBiABvSIHQiCIPgIEIAYgBz4CACAFQRBqIABBBGogBSgCCCAFKAIMIAJBBGogA0EEaiAEQQBHENMBAkAgBSgCMEECRg0AIAUoAiAiBigCACEEIAYgBEEBazYCACAEQQFGBEAgBSgCICAFQSRqKAIAEL4ICyAFKAIoQQJJDQAgBUEsaigCABC1AQsgA0EANgIAIAJBADYCACAAQQA2AgAgBUGwAWokAA8LENoMAAsQ2wwAC5sCAgJ9A38gAEHoAGooAgAiA0UEQEP//39/DwsgAEHkAGooAgAhBCADQQFrQf////8DcSEFAn8gA0EBcUUEQEP//39/IQEgBAwBCyAEQRxqKAIAIARBIGooAgAiACgCCEEHakF4cWogACgCnAERCwAiAUP//39/IAFD//9/f10bIQEgBEEkagshACAFBEAgBCADQSRsaiEEA0AgASABIABBHGooAgAgAEEgaigCACIDKAIIQQdqQXhxaiADKAKcARELACICIAEgAl0bIAIgAlwbIgIgAiAAQUBrKAIAIABBxABqKAIAIgMoAghBB2pBeHFqIAMoApwBEQsAIgEgASACXhsgASABXBshASAEIABByABqIgBHDQALCyABC6gCAgN9A38gAEHoAGooAgAiBUUEQEP//39/DwsgAEHkAGooAgAhBCAFQQFrQf////8DcSEGAn8gBUEBcUUEQEP//39/IQIgBAwBC0P//39/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BCgCBCIaKAIIQQdqQXhxaiEjICxBLGohEiAsQTBqISEgBUEkaiEqIAVBIGohMCAHQQhqITYgEEEQaiEgA0ACQAJAAkACQAJAAkACQCAhKAIAIgMgJSgCECICTQ0AIBIoAgAiACACQagBbGpBACACIANJGyIVKAIAQQFHDQAgFSgCBCAlQRRqKAIARw0AAkAgJUEYaigCACICIANPDQAgACACQagBbGpBACACIANJGyIeKAIAQQFHDQAgHigCBCAlQRxqKAIARw0AICVBNGotAAAhGyAVQdAAaigCAEECTQRAIB5B0ABqKAIAQQNJDQgLQQEhKUEBIR8CQCAVQShqKAIAIgJBAUYEQCAqKAIAIgAgFUEsaigCACIDTQ0BIDAoAgAgA0HoAmxqQQAgACADSxsiACgCAEEBRw0BIAAoAgQgFUEwaigCAEcNASAAQeECai0AACEfCyAlQRBqIRwgHkEoaigCAEEBRw0DAkAgKigCACIAIB5BLGooAgAiF00NACAwKAIAIBdB6AJsakEAIAAgF0sbIgMoAgBBAUcNACAeQTBqKAIAIgAgAygCBEcNACADQeECai0AACEpIAJFDQQgB0EcaigCACEGIBVBMGooAgAhC0EAIR1BACECIAdBIGooAgAiAyAVQSxqKAIAIhNLBEAgBiATQQN0aiICQQRqQQAgAigCACALRhshAgsgAyAXSwRAIAYgF0EDdGoiA0EEakEAIAMoAgAgAEYbIR0LIAJBACAdG0EAIAIbIQIgB0EUaigCACERIAdBEGooAgAhCiA2KAIAIQwgB0EEaigCACEJA0ACQAJAIAJFDQAgAigCACICIAxPDQAgHSgCACEmAkAgESAJIAJBBHRqQQAgAiAMSRsiBigCCCICSwRAA0AgCiACQfACbGoiA0HsAmooAgAgJkYNAiARIAMoAuACIgJLDQALCyARIAZBDGooAgAiAk0NAQNAIAogAkHwAmxqIgMoAugCICZGDQEgESADQeQCaigCACICSw0ACwwBCyACIBFPDQAgCiACQfACbGoiA0HoAmooAgAgDE8NACADQewCaigCACAMSQ0BCyAUQeAAaiERAkACQCAIQSBqKAIAIgMgE00NACAIQRxqKAIAIgkgE0EUbGoiAigCACALRw0AIAMgF00NACAJIBdBFGxqIgMoAgAgAEcNACACQQRqIgIo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QSBrIgMkAAJAAkAgASABIAJqIgFLDQAgACgCACICQQF0IgQgASABIARJGyIBQQggAUEISxsiAUF/c0EfdiEEAkAgAgRAIANBATYCGCADIAI2AhQgAyAAQQRqKAIANgIQDAELIANBADYCGAsgAyABIAQgA0EQahCGByADKAIEIQIgAygCAEUEQCAAIAE2AgAgACACNgIEDAILIANBCGooAgAiAEGBgICAeEYNASAARQ0AIAIgAEHI78MAKAIAIgBBigcgABsRAAAACxCgCgALIANBIGokAAvSAQEBfyMAQZABayIBJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIAFByABqIABBxAAQ5AwaIAFBQGsgAUGEAWopAgA3AwAgAUE4aiABQfwAaikCADcDACABQTBqIAFB9ABqKQIANwMAIAFBKGogAUHsAGopAgA3AwAgAUEgaiABQeQAaikCADcDACABQRhqIAFB3ABqKQIANwMAIAFBEGogAUHUAGopAgA3AwAgASABKQJMNwMIIAAQtQEgAUEIahCvByABQZABaiQAC4AEAgl/AX4jAEEQayIFJAACQCAABEAgACgCACIDQX9HDQEQ2wwACxDaDAALIAAgA0EBajYCACAFQQhqIgMgAb0iDEIgiD4CBCADIAw+AgAgBSgCDCEDIAUoAgghBiAFIAK9IgxCIIg+AgQgBSAMPgIAIAUoAgAhByAFKAIEIQkCQCAAQQRqIgRBQGsoAgAiCCAGTQ0AIAMgBkEMbCAEQTxqKAIAIgZqIgsoAgBHDQAgByAITw0AIAYgB0EMbGoiBygCACAJRw0AIARBEGooAgAiBiALQQRqKAIAIgNNDQAgBygCBCEJIARBGGooAgAhBwJAIARBDGooAgAgA0EEdGpBACADIAZJGyIIKAIIIgMgBEEcaigCACIESQRAA0AgByADQThsaiILQQxqKAIAIAlGDQIgBCALKAIAIgNLDQALCyAEIAhBDGooAgAiA00NAQNAIAcgA0E4bGoiCCgCCCAJRg0BIAQgCCgCBCIDSw0ACwwBCyADIARPDQAgByADQThsaiIDQQhqKAIAIAZPDQAgA0EQakEAIANBDGooAgAgBkkbIQoLIAAgACgCAEEBazYCAAJAAkAgCkUEQEEAIQAMAQtBCEEEEPcLIgBFDQEgACAKNgIEIABBADYCAAsgBUEQaiQAIAAPC0EIQQRByO/DACgCACIAQYoHIAAbEQAAAAvcAQECfyMAQSBrIgMkAAJAAkAgASABIAJqIgFLDQAgACgCACICQQF0IgQgASABIARJGyIBQQggAUEISxsiAUF/c0EfdiEEAkAgAgRAIANBATYCGCADIAI2AhQgAyAAQQRqKAIANgIQDAELIANBADYCGAsgAyABIAQgA0EQahDxBiADKAIEIQIgAygCAEUEQCAAIAE2AgAgACACNgIEDAILIANBCGooAgAiAEGBgICAeEYNASAARQ0AIAIgAEHI78MAKAIAIgBBigcgABsRAAAACxCgCgALIANBIGokAAvaAQEDfyMAQSBrIgIkAAJAAkAgAUEBaiIBRQ0AIAAoAgAiA0EBdCIEIAEgASAESRsiAUEIIAFBCEsbIgFBf3NBH3YhBAJAIAMEQCACQQE2AhggAiADNgIUIAIgAEEEaigCADYCEAwBCyACQQA2AhgLIAIgASAEIAJBEGoQhgcgAigCBCEDIAIoAgBFBEAgACABNgIAIAAgAzYCBAwCCyACQQhqKAIAIgBBgYCAgHhGDQEgAEUNACADIABByO/DACgCACIAQYoHIAAbEQAAAAsQoAoACyACQSBqJAAL2gIDAX0DfwF+IwBBIGsiAyQAAkAgAARAIAAoAgAiBEF/Rw0BENsMAAsQ2gwACyAAIARBAWo2AgAgA0EIaiIEIAG9IgZCIIg+AgQgBCAGPgIAAkAgAEEEaiADKAIIIAMoAgwQwAkiBQRAIANBFGoiBEMAAAAAQwAAgD8gBUGoAWoiBUEoaioCACICIAKUIgKVIAJDAAAAAFsbOAIIIARDAAAAAEMAAIA/IAVBJGoqAgAiAiAClCIClSACQwAAAABbGzgCBCAEQwAAAABDAACAPyAFQSBqKgIAIgIgApQiApUgAkMAAAAAWxs4AgAgACAAKAIAQQFrNgIAQRBBBBD3CyIARQ0BIABBADYCACAAIAMpAhQ3AgQgAEEMaiADQRxqKAIANgIAIANBIGokACAADwtByLTAAEHNAEHAtcAAEM4MAAtBEEEEQcjvwwAoAgAiAEGKByAAGxEAAAALhAEAIAAoAggEQCAAQQxqKAIAELUBCyAAKAIUBEAgAEEYaigCABC1AQsgAEEoaigCAARAIABBLGooAgAQtQELIABBNGooAgAEQCAAQThqKAIAELUBCyAAQcgAaigCAARAIABBzABqKAIAELUBCyAAQdQAaigCAARAIABB2ABqKAIAELUBCwuAAgEEfyMAQRBrIgEkACABQQhqQn83AwAgASgCDCECIAEoAgghA0H4AEEEEPcLIgBFBEBB+ABBBEHI78MAKAIAIgBBigcgABsRAAAACyAAQgA3AgwgACADNgIEIABBADYCACAAQgA3AlQgAEKAgICAgICAwD83AkwgAEIANwJEIABBAjoAQCAAQQA2AjwgAEKAgICAgICAwD83AjQgAEKAgID8AzcCLCAAIAI2AgggAEEUakIANwIAIABBHGpCADcCACAAQSRqQgA3AgAgAEHcAGpCADcCACAAQeQAakIANwIAIABB7ABqQgA3AgAgAEH0AGpBADYCACABQRBqJAAgAAveAQIEfwF+IwBBEGsiAiQAAkAgAARAIAAoAgAiA0F/Rw0BENsMAAsQ2gwACyAAIANBAWo2AgACQAJAIAEgACgCBCIEQegAaigCAEkEQCACQQhqIgUgBEHkAGooAgAgAUEwbGoiAUEIaigCADYCACABKQIAIQYgACADNgIAIAIgBjcDAEEQQQQQ9wsiAEUNAiAAQQA2AgAgACACKQMANwIEIABBDGogBSgCADYCAAwBCyAAIAM2AgBBACEACyACQRBqJAAgAA8LQRBBBEHI78MAKAIAIgBBigcgABsRAAAAC94BAgR/AX4jAEEQayICJAACQCAABEAgACgCACIDQX9HDQEQ2wwACxDaDAALIAAgA0EBajYCAAJAAkAgASAAKAIEIgRB6ABqKAIASQRAIAJBCGoiBSAEQeQAaigCACABQTBsaiIBQRRqKAIANgIAIAEpAgwhBiAAIAM2AgAgAiAGNwMAQRBBBBD3CyIARQ0CIABBADYCACAAIAIpAwA3AgQgAEEMaiAFKAIANgIADAELIAAgAzYCAEEAIQALIAJBEGokACAADwtBEEEEQcjvwwAoAgAiAEGKByAAGxEAAAAL3gECBH8BfiMAQRBrIgIkAAJAIAAEQCAAKAIAIgNBf0cNARDbDAALENoMAAsgACADQQFqNgIAAkACQCABIAAoAgQiBEGIAWooAgBJBEAgAkEIaiIFIARBhAFqKAIAIAFBKGxqIgFBCGooAgA2AgAgASkCACEGIAAgAzYCACACIAY3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IAEoAgAhBSABQQRqIQEgAyADKAIAIABrQQNLBH8gAAUgAyAAQQQQ2gYgAygCCAsiAkEEaiIANgIIIAMoAgQgAmogBTYAACAEQQRrIgQNAAsLQQALrwECBH0BfwJAAkAgAEUNACAAKAIADQEgAEF/NgIAIAFFDQAgASgCACIGQX9GDQEgASAGQQFqNgIAIAEqAgQiAyADlCABQQhqKgIAIgQgBJSSIAFBDGoqAgAiBSAFlJJDAAAAAJIQkwEhAiAAQThqIAUgApU4AgAgAEE0aiAEIAKVOAIAIABBMGogAyAClTgCACABIAEoAgBBAWs2AgAgAEEANgIADwsQ2gwACxDbDAALpAIBAn8jAEFAaiIAJAAgAEEBOgA4IABCiICAgBA3AiggAELvpIzYwwA3AiAgAELvpIzU8///v/8ANwIYIABCgICA/IOAgMA/NwIQIABCzZmz+oOAgMA+NwIIIABCiZGi5PPnsJc5NwIAIABCgIGAgBA3AjBBwABBBBD3CyIBRQRAQcAAQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAUEANgIAIAEgACkDADcCBCABQQxqIABBCGopAwA3AgAgAUEUaiAAQRBqKQMANwIAIAFBHGogAEEYaikDADcCACABQSRqIABBIGopAwA3AgAgAUEsaiAAQShqKQMANwIAIAFBNGogAEEwaikDADcCACABQTxqIABBOGooAgA2AgAgAEFAayQAIAELjwIBAn8jAEFAaiIAJAAgAEKAgICAwAA3AhAgAEIANwIAIABCgICAgMAANwIoIABBIGpCBDcCACAAQRhqQgA3AgAgAEEIakIENwIAIABBOGpCBDcCACAAQTBqQgA3AgBBxABBBBD3CyIBRQRAQcQAQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAUEANgIAIAEgACkDADcCBCABQQxqIABBCGopAwA3AgAgAUEUaiAAQRBqKQMANwIAIAFBHGogAEEYaikDADcCACABQSRqIABBIGopAwA3AgAgAUEsaiAAQShqKQMANwIAIAFBNGogAEEwaikDADcCACABQTxqIABBOGopAwA3AgAgAEFAayQAIAELvwECBH8BfiMAQeAAayICJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABBhAFqIgQoAgAhAyAEQQA2AgAgAEH8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AgBFDQEQ2wwACxDaDAALIABBfzYCACADQQhqIgQgAkH//wNxNgIEIAQgAkEQdjYCACADKAIMIQQgAygCCCEFIAMgAb0iB0IgiD4CBCADIAc+AgAgAEEEaiADKAIAIAMoAgQQogciAkUEQEHgtcAAQcwAQeS2wAAQzgwACyACQYABaiEGAkAgBSACQfwAaigCAEYEQCAGKAIAIARGDQELIAIgBTYCfCAGIAQ2AgAgAiACKAJIQRByNgJICyAAQQA2AgAgA0EQaiQAC+IBAgR/AX4jAEEQayIDJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIANBCGoiBCACQf//A3E2AgQgBCACQRB2NgIAIAMoAgwhBCADKAIIIQUgAyABvSIHQiCIPgIEIAMgBz4CACAAQQRqIAMoAgAgAygCBBCiByICRQRAQeC1wABBzABB5LbAABDODAALIAJBiAFqIQYCQCAFIAJBhAFqKAIARgRAIAYoAgAgBEYNAQsgAiAFNgKEASAGIAQ2AgAgAiACKAJIQRByNgJICyAAQQA2AgAgA0EQaiQAC5UBAQN/IwBBgAFrIgMkACAAKAIAIQADQCACIANqQf8AaiAAQQ9xIgRBMEHXACAEQQpJG2o6AAAgAkEBayECIABBD0shBCAAQQR2IQAgBA0ACyACQYABaiIAQYEBTwRAIABBgAFBnMvDABDKDAALIAFBAUGsy8MAQQIgAiADakGAAWpBACACaxD+ASEAIANBgAFqJAAgAAuUAQEDfyMAQYABayIDJAAgACgCACEAA0AgAiADakH/AGogAEEPcSIEQTBBNyAEQQpJG2o6AAAgAkEBayECIABBD0shBCAAQQR2IQAgBA0ACyACQYABaiIAQYEBTwRAIABBgAFBnMvDABDKDAALIAFBAUGsy8MAQQIgAiADakGAAWpBACACaxD+ASEAIANBgAFqJAAgAAthAQF/IAAoAgQiAQRAIABBEGooAgAgAUECdEELakF4cWsQtQELIABBFGooAgAEQCAAQRhqKAIAELUBCyAAKAIgBEAgAEEkaigCABC1AQsgACgCLARAIABBMGooAgAQtQELC6YCAgR/AX4jAEEQayIFJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAAkAgAkEESQRAIAVBCGoiBCABvSIIQiCIPgIEIAQgCD4CACAAQQRqIAUoAgggBSgCDBChByIERQ0BIANBAEchBgJAIAJB/wFxIgcgBC0A2QJGDQAgBCACOgDZAiAEIAQoAqgCIgNBEHI2AqgCIAdBAUcEQCACQf8BcQ0BIAZFDQEgBEHUAmotAAAEQCAEIANBFHI2AqgCCyAEQQA6ANQCIARB0AJqQQA2AgAMAQsgBEIANwNwIARBgAFqQgA3AwAgBEH4AGpCADcDAAsgAEEANgIAIAVBEGokAA8LQYq3wABBGRDZDAALQci0wABBzQBB0LXAABDODAALmgECAn8DfiMAQSBrIgEkAAJAIAAEQCAAKAIAIgJBf0cNARDbDAALENoMAAsgACACQQFqNgIAIABBDGopAgAhAyAAQRRqKQIAIQQgACkCBCEFIAFBBhATNgIEIAEgBDcCGCABIAM3AhAgASAFNwIIIAFBBGogAUEIakEGENEHIAEoAgQhAiAAIAAoAgBBAWs2AgAgAUEgaiQAIAILpwECAX8DfiMAQRBrIggkACAIIAQgBSAGIAcgAyACKAIAIAEtAAAiARCuBCAIQQxqKAIAIQQgCCgCCCEFIAggCCgCACAIKAIEIAYgByADIAIoAgQiAiABEK4EIAgpAwAhCSAIKQMIIQogCCAFIAQgBiAHIAMgAiABEK4EIAgpAwAhCyAAIAgpAwg3AhggACALNwIQIAAgCjcCCCAAIAk3AgAgCEEQaiQAC5oBAgF/BH0jAEEwayIFJAAgBUEIaiABIAIgAxB2IAUoAhQhAQJAIAIqAgAgBSoCCCIIkyIGIAaUIAIqAgQgBSoCDCIGkyIHIAeUkiACKgIIIAUqAhAiB5MiCSAJlJJDAAAAAJIQkwEgBF5FBEAgACABNgIMIAAgBzgCCCAAIAY4AgQgACAIOAIADAELIABBAjoADAsgBUEwaiQAC8cHAQx/IwBBMGsiBiQAIAYgATYCGCAGIAA2AhQgBiABNgIQIAYgAzYCKCAGIAI2AiQgBiADNgIgIAZBCGohDyAGQSBqIQwjAEEgayIJJABBBCEAQQQhAgJAAkACQAJAAkACQAJAIAZBEGoiDkEIaigCACIHBEAgDkEEaigCACEQIAcgB0EDbiIBQQNsRyABaiIKBEAgCkGq1arVAEsNBCAKQQxsIghBAEgNBCAKQavVqtUASUECdCEDIAgEfyAIIAMQ9wsFIAMLIgJFDQILA0AgB0ECTQ0DIAIgBWoiASAFIBBqIgMpAgA3AgAgAUEIaiADQQhqKgIAOAIAIAVBDGohBSANQQFqIQ0gB0EDayIHDQALCwJAIAxBCGooAgAiBUUEQEEAIQMMAQsgDEEEaigCACEHQQAhAyAFIAVBA24iAUEDbEcgAWoiCwRAIAtBqtWq1QBLDQQgC0EMbCIIQQBIDQQgC0Gr1arVAElBAnQhASAIBH8gCCABEPcLBSABCyIARQ0FCyAAIQEDQCAFQQMgBUEDSRsiCEEBRg0GIAVBAk0NByABIAcoAgA2AgAgAUEEaiAHKQIENwIAIAFBDGohASADQQFqIQMgByAIQQJ0aiEHIAUgCGsiBQ0ACwsgCSANNgIYIAkgAjYCFCAJIAo2AhAgCUEIaiEFIwBB8ABrIgIkACACQeAAaiIBQQhqIAlBEGoiB0EIaigCADYCACACIAcpAgA3A2AgAiABIAAgAxAuAkACQAJAIAIoAgRFBEBBACEBDAELQewAQQQQ9wsiAUUNASABQoGAgIAQNwIAIAFBCGogAkHgABDkDBogASAEOAJoCyAFQbjuwgA2AgQgBSABNgIAIAJB8ABqJAAMAQtB7ABBBEHI78MAKAIAIgBBigcgABsRAAAACyAJKAIMIQEgCSgCCCECIAsEQCAAELUBCyAMKAIABEAgDEEEaigCABC1AQsgDigCAARAIA5BBGooAgAQtQELIA8gAjYCACAPIAE2AgQgCUEgaiQADAYLIAggA0HI78MAKAIAIgBBigcgABsRAAAAC0GInMAAQcsAQbydwAAQtQsACxCgCgALIAggAUHI78MAKAIAIgBBigcgABsRAAAAC0EBQQFBkLrAABDDCAALQQJBAkGgusAAEMMIAAsCQAJAIAYoAggiAEUEQEEAIQEMAQsgBigCDCECQQxBBBD3CyIBRQ0BIAEgAjYCCCABIAA2AgQgAUEANgIACyAGQTBqJAAgAQ8LQQxBBEHI78MAKAIAIgBBigcgABsRAAAAC5oBAgF/BH0jAEEwayIFJAAgBUEIaiABIAIgAxBCIAUoAhQhAQJAIAIqAgAgBSoCCCIIkyIGIAaUIAIqAgQgBSoCDCIGkyIHIAeUkiACKgIIIAUqAhAiB5MiCSAJlJJDAAAAAJIQkwEgBF5FBEAgACABNgIMIAAgBzgCCCAAIAY4AgQgACAIOAIADAELIABBAjoADAsgBUEwaiQAC5sBAQd9IAFBQGsqAgAiBSABKgI0IgaTIgIgApQgAUHEAGoqAgAiAiABQThqKgIAIgeTIgMgA5SSIAFByABqKgIAIgMgAUE8aioCACIIkyIEIASUkkMAAAAAkhCTASEEIAAgCCADkkMAAAA/lDgCCCAAIAcgApJDAAAAP5Q4AgQgACAGIAWSQwAAAD+UOAIAIAAgBEMAAAA/lDgCDAuIAQEDfwJAIAAoAgAiAS0AACICQQFrQQdJDQAgAgRAIAEoAgRFDQEgAUEIaigCABC1AQwBCyABLQAEQQNHDQAgAUEIaigCACICKAIAIAIoAgQoAgARBwAgAigCBCIDQQRqKAIABEAgA0EIaigCABogAigCABC1AQsgASgCCBC1AQsgACgCABC1AQubAQICfwF+IwBBEGsiAyQAAkAgAARAIAAoAgAiAkF/Rw0BENsMAAsQ2gwACyAAIAJBAWo2AgAgA0EIaiICIAG9IgRCIIg+AgQgAiAEPgIAIABBBGogAygCCCADKAIMEMAJIgJFBEBByLTAAEHNAEHAtcAAEM4MAAsgAiwA2AIhAiAAIAAoAgBBAWs2AgAgA0EQaiQAIAJBGHRBGHULwAcBDH8jAEEwayIFJAAgBSABNgIYIAUgADYCFCAFIAE2AhAgBSADNgIoIAUgAjYCJCAFIAM2AiAgBUEIaiEOIAVBIGohCyMAQSBrIggkAEEEIQBBBCECAkACQAJAAkACQAJAAkAgBUEQaiINQQhqKAIAIgYEQCANQQRqKAIAIQ8gBiAGQQNuIgFBA2xHIAFqIgkEQCAJQarVqtUASw0EIAlBDGwiB0EASA0EIAlBq9Wq1QBJQQJ0IQMgBwR/IAcgAxD3CwUgAwsiAkUNAgsDQCAGQQJNDQMgAiAEaiIBIAQgD2oiAykCADcCACABQQhqIANBCGoqAgA4AgAgBEEMaiEEIAxBAWohDCAGQQNrIgYNAAsLAkAgC0EIaigCACIERQRAQQAhAwwBCyALQQRqKAIAIQZBACEDIAQgBEEDbiIBQQNsRyABaiIKBEAgCkGq1arVAEsNBCAKQQxsIgdBAEgNBCAKQavVqtUASUECdCEBIAcEfyAHIAEQ9wsFIAELIgBFDQULIAAhAQNAIARBAyAEQQNJGyIHQQFGDQYgBEECTQ0HIAEgBigCADYCACABQQRqIAYpAgQ3AgAgAUEMaiEBIANBAWohAyAGIAdBAnRqIQYgBCAHayIEDQALCyAIIAw2AhggCCACNgIUIAggCTYCECAIQQhqIQQjAEHwAGsiAiQAIAJB4ABqIgFBCGogCEEQaiIGQQhqKAIANgIAIAIgBikCADcDYCACIAEgACADEC4CQAJAAkAgAigCBEUEQEEAIQEMAQtB6ABBBBD3CyIBRQ0BIAFCgYCAgBA3AgAgAUEIaiACQeAAEOQMGgsgBEGYzcIANgIEIAQgATYCACACQfAAaiQADAELQegAQQRByO/DACgCACIAQYoHIAAbEQAAAAsgCCgCDCEBIAgoAgghAiAKBEAgABC1AQsgCygCAARAIAtBBGooAgAQtQELIA0oAgAEQCANQQRqKAIAELUBCyAOIAI2AgAgDiABNgIEIAhBIGokAAwGCyAHIANByO/DACgCACIAQYoHIAAbEQAAAAtBiJzAAEHLAEG8ncAAELULAAsQoAoACyAHIAFByO/DACgCACIAQYoHIAAbEQAAAAtBAUEBQfC5wAAQwwgAC0ECQQJBgLrAABDDCAALAkACQCAFKAIIIgBFBEBBACEBDAELIAUoAgwhAkEMQQQQ9wsiAUUNASABIAI2AgggASAANgIEIAFBADYCAAsgBUEwaiQAIAEPC0EMQQRByO/DACgCACIAQYoHIAAbEQAAAAuXAQIBfQF/IwBBMGsiBCQAIARBCGogACABIAJD//9/fxA9IAQoAhxBBEYEQEGn9cEAQStB2KzCABDZCQALIAQtABQhACAEKgIIIAEqAgCTIgMgA5QgBCoCDCABKgIEkyIDIAOUkiAEKgIQIAEqAgiTIgMgA5SSQwAAAACSEJMBIQMgBEEwaiQAIAMgAyADjCAAQQFHGyACGwuaAQEIfSABKgIYIQUgASoCDCIGIAEqAgAiB5MiAiAClCABQRBqKgIAIgIgASoCBCIIkyIDIAOUkiABQRRqKgIAIgMgASoCCCIJkyIEIASUkkMAAAAAkhCTASEEIAAgAyAJkkMAAAA/lDgCCCAAIAIgCJJDAAAAP5Q4AgQgACAGIAeSQwAAAD+UOAIAIAAgBSAEQwAAAD+UkjgCDAuZHQMSfwR+Dn0jAEGAAWsiBiQAIAZB4ABqIgxBCGogAUEIaigCADYCACAGIAEpAgA3A2AgBkHwAGoiAUEIaiACQQhqKAIANgIAIAYgAikCADcDcCAGIRAjAEGQAWsiAyQAAkACQAJAAkACQAJAAkACQAJ/IAEoAgQiCUUEQCAMQQhqKAIAQQFrIgVFBEBBBCEJQQAhBUEADAILIAVB/////wBLDQIgBUEDdCICQQBIDQIgBUGAgICAAUlBAnQhASACBH8gAiABEPcLBSABCyIJBEAgBa0iFUIDgyEXAkAgFUIBfUIDVARAQgAhFQwBCyAVQvz///8PgyEYQgAhFSAJIQFCgICAgCAhFgNAIAFBGGogFkKAgICAIHwgFUIDfIQ3AgAgAUEQaiAWQoCAgIAQfCAVQgJ8hDcCACABQQhqIBYgFUIBfIQ3AgAgASAWQoCAgIAQfSAVhDcCACABQSBqIQEgFkKAgICAQH0hFiAEQQRqIQQgGCAVQgR8IhVSDQALCyAXUEUEQCAJIARBA3RqIQEgFUIghkKAgICAEHwhFgNAIAEgFSAWhDcCACABQQhqIQEgFkKAgICAEHwhFiAVQgF8IRUgF0IBfSIXQgBSDQALCyAFDAILDAgLIAEoAgghBSABKAIACyERIANBKGpCBDcDACADQSBqQgA3AwBBACEBIANBOGpBADYCACADQoCAgIDAADcDMCADQoCAgICAAjcDGCADQv////v///+/fzcDECADQv////v3//+/fzcDCCADQv////v3//+//wA3AwAgA0EBOgBPIAVFDQEgBUECdCIBQQQQ9wsiAkUNAyADQQA2AlggAyACNgJUIAMgBTYCUCAFQdWq1SpLDQAgBUEYbCIGQQBIDQAgBUHWqtUqSUECdCECIAYEfyAGIAIQ9wsFIAILIgFFDQIgAyABNgJkIAMgBTYCYAJAIAVBAkkNACAFQQFrIgJBA3EhBCAFQQJrQQNPBEAgAkF8cSEHA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFB2ABqQv////v///+/fzcCACABQdAAakL////79///v383AgAgAUHIAGpC////+/f//7//ADcCACABQUBrQv////v///+/fzcCACABQThqQv////v3//+/fzcCACABQTBqQv////v3//+//wA3AgAgAUEoakL////7////v383AgAgAUEgakL////79///v383AgAgAUEYakL////79///v/8ANwIAIAFB4ABqIQEgB0EEayIHDQALCyAERQ0AA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFBGGohASAEQQFrIgQNAAsLIAFC////+////79/NwIQIAFC////+/f//79/NwIIIAFC////+/f//7//ADcCACADIAU2AmggBUGq1arVAEsNACAFQQxsIgJBAEgNACAFQavVqtUASUECdCEBIAIEfyACIAEQ9wsFIAELIg0EQCAFQQN0IQIgDSEBAkAgBUECSQ0AIAVBAWsiBkEDcSEEIAVBAmtBA08EQCAGQXxxIQcDQCABQn83AgggAUEAOgAEIAFBfzYCACABQSxqQX82AgAgAUEoakEAOgAAIAFBIGpCfzcCACABQRxqQQA6AAAgAUEUakJ/NwIAIAFBEGpBADoAACABQTBqIQEgB0EEayIHDQALCyAERQ0AA0AgAUF/NgIIIAFBADoABCABQX82AgAgAUEMaiEBIARBAWsiBA0ACwsgAiAJaiESIAFBfzYCCCABQQA6AAQgAUF/NgIAIAMgBTYCRCADIA02AkAgAyAFNgI8IANBPGohEyAFIQZBACEEIAkhDgJAAkADQAJAAkAgDEEIaigCACIBIA4oAgAiAksEQCAOQQRqKAIAIgggAU8NASAEQQFqIQogCEEMbCAMQQRqKAIAIghqIgEqAgQhGSABKgIAIRogASoCCCEbIAggAkEMbGoiASoCACEcIAEqAgQhHSABKgIIIR4gBCAGSQ0CIAogBiICayEIIAggAygCPCACa0sEQCATIAYgCBCuBiADKAJAIQ0gAygCRCECCyANIAJBDGxqIQEgCEECTwRAIAQgBmsiB0EDcSELIAQgBkF/c2pBA08EQCAHQXxxIQcDQCABQn83AgggAUEAOgAEIAFBfzYCACABQSxqQX82AgAgAUEoakEAOgAAIAFBIGpCfzcCACABQRxqQQA6AAAgAUEUakJ/NwIAIAFBEGpBADoAACABQTBqIQEgB0EEayIHDQALCyALBEAgDyAGa0EDcSEHA0AgAUF/NgIIIAFBADoABCABQX82AgAgAUEMaiEBIAdBAWsiBw0ACwsgAiAIakEBayECCyADIAYgCkcEfyABQX82AgggAUEAOgAEIAFBfzYCACACQQFqBSACCyIGNgJEIAMCfyAKIAMoAmgiCCAESw0AGiAKIAgiAmshCyALIAMoAmAgAmtLBEAgA0HgAGogCCALELAGIAMoAmghAgsgAygCZCACQRhsaiEBIAtBAk8EQCAEIAhrIgdBA3EhFCAEIAhBf3NqQQNPBEAgB0F8cSEHA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFB2ABqQv////v///+/fzcCACABQdAAakL////79///v383AgAgAUHIAGpC////+/f//7//ADcCACABQUBrQv////v///+/fzcCACABQThqQv////v3//+/fzcCACABQTBqQv////v3//+//wA3AgAgAUEoakL////7////v383AgAgAUEgakL////79///v383AgAgAUEYakL////79///v/8ANwIAIAFB4ABqIQEgB0EEayIHDQALCyAUBEAgDyAIa0EDcSEHA0AgAUL////7////v383AhAgAUL////79///v383AgggAUL////79///v/8ANwIAIAFBGGohASAHQQFrIgcNAAsLIAIgC2pBAWshAgsgAiAIIApGDQAaIAFC////+////79/NwIQIAFC////+/f//79/NwIIIAFC////+/f//7//ADcCACACQQFqCzYCaAwCCyACIAFBpLXCABDDCAALIAggAUG0tcIAEMMIAAsgBCAGTw0BIA0gBEEMbGogBDYCCCADKAJoIgEgBE0NAiAOQQhqIQ4gAygCZCAEQRhsaiIBIB4gGyAeIB1DAAAAAJQiISAcQwAAAACUIiKSIiWSIBsgGkMAAAAAlCIjIBlDAAAAAJQiJJIiJpJeGzgCFCABIB0gGSAeQwAAAACUIh8gHSAikpIgIyAZkiAbQwAAAACUIiCSXhs4AhAgASAcIBogHyAcICGSkiAaICSSICCSXhs4AgwgASAeIBsgJSAekyAmIBuTXhs4AgggASAdIBkgHyAiIB2TkiAjIBmTICCSXhs4AgQgASAcIBogHyAhIByTkiAkIBqTICCSXhs4AgAgAygCWCIBIAMoAlBGBEAgA0HQAGogARC2BiADKAJYIQELIAMoAlQgAUECdGogBDYCACADIAFBAWo2AlggD0EBaiEPIAohBCAOIBJHDQALIAMoAhgiASADKAIgIgRHDQgMBwsgBCAGQYiHwgAQwwgACyAEIAFBmIfCABDDCAALDAYLEKAKAAsgA0EANgJYIANCgICAgMAANwNQIANBADYCRCADQoCAgIDAADcCPCADQQA2AmggA0KAgICAwAA3A2AMAgsgBiACQcjvwwAoAgAiAEGKByAAGxEAAAALIAFBBEHI78MAKAIAIgBBigcgABsRAAAACyADQRhqIAEQwAYgAygCICEECyADKAIcIARBB3RqIgFBATYCYCABQv////v///+/fzcDWCABQv////v///+/fzcDUCABQv////v///+/fzcDSCABQv////v///+/fzcDQCABQv////v///+/fzcDOCABQv////v///+/fzcDMCABQv////v3//+//wA3AyggAUL////79///v/8ANwMgIAFC////+/f//7//ADcDGCABQv////v3//+//wA3AxAgAUL////79///v/8ANwMIIAFC////+/f//7//ADcDACABQn83AmQgAUEAOgB0IAFBADoAeCABQewAakJ/NwIAIAMgBEEBajYCICADQfAAaiADIANBzwBqIAMoAlQiAiADKAJYIANB4ABqQQBBABBBIAMgA0GIAWoqAgAiGTgCFCADIANBhAFqKgIAIho4AhAgAyADQYABaioCACIbOAIMIAMgA0H8AGoqAgAiHDgCCCADIANB+ABqKgIAIh04AgQgAyADKgJ0Ih44AgAgAygCIARAIAMoAhwiAUH///97NgJcIAFC////+////79/NwJUIAEgGTgCUCABQf///3s2AkwgAUL////7////v383AkQgASAaOAJAIAFB////ezYCPCABQv////v///+/fzcCNCABIBs4AjAgAUH////7BzYCLCABQv////v3//+//wA3AiQgASAcOAIgIAFB////+wc2AhwgAUL////79///v/8ANwIUIAEgHTgCECABQf////sHNgIMIAFC////+/f//7//ADcCBCABIB44AgAgAygCYARAIAMoAmQQtQELIAMoAlAEQCACELUBCyAQIANByAAQ5AwiAUHcAGogBTYCACABQdgAaiAJNgIAIAEgETYCVCABQdAAaiAMQQhqKAIANgIAIAEgDCkCADcCSCADQZABaiQADAILQQBBAEH4hsIAEMMIAAsgAiABQcjvwwAoAgAiAEGKByAAGxEA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QfAAaiEMIwBBMGsiCyQAIANByABqIgAqAgQhFCAAKgIAIRMCQEEYQQQQ9wsiAARAIABCADcCCCAAQoCAgPiLgICAv383AgAgAEEQakKAgID4AzcCACALQQI2AhggCyAANgIUIAtBAjYCECALQSBqIgBBCGoiBkEANgIAIAtCgICAgMAANwMgQQFBqPrBAEEBIAggC0EQaiAAEHsgC0EIaiAGKAIAIgI2AgAgCyALKQMgIiA3AwAgCygCECEKIAsoAhQhACALKAIYIQQgBiACNgIAIAsgIDcDIAJAIARFDQAgEyATkiETIBQgFJIhFCAAIQIgBEEMbCIHQQxrIgFBDG5BAXFFBEAgACAUIAAqAgCUOAIAIABBBGoiAiATIAIqAgCUOAIAIABBCGoiAiAUIAIqAgCUOAIAIABBDGohAgsgAUEMSQ0AIAAgB2ohBwNAIAIgFCACKgIAlDgCACACQQRqIgEgEyABKgIAlDgCACACQQhqIgEgFCABKgIAlDgCACACQQxqIgEgFCABKgIAlDgCACACQRBqIgEgEyABKgIAlDgCACACQRRqIgEgFCABKgIAlDgCACAHIAJBGGoiAkcNAAsLIAwgCykDIDcCDCAMIAQ2AgggDCAANgIEIAwgCjYCACAMQRRqIAYoAgA2AgAgC0EwaiQADAELQRhBBEHI78MAKAIAIghBigcgCBsRAAAACyADQYgBaiIAQRBqIgogDEEQaiIHKQMANwMAIABBCGoiASAMQQhqIgIpAwA3AwAgAyADKQNwNwOIASADQdgAaiADQShqQsHniPmG2pa4ZCAAEPoBAkAgAygCXCIARQ0AIAMoAlgEQCAAELUBCyADKAJkRQ0AIANB6ABqKAIAELUBCyADQQhqIgBDAAAAPzgCBCAAQwAAAD84AgAgAyADKQMINwNIIANB8ABqIANByABqIAgQrQMgCiAHKQMANwMAIAEgAikDADcDACADIAMpA3A3A4gBIANB2ABqIANBKGpChfLcotvHio6vfyADQYgBahD6AQJAIAMoAlwiCEUNACADKAJYBEAgCBC1AQsgAygCZEUNACADQegAaigCABC1AQsgDUEgaiAJQdABEOQMGiANQQ82AvABIA1BGGogA0EoaiIIQRhqKQMANwMAIA1BEGogCEEQaikDADcDACANQQhqIAhBCGopAwA3AwAgDSAD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QQhqIAZBCGoqAgA4AgAgBEEMaiEEIApBAWohCiADQQNrIgMNAAsLAkAgEEEIaigCACIERQRAQQAhBgwBCyAQQQRqKAIAIQNBACEGIARBA24iAiAEIAJBA2xHaiIIBEAgCEGq1arVAEsNBCAIQQxsIgdBAEgNBCAIQavVqtUASUECdCECIAcEfyAHIAIQ9wsFIAILIgBFDQULIAAhAgNAIARBAyAEQQNJGyIHQQFGDQYgBEECTQ0HIAIgAygCADYCACACQQRqIAMpAgQ3AgAgAkEMaiECIAZBAWohBiADIAdBAnRqIQMgBCAHayIEDQALCyALIAo2AhggCyABNgIUIAsgBTYCECALIAY2AiggCyAANgIkIAsgCDYCICALQQhqIRMjAEHwAWsiByQAIAdB0AFqIgJBCGogC0EQaiIAQQhqKAIANgIAIAcgACkCADcD0AEgB0HgAWoiAUEIaiALQSBqIgBBCGooAgA2AgAgByAAKQIANwPgASAHQQhqIQQjAEEgayIIJAACQCABKAIIBEAgBEEAOgDAASAEQgQ3AkAgBEIANwI4IARCgICAgMAANwIwIARCBDcCKCAEQgA3AiAgBEKAgICAgAI3AhggBEL////7////v383AhAgBEL////79///v383AgggBEL////79///v/8ANwIAIAQgAikCADcCSCAEIAEpAgA3AlQgBEGgAWpBADYCACAEQfwAaiIAQQA2AgAgBEHkAGpBADYCACAEQdAAaiACQQhqKAIANgIAIARB3ABqIgMgAUEIaigCADYCAEEAIQojAEGgAWsiAiQAIAhBCGoiFkECNgIAIAMoAgAhBgJAIAAoAgAiAUUNACAEKAJ4BEAgARC1AQsgBEGEAWooAgAEQCAEQYgBaigCABC1AQsgBEGQAWooAgBFDQAgBEGUAWooAgAQtQELIABBADYCAAJAIARB5ABqIgAoAgAiAUUNACAEKAJgBEAgARC1AQsgBEHsAGooAgBFDQAgBEHwAGooAgAQtQELIABBADYCAAJAIARBoAFqIgAoAgAiAUUNACAEKAKcAQRAIAEQtQELIARBqAFqKAIABEAgBEGsAWooAgAQtQELIARBtAFqKAIARQ0AIARBuAFqKAIAELUBCyAAQQA2AgACQAJAAkAgBC0AwAFBf3NBEHEiFEEPTQ0AIAJBADYCMCACQoCA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RQRAQRBBBEHI78MAKAIAIgBBigcgABsRAAAACyAAQQA2AgAgACABKQMANwIEIABBDGogAigCADYCACABQRBqJAAgAAuUAQECfyMAQRBrIgEkAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIAFBCGoiAiAAQfQAaigCADYCACABIABB7ABqKQIANwMAQRBBBBD3CyIARQRAQRBBBEHI78MAKAIAIgBBigcgABsRAAAACyAAQQA2AgAgACABKQMANwIEIABBDGogAigCADYCACABQRBqJAAgAAuSAQECfyMAQRBrIgEkAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIAFBCGoiAiAAQRhqKAIANgIAIAEgAEEQaikCADcDAEEQQQQQ9wsiAEUEQEEQQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAEEANgIAIAAgASkDADcCBCAAQQxqIAIoAgA2AgAgAUEQaiQAIAALkgEBAn8jAEEQayIBJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyABQQhqIgIgAEEwaigCADYCACABIABBKGopAgA3AwBBEEEEEPcLIgBFBEBBEEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIABBADYCACAAIAEpAwA3AgQgAEEMaiACKAIANgIAIAFBEGokACAAC4IBAgJ/AX4jAEEQayICJAACQCAABEAgACgCACIDQX9HDQEQ2wwACxDaDAALIAAgA0EBajYCACACQQhqIgMgAb0iBEIgiD4CBCADIAQ+AgAgAiAAQQRqIAIoAgggAigCDBCIByACKAIAIQMgACAAKAIAQQFrNgIAIAJBEGokACADQQBHC8cBAgJ/AX4jAEEQayIFJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIAVBCGoiBCABvSIGQiCIPgIEIAQgBj4CACAAQQRqIAUoAgggBSgCDBChByIERQRAQci0wABBzQBB0LXAABDODAALIANBAEchAyACIARBjAJqKgIAXARAAkAgA0UNACAEQdQCai0AAEUNACAEQQA6ANQCIAQgBCgCqAJBBHI2AqgCCyAEIAI4AowCCyAAQQA2AgAgBUEQaiQAC5IBAQJ/IwBBEGsiASQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAUEIaiICIABBIGoo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C6wBAgJ/AX4jAEEQayIDJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIANBCGoiAiABvSIEQiCIPgIEIAIgBD4CACAAQQRqIAMoAgggAygCDBChByICRQRAQci0wABBzQBB0LXAABDODAALIAJB1AJqLQAABEAgAiACKAKoAkEEcjYCqAILIAJBADoA1AIgAkHQAmpBADYCACAAQQA2AgAgA0EQaiQAC4YBAgJ/AX4jAEEQayIDJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIANBCGoiBCABvSIFQiCIPgIEIAQgBT4CACAAQQRqIAMoAgggAygCDBChByIERQRAQci0wABBzQBB0LXAABDODAALIAQgAjgCiAEgAEEANgIAIANBEGokAAt7AgJ/AX4jAEEQayIDJAACQCAABEAgACgCACICQX9HDQEQ2wwACxDaDAALIAAgAkEBajYCACADQQhqIgIgAb0iBEIgiD4CBCACIAQ+AgAgAEEEaiADKAIIIAMoAgwQwAkhAiAAIAAoAgBBAWs2AgAgA0EQaiQAIAJBAEcLiQECAn8BfiMAQRBrIgMkAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQX82AgAgA0EIaiIEIAG9IgVCIIg+AgQgBCAFPgIAIABBBGogAygCCCADKAIMEKIHIgRFBEBB4LXAAEHMAEHktsAAEM4MAAsgBEH0AGogAjgCACAAQQA2AgAgA0EQaiQAC4UBAgJ/AX4jAEEQayIDJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIANBCGoiBCABvSIFQiCIPgIEIAQgBT4CACAAQQRqIAMoAgggAygCDBCiByIERQRAQeC1wABBzABB5LbAABDODAALIAQgAjgCcCAAQQA2AgAgA0EQaiQAC4UBAgJ/AX4jAEEQayIDJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIANBCGoiBCABvSIFQiCIPgIEIAQgBT4CACAAQQRqIAMoAgggAygCDBCiByIERQRAQeC1wABBzABB5LbAABDODAALIAQgAjgCbCAAQQA2AgAgA0EQaiQAC6YBAgN/AX4jAEEQayIEJAACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEF/NgIAIARBCGoiAyAB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CGoiBCACQQxqKAIANgIEIAQgAzYCACABKwMIIQUgACAAKAIAQQFrNgIAIAFBEGokACAFC3UCA38BfCMAQRBrIgEkAAJAIAAEQCAAKAIAIgJBf0cNARDbDAALENoMAAsgACACQQFqNgIAIABBFGooAgAhAiABQQhqIgMgAEEYaigCADYCBCADIAI2AgAgASsDCCEEIAAgACgCAEEBazYCACABQRBqJAAgBAt1AgN/AXwjAEEQayIBJAACQCAABEAgACgCACICQX9HDQEQ2wwACxDaDAALIAAgAkEBajYCACAAQQxqKAIAIQIgAUEIaiIDIABBEGooAgA2AgQgAyACNgIAIAErAwghBCAAIAAoAgBBAWs2AgAgAUEQaiQAIAQLiwEBAn8jAEEgayICJAAgACgCACEDIAJBCGoiACABKAIAQZi/wABBACABKAIEKAIMEQUAOgAIIAAgATYCBCAAQQE6AAkgAEEANgIAIAIgAzYCGCACIANBBGo2AhwgACACQRhqQajQwAAQmQUaIAAgAkEcakGo0MAAEJkFGiAAEMkHIQAgAkEgaiQAIAALawAgAEIANwIcIAAgASkCADcCACAAQSRqQgA3AgAgAEEsakIANwIAIABBNGpCADcCACAAQTxqQQA2AgAgAEEYaiABQRhqKAIANgIAIABBEGogAUEQaikCADcCACAAQQhqIAFBCGopAgA3AgALcAICfwJ9QwAAoEAhBEMAAKBAQwAAgD8gAEEfdSIBIABzIAFrIgFBAXEbIQMgAUECTwRAA0AgAyAEIASUIgRDAACAPyABQQJxG5QhAyABQQNLIQIgAUEBdiEBIAINAAsLQwAAgD8gA5UgAyAAQQBIGwtsAgN/AX0CQCAABEAgACgCACICQX9HDQEQ2wwACxDaDAALIAAgAkEBajYCACABIAAoAgQiA0GIAWooAgAiBE8EQCABIARB7LjAABDDCAALIANBhAFqKAIAIAFBKGxqKgIQIQUgACACNgIAIAULbAIDfwF9AkAgAARAIAAoAgAiAkF/Rw0BENsMAAsQ2gwACyAAIAJBAWo2AgAgASAAKAIEIgNBiAFqKAIAIgRPBEAgASAEQfy4wAAQwwgACyADQYQBaigCACABQShsaioCFCEFIAAgAjYCACAFC2kBAn8jAEEgayICJAAgAiABNgIEQQEhAwJAIAAoAgAgAUYNAEECIQMgACgCBCABRg0AQQAhAyAAKAIIIAFGDQAgAkEANgIQIABBCGogAkEEaiACQQhqQbybwgAQjgkACyACQSBqJAAgAwtyAgN/AXwjAEEQayIBJAACQCAABEAgACgCACICQX9HDQEQ2wwACxDaDAALIAAgAkEBajYCACAAKAIEIQIgAUEIaiIDIABBCGooAgA2AgQgAyACNgIAIAErAwghBCAAIAAoAgBBAWs2AgAgAUEQaiQAIAQLlgICBX8BfiMAQRBrIgUkAAJAIAEEQCABKAIAIgNBf0cNARDbDAALENoMAAsgASADQQFqNgIAIAVBCGohBiMAQSBrIgMkACADQRhqIgQgAr0iCEIgiD4CBCAEIAg+AgACQCABQQRqIAMoAhggAygCHBDBCSIEBEAgA0EQaiAEEMkKAkAgAygCECADKAIUKAKUAREEAEH/AXFBCEcNACADQQhqIAQQyQogAygCCCADKAIMEIcKIgRFDQAgBEEMaigCAEEBayEEQQEhBwsgBiAENgIEIAYgBzYCACADQSBqJAAMAQtB4LXAAEHMAEHUtsAAEM4MAAsgBSkDCCEIIAEgASgCAEEBazYCACAAIAg3AwAgBUEQaiQAC5YCAgV/AX4jAEEQayIFJAACQCABBEAgASgCACIDQX9HDQEQ2wwACxDaDAALIAEgA0EBajYCACAFQQhqIQYjAEEgayIDJAAgA0EYaiIEIAK9IghCIIg+AgQgBCAIPgIAAkAgAUEEaiADKAIYIAMoAhwQwQkiBARAIANBEGogBBDJCgJAIAMoAhAgAygCFCgClAERBABB/wFxQQhHDQAgA0EIaiAEEMkKIAMoAgggAygCDBCHCiIERQ0AIARBEGooAgBBAWshBEEBIQcLIAYgBDYCBCAGIAc2AgAgA0EgaiQADAELQeC1wABBzABB1LbAABDODAALIAUpAwghCCABIAEoAgBBAWs2AgAgACAINwMAIAVBEGokAAt0AgR/AXwjAEEQayIBJAACQCAABEAgACgCACICQX9HDQEQ2wwACxDaDAALIAAgAkEBajYCACAAKAIEIgIoAgAhAyABQQhqIgQgAigCBDYCBCAEIAM2AgAgASsDCCEFIAAgACgCAEEBazYCACABQRBqJAAgBQtoAgF/BH0jAEEQayIDJAAgAioCACIFIAWUIAIqAgQiBiAGlJIgAioCCCIHIAeUkkMAAAAAkhCTASEEIAMgByAElTgCCCADIAYgBJU4AgQgAyAFIASVOAIAIAAgASADEK4DIANBEGokAAtpACAAQgA3AgAgAEIANwIwIABCADcCQCAAQShqQgA3AgAgAEEgakIANwIAIABBGGpCADcCACAAQRBqQgA3AgAgAEEIakIANwIAIABBOGpCADcCACAAQcgAakIANwIAIABB0ABqQgA3AgALewECfyABQQRqKAIAIQMCQAJAAkAgAUEIaigCACIBRQRAQQEhAgwBCyABQQBIDQEgAUEBEPcLIgJFDQILIAIgAyABEOQMIQIgACABNgIIIAAgAjYCBCAAIAE2AgAPCxCgCgALIAFBAUHI78MAKAIAIgBBigcgABsRAAAAC2sBAX8jAEEgayICJAAgAkHkgsAANgIEIAIgADYCACACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIQQAgAkHsl8AAIAJBBGpB7JfAACAAQbiUwAAQoAQAC2ACAX0CfwJAIAAEQCAAKAIAIgNBf0cNARDbDAALENoMAAsgACADQQFqNgIAIAEgACgCBCIEQegAaigCAEkEQCAEQeQAaigCACABQTBsakEYaioCACECCyAAIAM2AgAgAgteAQN/AkAgAARAIAAoAgAiA0F/Rw0BENsMAAsQ2gwACyAAIANBAWo2AgAgASAAKAIEIgRB6ABqKAIASQRAIARB5ABqKAIAIAFBMGxqQRxqKAIAIQILIAAgAzYCACACC14BA38CQCAABEAgACgCACIDQX9HDQEQ2wwACxDaDAALIAAgA0EBajYCACABIAAoAgQiBEHoAGooAgBJBEAgBEHkAGooAgAgAUEwbGpBIGooAgAhAgsgACADNgIAIAILYAIBfQJ/AkAgAARAIAAoAgAiA0F/Rw0BENsMAAsQ2gwACyAAIANBAWo2AgAgASAAKAIEIgRB6ABqKAIASQRAIARB5ABqKAIAIAFBMGxqQSxqKgIAIQILIAAgAzYCACACC2ACAX0CfwJAIAAEQCAAKAIAIgNBf0cNARDbDAALENoMAAsgACADQQFqNgIAIAEgACgCBCIEQegAaigCAEkEQCAEQeQAaigCACABQTBsakEkaioCACECCyAAIAM2AgAgAgtgAgF9An8CQCAABEAgACgCACIDQX9HDQEQ2wwACxDaDAALIAAgA0EBajYCACABIAAoAgQiBEHoAGooAgBJBEAgBEHkAGooAgAgAUEwbGpBKGoqAgAhAgsgACADNgIAIAILYAIBfQJ/AkAgAARAIAAoAgAiA0F/Rw0BENsMAAsQ2gwACyAAIANBAWo2AgAgASAAKAIEIgRBiAFqKAIASQRAIARBhAFqKAIAIAFBKGxqQQxqKgIAIQILIAAgAzYCACACC2sBAX8jAEEgayICJAAgAkHEwMAANgIEIAIgADYCACACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIQQAgAkGY0MAAIAJBBGpBmNDAACAAQdTNwAAQoAQAC2UBAX8jAEEgayIFJAAgBSACNgIEIAUgATYCACAFQQhqIgFBEGogA0EQaikCADcDACABQQhqIANBCGopAgA3AwAgBSADKQIANwMIIAAgBUHoz8AAIAVBBGpB6M/AACABIAQQoAQAC2UBAX8jAEEgayIEJAAgBCABNgIEIAQgADYCACAEQQhqIgBBEGogAkEQaikCADcDACAAQQhqIAJBCGopAgA3AwAgBCACKQIANwMIQQAgBEGI0MAAIARBBGpBiNDAACAAIAMQoAQAC2UBAX8jAEEgayIEJAAgBCABNgIEIAQgADYCACAEQQhqIgBBEGogAkEQaikCADcDACAAQQhqIAJBCGopAgA3AwAgBCACKQIANwMIQQAgBEGo0MAAIARBBGpBqNDAACAAIAMQoAQAC4QBAQJ/IwBBIGsiAiQAIAJBCGoiAyABKAIAQZi/wABBACABKAIEKAIMEQUAOgAIIAMgATYCBCADQQE6AAkgA0EANgIAIAIgADYCGCACIABBBGo2AhwgAyACQRhqQajQwAAQmQUaIAMgAkEcakGo0MAAEJkFGiADEMkHIQAgAkEgaiQAIAALaAEBfyMAQSBrIgMkACADQdT1wQA2AgQgAyAANgIAIANBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACADIAEpAgA3AwhBACADQeT0wQAgA0EEakHk9MEAIAAgAhCgBAALZQEBfyMAQSBrIgQkACAEIAE2AgQgBCAANgIAIARBCGoiAEEQaiACQRBqKQIANwMAIABBCGogAkEIaikCADcDACAEIAIpAgA3AwhBACAEQdT0wQAgBEEEakHU9MEAIAAgAxCgBAALhAEBAn8jAEEgayICJAAgAkEIaiIDIAEoAgBB5O/BAEEAIAEoAgQoAgwRBQA6AAggAyABNgIEIANBAToACSADQQA2AgAgAiAANgIYIAIgAEEEajYCHCADIAJBGGpB1PTBABCZBRogAyACQRxqQdT0wQAQmQUaIAMQyQchACACQSBqJAAgAAtrAQF/IwBBIGsiAiQAIAJB2J3DADYCBCACIAA2AgAgAkEIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAIgASkCADcDCEEAIAJB1J7DACACQQRqQdSewwAgAEH8psMAEKAEAAtoAQF/IwBBIGsiAyQAIANBjKfDADYCBCADIAA2AgAgA0EIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAMgASkCADcDCEEAIANB5J7DACADQQRqQeSewwAgACACEKAEAAtgAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBwJbAACAAEMwCIQAgAkEgaiQAIAAL7gIBAn8jAEHAAmsiAiQAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACACQaABaiIBIABBoAEQ5AwaIAIgAUEEckGcARDkDCEBIAAQtQEgASgCACIAKAIAIQIgACACQQFrNgIAIAJBAUYEQCABKAIAIAFBBGooAgAQvggLIAFBIGooAgAEQCABQSRqKAIAELUBCyABQSxqKAIABEAgAUEwaigCABC1AQsgAUE4aigCAARAIAFBPGooAgAQtQELIAFBxABqKAIABEAgAUHIAGooAgAQtQELIAEoAlAEQCABQdQAaigCABC1AQsgAUHcAGooAgAEQCABQeAAaigCABC1AQsgAUHoAGooAgAEQCABQewAaigCABC1AQsgAUH0AGooAgAEQCABQfgAaigCABC1AQsgAUGAAWooAgAEQCABQYQBaigCABC1AQsgAUGMAWooAgAEQCABQZABaigCABC1AQsgAUHAAmokAAtfAQJ/IwBBoAFrIgEkAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAUHQ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KQMYNwOgASAAQagBaiAgKQMANwMAIABBsAFqIB8pAwA3AwAgACABKQMANwOYAiAAQaACaiAEKQMANwMAIABBqAJqIAMpAwA3AwAgAEGQBGpCBDcDACAAQYgEakIANwMAIABCgICAgMAANwOABCAAQfgDakIENwMAIABB8ANqQgA3AwAgAEKAgICAwAA3A+gDIABB4ANqQgQ3AwAgAEHYA2pCADcDACAAQoCAgIDAADcD0AMgAEEBOgDIAyAAQQA2AsADIABCADcDuAMgAEIANwPgAiAAQQA2AtgCIABCADcD0AIgAUGAA2okACACQagEaiAAQZgEEOQMGkGgBEEIEPcLIgBFBEBBoARBCEHI78MAKAIAIgBBigcgABsRAAAACyAAQQA2AgAgAEEEaiACQaQEakGcBBDkDBogAkHACGokACAAC2wBAn8gACABKQIANwIMIAAgAikCADcCGCAAQRRqIAFBCGoiAygCADYCACAAQSBqIAJBCGoiBCgCADYCACAAIAEqAgQgAioCBJM4AgQgACABKgIAIAIqAgCTOAIAIAAgAyoCACAEKgIAkzgCCAtgAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBoJ3DACAAEMwCIQAgAkEgaiQAIAALYAEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQeyqwwAgABDMAiEAIAJBIGokACAAC14BA38jAEEgayICJAAgASgCBCEDIAEoAgAhBCACQQhqIgFBEGogAEEQaikCADcDACABQQhqIABBCGopAgA3AwAgAiAAKQIANwMIIAQgAyABEMwCIQAgAkEgaiQAIAALYAEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQfjMwwAgABDMAiEAIAJBIGokACAAC14BA38jAEEgayICJAAgACgCBCEDIAAoAgAhBCACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAQgAyAA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aigCACIEIBAoAgAiAk8NBCAFQQxqKAIAIgUgAk8NBSAGQQRqKAIAIQIgAyAKNgLIASADIAIgBUEEdGopAgA3A8ABIAMgAiAEQQR0aikCADcDuAEMBgsgA0ECOgB8DAELCyADQaABaiANEOIEDAQLQeCGwABBK0GgqMAAENkJAAsgBCACQYCowAAQwwgACyAFIAJBkKjAABDDCAALIANBoAFqIgJBEGogA0G4AWoiBEEQaigCADYCACACQQhqIARBCGopAwA3AwAgAyADKQO4ATcDoAELIAMoArABRQRAIAMoAhwiAkEkTwRAIAIQAAsgA0HQAWokAAwBCyADKAKoASECIANBCGoiBCADKAKsATYCBCAEIAI2AgAgAyADKwMIEAE2ArgBIAMgCyADQRxqIANBuAFqENwJIAMoAgQiAkEkTwRAIAIQAAsgAygCuAEiAkEkSQ0BIAIQAAwBCwsgACAAKAIAQQFrNgIAIAlBEGokAAvOAQAgAEL////7////v383AzAgAEL////79///v/8ANwMoIABC////+/f//7//ADcDICAAQv////v3//+//wA3AxggAEL////79///v/8ANwMQIABC////+/f//7//ADcDCCAAQv////v3//+//wA3AwAgAEHYAGpC////+////79/NwMAIABB0ABqQv////v///+/fzcDACAAQcgAakL////7////v383AwAgAEFAa0L////7////v383AwAgAEE4akL////7////v383AwALYAEDfSAAIAIqAhAiBCABKgIAIgOSOAIMIAAgBCADkzgCACAAQRRqIAMgAkEYaioCACIEkjgCACAAQRBqIAMgAkEUaioCACIFkjgCACAAIAQgA5M4AgggACAFIAOTOAIEC10BAX8jAEEgayICJAAgAiAANgIEIAJBCGoiAEEQaiABQRBqKQIANwMAIABBCGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakH4zMMAIAAQzAIhACACQSBqJAAgAAuzAgEGfyMAQRBrIgQkAAJAIAAEQCAAKAIAIgJBf0cNARDbDAALENoMAAsgACACQQFqNgIAIAQgATYCDCAEQQxqIQYjAEEgayIBJAAgAUEhNgIYIAFBEGoiAiAAQQRqIgVBEGooAgAiAzYCBCACIAMgBUEUaigCAEHwAmxqNgIAAkAg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KCAAQoCAgICAAjcCICAAQv////v///+/fzcCGCAAQv////v3//+/fzcCECAAQv////v3//+//wA3AgggAEGw0MEANgIEIAAgATYCACABQoGAgIAQNwIAQaABQQQQ9wsiAUUEQEGgAUEEQcjvwwAoAgAiAEGKByAAGxEAAAALIAFBADYCACABQQRqIABBnAEQ5AwaIABBoAFqJAAgAQvQBAEEfyMAQdAAayIBJAAjAEFAaiIAJAAgAEEUakIENwIAIABCADcCDCAAQQA2AgggAEEANgIAIABBADYCOCAAQSBqQTBBBCAAQTBqEIYHIAAoAiQhAgJAAkACQAJAAkACQCAAKAIgBEAgAEEoaigCACIDQYGAgIB4Rg0BIANFDQMgAiADQcjvwwAoAgAiAEGKByAAGxEAAAALIABBBDYCECAAIAI2AhQMAQsgAEEQakEAQQQQrgYgACgCFCECIAAoAhghAwsgAiADQQxsaiICQQE2AgggAkKAgICAEDcCACACQRRqQQI2AgAgAkEMakKAgICAEDcCACACQSBqQQM2AgAgAkEYakKAgICAEDcCACACQSRqQgA3AgAgAEIBNwMAIAAgA0EEajYCGEGgAUEEEPcLIgJFDQFB4BxBBBD3CyIDRQ0CIAFCADcCFCABIAApAwA3AjAgAUKAgICAwAA3AiQgASADNgIQIAFCgICAgKABNwIIIAEgAjYCBCABQQo2AgAgAUEcakIENwIAIAFBLGpBADYCACABQThqIABBCGopAwA3AgAgAUFAayAAQRBqKQMANwIAIAFByABqIABBGGooAgA2AgAgAEFAayQADAMLEKAKAAtBoAFBBEHI78MAKAIAIgBBigcgABsRAAAAC0HgHEEEQcjvwwAoAgAiAEGKByAAGxEAAAALQdAAQQQQ9wsiAEUEQEHQAEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIABBADYCACAAQQRqIAFBzAAQ5AwaIAFB0ABqJAAgAAtDAQF/AkAgAARAIAAoAgAiAUF/Rw0BENsMAAsQ2gwACyAAIAFBAWo2AgAgAEEYaigCACEBIAAgACgCAEEBazYCACABC8sCAQR/IwBB0ABrIgAkACMAQSBrIgEkACABQRRqQgQ3AgAgAUIANwIMIAFBADYCCCABQQA2AgAgAUEEEOYCAkACQEGgAUEEEPcLIgIEQEGg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IAdBBHRqIgQoAgghAiAEQQxqKAIAIQQLIANBADoAjAEgAyAHNgKIASADIAg2AoABIAMgBDYCfCADIAZBIGo2ApABIAMgBTYChAEgAyACNgJ4AkACQCACIAVJBEAgAyAIIAJBFGxqKAIANgJ4DAELA0AgBSAEIgJNDQIgAyAIIAJBFGxqIg8oAgQiBDYCfCAPKAIIIAdGDQALCyAMKAIAIAJNDQMgAkEUbCIHIA0oAgBqIgVBCGooAgAiBCAOKAIAIgJPDQQgBUEMaigCACIFIAJPDQUgBkEkaigCACECIAMgByAIakEQai0AADoA6AEgAyACIAVBBHRqKQIANwPgASADIAIgBEEEdGopAgA3A9gBDAYLIANBAjoAjAEgAygCsAEiAkECRw0ACwsgA0HAAWogCxDRBAwEC0HghsAAQStBoKjAABDZCQALIAQgAkGAqMAAEMMIAAsgBSACQZCowAAQwwgACyADQcABaiICQRBqIANB2AFqIgRBEGooAgA2AgAgAkEIaiAEQQhqKQMANwMAIAMgAykD2AE3A8ABCyADLQDQASICQQJGBEAgAygCLCICQSRPBEAgAhAACyADKAIoIgJBJE8EQCACEAALIANB8AFqJAAMAQsgAkUNAQJ/IAMoAsABIgIgCUYgAygCxAEiBCAKRnFFBEAgA0EYaiIGIAQ2AgQgBiACNgIAIAMoAhghBCADKAIcDAELIAMoAsgBIQIgA0EQaiIEIAMoAswBNgIEIAQgAjYCACADKAIQIQQgAygCFAshAiADIAStIAKtQiCGhL8QATYC2AEgA0EIaiADQShqIANBLGogA0HYAWoQ3AkgAygCDCICQSRPBEAgAhAACyADKALYASICQSRJDQEgAhAADAELCyAAIAAoAgBBAWs2AgALiQMBAn8jAEGgAWsiACQAQQhBBBD3CyIBRQRAQQhBBEHI78MAKAIAIgBBigcgABsRAAAACyAAQYquj+EDNgKYASAAQv////v3//+//wA3AgggAEGw0MEANgIEIAAgATYCACABQoGAgIAQNwIAIABCgICAgMAANwJQIABByABqQgQ3AgAgAEFAa0IANwIAIABBOGpCgICAgMAANwIAIABBMGpCBDcCACAAQShqQgA3AgAgAEEgakKAgICAgAI3AgAgAEEYakL////7////v383AgAgAEEQakL////79///v383AgAgAEHYAGpCADcCACAAQeAAakIENwIAIABB6ABqQoCAgIDAADcCACAAQfAAakIANwIAIABB+ABqQgQ3AgAgAEGAAWpCgICAgBA3AgAgAEGIAWpCADcCACAAQZABakIENwIAQaABQQQQ9wsiAUUEQEGgAUEEQcjvwwAoAgAiAEGKByAAGxEAAAALIAFBADYCACABQQRqIABBnAEQ5AwaIABBoAFqJAAgAQtDACABKAIMIAJBAnRrQQRrKAIAIgEgACgCACIAQQRqKAIAIgJPBEAgASACQYj3wAAQwwgACyAAKAIAIAFBFGxqNQIQC0MAIAEoAgwgAkECdGtBBGsoAgAiASAAKAIAIgBBBGooAgAiAk8EQCABIAJBiPfAABDDCAALIAAoAgAgAUEEdGo1AggLQwAgASgCDCACQQJ0a0EEaygCACIBIAAoAgAiAEEEaigCACICTwRAIAEgAkGI98AAEMMIAAsgACgCACABQQN0ajUCAAtDACABKAIMIAJBAnRrQQRrKAIAIgEgACgCACIAQQRqKAIAIgJPBEAgASACQYj3wAAQwwgACyAAKAIAIAFBDGxqNQIIC0MAIAEoAgwgAkECdGtBBGsoAgAiASAAKAIAIgBBBGooAgAiAk8EQCABIAJBiPfAABDDCAALIAAoAgAgAUEUbGo1AgALngQBDH8jAEEQayIFJAAgASABKAJIQSByNgJIIAVBCGohBiMAQSBrIgMkACABQRBqIgEoAgAiBCgCBCECIARBfyACIAJBAUYbNgIEAkACQCACQQFHDQAgASgCACICQQE2AgQgAigCAEEBRw0AIAEoAgAiAiABKAIEKAIIQQdqQXhxag0BCyADQRhqIAEoAgAiByABQQRqKAIAIgIoAghBB2pBeHFqIAIoAoQBEQAAIAMoAhghCCADQRBqIAMoAhwiCUEEaigCACIEIAlBCGooAgAiChD8ByADKAIUIQsgAygCECEMIANBCGogBCAKEPwHIAMoAgwhAiADKAIIIg0EQCANIAIQ9wshAgsgAgRAIAJCgYCAgBA3AgAgAiAKQQdqQXhxaiAIIAQQ5AwaIAQEQCAIELUBCyAHIAcoAgAiBEEBazYCACAEQQFGBEAgASgCACABQQRqKAIAEL4ICyABIAI2AgAgAUEEaiAJNgIADAELIAwgC0HI78MAKAIAIgBBigcgABsRAAAACyACQX8gAigCBCICIAJBAUYbNgIEAkACQCACQQFHDQAgASgCACICQQE2AgQgAigCAEEBRw0AIAEoAgAgASgCBCIBKAIIQQdqQXhxaiICDQELQaf1wQBBK0Hw9cIAENkJAAsgBiABNgIEIAYgAjYCACADQSBqJAAgBSgCDCEBIAAgBSgCCDYCACAAIAE2AgQgBUEQaiQAC0MAIAEoAgwgAkECdGtBBGsoAgAiASAAKAIAIgBBBGooAgAiAk8EQCABIAJBkPfBABDDCAALIAAoAgAgAUEEdGo1AggLQwAgASgCDCACQQJ0a0EEaygCACIBIAAoAgAiAEEEaigCACICTwRAIAEgAkGQ98EAEMMIAAsgACgCACABQRhsajUCCAtDACABKAIMIAJBAnRrQQRrKAIAIgEgACgCACIAQQRqKAIAIgJPBEAgASACQZD3wQAQwwgACyAAKAIAIAFBFGxqNQIAC1QAIABCADcCoAEgAEIANwKwASAAQoKAgIAwNwIIIABCgICAgBA3AgAgAEGoAWpCADcCACAAQbgBakEANgIAIABBEGpBAEGQARDjDBogAEEANgK8AQtPAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmARAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANC0/L+w4bF7Zy8f1EbC08CAX8BfiMAQRBrIgIkACACQQhqIAAgASgCYBEAACACKAIIIgAgAigCDEEMaigCABEGACEDIAJBEGokACAAQQAgA0KB0Nrl8a7434B/URsLTwIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJgEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQuGTx9Tc6bn51ABRGwtOAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmARAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANCkZ24ktSP4ucwURsLTgIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJkEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQpGduJLUj+LnMFEbC04CAX8BfiMAQRBrIgIkACACQQhqIAAgASgCYBEAACACKAIIIgAgAigCDEEMaigCABEGACEDIAJBEGokACAAQQAgA0KB/J7Rk++WozxRGwtOAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmARAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANCkuSO9Iza+L8cURsLTgIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJgEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQsmhrZa86KezQlEbC04CAX8BfiMAQRBrIgIkACACQQhqIAAgASgCYBEAACACKAIIIgAgAigCDEEMaigCABEGACEDIAJBEGokACAAQQAgA0KPw/et4LSlmzlRGwtOAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmQRAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANCj8P3reC0pZs5URsLTwIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJgEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQvH/2KjZ+LTHnX9RGwtOAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmARAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANC5ZKlzO7l4fpnURsLTwIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJgEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQoXy3KLbx4qOr39RGwtPAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmQRAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANChfLcotvHio6vf1EbC04CAX8BfiMAQRBrIgIkACACQQhqIAAgASgCYBEAACACKAIIIgAgAigCDEEMaigCABEGACEDIAJBEGokACAAQQAgA0LB54j5htqWuGRRGwtOAgF/AX4jAEEQayICJAAgAkEIaiAAIAEoAmQRAAAgAigCCCIAIAIoAgxBDGooAgARBgAhAyACQRBqJAAgAEEAIANCweeI+YbalrhkURsLTgIBfwF+IwBBEGsiAiQAIAJBCGogACABKAJgEQAAIAIoAggiACACKAIMQQxqKAIAEQYAIQMgAkEQaiQAIABBACADQsj/vKOH6/O3HVEbC04C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Qci0wABBzQBB0LXAABDODAALIAJB1AJqLQAABEAgAiACKAKoAkEEcjYCqAILIAJBADoA1AIgAkHQAmpBADYCAAsgAiACLQDwAUHHAXFBOEEAIAQbcjoA8AEgAhCQBQsgA0EQaiQAIABBADYCAAtAAQJ/AkAgAARAIAAoAgAiAUF/Rw0BENsMAAsQ2gwACyAAIAFBAWo2AgAgACgCBEEgaigCACECIAAgATYCACACC0EBAn8CQCAABEAgACgCACIBQX9HDQEQ2wwACxDaDAALIAAgAUEBajYCACAAKAIEQegAaigCACECIAAgATYCACACC0EBAn8CQCAABEAgACgCACIBQX9HDQEQ2wwACxDaDAALIAAgAUEBajYCACAAKAIEQYgBaigCACECIAAgATYCACACCz0BAn8jAEEwayIEJAAgBEEIaiIFIAEgAiADEEIgAEEIaiAFQQhqKQMANwIAIAAgBCkDCDcCACAEQTBqJAALSgEBfyMAQSBrIgAkACAAQRRqQQE2AgAgAEEcakEANgIAIABB2KTDADYCECAAQbidwwA2AhggAEEANgIIIABBCGpBkKXDABDTCgALSgEBfyMAQSBrIgAkACAAQRRqQQE2AgAgAEEcakEANgIAIABBtKvDADYCECAAQYSrwwA2AhggAEEANgIIIABBCGpBvKvDABDTCgALOwEBfSABKgIAIgIgApQgAUEEaioCACICIAKUkiABQQhqKgIAIgIgApSSQwAAAACSIAAqAgAiAiAClF8LPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQvwEgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEEM4BIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs/AQF/IwBBIGsiBSQAIAVBCGogASACIAMgBBDfASAFKAIIIQEgACAFKgIQOAIEIAAgAUEERzYCACAFQSBqJAALPwEBfyMAQSBrIgUkACAFQQhqIAEgAiADIAQQqAEgBSgCCCEBIAAgBSoCEDgCBCAAIAFBBEc2AgAgBUEgaiQACz8BAX8jAEEgayIFJAAgBUEIaiABIAIgAyAEENYBIAUoAgghASAAIAUqAhA4AgQgACABQQRHNgIAIAVBIGokAAs/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Ags9AQJ/AkAgAARAIAAoAgAiAUF/Rw0BENsMAAsQ2gwACyAAIAFBAWo2AgAgACgCBCgCXCECIAAgATYCACACCzkAAkAgAQRAIAEoAgBBf0cNARDbDAALENoMAAsgACABQSBqKAIANgIEIAAgAUEcaigCAEEDRzYCAAs5AAJAIAEEQCABKAIAQX9HDQEQ2wwACxDaDAALIAAgAUEQaigCADYCBCAAIAFBDGooAgBBA0c2AgALKAAgACgCAARAIABBBGooAgAQtQELIAAoAhQEQCAAQRhqKAIAELUBCwtUAQF/QQxBBBD3CyICRQRAQQxBBEHI78MAKAIAIgBBigcgABsRAAAACyACIAEpAgA3AgAgAkEIaiABQQhqKAIANgIAIABB7LrCADYCBCAAIAI2AgALVgECfSABKgIEIQIgASoCACEDQQhBBBD3CyIBRQRAQQhBBEHI78MAKAIAIgBBigcgABsRAAAACyABIAI4AgQgASADOAIAIABBlNDCADYCBCAAIAE2AgALVgECfSABKgIEIQIgASoCACEDQQhBBBD3CyIBRQRAQQhBBEHI78MAKAIAIgBBigcgABsRAAAACyABIAI4AgQgASADOAIAIABBnNPCADYCBCAAIAE2AgALVAEBf0EMQQQQ9wsiAkUEQEEMQQRByO/DACgCACIAQYoHIAAbEQAAAAsgAiABKQIANwIAIAJBCGogAUEIaigCADYCACAAQdDWwgA2AgQgACACNgIAC1YBAn8gASgCBCECIAEoAgAhA0EIQQQQ9wsiAUUEQEEIQQRByO/DACgCACIAQYoHIAAbEQAAAAsgASACNgIEIAEgAzYCACAAQeijwwA2AgQgACABNgIACz8CAX8BfSABKAIYQQFxIQIgACoCACEDIAEoAhBBAUYEQCABIAMgAiABQRRqKAIAEOkBDwsgASADIAJBABClAguQDQMHfwZ+AXwgASgCGEEBcSEEIAArAwAhDyABKAIQQQFGBEAgAUEUaigCACEFIwBB8AhrIgIkACAPvSEJAkAgDyAPYgRAQQIhAwwBCyAJQv////////8HgyINQoCAgICAgIAIhCAJQgGGQv7///////8PgyAJQjSIp0H/D3EiABsiCkIBgyEMQQMhAwJAAkACQEEBQQJBBCAJQoCAgICAgID4/wCDIg5QIgYbIA5CgICAgICAgPj/AFEbQQNBBCAGGyANUBtBAmsOAwABAgMLQQQhAwwCCyAAQbMIayEHIAxQIQNCASELDAELQoCAgICAgIAgIApCAYYgCkKAgICAgICACFEiBhshCkICQgEgBhshCyAMUCEDQct3Qcx3IAYbIABqIQcLIAIgBzsB6AggAiALNwPgCCACQgE3A9gIIAIgCjcD0AggAiADOgDqCAJ/IANBAkYEQEHArsMADAELIARFBEAgCUI/iKchCEHYx8MAQcCuwwAgCUIAUxsMAQtBASEIQdjHwwBB2cfDACAJQgBTGwshAEEBIQYCQAJAAn8CQAJAAkACQCADQQJrQQMgA0EBSxtB/wFxQQFrDgMCAQADC0F0QQUgB0EQdEEQdSIEQQBIGyAEbCIEQb/9AEsNBCACQZAIaiACQdAIaiACQRBqIARBBHZBFWoiA0EAIAVrQYCAfiAFQYCAAkkbIgQQuAEgBEEQdEEQdSEEAkAgAigCkAhFBEAgAkHACGogAkHQCGogAkEQaiADIAQQLQwBCyACQcgIaiACQZgIaigCADYCACACIAIpA5AINwPACAsgBCACLgHICCIESARAIAJBCGogAigCwAggAigCxAggBCAFIAJBkAhqELMEIAIoAgwhBiACKAIIDAQLQQIhBiACQQI7AZAIIAUEQCACQaAIaiAFNgIAIAJBADsBnAggAkECNgKYCCACQajGwwA2ApQIIAJBkAhqDAQLQQEhBiACQQE2ApgIIAJB2sfDADYClAggAkGQCGoMAwtBAiEGIAJBAjsBkAggBQRAIAJBoAhqIAU2AgAgAkEAOwGcCCACQQI2ApgIIAJBqMbDADYClAggAkGQCGoMAwtBASEGIAJBATYCmAggAkHax8MANgKUCCACQZAIagwCCyACQQM2ApgIIAJB28fDADYClAggAkECOwGQCCACQZAIagwBCyACQQM2ApgIIAJB3sfDADYClAggAkECOwGQCCACQZAIagshBCACQcwIaiAGNgIAIAIgBDYCyAggAiAINgLECCACIAA2AsAIIAEgAkHACGoQ0wIhACACQfAIaiQADAELQefHwwBBJUGMyMMAENkJAAsgAA8LIwBBgAFrIgIkACAPvSEJAkAgDyAPYgRAQQIhAwwBCyAJQv////////8HgyINQoCAgICAgIAIhCAJQgGGQv7///////8PgyAJQjSI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DAMLIARBGGogAxD7CSAEKAIYIAQoAhwQkQoiA0UNAyADQQhqDAILIARBIGogAxD7CSAEKAIgIQUgBCgCJCEGIwBBEGsiAyQAIANBCGogBSAGKAJkEQAAIAMoAggiBSADKAIMQQxqKAIAEQYAIQcgA0EQaiQAIAVBACAHQrDcoOfr19mZvn9RGyIDRQ0CIANBCGoMAQsgBEEoaiADEPsJIAQoAighBSAEKAIsIQYjAEEQayIDJAAgA0EIaiAFIAYoAmQRAAAgAygCCCIFIAMoAgxBDGooAgARBgAhByADQRBqJAAgBUEAIAdCsqHit7ee0vFtURsiA0UNASADQeAAagsgAjgCAAsgBEFAayQADAELQeC1wABBzABB5LbAABDODAALIABBADYCAAs1ACMAQSBrIgMkACADIAEgAhDUAiAAQQhqIANBCGopAwA3AgAgACADKQMANwIAIANBIGokAAs3AQF/IwBBEGsiAyQAIANBCGogAkEIaigCADYCACADIAIpAgA3AwAgACABIAMQoAEgA0EQaiQACzcBAX8jAEEQayIDJAAgA0EIaiABQQhqKAIANgIAIAMgASkCADcDACACIAAgAxCgASADQRBqJAAL5AIBAn8jAEEgayICJAAgAkEBOgAYIAIgATYCFCACIAA2AhAgAkH4yMMANgIMIAJBwK7DADYCCCMAQRBrIgEkAAJAIAJBCGoiACgCDCICBEAgACgCCCIDRQ0BIAEgAjYCCCABIAA2AgQgASADNgIAIwBBEGsiACQAIABBCGogAUEIaigCADYCACAAIAEpAgA3AwAjAEEQayIBJAAgACgCACICQRRqKAIAIQMCQAJ/AkACQCACQQxqKAIADgIAAQMLIAMNAkEAIQJBuJ3DAAwBCyADDQEgAigCCCIDKAIEIQIgAygCAAshAyABIAI2AgQgASADNgIAIAFBjKTDACAAKAIEIgEoAgggACgCCCABLQAQEOUGAAsgAUEANgIEIAEgAjYCDCABQfijwwAgACgCBCIBKAIIIAAoAgggAS0AEBDlBgALQfSewwBBK0HIo8MAENkJAAtB9J7DAEErQbijwwAQ2QkACzMAAkAgAEH8////B0sNACAARQRAQQQPCyAAIABB/f///wdJQQJ0EPcLIgBFDQAgAA8LAAs9ACAAQgA3AhAgAEIANwIAIABCgICAgICAgMA/NwIIIABBGGpCADcCACAAQSBqQgA3AgAgAEEoakEANgIACzYAIAAgASkCADcCACAAIAIpAgA3AgwgAEEIaiABQQhqKAIANgIAIABBFGogAkEIaigCADYCAAtMAQJ9IAAqAgQgACoCABDrDCIBQwAAAABgBEBD2w/JPyABkyICIAIgASABkiIBIAEgAl4bIAEgAVwbDwtB2NTCAEEoQYDVwgAQ2QkACz0AIABCADcCECAAQgA3AgAgAEKAgICAgICAwD83AgggAEEYakIANwIAIABBIGpCADcCACAAQShqQQA2AgALQwEBfyAAKAIAIQECQCAAQQRqLQAADQBB3O/DACgCAEH/////B3FFDQBBzPPDACgCAEUNACABQQE6AAELIAFBADoAAAsvAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEHYAGogAUEARzoAAAtHAQF/QRBBBBD3CyIDRQRAQRBBBEHI78MAKAIAIgNBigcgAxsRAAAACyADIAI4AgwgAyABOAIIIAMgADgCBCADQQA2AgAgAws0AQF/IAAgATYCDCAAQQA2AgggACABQRxqKAIAIgI2AgQgACACIAFBIGooAgBBFGxqNgIACzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBENYBIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARC/ASADKAIIIQAgA0EgaiQAIABBBEcLLwEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQfCADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQsAEgAygCCCEAIANBIGokACAAQQRHCy8BAX8jAEEQayIDJAAgA0EIaiAAIAEgAkEBEEYgAygCCCEAIANBEGokACAAQQFGCy8BAX8jAEEQayIDJAAgA0EIaiAAIAEgAkEBED8gAygCCCEAIANBEGokACAAQQFGCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBEK8BIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARDOASADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQqAEgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBENwBIAMoAgghACADQSBqJAAgAEEERwswAQF/IwBBIGsiAyQAIANBCGogACABIAJBARCJASADKAIIIQAgA0EgaiQAIABBBEcLMAEBfyMAQSBrIgMkACADQQhqIAAgASACQQEQ3wEgAygCCCEAIANBIGokACAAQQRHCzABAX8jAEEgayIDJAAgA0EIaiAAIAEgAkEBEMABIAMoAgghACADQSBqJAAgAEEERwsvAQF/IwBBEGsiAyQAIANBCGogACABIAJBARBSIAMoAgghACADQRBqJAAgAEEBRgs+ACAAKAIAIQAgAS0AGEEQcUEEdkUEQCABLQAYQSBxQQV2RQRAIAAgARDNDA8LIAAgARC6Bw8LIAAgARC5BwsuACMAQRBrIgMkACADIAAoAgA2AgwgA0EMaiABIAIgAxDXBiEAIANBEGokACAAC1ABAn8jAEEQayIAJAAgASgCAEHYmMAAQQsgASgCBCgCDBEFACEDIABBCGoiAkEAOgAFIAIgAzoABCACIAE2AgAgAhCaByEBIABBEGokACABCy0BAX8jAEEwayICJAAgAkEIaiAAIAFBARB2IAItABQhACACQTBqJAAgAEEARwtHAQF/QRRBBBD3CyIARQRAQRRBBEHI78MAKAIAIgBBigcgABsRAAAACyAAQgA3AgAgAEGAgID8AzYCECAAQQhqQgA3AgAgAAvkAgEDfyAAKAIAIQAgAS0AGEEQcUEEdkUEQCABLQAYQSBxQQV2RQRAIAAxAABBASABEIAFDwsjAEGAAWsiAyQAIAAtAAAhAkEAIQADQCAAIANqQf8AakEwQTcgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkH/AXEiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQZzLwwAQygwACyABQQFBrMvDAEECIAAgA2pBgAFqQQAgAGsQ/gEhACADQYABaiQAIAAPCyMAQYABayIDJAAgAC0AACECQQAhAANAIAAgA2pB/wBqQTBB1wAgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkH/AXEiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQZzLwwAQygwACyABQQFBrMvDAEECIAAgA2pBgAFqQQAgAGsQ/gEhACADQYABaiQAIAALhQMCA38BfiAAKAIAIQAgAS0AGEEQcUEEdkUEQCABLQAYQSBxQQV2RQRAIAAuAQAiAK0iBUL//wODQgAgBUIwhkIwh30gAEEATiIAGyAAIAEQgAUPCyMAQYABayIDJAAgAC8BACECQQAhAANAIAAgA2pB/wBqQTBBNyACQQ9xIgRBCkkbIARqOgAAIABBAWshACACQf//A3EiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQZzLwwAQygwACyABQQFBrMvDAEECIAAgA2pBgAFqQQAgAGsQ/gEhACADQYABaiQAIAAPCyMAQYABayIDJAAgAC8BACECQQAhAANAIAAgA2pB/wBqQTBB1wAgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkH//wNxIgRBBHYhAiAEQQ9LDQALIABBgAFqIgJBgQFPBEAgAkGAAUGcy8MAEMoMAAsgAUEBQazLwwBBAiAAIANqQYABakEAIABrEP4BIQAgA0GAAWokACAAC1ABAn8jAEEQayIAJAAgASgCAEHl0cAAQQsgASgCBCgCDBEFACEDIABBCGoiAkEAOgAFIAIgAzoABCACIAE2AgAgAhCaByEBIABBEGokACABCy0BAX8jAEEwayICJAAgAkEIaiAAIAFBARBCIAItABQhACACQTBqJAAgAEEARwtIAQF9IAEqAgAhAkEEQQQQ9wsiAUUEQEEEQQRByO/DACgCACIAQYoHIAAbEQAAAAsgASACOAIAIABB3KfCADYCBCAAIAE2AgALMgEBfSAAIAEqAgAiAiAClCABQQRqKgIAIgIgApSSEJMBOAIMIABBADYCCCAAQgA3AgALTAECfSAAKgIEIAAqAgAQ6wwiAUMAAAAAYEUEQEHY1MIAQShBgNXCABDZCQALQ9sPyT8gAZMiAiACIAEgAZIiASABIAJeGyABIAFcGwtQAQJ/IwBBEGsiACQAIAEoAgBBp6HDAEELIAEoAgQoAgwRBQAhAyAAQQhqIgJBADoABSACIAM6AAQgAiABNgIAIAIQmgchASAAQRBqJAAgAQssAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEHEAGpBAjYCAAsrAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEE8aiABOAIACysAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACAAQUBrIAE4AgALKwACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABBIGpBAjYCAAsrAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEEMaiABOAIACysAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACAAQRxqIAE4AgALKwACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABBJGogATgCAAsrAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEEoaiABNgIACysAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACAAQSxqIAE2AgALKwACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABBMGogATYCAAsrAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgAEE0aiABNgIACysAAkAgAARAIAAoAgBFDQEQ2wwACxDaDAALIABBADYCACAAQThqIAE2AgALKwACQCAABEAgACgCAEUNARDbDAALENoMAAsgAEEANgIAIABBCGogATgCAAstAQJ9IAAqAgwgACoCACIBIAAqAgQiAiABIAJfGyIBIAAqAggiAiABIAJfG5ILKQEBfwJAIABBf0YNACAAIAAoAgQiAUEBazYCBCABQQFHDQAgABC1AQsLKAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQcQAaigCAEECRwsnAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBIGooAgBBAkcLQAEBfiAAKQIAIQFBEEEEEPcLIgBFBEBBEEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIAAgATcCBCAAQQA6AAAgAAsoACAAKAIAKAIAIgApAwAgAEEIaikDACABKAIMIAJBdGxqQQxrEKMDCygAIAAoAgAoAgAiACkDACAAQQhqKQMAIAEoAgwgAkF0bGpBDGsQnAMLMAEBfSAAIAIqAgggASoCACIDlDgCCCAAIAMgAioCBJQ4AgQgACADIAIqAgCUOAIACywAIAAgASkCADcCACAAQRBqIAFBEGopAgA3AgAgAEEIaiABQQhqKQIANwIACy0AIAAgASkCNDcCACAAQRBqIAFBxABqKQIANwIAIABBCGogAUE8aikCADcCAAsoAAJAIAAEQCAAKAIARQ0BENsMAAsQ2gwACyAAQQA2AgAgACABOAIECzwBAX9BEEEEEPcLIgBFBEBBEEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIABCADcCACAAQQhqQgA3AgAgAAs4AAJAIAEtABhBEHFBBHZFBEAgAS0AGEEgcUEFdg0BIAAgARDNDA8LIAAgARC5Bw8LIAAgARC6BwssACABQYACaiACKQIANwIAIAFBiAJqIAJBCGooAgA2AgAgACABQbACEOQMGgssACABQZwCaiACKQIANwIAIAFBpAJqIAJBCGooAgA2AgAgACABQbACEOQMGgspAQF/IwBBIGsiAiQAIAIgACABENQCIAItAAwhACACQSBqJAAgAEEARwstACAAIAIgAUHMAGooAgAgAUHQAGooAgAgAUHYAGooAgAgAUHcAGooAgAQ4AELJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQSxqKgIACyUAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEHYAGotAAALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQTxqKgIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEFAayoCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBEGotAAALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQRxqKAIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEEMaioCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBHGoqAgALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQSRqKgIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEEoaigCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBLGooAgALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQTBqKAIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEE0aigCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBOGooAgALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQTRqKgIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEEUaioCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBDGooAgALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQQhqKgIACyQAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgAEEQaioCAAskAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIABBIGoqAgALJAACQCAABEAgACgCAEF/Rw0BENsMAAsQ2gwACyAAQTBqKgIACygAIAAoAgAoAgAiACkDACAAQQhqKQMAIAEoAgwgAkEFdGtBIGsQ4gMLKAAgACgCACgCACIAKQMAIABBCGopAwAgASgCDCACQQN0a0EIaxCsAwsnAQF/IwBBEGsiAiQAIAIgACABQQEQGyACLQAMIQAgAkEQaiQAIAALJwEBfyMAQRBrIgIkACACIAAgAUEBEB8gAi0ADCEAIAJBEGokACAACycBAX8jAEEQayICJAAgAiAAIAFBARAeIAItAAwhACACQRBqJAAgAAsoAQF/IwBBEGsiAiQAIAIgACABQQEQpgIgAi0ADCEAIAJBEGokACAACycBAX8jAEEQayICJAAgAiAAIAFBARAgIAItAAwhACACQRBqJAAgAAsnAQF/IwBBEGsiAiQAIAIgACABQQEQGSACLQAMIQAgAkEQaiQAIAALJwEBfyMAQRBrIgIkACACIAAgAUEBEBwgAi0ADCEAIAJBEGokACAACycBAn0gACoCACIBIAAqAgQiAiABIAJfGyIBIAAqAggiAiABIAJfGwtvAQF/IwBBEGsiAyQAIAMgAjYCCCADIAE2AgQgAyAANgIAIwBBEGsiACQAIABBCGogA0EIaigCADYCACAAIAMpAgA3AwAjAEEQayIBJAAgASAAKQIANwMIIAFBCGpByJTAAEEAIAAoAghBARDlBgALHwACQCAABEAgACgCAEUNARDbDAALENoMAAsgABC1AQsfAAJAIAAEQCAAKAIADQEgABC1AQ8LENoMAAsQ2wwAC28BAX8jAEEQayIDJAAgAyACNgIIIAMgATYCBCADIAA2AgAjAEEQayIAJAAgAEEIaiADQQhqKAIANgIAIAAgAykCADcDACMAQRBrIgEkACABIAApAgA3AwggAUEIakHkzcAAQQAgACgCCEEBEOUGAAtvAQF/IwBBEGsiAyQAIAMgAjYCCCADIAE2AgQgAyAANgIAIwBBEGsiACQAIABBCGogA0EIaigCADYCACAAIAMpAgA3AwAjAEEQayIBJAAgASAAKQIANwMIIAFBCGpB3PDBAEEAIAAoAghBARDlBgALIQEBfwJAIABBBGooAgAiAUUNACAAKAIARQ0AIAEQtQELCyEAAkAgAARAIAAoAgBBf0cNARDbDAALENoMAAsgACoCBAshAAJAIAAEQCAAKAIAQX9HDQEQ2wwACxDaDAALIAAoAgQLIAAgAUECTQRAIAAgAUECdGoPC0G8/MAAQRsgAhC4CwALJQAgAEUEQEHwvMAAQTAQ2QwACyAAIAIgAyAEIAUgASgCEBEjAAsiAQJ+IAApAwAiAkI/hyEDIAIgA4UgA30gAkIAWSABEIAFCzIBAX9BBEEEEPcLIgBFBEBBBEEEQcjvwwAoAgAiAEGKByAAGxEAAAALIABBADYCACAACyMAIABFBEBB8LzAAEEwENkMAAsgACACIAMgBCABKAIQEQIACyMAIABFBEBB8LzAAEEwENkMAAsgACACIAMgBCABKAIQERoACyMAIABFBEBB8LzAAEEwENkMAAsgACACIAMgBCABKAIQERcACyQAIABFBEBB8LzAAEEwENkMAAsgACACIAMgBCABKAIQEZABAAskACAARQRAQfC8wABBMBDZDAALIAAgAiADIAQgASgCEBGSAQALFQAgACgCAARAIABBBGooAgAQtQELCyEAIABFBEBB8LzAAEEwENkMAAsgACACIAMgASgCEBEBAAskACAALQAARQRAIAFBkM7DAEEFENABDwsgAUGMzsMAQQQQ0AELHQAgASgCAEUEQAALIABB6LDAADYCBCAAIAE2AgALHwAgAEUEQEHwvMAAQTAQ2QwACyAAIAIgASgCEBEDAAsdACABKAIARQRAAAsgAEHYicEANgIEIAAgATYCAAsdACABKAIARQRAAAsgAEH0/cEANgIEIAAgATYCAAs0ACAAQv////f//////gA3AgggAEL////3/////343AgAgAEEQakL////39/////4ANwIAC4ELAgh/GH0gAUHkAGooAgAhCSABQegAaigCACEBIwBB8ABrIgMkACADQQA2AhAgA0KAgICAwAA3AwgCQCABRQRADAELIAFBJGwhCiADQThqIQgDQCAGIAlqIgRBIGooAgAhASADQRhqIARBHGooAgAgASgCCEEHakF4cWogAiABKAKQAREUACADQdAAaiIFIAhBCGooAgA2AgAgAyAIKQIANwNIIAMqAiwiEiAEKgIAIg2UIAMqAigiFCAEQQRqKgIAIg6UkyIMIAySIRYgFCAEQQhqKgIAIg+UIAMqAjAiCyANlJMiDCAMkiEXIARBGGoqAgAgCyAEQQxqKgIAIhEgFpQgDSAXlCAOIAsgDpQgEiAPlJMiDCAMkiIMlJOSkpIhHCAPIAMqAiQiEJQgDSADKgIcIhWUIBEgAyoCICITlJIgDiADKgIYIguUk5IhICAPIAuUIA4gEJQgESAVlCANIBOUk5KSISEgDiATlCARIAuUIA0gEJSSkiAPIBWUkyEiIBEgEJQgDSALlJMgDiAVlJMgDyATlJMhEyAaQwAAAABDAACAPyADKgI0IhWVIBVDAAAAAFsbIhAgHJSSIRogGyAQIARBFGoqAgAgEiARIBeUIA8gDJQgDSAWlJOSkpIiC5SSIRsgGSAQIARBEGoqAgAgFCARIAyUIA4gFpQgDyAXlJOSkpIiDJSSIRkgGCAQkiEYIAMoAhAiBCADKAIIRgRAIANBCGogBBC9BiADKAIQIQQLIAMoAgwiASAEQSxsaiIHIBU4AhwgByAcOAIYIAcgCzgCFCAHIAw4AhAgByATOAIMIAcgIDgCCCAHICE4AgQgByAiOAIAIAcgAykDSDcCICAHQShqIAUoAgA2AgAgAyAEQQFqIgU2AhAgCiAGQSRqIgZHDQALIBhDAAAAAF4EQCAbIBiVIRsgGiAYlSEaIBkgGJUhGQsgAygCCCEIQwAAAAAhDUMAAAAAIQ5DAAAAACEWQwAAAAAhF0MAAAAAIQ9DAAAAACERQwAAAAAhECAFBEAgBEEsbEEsaiEEIAEhBQNAIANBGGoiBkEQaiIJIAVBEGopAgA3AwAgBkEYaiIKIAVBGGopAgA3AwAgBkEoaiAFQShqKAIANgIAIAZBIGogBUEgaikCADcDACAGQQhqIAVBCGopAgA3AwAgAyAFKQIANwMYIAkqAgAhEyAKKgIAIQsgAyoCLCEMIANByABqIAYQ/QECfSADKgI0IgJDAAAAAFsEQCADKgJoIRQgAyoCZCEcIAMqAmAhFSADKgJcISAgAyoCWCELIAMqAlQhISADKgJQISIgAyoCTCETIAMqAkgMAQsgGyAMkyISIBogC5MiC5RDAAAAAJJDAACAPyAClSIdlCICIAMqAmSSIRwgGSATkyIUIAuUQwAAAACSIB2UIgwgAyoCYJIhFSACIAMqAlySISAgFCASlEMAAAAAkiAdlCICIAMqAlSSISEgDCADKgJQkiEiIAIgAyoCTJIhEyALIAuUIgsgFCAUlCIMIBIgEpQiApKSQwAAAACSIRIgHSALIBKSlCADKgJokiEUIB0gAiASkpQgAyoCWJIhCyAdIAwgEpKUIAMqAkiSCyECIAVBLGohBSAQIBSSIRAgESAckiERIA8gFZIhDyAeICCSIR4gFyALkiEXIBYgIZIhFiAOICKSIQ4gDSATkiENIB8gApIhHyAEQSxrIgQNAAsLIAhFDQAgARC1AQsgAyAaOAJQIAMgGzgCTCADIBk4AkggAyAQOAI4IAMgETgCNCADIA84AjAgAyAeOAIsIAMgFzgCKCADIBY4AiQgAyAOOAIgIAMgDTgCHCADIB84AhggACADQcgAaiAYIANBGGoQoQIgA0HwAGokAAsZACAAIAFBBGooAgAgAUEIaigCACACEMcCCzQAIABC////9//////+ADcCCCAAQv////f/////fjcCACAAQRBqQv////f3/////gA3AgALNAAgAEL////3//////4ANwIIIABC////9/////9+NwIAIABBEGpC////9/f////+ADcCAAsZACAAKAIAIgAoAgAgAEEEaigCACABEOgBCxoAIABBADYCCCAAQgA3AgAgACABKgIAOAIMCx0AIABBzL/CADYCBCAAIAE2AgAgACABKgIYOAIICx0AIABBxLzCADYCBCAAIAE2AgAgACABKgIMOAIICx0AIABBjMDCADYCBCAAIAE2AgAgACABKgIkOAIICx0AIABB7NHCADYCBCAAIAE2AgAgACABKgIIOAIICx0AIABBrNXCADYCBCAAIAE2AgAgACABKgIIOAIICx0AIABB8M7CADYCBCAAIAE2AgAgACABKgJgOAIICyABAX8QqwUiAEUEQEGfn8MAQd4AQZygwwAQzgwACyAACxgAIAAoAgAgASgCACAC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8cEANgIEIAAgATYCAAsTACAAQZDxwQA2AgQgACABNgIACxMAIABBoPHBADYCBCAAIAE2AgALEwAgAEGw8cEANgIEIAAgATYCAAsTACAAQcDxwQA2AgQgACABNgIACxMAIABB0PHBADYCBCAAIAE2AgALEwAgAEHg8cEANgIEIAAgATYCAAsTACAAQfDxwQA2AgQgACABNgIACxMAIABBgPLBADYCBCAAIAE2AgALEwAgAEGQ8sEANgIEIAAgATYCAAsTACAAQaDywQA2AgQgACABNgIACxMAIABBsPLBADYCBCAAIAE2AgALEwAgAEHA8sEANgIEIAAgATYCAAsTACAAQdDywQA2AgQgACABNgIACxMAIABB4PLBADYCBCAAIAE2AgALEwAgAEHw8sEANgIEIAAgATYCAAsTACAAQYDzwQA2AgQgACABNgIACxMAIABBkPPBADYCBCAAIAE2AgALEwAgAEGg88EANgIEIAAgATYCAAsTACAAQbDzwQA2AgQgACABNgIACxMAIABBwPPBADYCBCAAIAE2AgALEwAgAEHQ88EANgIEIAAgATYCAAsQACAAQQM2AgAgACABNgIECxAAIABBBDYCACAAIAE2AgQLEAAgAEECNgIAIAAgATYCBAsQACAAQQE2AgAgACABNgIECxAAIABBADYCACAAIAE2AgQLEwAgAEHQucIANgIEIAAgATYCAAsTACAAQai8wgA2AgQgACABNgIACxMAIABBsL/CADYCBCAAIAE2AgALEwAgAEHwv8IANgIEIAAgATYCAAsTACAAQbDAwgA2AgQgACABNgIACxAAIABBCTYCACAAIAE2AgQLEwAgAEH4w8IANgIEIAAgATYCAAsQACAAQQY2AgAgACABNgIECxMAIABB1MbCADYCBCAAIAE2AgALEAAgAEEFNgIAIAAgATYCBAsTACAAQbDJwgA2AgQgACABNgIACw4AIAAgAUE0aiACENkCCxAAIABBCDYCACAAIAE2AgQLEAAgAEEKNgIAIAAgATYCBAsTACAAQdTOwgA2AgQgACABNgIACxAAIABBCzYCACAAIAE2AgQLEwAgAEHQ0cIANgIEIAAgATYCAAsQACAAQQw2AgAgACABNgIECxMAIABBkNXCADYCBCAAIAE2AgALGQAgAEKAgICA8P//v/8ANwIIIABCADcCAAsQACAAQQc2AgAgACABNgIECxAAIABBDTYCACAAIAE2AgQLEwAgAEHklMMANgIEIAAgATYCAAsQACAAQQ42AgAgACABNgIECxMAIABBgJXDADYCBCAAIAE2AgALEAAgAEEPNgIAIAAgATYCBAsTACAAQZyVwwA2AgQgACABNgIACxAAIABBEDYCACAAIAE2AgQLEwAgAEG4lcMANgIEIAAgATYCAAsQACAAQRE2AgAgACABNgIECxMAIABB1JXDADYCBCAAIAE2AgALEQAgACgCACAAKAIEIAEQ6AELHAAgASgCACAAKAIAIAAoAgQgASgCBCgCDBEFAAsTACAAQeijwwA2AgQgACABNgIACxEAIAEgACgCACAAKAIEENABCwwAIAAgASACIAMQUQsMACAAIAEgAiADEGULDAAgACABIAIgAxBPCwwAIAAgASACIAMQTAsNACAAIAFBsAIQ5AwaCw0AIAAgASACIAMQ7gILDQAgACABIAIgAxCQAwsMACAAIAEgAiADEH4LDQAgACABIAIgAxCnAQsNACAAIAEgAiADELEBCw0AIAAgASACIAMQnQELwQMBBH0jAEEQayIBJAACQAJAAkACQAJAAkAgAg4DAAECAwtDAABAQBCTASEFIABBATYCACAAQQxqQwAAgL9DAACAPyADQQRxGyAFlTgCACAAQQhqQwAAgL9DAACAPyADQQJxGyAFlTgCACAAQwAAgL9DAACAPyADQQFxGyAFlTgCBAwECyABQQA2AgggAUIANwMAIAEgA0EDcSICQQFqQQNwIgRBAnRqQwAAgL9DAACAPyADQQJ2IgMgBHZBAXEbOAIAIAEgAkECakEDcCICQQJ0akMAAIC/QwAAgD8gAyACdkEBcRs4AgAgASoCACIGIAaUIAEqAgQiByAHlJIgASoCCCIIIAiUkkMAAAAAkhCTASEFIABBATYCACAAQQxqIAggBZU4AgAgAEEIaiAHIAWVOAIAIAAgBiAFlTgCBAwDCyABQQA2AgggAUIANwMAQwAAgD8hBSADQQNJDQFDAACAvyEFIANBA2siA0EDSQ0BQbj4wQBBG0GstMIAELkLAAsgAEEANgIADAELIAEgA0ECdGogBTgCACAAQQE2AgAgACABKQMANwIEIABBDGogAUEIaigCADYCAAsgAUEQaiQAC+kDAQV9IwBBIGsiBCQA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akEBNgIAIANBnM/DADYCECADQQA2AgggA0EBNgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhDTCgALewEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpBATYCACADQbzPwwA2AhAgA0EANgIIIANBATYCJCADIAE2AhggAyADQQRqNgIoIAMgAzYCICAAIAIQ0woAC3sBAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQhqIgBBDGpBAjYCACADQRxqQQI2AgAgA0EgaiIBQQxqQQE2AgAgA0Hwz8MANgIQIANBADYCCCADQQE2AiQgAyABNgIYIAMgA0EEajYCKCADIAM2AiAgACACENMKAAsOACAANQIAQQEgARCABQttAQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AggjAEEgayIAJAAgAEEMakEBNgIAIABBFGpBATYCACAAQYjJwwA2AgggAEEANgIAIABBowc2AhwgACADQQhqNgIYIAAgAEEYajYCECAAIAIQ0woAC88CAgR/An4jAEFAaiICJABBASEEAkAgAC0ABA0AIAAtAAUhBAJAAkACQCAAKAIAIgMoAhgiBUEEcUUEQCAEDQEMAwsgBA0BQQEhBCADKAIAQf3KwwBBASADKAIEKAIMEQUADQMgAygCGCEFDAELQQEhBCADKAIAQeHKwwBBAiADKAIEKAIMEQUARQ0BDAILQQEhBCACQQE6ABcgAkHAysMANgIcIAIgAykCADcDCCACIAJBF2o2AhAgAykCCCEGIAMpAhAhByACIAMtACA6ADggAiADKAIcNgI0IAIgBTYCMCACIAc3AyggAiAGNwMgIAIgAkEIajYCGCABIAJBGGpBgPXBACgCABEDAA0BIAIoAhhB38rDAEECIAIoAhwoAgwRBQAhBAwBCyABIANBgPXBACgCABEDACEECyAAQQE6AAUgACAEOgAEIAJBQGskAAsOACAAKAIAIAEgAhDxAwsOACAAKQMAQQEgARCABQvSAwIBfgR/IAAoAgApAwAhAiMAQYABayIFJAACQAJAAkACQCABKAIYIgBBEHFFBEAgAEEgcQ0BIAJBASABEIAFIQAMBAtBgAEhACAFQYABaiEEAkACQANAIABFBEBBACEADAMLIARBAWtBMEHXACACpyIDQQ9xIgZBCkkbIAZqOgAAIAJCEFoEQCAEQQJrIgQgA0H/AXEiA0EEdkEwQdcAIANBoAFJG2o6AAAgAEECayEAIAJCgAJUIQMgAkIIiCECIANFDQEMAgsLIABBAWshAAsgAEGBAU8NAgsgAUEBQazLwwBBAiAAIAVqQYABIABrEP4BIQAMAwtBgAEhACAFQYABaiEEAkACQANAIABFBEBBACEADAMLIARBAWtBMEE3IAKnIgNBD3EiBkEKSRsgBmo6AAAgAkIQWgRAIARBAmsiBCADQf8BcSIDQQR2QTBBNyADQaABSRtqOgAAIABBAmshACACQoACVCEDIAJCCIghAiADRQ0BDAILCyAAQQFrIQALIABBgQFPDQILIAFBAUGsy8MAQQIgACAFakGAASAAaxD+ASEADAILIABBgAFBnMvDABDKDAALIABBgAFBnMvDABDKDAALIAVBgAFqJAAgAAsLACAAIwBqJAAjAAsZACABKAIAQZyDwABBESABKAIEKAIMEQUACxkAIAEoAgBBgIDAAEEOIAEoAgQoAgwRBQALGQAgASgCAEHMscAAQRQgASgCBCgCDBEFAAsZACABKAIAQaixwABBFCABKAIEKAIMEQUACwwAIAAoAgAgARDICwsJACAAIAEQFAALDQBBnL7AAEEbENkMAAsOAEG3vsAAQc8AENkMAAsOACABQYjOwABBAhDQAQuwCQMIfwJ9A34gACgCACECIAEoAhhBAXEhAAJAIAEoAhBBAUYEQCABIAIqAgAgACABQRRqKAIAEOkBIQAMAQsgAigCACICviEKAkAgAkH/////B3G+IgtDyhsOWmANACALQwAAAABcIAtDF7fROF1xDQAgASAKIABBARClAiEADAELIwBBoAFrIgIkACAKvCEEQQMhAwJAIApDAACAf1sNACAKQwAAgP9bDQAgCiAKXARAQQIhAwwBCyAEQf///wNxQYCAgARyIARBAXRB/v//B3EgBEEXdkH/AXEiBRsiB60iDEIBgyEOQQQhAwJAAkBBBEEDIARBgICA/AdxG0ECIARB/////wdxG0EDaw4CAAECCyAFQZYBayEGIA5QIQNCASENDAELQoCAgBAgDEIBhiAHQYCAgARGIgYbIQxCAkIBIAYbIQ0gDlAhA0HofkHpfiAGGyAFaiEG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AEELCwQAQQwLBwBD//9/fwsEAEEHCwQAQQ0LBwBD2w/JPwsEAEEOCwQAQQ8LBABBEAsEAEERCw0AQpu135fe5cG/5wALDABC0ZWWx/rwkbl4CwMAAQsDAAELAwABCwMAAQsL7egDBgBBgIDAAAuGsANhIG1hdHJpeCBhcnJheQAACQAAAAAAAAABAAAACgAAAG5vIGVudHJ5IGZvdW5kIGZvciBrZXkAAE5vIGVsZW1lbnQgYXQgaW5kZXhDYW5ub3QgZGVzZXJpYWxpemUgY3VzdG9tIHNoYXBlLgAJAAAAAAAAAAEAAAALAAAACQAAAAAAAAABAAAADAAAAEFsbG9jYXRpb24gZnJvbSBpdGVyYXRvciBlcnJvcjogdGhlIGl0ZXJhdG9yIGRpZCBub3QgeWllbGQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVsZW1lbnRzLi9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4zMi4xL3NyYy9iYXNlL2RlZmF1bHRfYWxsb2NhdG9yLnJz5gAQAG4AAAB8AAAACQAAAABzdHJ1Y3QgQml0VmVjIHdpdGggMiBlbGVtZW50cwAAZQEQAB0AAAAJAAAACAAAAAQAAAANAAAAYSB0dXBsZSBvZiBzaXplIDMAAAAJAAAAAAAAAAEAAAAOAAAAc3RydWN0IENvbXBvdW5kIHdpdGggNCBlbGVtZW50cwDAARAAHwAAAHN0cnVjdCBQb2x5bGluZSB3aXRoIDMgZWxlbWVudHMA6AEQAB8AAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Nyb3NzYmVhbS1jaGFubmVsLTAuNS42L3NyYy93YWtlci5ycwAAABACEABlAAAAaAAAACsAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlABACEABlAAAAAwEAABkAAAAQAhAAZQAAAN4AAAAdAAAADwAAAAgAAAAEAAAAEAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvY3Jvc3NiZWFtLWNoYW5uZWwtMC41LjYvc3JjL2ZsYXZvcnMvemVyby5yc+QCEABsAAAAZgEAABkAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAOQCEABsAAAAuQAAABcAAADkAhAAbAAAAMAAAAAXAAAA5AIQAGwAAAAWAQAAGQAAAHZhcmlhbnQgaW5kZXggMCA8PSBpIDwgMrwDEAAYAAAAc3RydWN0IEVkZ2Ugd2l0aCA0IGVsZW1lbnRzANwDEAAbAAAAdmFyaWFudCBpbmRleCAwIDw9IGkgPCAxOQAAAAAEEAAZAAAAc3RydWN0IEdyYXBoIHdpdGggMiBlbGVtZW50cyQEEAAcAAAAc3RydWN0IExVIHdpdGggMiBlbGVtZW50cwAAAEgEEAAZAAAAc3RydWN0IFJpZ2lkQm9keVNldCB3aXRoIDIgZWxlbWVudHMAbAQQACMAAABzdHJ1Y3QgSXNsYW5kTWFuYWdlciB3aXRoIDQgZWxlbWVudHOYBBAAJAAAAHN0cnVjdCBDb252ZXhQb2x5aGVkcm9uIHdpdGggOCBlbGVtZW50cwDEBBAAJwAAAHN0cnVjdCBDb250YWN0TWFuaWZvbGREYXRhIHdpdGggNyBlbGVtZW50cwAA9AQQACoAAABzdHJ1Y3QgR2VuZXJpY1RyaU1lc2ggd2l0aCA3IGVsZW1lbnRzAAAAKAUQACUAAABzdHJ1Y3QgTWFzc1Byb3BlcnRpZXMgd2l0aCA0IGVsZW1lbnRzAAAAWAUQACUAAAB2YXJpYW50IGluZGV4IDAgPD0gaSA8IDOIBRAAGAAAAHN0cnVjdCBJc29tZXRyeSB3aXRoIDIgZWxlbWVudHMAqAUQAB8AAAB2YXJpYW50IGluZGV4IDAgPD0gaSA8IDTQBRAAGAAAAHN0cnVjdCBUcmlNZXNoQ29ubmVjdGVkQ29tcG9uZW50cyB3aXRoIDMgZWxlbWVudHMAAADwBRAAMQAAAHN0cnVjdCBHZW5lcmljSGVpZ2h0RmllbGQgd2l0aCA1IGVsZW1lbnRzAAAALAYQACkAAABzdHJ1Y3QgTXVsdGlib2R5IHdpdGggMTYgZWxlbWVudHMAAABgBhAAIQAAAHN0cnVjdCBTQVBSZWdpb24gd2l0aCA3IGVsZW1lbnRzjAYQACAAAABzdHJ1Y3QgSW1wdWxzZUpvaW50IHdpdGggNSBlbGVtZW50cwC0BhAAIwAAAHN0cnVjdCBJbnRlcm5hbEVkZ2VzRml4ZXIgd2l0aCAyIGVsZW1lbnRzAAAA4AYQACkAAABzdHJ1Y3QgR2VuZXJpY1Fidmggd2l0aCA1IGVsZW1lbnRzAAAUBxAAIgAAAHN0cnVjdCBNdWx0aWJvZHlKb2ludCB3aXRoIDMgZWxlbWVudHMAAABABxAAJQAAAHN0cnVjdCBJbXB1bHNlSm9pbnRTZXQgd2l0aCA0IGVsZW1lbnRzAABwBxAAJgAAAHN0cnVjdCBNdWx0aWJvZHlKb2ludFNldCB3aXRoIDQgZWxlbWVudHOgBxAAKAAAAHN0cnVjdCBNdWx0aWJvZHlXb3Jrc3BhY2Ugd2l0aCAyIGVsZW1lbnRzAAAA0AcQACkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy91dGlscy9hcnJheS5ycwAABAgQAGIAAABKAAAACQAAAHZhcmlhbnQgaW5kZXggMCA8PSBpIDwgNngIEAAYAAAAc3RydWN0IFRyaU1lc2hTaGFwZUNvbnRhY3RNYW5pZm9sZHNXb3Jrc3BhY2Ugd2l0aCA0IGVsZW1lbnRzmAgQADwAAABzdHJ1Y3QgSGVpZ2h0RmllbGRTaGFwZUNvbnRhY3RNYW5pZm9sZHNXb3Jrc3BhY2Ugd2l0aCAzIGVsZW1lbnRz3AgQAEAAAABzdHJ1Y3QgQ29udGFjdE1hbmlmb2xkIHdpdGggOCBlbGVtZW50cwAAJAkQACYAAABzdHJ1Y3QgSGVpZ2h0RmllbGRDb21wb3NpdGVTaGFwZUNvbnRhY3RNYW5pZm9sZHNXb3Jrc3BhY2Ugd2l0aCAzIGVsZW1lbnRzAAAAVAkQAEkAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleKgJEAAgAAAAL3J1c3RjLzA0NjhhMDBhZTNmZDZlZjFhNmEwZjllYWY2MzdkN2FhOWU2MDRhY2MvbGlicmFyeS9zdGQvc3JjL3N5cy93YXNtLy4uL3Vuc3VwcG9ydGVkL2xvY2tzL211dGV4LnJzAADQCRAAZgAAABQAAAAJAAAACQAAAAgAAAAEAAAAEQAAABIAAAAJAAAAJAAAAAQAAAATAAAACQAAAAwAAAAEAAAAFAAAAAAAAAABAAAAFQAAAAwAAAAEAAAAFgAAABcAAAAYAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAJAAAAAAAAAAEAAAAZAAAAL3J1c3RjLzA0NjhhMDBhZTNmZDZlZjFhNmEwZjllYWY2MzdkN2FhOWU2MDRhY2MvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAOQKEABLAAAA6AkAAAkAAAAJAAAABAAAAAQAAAAaAAAAGwAAABwAAABjYW5ub3QgdHJhbnNtdXRlX2NvcHkgaWYgRHN0IGlzIGxhcmdlciB0aGFuIFNyYwBYCxAALwAAAC9ydXN0Yy8wNDY4YTAwYWUzZmQ2ZWYxYTZhMGY5ZWFmNjM3ZDdhYTllNjA0YWNjL2xpYnJhcnkvY29yZS9zcmMvbWVtL21vZC5ycwCQCxAASwAAABgEAAAFAAAACQAAAAQAAAAEAAAAHQAAAAkAAAAEAAAABAAAAB4AAABpbnZhbGlkIHZhbHVlOiAsIGV4cGVjdGVkIAAADAwQAA8AAAAbDBAACwAAAGludmFsaWQgbGVuZ3RoIAA4DBAADwAAABsMEAALAAAAUG9pc29uRXJyb3IvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9wYXJ0aXRpb25pbmcvcWJ2aC90cmF2ZXJzYWwucnMAAABjDBAAcgAAAE0AAAAZAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvdHJpbWVzaC5yc+gMEABkAAAA6AMAABEAAADoDBAAZAAAAOkDAAARAAAA6AwQAGQAAADqAwAAEQAAAAAAAAD//////////y9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvaW5kZXhtYXAtMS45LjEvc3JjL21hcC9jb3JlLnJzAIgNEABfAAAAKgAAACMAAACIDRAAXwAAACIAAAAPAAAATWF0cml4IGluaXQuIGVycm9yOiB0aGUgc2xpY2UgZGlkIG5vdCBjb250YWluIHRoZSByaWdodCBudW1iZXIgb2YgZWxlbWVudHMuL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9uYWxnZWJyYS0wLjMyLjEvc3JjL2Jhc2UvY29uc3RydWN0aW9uLnJzUw4QAGkAAABrAAAACQAAAE1hdHJpeCBpbmRleCBvdXQgb2YgYm91bmRzLi9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9kYXRhL2FyZW5hLnJzAAAA5w4QAGIAAAAKAQAAHgAAAGNvcnJ1cHQgZnJlZSBsaXN0AAAAXA8QABEAAADnDhAAYgAAAAsBAAArAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2RhdGEvZ3JhcGgucnMAAIgPEABiAAAAkgAAABgAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmVkZ2VzLmxlbigpICE9IGNyYXRlOjpJTlZBTElEX1VTSVpFAACIDxAAYgAAANwAAAAJAAAAR3JhcGg6OmFkZF9lZGdlOiBub2RlIGluZGljZXMgb3V0IG9mIGJvdW5kcwBIEBAAKwAAAIgPEABiAAAA5AAAABsAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLm5vZGVzLmxlbigpICE9IGNyYXRlOjpJTlZBTElEX1VTSVpFAACIDxAAYgAAALMAAAAJAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2RhdGEvY29hcmVuYS5yc9gQEABkAAAAXQAAABkAAADYEBAAZAAAAE4AAAAJAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNzL2pvaW50L2ltcHVsc2Vfam9pbnQvaW1wdWxzZV9qb2ludF9zZXQucnMAAFwREACGAAAADAEAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZHluYW1pY3Mvam9pbnQvbXVsdGlib2R5X2pvaW50L211bHRpYm9keV9qb2ludF9zZXQucnMAAPQREACKAAAAaQAAABsAAAD0ERAAigAAAGoAAAAvAAAA9BEQAIoAAACVAAAAHwAAAPQREACKAAAAmAAAABgAAAD0ERAAigAAAJQAAAATAAAAUGFyZW50IHJpZ2lkIGJvZHkgbm90IGZvdW5kLi9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9nZW9tZXRyeS9jb2xsaWRlcl9zZXQucnMAAADsEhAAbQAAAIAAAAANAAAA7BIQAG0AAAB9AAAAFAAAAOwSEABtAAAAdwAAABYAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZ2VvbWV0cnkvaW50ZXJhY3Rpb25fZ3JhcGgucnMAAIwTEAByAAAAgwAAAA4AAACMExAAcgAAAIMAAAAnAAAAjBMQAHIAAACCAAAAHQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9waXBlbGluZS9kZWJ1Z19yZW5kZXJfcGlwZWxpbmUvZGVidWdfcmVuZGVyX2JhY2tlbmQucnMAMBQQAIsAAAA1AAAAOAAAADAUEACLAAAANgAAADgAAAAJAAAAJAAAAAQAAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAACQAAACQAAAAEAAAAEwAAACkAAAAqAAAAKwAAACwAAAAJAAAAJAAAAAQAAAAJAAAAJAAAAAQAAAATAAAAKQAAACoAAAArAAAALAAAADAVEAAwFRAAKgAAAAkAAAAkAAAABAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAADcFBAAEwAAAFwKEAApAAAAKgAAACsAAAAsAAAAEBUQADAVEAAwFRAAKgAAADwVEAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL3BpcGVsaW5lL2RlYnVnX3JlbmRlcl9waXBlbGluZS9kZWJ1Z19yZW5kZXJfcGlwZWxpbmUucnMkFhAAjAAAAAcCAAAjAAAAJBYQAIwAAAD8AQAAIwAAAAAAAAABAAAAAgAAAAMAAAAkFhAAjAAAAK8BAAAjAAAAJBYQAIwAAACkAQAAIwAAACQWEACMAAAA0AAAAB4AAAAkFhAAjAAAANAAAAAtAAAACQAAAAwAAAAEAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAAkAAAAMAAAABAAAABQAAABNAAAATgAAAE8AAABQAAAACQAAAAwAAAAEAAAACQAAAAwAAAAEAAAAFAAAAE0AAABOAAAATwAAAFAAAAB0FxAAdBcQAE4AAAAJAAAADAAAAAQAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAAIBcQABQAAABsChAATQAAAE4AAABPAAAAUAAAAFQXEAB0FxAAdBcQAE4AAACAFxAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAPAAAAD0AAABgAAAAPwAAAGEAAABiAAAAYwAAAAkAAAAIAAAABAAAAGQAAAABAAAARXhwZWN0ZWQgIGNvbXBvbmVudHMsIGZvdW5kIHwYEAAJAAAAhRgQABMAAABhbiBhcnJheSBvZiBsZW5ndGggMwkAAAAAAAAAAQAAAGUAAABhbiBhcnJheSBvZiBsZW5ndGggNgkAAAAAAAAAAQAAAGYAAABJbnZhbGlkIEltcHVsc2VKb2ludCByZWZlcmVuY2UuIEl0IG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwaHlzaWNzIFdvcmxkLnJhcGllcjNkLy4uL3NyYy9keW5hbWljcy9pbXB1bHNlX2pvaW50X3NldC5ycwAAAEAZEAAtAAAACwAAABQAAABAGRAALQAAABYAAAAUAAAASW52YWxpZCBKb2ludCByZWZlcmVuY2UuIEl0IG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwaHlzaWNzIFdvcmxkLnJhcGllcjNkLy4uL3NyYy9keW5hbWljcy9tdWx0aWJvZHlfam9pbnRfc2V0LnJz2RkQAC8AAAAPAAAACwAAANkZEAAvAAAACwAAAB8AAADZGRAALwAAABsAAAAQAAAA2RkQAC8AAAAXAAAAHwAAAEludmFsaWQgUmlnaWRCb2R5IHJlZmVyZW5jZS4gSXQgbWF5IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBoeXNpY3MgV29ybGQucmFwaWVyM2QvLi4vc3JjL2R5bmFtaWNzL3JpZ2lkX2JvZHlfc2V0LnJzAJUaEAAqAAAAKwAAABQAAACVGhAAKgAAADYAAAAUAAAASW52YWxpZCBDb2xsaWRlciByZWZlcmVuY2UuIEl0IG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwaHlzaWNzIFdvcmxkLnJhcGllcjNkLy4uL3NyYy9nZW9tZXRyeS9jb2xsaWRlcl9zZXQucnMsGxAAKAAAABQAAAAYAAAALBsQACgAAAAgAAAAGAAAACwbEAAoAAAAaAAAAA0AAAAwLjExLjJpbnZhbGlkIGVudW0gdmFsdWUgcGFzc2VkcmFwaWVyM2QvLi4vc3JjL2R5bmFtaWNzL3JpZ2lkX2JvZHkucnMAAACjGxAAJgAAAPsBAAAyAAAATm90IHlldCBpbXBsZW1lbnRlZC5yYXBpZXIzZC8uLi9zcmMvZ2VvbWV0cnkvY29sbGlkZXIucnPwGxAAJAAAAJMAAAAiAAAA8BsQACQAAAAsAgAAEwAAAPAbEAAkAAAAawIAABMAAAByYXBpZXIzZC8uLi9zcmMvZ2VvbWV0cnkvbmFycm93X3BoYXNlLnJzRBwQACgAAADWAAAAEgAAAEQcEAAoAAAA2gAAABIAAABEHBAAKAAAAN4AAAASAAAAcmFwaWVyM2QvLi4vc3JjL2dlb21ldHJ5L3NoYXBlLnJzAAAAnBwQACEAAAAcAQAAQAAAAJwcEAAhAAAAJgEAADgAAACcHBAAIQAAACYBAAA+AAAAnBwQACEAAABuAQAAQAAAAJwcEAAhAAAAbgEAAEYAAACcHBAAIQAAAHkBAABAAAAAnBwQACEAAAB5AQAARgAAAAkAAAAAAAAAAQAAAGcAAABoAAAAaQAAAAkAAAAAAAAAAQAAAAkAAAAAAAAAAQAAAEgdEABqAAAAawAAAGwAAAAMAAAABAAAAG0AAABuAAAAbwAAAHAAAAAQAAAABAAAAHAAAAAQAAAABAAAAIQdEABxAAAAcgAAAAkAAAAEAAAABAAAAHMAAAB0AAAAdAAAAHN0cnVjdCBEZXNlcmlhbGl6YWJsZVdvcmxkIHdpdGggOSBlbGVtZW50cwAAwB0QACoAAAAAAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAgAAAAEAAAAAAwQEBAQEAgFJbnZhbGlkIHNpemUgOiBzaXplcyBtdXN0IGZpdCBpbiBhIHVzaXplICgwIHRvICkAAAAhHhAADQAAAC4eEAAiAAAAUB4QAAEAAAD/////Y2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGRlc3Ryb3llZCBhbHJlYWR5ggAAAAQAAAAEAAAAgwAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvanMtc3lzLTAuMy42MC9zcmMvbGliLnJzAAAAsB4QAFkAAADDFgAAAQAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3RjYXBhY2l0eSBvdmVyZmxvdwBUaGUgbG9vc2VuaW5nIG1hcmdpbiBtdXN0IGJlIHBvc2l0aXZlLgAAmB8QACYAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9ib3VuZGluZ192b2x1bWUvYWFiYi5ycwDIHxAAawAAACECAAAJAAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2RlZmF1bHRfcXVlcnlfZGlzcGF0Y2hlci5ycwAARSAQAHUAAAARAgAAHgAAAJIAAAAAAAAAAQAAAJIAAAAAAAAAAQAAAMwgEACTAAAAlAAAAJUAAACWAAAAlwAAAJgAAACZAAAAmgAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUARSAQAHUAAADqAQAAGQAAAEUgEAB1AAAA1wEAABkAAABFIBAAdQAAAEECAAAZAAAARSAQAHUAAABQAgAAGQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvY3Jvc3NiZWFtLWNoYW5uZWwtMC41LjYvc3JjL3dha2VyLnJzAAAAdCEQAGUAAABoAAAAKwAAAHQhEABlAAAARgAAACgAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlAHQhEABlAAAA0QAAABkAAAB0IRAAZQAAAN4AAAAdAAAAdCEQAGUAAADGAAAAGQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGUvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Nyb3NzYmVhbS1jaGFubmVsLTAuNS42L3NyYy9jaGFubmVsLnJzAIAiEABnAAAAswEAAC0AAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Nyb3NzYmVhbS1jaGFubmVsLTAuNS42L3NyYy9jb250ZXh0LnJzAPgiEABnAAAAMwAAABUAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Nyb3NzYmVhbS1jaGFubmVsLTAuNS42L3NyYy9mbGF2b3JzL2xpc3QucnNwIxAAbAAAAAUBAAA4AAAAmwAAAAgAAAAEAAAAnAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvY3Jvc3NiZWFtLWNoYW5uZWwtMC41LjYvc3JjL2ZsYXZvcnMvemVyby5yc/wjEABsAAAA4QAAABkAAAD8IxAAbAAAAOgAAAARAAAA/CMQAGwAAAAGAQAAFQAAAPwjEABsAAAABwEAACgAAAD8IxAAbAAAAAEBAAAVAAAA/CMQAGwAAAACAQAAKAAAAPwjEABsAAAA/wAAACYAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Nyb3NzYmVhbS1jaGFubmVsLTAuNS42L3NyYy9mbGF2b3JzL2FycmF5LnJzAAAA2CQQAG0AAAB4AQAAGQAAANgkEABtAAAAdgEAACoAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS92ZWNfc3RvcmFnZS5ycy9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3V0aWxzL2FycmF5LnJzAADQJRAAYgAA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aXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcGFydGl0aW9uaW5nL3FidmgvdHJhdmVyc2FsLnJzAAAoLRAAcgAAANoAAAAZAAAAKC0QAHIAAACaAAAAGQAAACgtEAByAAAATQAAABkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9jb250YWN0X21hbmlmb2xkcy9pbnRlcm5hbF9lZGdlc19maXhlci5ycwDMLRAAgwAAAG8AAAAhAAAAzC0QAIMAAABeAAAAFgAAAMwtEACDAAAAXwAAABYAAADMLRAAgwAAAIUAAAA4AAAAzC0QAIMAAACKAAAATQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX2hhbGZzcGFjZV9wZm0ucnMAAKAuEACOAAAAQAAAABQAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9jb250YWN0X21hbmlmb2xkcy9jb250YWN0X21hbmlmb2xkc190cmltZXNoX3NoYXBlLnJzAABALxAAjgAAAK8AAAARAAAAQC8QAI4AAAC1AAAAHQAAAJIAAAAkAAAABAAAAKcAAACoAAAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAArwAAALAAAACSAAAAJAAAAAQAAACfAAAAsQAAALIAAACzAAAAtAAAAJIAAAAkAAAABAAAAJIAAAAkAAAABAAAAJ8AAACxAAAAsgAAALMAAAC0AAAARDAQAEQwEACyAAAAkgAAACQAAAAEAAAAtQAAALYAAAC3AAAAuAAAALkAAAC6AAAApwAAAKgAAACpAAAAqgAAAKsAAACsAAAArQAAAK4AAACvAAAAsAAAAPAvEACfAAAA+CYQALEAAACyAAAAswAAALQAAAAkMBAARDAQAEQwEACyAAAAUDAQADMAAAA0AAAANQAAADYAAAC7AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAALwAAABAAAAAQQAAAL0AAABALxAAjgAAAGAAAAAJAAAAQC8QAI4AAADPAAAADgAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX2hlaWdodGZpZWxkX3NoYXBlLnJzAABYMRAAkgAAAHYAAAAJAAAAWDEQAJIAAACKAAAAIAAAAFgxEACSAAAAoQAAAB0AAABYMRAAkgAAAL8AAAASAAAAWDEQAJIAAADAAAAAEgAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2NvbnRhY3RfbWFuaWZvbGRzL2NvbnRhY3RfbWFuaWZvbGRzX2NvbXBvc2l0ZV9zaGFwZV9zaGFwZS5ycwAAPDIQAJYAAABJAAAACQAAAJIAAAA0AAAABAAAAL4AAAC/AAAAPDIQAJYAAABdAAAAJAAAADwyEACWAAAAegAAACEAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9jb250YWN0X21hbmlmb2xkcy9jb250YWN0X21hbmlmb2xkc19oZWlnaHRmaWVsZF9jb21wb3NpdGVfc2hhcGUucnMYMxAAnAAAAFMAAAAJAAAAGDMQAJwAAACtAAAAEgAAABgzEACcAAAArgAAABIAAACSAAAANAAAAAQAAADAAAAAwQAAABgzEACcAAAAawAAACgAAAAYMxAAnAAAAIgAAAAlAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvY29udGFjdF9tYW5pZm9sZHMvY29udGFjdF9tYW5pZm9sZHNfY29tcG9zaXRlX3NoYXBlX2NvbXBvc2l0ZV9zaGFwZS5ycxg0EACgAAAASAAAAAkAAACSAAAAOAAAAAQAAADCAAAAwwAAAJIAAAA4AAAABAAAAMQAAADFAAAAGDQQAKAAAAB2AAAALAAAABg0EACgAAAAlQAAACkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9lcGEvZXBhMy5ycwAAABA1EABlAAAAIQEAABsAAAAQNRAAZQAAAPAAAAAXAAAAEDUQAGUAAADxAAAAFwAAABA1EABlAAAA8gAAABcAAAAQNRAAZQAAAA0BAAAdAAAAEDUQAGUAAAANAQAANwAAABA1EABlAAAAEgEAAB0AAAAQNRAAZQAAABIBAAA3AAAAEDUQAGUAAAAXAQAAHQAAABA1EABlAAAAFwEAADcAAAAQNRAAZQAAABwBAAAdAAAAEDUQAGUAAAAcAQAANwAAABA1EABlAAAAowEAABoAAAAQNRAAZQAAAEQBAAAYAAAAEDUQAGUAAABYAQAAIgAAABA1EABlAAAAXQEAAA0AAAAQNRAAZQAAAF8BAAAiAAAAEDUQAGUAAABgAQAAIgAAABA1EABlAAAAYQEAACIAAAAQNRAAZQAAAG8BAAAVAAAAEDUQAGUAAACDAQAAMAAAABA1EABlAAAAgwEAACIAAAAQNRAAZQAAAJcBAAANAAAAEDUQAGUAAACYAQAADQAAABA1EABlAAAAPQEAACEAAABhc3NlcnRpb24gZmFpbGVkOiBtaW5fYm91bmQgPT0gbWluX2JvdW5kL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvZ2prL2dqay5yczA3EABkAAAAjAAAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9zaGFwZS9oZWlnaHRmaWVsZDMucnMAAACkNxAAaQAAANgAAAARAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvcG9seWdvbmFsX2ZlYXR1cmUzZC5ycyA4EABwAAAAvgAAABYAAAAgOBAAcAAAABkBAAAeAAAAIDgQAHAAAAAbAQAAOgAAACA4EABwAAAAHgEAACkAAAAgOBAAcAAAAEUBAAAeAAAAIDgQAHAAAABHAQAAOgAAACA4EABwAAAASgEAACkAAAAgOBAAcAAAAG4BAAARAAAAIDgQAHAAAABvAQAAEQAAACA4EABwAAAAdAEAABUAAAAgOBAAcAAAAHUBAAAVAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvdHJpbWVzaC5yc0A5EABkAAAAFQQAABMAAABAORAAZAAAABcEAAANAAAAQDkQAGQAAAAYBAAADQAAAEA5EABkAAAAGQQAAA0AAABpbmRleCBvdXQgb2YgYm91bmRzAP//////////L1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9pbmRleG1hcC0xLjkuMS9zcmMvbWFwL2NvcmUucnMAADoQAF8AAAAqAAAAIwAAAGluZGV4IG5vdCBmb3VuZAAAOhAAXwAAADUAAAARAAAAADoQAF8AAACrAgAADgAAAAA6EABfAAAAygEAACIAAAAAOhAAXwAAANABAAAeAAAAYXNzZXJ0aW9uIGZhaWxlZDogaW5kaWNlcy5jYXBhY2l0eSgpIC0gaW5kaWNlcy5sZW4oKSA+PSBlbnRyaWVzLmxlbigpL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9pbmRleG1hcC0xLjkuMS9zcmMvbWFwL2NvcmUvcmF3LnJzBTsQAGMAAAAQAAAABQAAAAU7EABjAAAAgwAAAAoAAAAAOhAAXwAAACIAAAAPAAAATWF0cml4IHNsaWNpbmcgb3V0IG9mIGJvdW5kcy4vVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9tYXRyaXhfdmlldy5ycwAAALU7EABoAAAAFgEAAAkAAAC1OxAAaAAAABoBAAAJAAAAUm93cyByYW5nZSBwYWlyOiB0aGUgcmFuZ2VzIG11c3Qgbm90IG92ZXJsYXAuAAAAtTsQAGgAAAASAwAABQAAAFJvd3MgcmFuZ2UgcGFpcjogaW5kZXggb3V0IG9mIHJhbmdlLkRhdGEgc3RvcmFnZSBidWZmZXIgZGltZW5zaW9uIG1pc21hdGNoLgBoJRAAaAAAAFQAAAAJAAAAQ29tcG9uZW50d2lzZSBtdWwvZGl2OiBtaXNtYXRjaGVkIG1hdHJpeCBkaW1lbnNpb25zLtw8EAA0AAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9uYWxnZWJyYS0wLjMyLjEvc3JjL2Jhc2UvY29tcG9uZW50d2lzZS5ycwAAGD0QAGoAAACWAAAABQAAAE1hdHJpeCB2aWV3OiBpbnB1dCBkYXRhIGJ1ZmZlciB0b28gc21hbGwuL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9uYWxnZWJyYS0wLjMyLjEvc3JjL2Jhc2UvY29uc3RydWN0aW9uX3ZpZXcucnMAvT0QAG4AAAAwAAAACQAAAE1hdHJpeCBpbmRleCBvdXQgb2YgYm91bmRzLk1hdHJpeCBhZGRpdGlvbi9zdWJ0cmFjdGlvbiBkaW1lbnNpb25zIG1pc21hdGNoLgBXPhAAMAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4zMi4xL3NyYy9iYXNlL29wcy5yc5A+EABgAAAAaAEAAAEAAABnZW1tOiBkaW1lbnNpb25zIG1pc21hdGNoIGZvciBhZGRpdGlvbi4AAD8QACcAAABHZW12OiBkaW1lbnNpb25zIG1pc21hdGNoLiBhbmQgOiBsZWZ0IHJvd3MgIT0gcmlnaHQgcm93cy5NYXRyaXggbXVsdGlwbGljYXRpb24gb3V0cHV0IGRpbWVuc2lvbnMgbWlzbWF0Y2ggOiBsZWZ0IGNvbHMgIT0gcmlnaHQgcm93cy5pPxAAMQAAAEo/EAAFAAAAmj8QABoAAACQPhAAYAAAANUCAAAJAAAAQXhweTogbWlzbWF0Y2hlZCB2ZWN0b3Igc2hhcGVzLgDcPxAAHwAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4zMi4xL3NyYy9iYXNlL2JsYXMucnMAAAAEQBAAYQAAAEIBAAAJAAAABEAQAGEAAAAIAgAACQAAAERvdCBwcm9kdWN0IGRpbWVuc2lvbnMgbWlzbWF0Y2ggZm9yIHNoYXBlcyAAiEAQACsAAABKPxAABQAAAE8/EAAaAAAABEAQAGEAAAAgAAAACQAAAARAEABhAAAAGAMAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9tYXRyaXgucnNNYXRyaXggZWxlbWVudHMgc3dhcCBpbmRleCBvdXQgb2YgYm91bmRzLuxAEABjAAAAtgQAAAkAAADsQBAAYwAAALoEAAAJAAAAVW5hYmxlIHRvIGNvcHkgZnJvbSBhIG1hdHJpeCB3aXRoIGEgZGlmZmVyZW50IHNoYXBlLuxAEABjAAAA4wQAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9lZGl0aW9uLnJzYXNzZXJ0aW9uIGZhaWxlZDogaXJvdzEgPCBzZWxmLm5yb3dzKCkgJiYgaXJvdzIgPCBzZWxmLm5yb3dzKCkAANxBEABkAAAAOAEAAAkAAABJbmRleCBvdXQgb2YgYm91bmRzLi9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvbmFsZ2VicmEtMC4zMi4xL3NyYy9iYXNlL2luZGV4aW5nLnJzAAAApEIQAGUAAABSAQAACQAAAE1heGltdW0gbnVtYmVyIG9mIHBlcm11dGF0aW9ucyBleGNlZWRlZC4vVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvbGluYWxnL3Blcm11dGF0aW9uX3NlcXVlbmNlLnJzAERDEABzAAAAVQAAAA0AAABEQxAAcwAAAFkAAAANAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9uYWxnZWJyYS0wLjMyLjEvc3JjL2xpbmFsZy9sdS5ycwAAANhDEABhAAAAgAEAACsAAABMVSBzb2x2ZSBtYXRyaXggZGltZW5zaW9uIG1pc21hdGNoLgBMRBAAIwAAANhDEABhAAAA9gAAAAkAAABMVSBzb2x2ZTogdW5hYmxlIHRvIHNvbHZlIGEgbm9uLXNxdWFyZSBzeXN0ZW0uAADYQxAAYQAAAPsAAAAJAAAA2EMQAGEAAABoAAAAGAAAAJIAAAAIAAAABAAAAMYAAAACAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2NvbnRyb2wvY2hhcmFjdGVyX2NvbnRyb2xsZXIucnPsRBAAdAAAAMsCAAAdAAAA7EQQAHQAAADKAgAAHwAAAOxEEAB0AAAAuwIAAC8AAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZGF0YS9hcmVuYS5ycwAAkEUQAGIAAAAKAQAAHgAAAGNvcnJ1cHQgZnJlZSBsaXN0AAAABEYQABEAAACQRRAAYgAAAAsBAAArAAAAaW5zZXJ0aW5nIHdpbGwgYWx3YXlzIHN1Y2NlZWQgYWZ0ZXIgcmVzZXJ2aW5nIGFkZGl0aW9uYWwgc3BhY2UAAJIAAAAAAAAAAQAAAMcAAACQRRAAYgAAAEoBAAAJAAAATm8gZWxlbWVudCBhdCBpbmRleC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9kYXRhL2NvYXJlbmEucnMAo0YQAGQAAABOAAAACQAAAENhbm5vdCBpbmRleCB0aGUgc2FtZSBvYmplY3QgdHdpY2UuABhHEAAjAAAAo0YQAGQAAABwAAAACQAAAKNGEABkAAAAeAAAACsAAACjRhAAZAAAAHkAAAATAAAAo0YQAGQAAAB5AAAAIgAAAKNGEABkAAAAgQAAACsAAACjRhAAZAAAAIIAAAATAAAAo0YQAGQAAACCAAAAKwAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9kYXRhL2dyYXBoLnJzAAC0RxAAYgAAAJIAAAAYAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5ub2Rlcy5sZW4oKSAhPSBjcmF0ZTo6SU5WQUxJRF9VU0laRQAAtEcQAGIAAACzAAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuZWRnZXMubGVuKCkgIT0gY3JhdGU6OklOVkFMSURfVVNJWkUAALRHEABiAAAA3AAAAAkAAABHcmFwaDo6YWRkX2VkZ2U6IG5vZGUgaW5kaWNlcyBvdXQgb2YgYm91bmRzAMBIEAArAAAAtEcQAGIAAADkAAAAGwAAAAABL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNz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X3NldC5ycwAAbFMQAIoAAADKAAAAJQAAAGxTEACKAAAAywAAACcAAABsUxAAigAAAMYAAAAdAAAAbFMQAIoAAACzAAAAFQAAAGxTEACKAAAAsQAAACEAAABsUxAAigAAALAAAAAoAAAAbFMQAIoAAACtAAAAHQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9keW5hbWljcy9qb2ludC9tdWx0aWJvZHlfam9pbnQvbXVsdGlib2R5X2xpbmsucnMAAABoVBAAhQAAAHEAAAAZAAAASW50ZXJuYWwgZXJyb3I6IGNpcmN1bGFyIHJpZ2lkIGJvZHkgZGVwZW5kZW5jeS4AAFUQAC8AAABoVBAAhQAAAHMAAAAJAAAASW52YWxpZCBwYXJlbnQgaW5kZXguAAAASFUQABUAAABoVBAAhQAAAHcAAAAJAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNzL2pvaW50L211bHRpYm9keV9qb2ludC9tdWx0aWJvZHlfam9pbnQucnMAAHhVEACGAAAAVgAAACMAAAB4VRAAhgAAAHcAAAASAAAAeFUQAIYAAABzAAAANwAAAG5vdCB5ZXQgaW1wbGVtZW50ZWQAeFUQAIYAAABvAAAAEQAAAHhVEACGAAAAYQAAAC4AAAB4VRAAhgAAAGEAAAARAAAAeFUQAIYAAACpAAAAEgAAAHhVEACGAAAAoQAAABEAAAB4VRAAhgAAALYAAAAxAAAAeFUQAIYAAADSAAAAEgAAAHhVEACGAAAAzwAAADcAAAB4VRAAhgAAAMsAAAARAAAAeFUQAIYAAADHAAAALgAAAHhVEACGAAAAxwAAABUAAAB4VRAAhgAAAOAAAAARAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNzL2pvaW50L211bHRpYm9keV9qb2ludC91bml0X211bHRpYm9keV9qb2ludC5ycwAEVxAAiwAAACEAAAAXAAAABFcQAIsAAAAlAAAABQAAAARXEACLAAAAJgAAAAUAAAAEVxAAiwAAAEEAAAAJAAAABFcQAIsAAABiAAAABQAAAARXEACLAAAAYwAAAAUAAAAEVxAAiwAAAHgAAAAQAAAABFcQAIsAAACLAAAACQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9keW5hbWljcy9yaWdpZF9ib2R5X2NvbXBvbmVudHMucnMAABBYEAB2AAAApgMAACgAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZHluYW1pY3Mvc29sdmVyL2NhdGVnb3JpemF0aW9uLnJzAACYWBAAdgAAAA8AAAAZAAAAmFgQAHYAAAA0AAAAFgAAAJhYEAB2AAAANQAAABQAAACYWBAAdgAAADYAAAAUAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNzL3NvbHZlci9nZW5lcmljX3ZlbG9jaXR5X2NvbnN0cmFpbnQucnMAUFkQAIMAAAAsAAAAFAAAAFBZEACDAAAALQAAABQAAABQWRAAgwAAACoAAAAXAAAAUFkQAIMAAAApAAAAFwAAAFBZEACDAAAANQAAABgAAABQWRAAgwAAADgAAAAYAAAAUFkQAIMAAABJAQAAIgAAAFBZEACDAAAATwEAACIAAABQWRAAgwAAAFQBAAAdAAAAUFkQAIMAAABrAQAADQAAAFBZEACDAAAAbwEAAA0AAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZHluYW1pY3Mvc29sdmVyL2dlbmVyaWNfdmVsb2Np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AARkEAB7AAAAgQEAACcAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZHluYW1pY3Mvc29sdmVyL3ZlbG9jaXR5X2dyb3VuZF9jb25zdHJhaW50LnJzAACUZRAAggAAADYAAAAYAAAAlGUQAIIAAAA8AAAAFAAAAJRlEACCAAAAcwAAABEAAACUZRAAggAAADwAAAAbAAAAlGUQAIIAAADtAAAAHgAAAJRlEACCAAAA8QAAABIAAACUZRAAggAAAPwAAAAJAAAAlGUQAIIAAAABAQAAHQAAAJRlEACCAAAABAEAAB4AAACUZRAAggAAAAUBAAAnAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL2R5bmFtaWNzL3NvbHZlci92ZWxvY2l0eV9zb2x2ZXIucnMAuGYQAHcAAAA7AAAAGwAAALhmEAB3AAAAPAAAACEAAAC4ZhAAdwAAADAAAAAhAAAAuGYQAHcAAACWAAAAHAAAALhmEAB3AAAAhQAAACEAAAC4ZhAAdwAAAOAAAAAcAAAAuGYQAHcAAADUAAAAIQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9keW5hbWljcy9yaWdpZF9ib2R5X3NldC5ycwCgZxAAbwAAALMAAAAOAAAAoGcQAG8AAADdAAAAOQAAAJIAAAAAAAAAAQAAAMwgEACTAAAAlAAAAJUAAACWAAAAlwAAAJgAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZ2VvbWV0cnkvYnJvYWRfcGhhc2VfbXVsdGlfc2FwL2Jyb2FkX3BoYXNlLnJzAABYaBAAggAAAKUAAAAaAAAAWGgQAIIAAACmAAAAGgAAAFhoEACCAAAAxgAA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AG0AAAAhAwAAGAAAAGByEABtAAAAMQMAACAAAABgchAAbQAAADUDAAAgAAAAQSBjb250YWN0IG1hbmlmb2xkIGNhbm5vdCBjb250YWluIG1vcmUgdGhhbiAyNTUgY29udGFjdHMgY3VycmVudGx5LgDAcxAAQwAAAGByEABtAAAArAMAABkAAABgchAAbQAAAJcDAAAfAAAAYHIQAG0AAACbAwAAHwAAAGByEABtAAAA+gMAACAAAABgchAAbQAAAAsEAAAoAAAAYHIQAG0AAAAXBAAAKAAAAGByEABtAAAAKwQAABkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvZ2VvbWV0cnkvY29sbGlkZXJfc2V0LnJzAAAAfHQQAG0AAACsAAAAHQAAAHx0EABtAAAAFwEAAA4AAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3JhcGllcjNkLTAuMTcuMi9zcmMvcGlwZWxpbmUvcGh5c2ljc19waXBlbGluZS5ycwAAAAx1EABxAAAA6wAAABEAAAAMdRAAcQAAAPIAAAAWAAAADHUQAHEAAAD0AAAAFgAAAAx1EABxAAAALwEAABgAAAAMdRAAcQAAADABAAAYAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL3BpcGVsaW5lL3F1ZXJ5X3BpcGVsaW5lLnJzANB1EABvAAAAXgEAABEAAADQdRAAbwAAAJEBAAArAAAA0HUQAG8AAACGAQAANAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcmFwaWVyM2QtMC4xNy4yL3NyYy9waXBlbGluZS91c2VyX2NoYW5nZXMucnMAAABwdhAAbQAAABQAAAAmAAAAVW5hYmxlIHRvIGluZGV4IHRoZSBzYW1lIGVsZW1lbnQgdHdpY2UuAPB2EAAnAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9yYXBpZXIzZC0wLjE3LjIvc3JjL3V0aWxzLnJzAAAAIHcQAF0AAAAPAwAACQAAAJBCEAAUAAAAIHcQAF0AAAAQAwAACQAAAEtpbmVtYXRpY1ZlbG9jaXR5QmFzZWRLaW5lbWF0aWNQb3NpdGlvbkJhc2VkRml4ZWREeW5hbWljAQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc2ltYmEtMC44LjAvc3JjL3NpbWQvYXV0b19zaW1kX2ltcGwucnMA5HcQAGcAAAC/BQAAAQAAAM8AAAAIAAAABAAAANAAAADRAAAA0gAAAEgAAAAEAAAA0wAAAM8AAAAkAAAABAAAANQAAADVAAAAYAAAAAQAAADWAAAAzwAAAAwAAAAEAAAA1wAAANgAAAAgAAAABAAAANkAAADPAAAAHAAAAAQAAADaAAAAzwAAAAQAAAAEAAAA2wAAAM8AAAAMAAAABAAAANwAAADPAAAAGAAAAAQAAADdAAAA3gAAACAAAAAEAAAA3wAAAM8AAAAMAAAABAAAAOAAAADhAAAAUAAAAAQAAADiAAAA4wAAAGAAAAAEAAAA5AAAAOUAAADEAAAABAAAAOYAAADPAAAAEAAAAAQAAADnAAAA6AAAAGQAAAAEAAAA6QAAAOoAAABYAAAABAAAAOsAAADsAAAAeAAAAAQAAADtAAAAzwAAACgAAAAEAAAA7gAAAM8AAAAIAAAABAAAAO8AAADwAAAASAAAAAQAAADxAAAAzwAAAAwAAAAEAAAA8gAAAM8AAAAIAAAABAAAAPMAAABhc3NlcnRpb24gZmFpbGVkOiBtaW4gPD0gbWF4L3J1c3RjLzA0NjhhMDBhZTNmZDZlZjFhNmEwZjllYWY2MzdkN2FhOWU2MDRhY2MvbGlicmFyeS9jb3JlL3NyYy9jbXAucnMA/HkQAEcAAABfAwAACQAAAM8AAAAEAAAABAAAAPQAAADPAAAABAAAAAQAAAD1AAAAzwAAAAQAAAAEAAAA9gAAAGFzc2VydGlvbiBmYWlsZWQ6IG1pZCA8PSBzZWxmLmxlbigpY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAAAAAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAAAAAAP//////////L1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9pbmRleG1hcC0xLjkuMS9zcmMvbWFwL2NvcmUucnMAEHsQAF8AAAAqAAAAIwAAABB7EABfAAAAqwIAAA4AAAAQexAAXwAAACIAAAAPAAAATWF0cml4IHNsaWNpbmcgb3V0IG9mIGJvdW5kcy4vVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9tYXRyaXhfdmlldy5ycwAAAL17EABoAAAAGgEAAAkAAABNYXRyaXggaW5kZXggb3V0IG9mIGJvdW5kcy4vVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9ibGFzLnJzRG90IHByb2R1Y3QgZGltZW5zaW9ucyBtaXNtYXRjaCBmb3Igc2hhcGVzICBhbmQgOiBsZWZ0IHJvd3MgIT0gcmlnaHQgcm93cy4AALR8EAArAAAA33wQAAUAAADkfBAAGgAAAFN8EABhAAAAIAAAAAkAAAAAAAAAAQAAAAAAAAACAAAASW5kZXggb3V0IG9mIGJvdW5kcy4vVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvYmFzZS9pbmRleGluZy5ycwAAAEx9EABlAAAAUgEAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL25hbGdlYnJhLTAuMzIuMS9zcmMvbGluYWxnL3N5bW1ldHJpY19laWdlbi5ycwAAxH0QAG4AAACOAAAAFQAAAMR9EABuAAAAkAAAAB0AAADEfRAAbgAAAJEAAAAdAAAAxH0QAG4AAACUAAAAFQAAAMR9EABuAAAAoQAAACMAAADEfRAAbgAAALAAAAAwAAAAxH0QAG4AAADEAAAAFQAAAMR9EABuAAAAxQAAABUAAADEfRAAbgAAAMkAAAAfAAAAxH0QAG4AAAD+AAAAEAAAAMR9EABuAAAAQAAAAAkAAADEfRAAbgAAAFQAAAAbAAAAzwAAAAgAAAAEAAAA9wAAAM8AAAAEAAAABAAAAPgAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9ib3VuZGluZ192b2x1bWUvYWFiYi5yc1RoZSBsb29zZW5pbmcgbWFyZ2luIG11c3QgYmUgcG9zaXRpdmUuAAAAf38QACYAAAAUfxAAawAAACECAAAJAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvYm91bmRpbmdfdm9sdW1lL2FhYmJfdXRpbHMucnNQb2ludCBjbG91ZCBBYWJiIGNvbnN0cnVjdGlvbjogdGhlIGlucHV0IGl0ZXJhdG9yIHNob3VsZCB5aWVsZCBhdCBsZWFzdCBvbmUgcG9pbnQuAMB/EABxAAAAQAAAAA4AAADAfxAAcQAAAFcAAAAOAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvYm91bmRpbmdfdm9sdW1lL2JvdW5kaW5nX3NwaGVyZS5ycwAApIAQAHYAAAB6AAAACQAAAHR3byBhcnJheXMgY29udGFpbmluZyBhdCBsZWFzdCAgZmxvYXRzAAAsgRAAHwAAAEuBEAAHAAAAGAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL21hc3NfcHJvcGVydGllcy9tYXNzX3Byb3BlcnRpZXNfdHJpbWVzaDNkLnJzaIEQAIAAAAAWAAAAFwAAAGiBEACAAAAAFwAAABcAAABogRAAgAAAABgAAAAXAAAAaIEQAIAAAAClAAAAEgAAAGiBEACAAAAApgAAABIAAABogRAAgAAAAKcAAAASAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcGFydGl0aW9uaW5nL3FidmgvdXRpbHMucnMAAEiCEABuAAAAEgAAABEAAABIghAAbgAAABMAAAAWAAAASIIQAG4AAAAVAAAADAAAAEiCEABuAAAAFwAAABUAAABIghAAbgAAACUAAAARAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcGFydGl0aW9uaW5nL3FidmgvYnVpbGQucnMAAAiDEABuAAAARAEAAAkAAAAIgxAAbgAAACwBAAANAAAACIMQAG4AAAAtAQAADQAAAAiDEABuAAAAWwEAACEAAAAIgxAAbgAAAF0BAAARAAAACIMQAG4AAAB5AQAAGgAAAAiDEABuAAAAgQEAACUAAAAIgxAAbgAAALMBAAAJAAAACIMQAG4AAAC1AQAACQAAAAiDEABuAAAAtwEAAAkAAAAIgxAAbgAAALsBAAAXAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcGFydGl0aW9uaW5nL3FidmgvdHJhdmVyc2FsLnJzAAAohBAAcgAAAE0AAAAZAAAAKIQQAHIAAACaAAAAGQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2NsaXAvY2xpcF9hYWJiX2xpbmUucnO8hBAAcAAAAI0AAAANAAAAvIQQAHAAAACbAAAADQAAAFRoZSBwcm94aW1pdHkgbWFyZ2luIG11c3QgYmUgcG9zaXRpdmUgb3IgbnVsbC4AAEyFEAAuAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfYmFsbF9iYWxsLnJzhIUQAIQAAAAPAAAABQAAAFRoZSBjb21wb3NpdGUgc2hhcGUgbXVzdCBub3QgYmUgZW1wdHkuL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfY29tcG9zaXRlX3NoYXBlX3NoYXBlLnJzAAA+hhAAkAAAABkAAAAFAAAAPoYQAJAAAACBAAAAIQAAAD6GEACQAAAAggAAACEAAAA+hhAAkAAAAIMAAAAhAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZS9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2Nsb3Nlc3RfcG9pbnRzL2Nsb3Nlc3RfcG9pbnRzX2N1Ym9pZF9jdWJvaWQucnM4hxAAiAAAAFIAAAAFAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfY3Vib2lkX3RyaWFuZ2xlLnJzAADQhxAAigAAAE0AAAAFAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvY2xvc2VzdF9wb2ludHMvY2xvc2VzdF9wb2ludHNfaGFsZnNwYWNlX3N1cHBvcnRfbWFwLnJzbIgQAJAAAAANAAAABQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L2Nsb3Nlc3RfcG9pbnRzL2Nsb3Nlc3RfcG9pbnRzX3N1cHBvcnRfbWFwX3N1cHBvcnRfbWFwLnJzAAAMiRAAkgAAACAAAAAkAAAAzwAAABgAAAAEAAAA+QAAAPoAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9jb250YWN0L2NvbnRhY3Rfc3VwcG9ydF9tYXBfc3VwcG9ydF9tYXAucnPEiRAAhAAAAB4AAAAkAAAA2AAAACAAAAAEAAAA2AAAACAAAAAEAAAA2QAAAPsAAAD8AAAA/QAAAP4AAABYihAAWIoQAPwAAAD/AAAAAAEAAN4AAAAgAAAABAAAAN4AAAAgAAAABAAAAN8AAAABAQAAAgEAAAMBAAAEAQAAmIoQAJiKEAACAQAABQEAAAYBAADwAAAASAAAAAQAAADwAAAASAAAAAQAAADxAAAABwEAAAgBAAAJAQAACgEAANiKEADYihAACAEAAAsBAAAMAQAA0gAAAEgAAAAEAAAA0gAAAEgAAAAEAAAA0wAAAA0BAAAOAQAADwEAABABAAAYixAAGIsQAA4BAAARAQAAEgEAAOoAAABYAAAABAAAAOoAAABYAAAABAAAAOsAAAATAQAAFAEAABUBAAAWAQAAWIsQAFiLEAAUAQAAFwEAABgBAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9kaXN0YW5jZS9kaXN0YW5jZV9jb21wb3NpdGVfc2hhcGVfc2hhcGUucnOYixAAhAAAABUAAAAFAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvZGlzdGFuY2UvZGlzdGFuY2Vfc3VwcG9ydF9tYXBfc3VwcG9ydF9tYXAucnMAACyMEACGAAAANAAAACQAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9lcGEvZXBhMy5ycwAAAMSMEABlAAAARgAAAA4AAADEjBAAZQAAAEcAAAAOAAAAxIwQAGUAAABIAAAADgAAAMSMEABlAAAAXgAAAA0AAADEjBAAZQAAAF8AAAANAAAAxIwQAGUAAABgAAAADQAAAMSMEABlAAAAbgAAAA0AAADEjBAAZQAAAG8AAAATAAAAxIwQAGUAAABwAAAAEwAAAMSMEABlAAAAgQAAAA0AAADEjBAAZQAAAIcAAAAcAAAAxIwQAGUAAACHAAAAEwAAAMSMEABlAAAAiAAAABMAAADEjBAAZQAAAIkAAAATAAAAxIwQAGUAAACKAAAAEwAAAMSMEABlAAAAIQEAABsAAADEjBAAZQAAAPAAAAAXAAAAxIwQAGUAAADxAAAAFwAAAMSMEABlAAAA8gAAABcAAADEjBAAZQAAAA0BAAAdAAAAxIwQAGUAAAANAQAANwAAAMSMEABlAAAAEgEAAB0AAADEjBAAZQAAABIBAAA3AAAAxIwQAGUAAAAXAQAAHQAAAMSMEABlAAAAFwEAADcAAADEjBAAZQAAABwBAAAdAAAAxIwQAGUAAAAcAQAANwAAAMSMEABlAAAAowEAABoAAADEjBAAZQAAAEQBAAAYAAAAxIwQAGUAAABYAQAAIgAAAMSMEABlAAAAXQEAAA0AAADEjBAAZQAAAF8BAAAiAAAAxIwQAGUAAABgAQAAIgAAAMSMEABlAAAAYQEAACIAAADEjBAAZQAAAG8BAAAVAAAAxIwQAGUAAACDAQAAMAAAAMSMEABlAAAAgwEAACIAAADEjBAAZQAAAJcBAAANAAAAxIwQAGUAAACYAQAADQAAAMSMEABlAAAAPQEAACEAAADEjBAAZQAAAKkBAAANAAAAxIwQAGUAAACyAQAAHAAAAMSMEABlAAAAtgEAABUAAADEjBAAZQAAALgBAAAVAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvcXVlcnkvZ2prL2dqay5yc+yPEABkAAAAQwAAAA4AAABhc3NlcnRpb24gZmFpbGVkOiBtaW5fYm91bmQgPT0gbWluX2JvdW5k7I8QAGQAAACMAAAACQAAAOyPEABkAAAATwEAAAkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9namsvdm9yb25vaV9zaW1wbGV4My5ycwAAAKiQEABxAAAAJwAAABcAAACokBAAcQAAAFAAAAASAAAAOH0QABQAAACokBAAcQAAAFsAAAAJAAAAqJAQAHEAAABgAAAACQAAAKiQEABxAAAAYQAAAAoAAACokBAAcQAAAGcAAAAJAAAAqJAQAHEAAABtAAAACgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuZGltID09IDMAqJAQAHEAAAC8AAAADQAAAKiQEABxAAAAEQEAAB4AAACokBAAcQAAAOgAAAAeAAAAqJAQAHEAAACOAAAAFgAAAKiQEABxAAAAXwEAABQAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9pbnRlcnNlY3Rpb25fdGVzdC9pbnRlcnNlY3Rpb25fdGVzdF9zdXBwb3J0X21hcF9zdXBwb3J0X21hcC5ycwSSEACYAAAAOQAAACkAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9ub25saW5lYXJfdGltZV9vZl9pbXBhY3Qvbm9ubGluZWFyX3RpbWVfb2ZfaW1wYWN0X2NvbXBvc2l0ZV9zaGFwZV9zaGFwZS5yc88AAAAEAAAABAAAABkBAAAaAQAAGwEAABwBAAAdAQAAHgEAAB8BAAAgAQAAIQEAACIBAADPAAAABAAAAAQAAADbAAAAIwEAACQBAAAlAQAAJgEAAM8AAAAEAAAABAAAAM8AAAAEAAAABAAAANsAAAAjAQAAJAEAACUBAAAmAQAApJMQAKSTEAAkAQAAzwAAAAQAAAAEAAAAJwEAACgBAAApAQAAKgEAACsBAAAsAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAAFCTEADbAAAA0HgQACMBAAAkAQAAJQEAACYBAACEkxAApJMQAKSTEAAkAQAAsJMQAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA9AAAANwEAADgBAAA5AQAAOgEAADsBAACskhAApAAAAMQAAAAVAAAArJIQAKQAAACcAAAAKgAAAKySEACkAAAAvQAAACEAAACskhAApAAAAL4AAAAhAAAArJIQAKQAAAC/AAAAIQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L25vbmxpbmVhcl90aW1lX29mX2ltcGFjdC9ub25saW5lYXJfdGltZV9vZl9pbXBhY3Rfc3VwcG9ydF9tYXBfc3VwcG9ydF9tYXAucnMAAOiUEACmAAAAyQAAACgAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9xdWVyeS9wb2ludC9wb2ludF9jb21wb3NpdGVfc2hhcGUucnOglRAAeAAAACMAAAAlAAAAoJUQAHgAAABIAAAAJgAAAKCVEAB4AAAAcAAAAAkAAACglRAAeAAAAI8AAAAJAAAAoJUQAHgAAACdAAAACQAAAKCVEAB4AAAAuwAAACMAAACglRAAeAAAAL4AAAAlAAAAoJUQAHgAAAC5AAAAIwAAAGFzc2VydGlvbiBmYWlsZWQ6IHNxbmFiICE9IDAuMC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L3BvaW50L3BvaW50X3NlZ21lbnQucnMAALaWEABwAAAASAAAAA0AAABhc3NlcnRpb24gZmFpbGVkOiBkZW5vbSAhPSBfMC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3F1ZXJ5L3BvaW50L3BvaW50X3RldHJhaGVkcm9uLnJzAAAAVZcQAHQAAAAfAQAAFQAAAM8AAAAkAAAABAAAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAADPAAAAJAAAAAQAAADUAAAARgEAAEcBAABIAQAASQEAAM8AAAAkAAAABAAAAM8AAAAkAAAABAAAANQAAABGAQAARwEAAEgBAABJAQAAMJgQADCYEABHAQAAzwAAACQAAAAEAAAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAPAEAAD0BAAA+AQAAPwEAAEABAABBAQAAQgEAAEMBAABEAQAARQEAANyXEADUAAAAgHgQAEYBAABHAQAASAEAAEkBAAAQmBAAMJgQADCYEABHAQAAPJgQADMAAAA0AAAANQAAADYAAABQAQAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAADgBAABAAAAAQQAAAFEBAADPAAAAOAAAAAQAAABSAQAAUwEAAM8AAAAgAAAABAAAAFQBAABVAQAAzwAAACwAAAAEAAAAVgEAAFcBAADPAAAAFAAAAAQAAABYAQAAWQEAAM8AAAAUAAAABAAAAFoBAABbAQAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvY3Vib2lkLnJzAIiZEABjAAAAqgAAABIAAACImRAAYwAAAMAAAAASAAAAiJkQAGMAAAC8AAAAEgAAAIiZEABjAAAAuAAAABIAAACImRAAYwAAAB0BAAAVAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvcG9seWxpbmUucnMAAAA8mhAAZQAAACAAAAAeAAAAPJoQAGUAAAAgAAAAOQAAADyaEABlAAAATwAAABMAAAA8mhAAZQAAAFEAAAANAAAAPJoQAGUAAABSAAAADQAAAM8AAAAYAAAABAAAAFwBAABdAQAAXgEAAF8BAABgAQAAYQEAAGIBAABjAQAAZAEAAGUBAADPAAAAGAAAAAQAAADdAAAAZgEAAGcBAABoAQAAaQEAAM8AAAAYAAAABAAAAM8AAAAYAAAABAAAAN0AAABmAQAAZwEAAGgBAABpAQAASJsQAEibEABnAQAAzwAAABgAAAAEAAAAagEAAGsBAABsAQAAbQEAAG4BAABvAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAPSaEADdAAAA8HgQAGYBAABnAQAAaAEAAGkBAAAomxAASJsQAEibEABnAQAAVJsQAHABAABxAQAAcgEAAHMBAAB0AQAAOAAAAHUBAAB2AQAAOwAAADwAAAA9AAAAdwEAADgBAAB4AQAAeQEAAHoBAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9zaGFwZS9zZWdtZW50LnJzPJwQAGQAAAAqAAAAMgAAAGV4cGxpY2l0IHBhbmljAAA8nBAAZAAAAJkAAAASAAAAzwAAAAQAAAAEAAAAewEAAHwBAAB9AQAAfgEAAM8AAAAMAAAABAAAAH8BAACAAQAAgQEAAIIBAACDAQAAhAEAAIUBAACGAQAAhwEAAIgBAADPAAAADAAAAAQAAADgAAAAiQEAAIoBAACLAQAAjAEAAM8AAAAMAAAABAAAAOAAAACJAQAAigEAAIsBAACMAQAAuLUQALi1EACKAQAAzwAAAAwAAAAEAAAAjQEAAI4BAACPAQAAkAEAAJEBAACSAQAAfwEAAIABAACBAQAAggEAAIMBAACEAQAAhQEAAIYBAACHAQAAiAEAAOycEADgAAAAEHkQAIkBAACKAQAAiwEAAIwBAAAgnRAAuLUQALi1EACKAQAAQJ0QAFcAAABYAAAAWQAAAFoAAACTAQAAXAAAAF0AAABeAAAAXwAAADwAAAA9AAAAYAAAADgBAABhAAAAYgAAAJQBAADPAAAADAAAAAQAAACVAQAAlgEAAJcBAACXAQAAzwAAAAwAAAAEAAAAlQEAAJYBAACXAQAAlwEAAJgBAACZAQAAzwAAABwAAAAEAAAAmgEAAJsBAACcAQAAnQEAAJ4BAACfAQAAoAEAAKEBAACiAQAAowEAAM8AAAAcAAAABAAAANoAAACkAQAApQEAAKYBAACnAQAAzwAAABwAAAAEAAAAzwAAABwAAAAEAAAA2gAAAKQBAAClAQAApgEAAKcBAAC8nhAAvJ4QAKUBAADPAAAAHAAAAAQAAACoAQAAqQEAAKoBAACrAQAArAEAAK0BAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAAaJ4QANoAAADAeBAApAEAAKUBAACmAQAApwEAAJyeEAC8nhAAvJ4QAKUBAADInhAArgEAAK8BAACwAQAAsQEAALIBAACzAQAAtAEAALUBAAC2AQAAPAAAAD0AAAC3AQAAOAEAALgBAAC5AQAAugEAAM8AAAAcAAAABAAAALsBAAC8AQAAvQEAAL4BAADPAAAAGAAAAAQAAAC/AQAAwAEAAMEBAADCAQAAwwEAAJkBAADPAAAAJAAAAAQAAADEAQAAxQEAAMYBAADHAQAAzwAAACQAAAAEAAAAxAEAAMUBAADGAQAAxwEAAMgBAACZAQAAzwAAABgAAAAEAAAAvwEAAMABAADBAQAAwgEAAOwAAAB4AAAABAAAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAA0QEAANIBAADsAAAAeAAAAAQAAADtAAAA0wEAANQBAADVAQAA1gEAAOwAAAB4AAAABAAAAOwAAAB4AAAABAAAAO0AAADTAQAA1AEAANUBAADWAQAAoKAQAKCgEADUAQAA7AAAAHgAAAAEAAAA1wEAANgBAADZAQAA2gEAANsBAADcAQAAyQEAAMoBAADLAQAAzAEAAM0BAADOAQAAzwEAANABAADRAQAA0gEAAEygEADtAAAAgHkQANMBAADUAQAA1QEAANYBAACAoBAAoKAQAKCgEADUAQAArKAQAN0BAADeAQAA3wEAAOABAADhAQAA4gEAAOMBAADkAQAA5QEAAOYBAACZAQAAOAEAAOcBAAA5AQAAuQEAAOgBAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9zaGFwZS9zaGFwZS5ycwAA7AAAAHgAAAAEAAAA6QEAAOoBAADVAAAAYAAAAAQAAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAD0AQAA1QAAAGAAAAAEAAAA1gAAAPUBAAD2AQAA9wEAAPgBAADVAAAAYAAAAAQAAADVAAAAYAAAAAQAAADWAAAA9QEAAPYBAAD3AQAA+AEAAGCiEABgohAA9gEAANUAAABgAAAABAAAAPkBAAD6AQAA+wEAAPwBAAD9AQAA/gEAAOsBAADsAQAA7QEAAO4BAADvAQAA8AEAAPEBAADyAQAA8wEAAPQBAAAMohAA1gAAAJB4EAD1AQAA9gEAAPcBAAD4AQAAQKIQAGCiEABgohAA9gEAAGyiEAD/AQAAAAIAAAECAAACAgAAAwIAADgAAAAEAgAABQIAADsAAAAGAgAAmQEAADgBAAAHAgAAOQEAALkBAAAIAgAA1QAAAGAAAAAEAAAACQIAAAoCAADlAAAAxAAAAAQAAAALAgAADAIAAA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAA5QAAAMQAAAAEAAAA5gAAABUCAAAWAgAAFwIAABgCAADlAAAAxAAAAAQAAADlAAAAxAAAAAQAAADmAAAAFQIAABYCAAAXAgAAGAIAALyjEAC8oxAAFgIAAOUAAADEAAAABAAAABkCAAAaAgAAGwIAABwCAAAdAgAAHgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAABooxAA5gAAAEB5EAAVAgAAFgIAABcCAAAYAgAAnKMQALyjEAC8oxAAFgIAAMijEAAfAgAAIAIAACECAAAiAgAAIwIAACQCAAAlAgAAJgIAADsAAAAGAgAAmQEAADgBAAAnAgAAOQEAALkBAAAoAgAA5QAAAMQAAAAEAAAAKQIAACoCAADhAAAAUAAAAAQAAAArAgAALAIAAC0CAAAuAgAALwIAADACAAAxAgAAMgIAADMCAAA0AgAA4QAAAFAAAAAEAAAA4gAAADUCAAA2AgAANwIAADgCAADhAAAAUAAAAAQAAADhAAAAUAAAAAQAAADiAAAANQIAADYCAAA3AgAAOAIAABilEAAYpRAANgIAAOEAAABQAAAABAAAADkCAAA6AgAAOwIAADwCAAA9AgAAPgIAACsCAAAsAgAALQIAAC4CAAAvAgAAMAIAADECAAAyAgAAMwIAADQCAADEpBAA4gAAACB5EAA1AgAANgIAADcCAAA4AgAA+KQQABilEAAYpRAANgIAACSlEAA/AgAAQAIAAEECAABCAgAAQwIAADgAAABEAgAARQIAADsAAAAGAgAAmQEAADgBAAA4AQAAOQEAALkBAABGAgAA4wAAAGAAAAAEAAAARwIAAEgCAABJAgAASgIAAEsCAABMAgAATQIAAE4CAABPAgAAUAIAAOMAAABgAAAABAAAAOQAAABRAgAAUgIAAFMCAABUAgAA4wAAAGAAAAAEAAAA4wAAAGAAAAAEAAAA5AAAAFECAABSAgAAUwIAAFQCAABgphAAYKYQAFICAADjAAAAYAAAAAQAAABVAgAAVgIAAFcCAABYAgAAWQIAAFoCAABHAgAASAIAAEkCAABKAgAASwIAAEwCAABNAgAATgIAAE8CAABQAgAADKYQAOQAAAAweRAAUQIAAFICAABTAgAAVAIAAECmEABgphAAYKYQAFICAABsphAAWwIAAFwCAABdAgAAXgIAAF8CAABgAgAAYQIAAGICAABjAgAABgIAAD0AAABkAgAAOAEAAGUCAABmAgAAZwIAAOMAAABgAAAABAAAAGgCAABpAgAAagIAAGsCAADjAAAAYAAAAAQAAABoAgAAaQIAAGoCAABrAgAAbAIAAD0AAADPAAAACAAAAAQAAABtAgAAbgIAAG8CAABwAgAAcQIAAHICAABzAgAAdAIAAHUCAAB2AgAAzwAAAAgAAAAEAAAA8wAAAHcCAAB4AgAAeQIAAHoCAADPAAAACAAAAAQAAADzAAAAdwIAAHgCAAB5AgAAegIAAGSpEABkqRAAeAIAAM8AAAAIAAAABAAAAHsCAAB8AgAAfQIAAH4CAAB/AgAAgAIAAG0CAABuAgAAbwIAAHACAABxAgAAcgIAAHMCAAB0AgAAdQIAAHYCAACUpxAA8wAAANB5EAB3AgAAeAIAAHkCAAB6AgAAyKcQAGSpEABkqRAAeAIAAOinEACBAgAAggIAAIMCAACEAgAAhQIAAIYCAACHAgAAiAIAAIkCAAA8AAAAPQAAAIoCAAA4AQAAiwIAALkBAACMAgAAzwAAAAgAAAAEAAAAjQIAAI4CAACPAgAAkAIAAM8AAAAIAAAABAAAAI0CAACOAgAAjwIAAJACAACRAgAAmQEAAM8AAAAIAAAABAAAAJICAACTAgAAlAIAAJUCAACWAgAAlwIAAJgCAACZAgAAmgIAAJsCAADPAAAACAAAAAQAAADvAAAAnAIAAJ0CAACeAgAAnwIAAM8AAAAIAAAABAAAAM8AAAAIAAAABAAAAO8AAACcAgAAnQIAAJ4CAACfAgAAZKkQAGSpEACdAgAAzwAAAAgAAAAEAAAAoAIAAKECAACiAgAAowIAAKQCAAClAgAAkgIAAJMCAACUAgAAlQIAAJYCAACXAgAAmAIAAJkCAACaAgAAmwIAABCpEADvAAAAoHkQAJwCAACdAgAAngIAAJ8CAABEqRAAZKkQAGSpEACdAgAAcKkQAKYCAACCAgAApwIAAKgCAACFAgAAqQIAAKoCAACrAgAAiQIAAKwCAAA9AAAArQIAADgBAACuAgAAuQEAAK8CAABhc3NlcnRpb24gZmFpbGVkOiBhcGV4X2hhbGZfYW5nbGUgPj0gMC4wlKEQAGIAAAD4BAAACQAAAM8AAAAIAAAABAAAALACAACxAgAAsgIAALMCAADPAAAACAAAAAQAAACwAgAAsQIAALICAACzAgAAtAIAAJkBAADPAAAADAAAAAQAAAC1AgAAtgIAALcCAAC4AgAAuQIAALoCAAC7AgAAvAIAAL0CAAC+AgAAzwAAAAwAAAAEAAAA8gAAAL8CAADAAgAAwQIAAMICAADPAAAADAAAAAQAAADyAAAAvwIAAMACAADBAgAAwgIAALi1EAC4tRAAwAIAAM8AAAAMAAAABAAAAMMCAADEAgAAxQIAAMYCAADHAgAAyAIAALUCAAC2AgAAtwIAALgCAAC5AgAAugIAALsCAAC8AgAAvQIAAL4CAADQqhAA8gAAAMB5EAC/AgAAwAIAAMECAADCAgAABKsQALi1EAC4tRAAwAIAACSrEADJAgAAygIAAMsCAADMAgAAzQIAADgAAADOAgAAzwIAANACAAA2AQAAPQAAADgBAAA4AQAAOQEAALkBAADRAgAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvY29udmV4X3BvbHloZWRyb24ucnMAAAysEABuAAAAUwAAAAkAAAAMrBAAbgAAALkAAAAdAAAADKwQAG4AAAC5AAAAOAAAAAysEABuAAAAqgAAACkAAAAMrBAAbgAAAMgAAAASAAAADKwQAG4AAADJAAAAEgAAAAysEABuAAAAygAAABIAAAAMrBAAbgAAAOUAAAAQAAAADKwQAG4AAADnAAAAGQAAAAysEABuAAAA/AAAAB8AAAAMrBAAbgAAAAYBAAAhAAAADKwQAG4AAAASAQAAJQAAAGFzc2VydGlvbiBmYWlsZWQ6IHRyaWFuZ2xlc1tjdXJyX3RyaWFuZ2xlXS52ZXJ0aWNlc1tjdXJyX2VkZ2VfaWRdID09IGN1cnJfdmVydGV4DKwQAG4AAAATAQAAIQAAAAysEABuAAAAQQEAABcAAAAMrBAAbgAAAEIBAAARAAAADKwQAG4AAABXAQAAGQAAAAysEABuAAAAXAEAACcAAAAMrBAAbgAAAFwBAAAeAAAADKwQAG4AAABdAQAAEQAAAAysEABuAAAAYgEAABUAAAAMrBAAbgAAAGABAAARAAAADKwQAG4AAADNAQAAFwAAAAysEABuAAAA0QEAABsAAAAMrBAAbgAAANIBAAAZAAAADKwQAG4AAADbAQAAGwAAAAysEABuAAAA3AEAABkAAAAMrBAAbgAAAPABAAApAAAADKwQAG4AAADyAQAAHQAAAAysEABuAAAA9AEAABYAAAAMrBAAbgAAAPUBAAAcAAAADKwQAG4AAAD5AQAAHwAAAAysEABuAAAA/gEAAB4AAAAMrBAAbgAAAP8BAAAgAAAADKwQAG4AAAAMAgAACQAAAAysEABuAAAAEwIAABwAAAAMrBAAbgAAAB4CAAAVAAAADKwQAG4AAAAkAgAAIAAAAAysEABuAAAAJgIAABIAAAAMrBAAbgAAACkCAAAnAAAAYXNzZXJ0aW9uIGZhaWxlZDogaGFsZl9oZWlnaHQuaXNfc2lnbl9wb3NpdGl2ZSgpICYmIHJhZGl1cy5pc19zaWduX3Bvc2l0aXZlKCkvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9zaGFwZS9jeWxpbmRlci5ycwAAia8QAGUAAAAnAAAACQAAAEEgaGVpZ2h0ZmllbGQgaGVpZ2h0cyBtdXN0IGhhdmUgYXQgbGVhc3QgMiByb3dzIGFuZCBjb2x1bW5zLgCwEAA8AAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvaGVpZ2h0ZmllbGQzLnJzAAAARLAQAGkAAACHAAAACQAAAESwEABpAAAAYwIAACkAAABEsBAAaQAAAGoCAAApAAAARLAQAGkAAABzAgAAKQAAAESwEABpAAAAegIAACkAAABEsBAAaQAAAD8CAAArAAAARLAQAGkAAABBAgAAKwAAAESwEABpAAAARQIAACsAAABEsBAAaQAAAEgCAAAdAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvc2hhcGUvdHJpbWVzaC5yc0EgdHJpYW5nbGUgbWVzaCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHRyaWFuZ2xlLgCksRAAMwAAAECxEABkAAAApwEAAAkAAABAsRAAZAAAAFQCAAARAAAAQLEQAGQAAABVAgAAEQAAAECxEABkAAAAVgIAABEAAABAsRAAZAAAAKICAAASAAAAQLEQAGQAAACoAgAAEgAAAECxEABkAAAArgIAABIAAABAsRAAZAAAAO0CAAARAAAAQLEQAGQAAADuAgAAEQAAAECxEABkAAAA7wIAABEAAABAsRAAZAAAAPcCAAARAAAAQLEQAGQAAAD4AgAAEQAAAECxEABkAAAA+QIAABEAAABAsRAAZAAAAH0DAAARAAAAQLEQAGQAAAB4AwAAJAAAAECxEABkAAAAigMAABUAAABAsRAAZAAAAIsDAAAVAAAAQLEQAGQAAACsAwAAHwAAAECxEABkAAAArQMAACMAAABAsRAAZAAAAK4DAAAjAAAAQLEQAGQAAACvAwAAIwAAAECxEABkAAAAtAMAACAAAABAsRAAZAAAAJ4DAAAUAAAAQLEQAGQAAAAVBAAAEwAAAECxEABkAAAAFwQAAA0AAABAsRAAZAAAABgEAAANAAAAQLEQAGQAAAAZBAAADQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3NoYXBlL2ZlYXR1cmVfaWQucnMAkLMQAGcAAABSAAAACQAAAJCzEABnAAAAWQAAAAkAAACQsxAAZwAAAF8AAAAJAAAAzwAAAAwAAAAEAAAA0gIAANMCAADUAgAA1QIAANYCAADXAgAA2AIAANkCAADaAgAA2wIAAM8AAAAMAAAABAAAANcAAADcAgAA3QIAAN4CAADfAgAAzwAAAAwAAAAEAAAA1wAAANwCAADdAgAA3gIAAN8CAAC4tRAAuLUQAN0CAADPAAAADAAAAAQAAADgAgAA4QIAAOICAADjAgAA5AIAAOUCAADSAgAA0wIAANQCAADVAgAA1gIAANcCAADYAgAA2QIAANoCAADbAgAAKLQQANcAAACgeBAA3AIAAN0CAADeAgAA3wIAAFy0EAC4tRAAuLUQAN0CAAB8tBAA5gIAAOcCAADoAgAA6QIAAOoCAADrAgAA7AIAAO0CAADuAgAA7wIAAD0AAADwAgAAOAEAAPECAAC5AQAA8gIAAM8AAAAMAAAABAAAAPMCAAD0AgAA9QIAAPYCAAD3AgAA+AIAAPkCAAD6AgAA+wIAAPwCAADPAAAADAAAAAQAAADcAAAA/QIAAP4CAAD/AgAAAAMAAM8AAAAMAAAABAAAAM8AAAAMAAAABAAAANwAAAD9AgAA/gIAAP8CAAAAAwAAuLUQALi1EAD+AgAAzwAAAAwAAAAEAAAAAQMAAAIDAAADAwAABAMAAAUDAAAGAwAA8wIAAPQCAAD1AgAA9gIAAPcCAAD4AgAA+QIAAPoCAAD7AgAA/AIAAGS1EADcAAAA4HgQAP0CAAD+AgAA/wIAAAADAACYtRAAuLUQALi1EAD+AgAAxLUQAAcDAADnAgAACAMAAAkDAADqAgAACgMAAAsDAAAMAwAA7gIAADwAAAA9AAAADQMAADgBAAAOAwAAuQEAAA8DAADoAAAAZAAAAAQAAAAQAwAAEQMAABIDAAATAwAAFAMAABUDAAAWAwAAFwMAABgDAAAZAwAA6AAAAGQAAAAEAAAA6QAAABoDAAAbAwAAHAMAAB0DAADoAAAAZAAAAAQAAADoAAAAZAAAAAQAAADpAAAAGgMAABsDAAAcAwAAHQMAAAC3EAAAtxAAGwMAAOgAAABkAAAABAAAAB4DAAAfAwAAIAMAACEDAAAiAwAAIwMAABADAAARAwAAEgMAABMDAAAUAwAAFQMAABYDAAAXAwAAGAMAABkDAACsthAA6QAAAGB5EAAaAwAAGwMAABwDAAAdAwAA4LYQAAC3EAAAtxAAGwMAAAy3EAAkAwAAJQMAACYDAAAnAwAAKAMAACkDAAAqAwAAKwMAACwDAAAGAgAAPQAAAC0DAAA4AQAALgMAALkBAAAvAwAAzwAAACgAAAAEAAAAMAMAADEDAAAyAwAAMwMAADQDAAA1AwAANgMAADcDAAA4AwAAOQMAAM8AAAAoAAAABAAAAO4AAAA6AwAAOwMAADwDAAA9AwAAzwAAACgAAAAEAAAAzwAAACgAAAAEAAAA7gAAADoDAAA7AwAAPAMAAD0DAABIuBAASLgQADsDAADPAAAAKAAAAAQAAAA+AwAAPwMAAEADAABBAwAAQgMAAEMDAAAwAwAAMQMAADIDAAAzAwAANAMAADUDAAA2AwAANwMAADgDAAA5AwAA9LcQAO4AAACQeRAAOgMAADsDAAA8AwAAPQMAACi4EABIuBAASLgQADsDAABUuBAARAMAAEUDAABGAwAARwMAAEgDAAA4AAAASQMAAEoDAABLAwAAPAAAAD0AAABMAwAAOAEAAE0DAAC5AQAATgMAAM8AAAAQAAAABAAAAE8DAABQAwAAUQMAAFIDAABTAwAAVAMAAFUDAABWAwAAVwMAAFgDAADPAAAAEAAAAAQAAADnAAAAWQMAAFoDAABbAwAAXAMAAM8AAAAQAAAABAAAAM8AAAAQAAAABAAAAOcAAABZAwAAWgMAAFsDAABcAwAAkLkQAJC5EABaAwAAzwAAABAAAAAEAAAAXQMAAF4DAABfAwAAYAMAAGEDAABiAwAATwMAAFADAABRAwAAUgMAAFMDAABUAwAAVQMAAFYDAABXAwAAWAMAADy5EADnAAAAUHkQAFkDAABaAwAAWwMAAFwDAABwuRAAkLkQAJC5EABaAwAAnLkQAGMDAABkAwAAZQMAAGYDAABnAwAAaAMAAGkDAABqAwAAawMAADwAAAA9AAAAbAMAADgBAABtAwAAuQEAAG4DAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy9zaGFwZS9zaGFyZWRfc2hhcGUucnMAAACEuhAAaQAAAC8AAAAJAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvdHJhbnNmb3JtYXRpb24vY29udmV4X2h1bGwyLnJzAAAAuxAAcgAAAB0AAAANAAAAALsQAHIAAAA8AAAADAAAAAC7EAByAAAAQwAAABUAAABhc3NlcnRpb24gZmFpbGVkOiBwb2ludHMubGVuKCkgPj0gMgAAuxAAcgAAAFkAAAAFAAAAALsQAHIAAABjAAAAFAAAAAC7EAByAAAAYwAAACEAAAAAuxAAcgAAAGEAAAAOAAAARmFpbGVkIHRvIGJ1aWxkIHRoZSAyZCBjb252ZXggaHVsbCBvZiB0aGlzIHBvaW50IGNsb3VkLgAIvBAANwAAAAC7EAByAAAAagAAAAUAAAAAuxAAcgAAAFsAAAAOAAAAALsQAHIAAACTAAAAEwAAAAC7EAByAAAAlAAAABMAAAAAuxAAcgAAAK4AAAAmAAAAALsQAHIAAADPAAAAFAAAAAC7EAByAAAAzwAAACEAAAAAuxAAcgAAAOAAAAATAAAAALsQAHIAAADhAAAAEwAAAM8AAAAMAAAABAAAAG8DAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy90cmFuc2Zvcm1hdGlvbi9jb252ZXhfaHVsbDMvY29udmV4X2h1bGwucnMAAOi8EAB+AAAACwAAAAUAAADovBAAfgAAAC8AAAANAAAA6LwQAH4AAABmAAAAGAAAAEludGVybmFsIGVycm9yOiBleGl0aW5nIGFuIHVuZmluaXNoZWQgd29yay4A6LwQAH4AAAByAAAAEQAAAOi8EAB+AAAApgAAAAgAAADovBAAfgAAANsAAAARAAAA6LwQAH4AAADcAAAACQAAAOi8EAB+AAAA6gAAAB0AAADovBAAfgAAAOoAAAAWAAAA6LwQAH4AAADrAAAAFgAAAOi8EAB+AAAA9AAAAB0AAADovBAAfgAAAPUAAAAaAAAA6LwQAH4AAAD1AAAAEAAAAOi8EAB+AAAACwEAAB4AAADovBAAfgAAAAwBAAAYAAAA6LwQAH4AAAAFAQAAHgAAAOi8EAB+AAAA8QAAACQAAADovBAAfgAAAEgBAAANAAAA6LwQAH4AAABdAQAACQAAAOi8EAB+AAAAXgEAABwAAADovBAAfgAAAF4BAAASAAAAYXNzZXJ0aW9uIGZhaWxlZDogIXRyaWFuZ2xlc1t0cmlhbmdsZXNbbWlkZGxlX2ZhY2V0XS5hZGpbbWlkZGxlX2lkXV0udmFsaWQAAOi8EAB+AAAAXgEAAAkAAADovBAAfgAAAGYBAAAeAAAA6LwQAH4AAABnAQAAEAAAAOi8EAB+AAAAZwEAACoAAADovBAAfgAAAHoBAAAUAAAA6LwQAH4AAACKAQAAIQAAAOi8EAB+AAAAmAEAAA0AAABVbnJlYWNoYWJsZU1pc3NpbmdTdXBwb3J0UG9pbnQvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy90cmFuc2Zvcm1hdGlvbi9jb252ZXhfaHVsbDMvaW5pdGlhbF9tZXNoLnJzAAAAvr8QAH8AAAAbAAAADQAAAL6/EAB/AAAAHAAAAA0AAAC+vxAAfwAAAKIAAAAjAAAAvr8QAH8AAACiAAAAOgAAAG5vIHRyaWFuZ2xlIGZvdW5kLgAAvr8QAH8AAAC9AAAAOAAAAL6/EAB/AAAAfQAAABoAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy90cmFuc2Zvcm1hdGlvbi9jb252ZXhfaHVsbDMvdHJpYW5nbGVfZmFjZXQucnMAAAC0wBAAgQAAABUAAAAUAAAAtMAQAIEAAAAVAAAAIQAAALTAEACBAAAAFgAAABQAAABhc3NlcnRpb24gZmFpbGVkOiBkaXN0YW5jZSA+IGNyYXRlOjptYXRoOjpERUZBVUxUX0VQU0lMT04AAAC0wBAAgQAAACoAAAAJAAAAtMAQAIEAAAA1AAAAGwAAALTAEACBAAAANQAAACsAAAC0wBAAgQAAAEsAAAAJAAAAtMAQAIEAAABYAAAAEgAAALTAEACBAAAAWQAAABIAAAC0wBAAgQAAAHAAAAAWAAAAtMAQAIEAAABxAAAAFgAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3RyYW5zZm9ybWF0aW9uL2NvbnZleF9odWxsMy92YWxpZGF0aW9uLnJzAAAAJMIQAH0AAAAGAAAAEgAAACTCEAB9AAAACQAAABEAAABhc3NlcnRpb24gZmFpbGVkOiBmYWNldHNbZmFjZXQuYWRqW2ldXS52YWxpZCTCEAB9AAAACQAAAAkAAAAkwhAAfQAAAA8AAAAUAAAAJMIQAH0AAAAPAAAACQAAACTCEAB9AAAAEAAAAAkAAAAkwhAAfQAAABEAAAAJAAAAJMIQAH0AAAAVAAAACQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3RyYW5zZm9ybWF0aW9uL2NvbnZleF9odWxsX3V0aWxzLnJzAFDDEAB3AAAAKQAAACIAAABQwxAAdwAAAEIAAAAiAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9iYWxsX3RvX291dGxpbmUucnPowxAAgAAAAB4AAAAOAAAA6MMQAIAAAAAiAAAADgAAAOjDEACAAAAAPAAAAA4AAADowxAAgAAAAEAAAAAOAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvdHJhbnNmb3JtYXRpb24vdG9fb3V0bGluZS9jYXBzdWxlX3RvX291dGxpbmUucnMAqMQQAIMAAAAcAAAABQAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3RyYW5zZm9ybWF0aW9uL3RvX291dGxpbmUvcm91bmRfY29udmV4X3BvbHloZWRyb25fdG9fb3V0bGluZS5ycwA8xRAAkwAAAA8AAAAaAAAAPMUQAJMAAAASAAAAHgAAADzFEACTAAAAFQAAABwAAAA8xRAAkwAAACIAAAAZAAAAPMUQAJMAAAAjAAAAHgAAADzFEACTAAAAMAAAABoAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy90cmFuc2Zvcm1hdGlvbi90b190cmltZXNoL2NvbnZleF9wb2x5aGVkcm9uX3RvX3RyaW1lc2gucnMAAAAwxhAAjQAAAA0AAAAcAAAAMMYQAI0AAAAPAAAAGAAAAC9Vc2Vycy9zZWJjcm96ZXQvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvcGFycnkzZC0wLjEzLjEvc3JjL3RyYW5zZm9ybWF0aW9uL3V0aWxzLnJzAODGEABrAAAAxAAAAAkAAADgxhAAawAAAMUAAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogbnN1YmRpdnMgPiAwAADgxhAAawAAANYAAAAFAAAA4MYQAGsAAAAzAQAAIAAAAODGEABrAAAARAEAABYAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy91dGlscy9hcnJheS5ycwAAvMcQAGIAAABKAAAACQAAAENhbm5vdCBjb21wdXRlIHRoZSBjZW50ZXIgb2YgbGVzcyB0aGFuIDEgcG9pbnQuADDIEAAvAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvdXRpbHMvY2VudGVyLnJzAGjIEABjAAAABwAAAAUAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3BhcnJ5M2QtMC4xMy4xL3NyYy91dGlscy9jbGVhbnVwLnJz3MgQAGQAAAAMAAAACQAAANzIEABkAAAADQAAAAkAAADcyBAAZAAAAA4AAAAJAAAA3MgQAGQAAAATAAAADQAAANzIEABkAAAAFQAAAA0AAADcyBAAZAAAABYAAAAXAAAA3MgQAGQAAAAdAAAAEQAAANzIEABkAAAAHgAAABEAAADcyBAAZAAAAB8AAAARAAAAL1VzZXJzL3NlYmNyb3pldC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9wYXJyeTNkLTAuMTMuMS9zcmMvdXRpbHMvcG9pbnRfY2xvdWRfc3VwcG9ydF9wb2ludC5ycwAA0MkQAHYAAAAHAAAAGAAAAEFhYmJtaW5zbWF4c88AAAAQAAAABAAAAHADAABxAwAAcgMAAHMDAADPAAAAKAAAAAQAAAB0AwAAdQMAAHYDAAB3AwAAzwAAAAwAAAAEAAAAeAMAAHkDAAB6AwAAewMAAM8AAAAMAAAABAAAAHwDAAB9AwAAfgMAAH8DAADoAAAAZAAAAAQAAACAAwAAgQMAAIIDAACDAwAASW50ZXJuYWxFcnJvcgAAAM8AAAAEAAAABAAAAIQDAABIYXNoIHRhYmxlIGNhcGFjaXR5IG92ZXJmbG93EMsQABwAAAAvVXNlcnMvc2ViY3JvemV0Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2hhc2hicm93bi0wLjEyLjMvc3JjL3Jhdy9tb2QucnM0yxAAYAAAAFoAAAAoAAAAOGPtPtoPST9emHs/2g/JP2k3rDFoISIztA8UM2ghojMAAAA/AAAAvwMAAAAEAAAABAAAAAYAAACD+aIARE5uAPwpFQDRVycA3TT1AGLbwAA8mZUAQZBDAGNR/gC73qsAt2HFADpuJADSTUIASQbgAAnqLgAcktEA6x3+ACmxHADoPqcA9TWCAES7LgCc6YQAtCZwAEF+XwDWkTkAU4M5AJz0OQCLX4QAKPm9APgfOwDe/5cAD5gFABEv7wAKWosAbR9tAM9+NgAJyycARk+3AJ5mPwAt6l8Auid1AOXrxwA9e/EA9zkHAJJSigD7a+oAH7FfAAhdjQAwA1YAe/xGAPCrawAgvM8ANvSaAOOpHQBeYZEACBvmAIWZZQCgFF8AjUBoAIDY/wAnc00ABgYxAMpWFQDJqHMAe+JgAGuMwAAAAAAAAAAAQPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNdsPST/bD0m/5MsWQAAAAAAAAACA2w9JQGJ5dGUgYXJyYXlzdHJ1Y3QgdmFyaWFudErNEAAOAAAAdHVwbGUgdmFyaWFudAAAAGDNEAANAAAAbmV3dHlwZSB2YXJpYW50AHjNEAAPAAAAdW5pdCB2YXJpYW50kM0QAAwAAABlbnVtpM0QAAQAAABtYXAAsM0QAAMAAABzZXF1ZW5jZbzNEAAIAAAAbmV3dHlwZSBzdHJ1Y3QAAMzNEAAOAAAAT3B0aW9uIHZhbHVl5M0QAAwAAAB1bml0IHZhbHVlAAD4zRAACgAAAEDNEAAKAAAAc3RyaW5nIAAUzhAABwAAAGNoYXJhY3RlciBgYCTOEAALAAAAL84QAAEAAABmbG9hdGluZyBwb2ludCBgQM4QABAAAAAvzhAAAQAAAGludGVnZXIgYAAAAGDOEAAJAAAAL84QAAEAAABib29sZWFuIGAAAAB8zhAACQAAAC/OEAABAAAAdXNpemUAAACLAwAABAAAAAQAAACMAwAAjQMAAI4DAABhbHJlYWR5IGJvcnJvd2VkiwMAAAAAAAABAAAAjwMAAABvdmVyZmxvdyBpbiBEdXJhdGlvbjo6bmV3AADZzhAAGQAAAC9ydXN0Yy8wNDY4YTAwYWUzZmQ2ZWYxYTZhMGY5ZWFmNjM3ZDdhYTllNjA0YWNjL2xpYnJhcnkvY29yZS9zcmMvdGltZS5yc/zOEABIAAAAygAAABUAAACLAwAABAAAAAQAAACQAwAAiwMAAAQAAAAEAAAAkQMAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWV1c2Ugb2Ygc3RkOjp0aHJlYWQ6OmN1cnJlbnQoKSBpcyBub3QgcG9zc2libGUgYWZ0ZXIgdGhlIHRocmVhZCdzIGxvY2FsIGRhdGEgaGFzIGJlZW4gZGVzdHJveWVkbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnMAAP3PEAAdAAAA3AIAAAUAAABmYWlsZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIHRocmVhZCBJRDogYml0c3BhY2UgZXhoYXVzdGVkACzQEAA3AAAA/c8QAB0AAABVBAAADQAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWVQb2lzb25FcnJvcm92ZXJmbG93IHdoZW4gYWRkaW5nIGR1cmF0aW9uIHRvIGluc3RhbnRsaWJyYXJ5L3N0ZC9zcmMvdGltZS5ycwAAANrQEAAXAAAAmAEAAAkAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzX2NvbW1vbi90aHJlYWRfaW5mby5ycwAAAATREAApAAAAFgAAADMAAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkCgBA0RAAFQAAAFXREAAOAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzdNEQABgAAABVAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnOc0RAAHAAAAD4CAAAPAAAAnNEQABwAAAA9AgAADwAAAJIDAAAMAAAABAAAAJMDAACLAwAACAAAAAQAAACUAwAAlQMAABAAAAAEAAAAlgMAAJcDAACLAwAACAAAAAQAAACYAwAAmQMAAIsDAAAAAAAAAQAAAJoDAAB0aW1lIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtAAAAMNIQACUAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3dhc20vLi4vdW5zdXBwb3J0ZWQvdGltZS5ycwBg0hAALwAAAA0AAAAJAAAAY29uZHZhciB3YWl0IG5vdCBzdXBwb3J0ZWQAAKDSEAAaAAAAbGlicmFyeS9zdGQvc3JjL3N5cy93YXNtLy4uL3Vuc3VwcG9ydGVkL2xvY2tzL2NvbmR2YXIucnPE0hAAOAAAABQAAAAJAAAAxNIQADgAAAAYAAAACQAAAGNhbm5vdCByZWN1cnNpdmVseSBhY3F1aXJlIG11dGV4HNMQACAAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3dhc20vLi4vdW5zdXBwb3J0ZWQvbG9ja3MvbXV0ZXgucnMAAETTEAA2AAAAFAAAAAkAAAACAAAAmwMAAAgAAAAEAAAAnAMAAGxpYnJhcnkvc3RkL3NyYy9zeXNfY29tbW9uL3RocmVhZF9wYXJrZXIvZ2VuZXJpYy5ycwCg0xAAMwAAACcAAAAVAAAAaW5jb25zaXN0ZW50IHBhcmsgc3RhdGUA5NMQABcAAACg0xAAMwAAADUAAAAXAAAAcGFyayBzdGF0ZSBjaGFuZ2VkIHVuZXhwZWN0ZWRseQAU1BAAHwAAAKDTEAAzAAAAMgAAABEAAACg0xAAMwAAAEgAAAARAAAAaW5jb25zaXN0ZW50IHBhcmtfdGltZW91dCBzdGF0ZQBc1BAAHwAAAKDTEAAzAAAAUQAAABcAAACg0xAAMwAAAE4AAAARAAAAaW5jb25zaXN0ZW50IHN0YXRlIGluIHVucGFya6TUEAAcAAAAoNMQADMAAABsAAAAEgAAAKDTEAAzAAAAegAAAA4AAABIYXNoIHRhYmxlIGNhcGFjaXR5IG92ZXJmbG936NQQABwAAAAvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9oYXNoYnJvd24tMC4xMi4zL3NyYy9yYXcvbW9kLnJzAAzVEABPAAAAWgAAACgAAACdAwAABAAAAAQAAACeAwAAnwMAAKADAABsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkgb3ZlcmZsb3cAAACg1RAAEQAAAITVEAAcAAAABgIAAAUAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IAnQMA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").buffer) + })) + }, + CharacterCollision: dI, + KinematicCharacterController: TI + }) + } + } +]); \ No newline at end of file diff --git a/mp-core/4240.0fbdf037c9ba71d0a987.bundle.js b/mp-core/4240.0fbdf037c9ba71d0a987.bundle.js new file mode 100644 index 0000000..ca5928a --- /dev/null +++ b/mp-core/4240.0fbdf037c9ba71d0a987.bundle.js @@ -0,0 +1,263 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4240], { + 54240: (a, t, e) => { + e.r(t), e.d(t, { + default: () => r + }); + class r { + id = "core.avatars.extra"; + name = "Extra Avatars"; + description = "A selection of avatars for users to use."; + version = "1.0.0"; + requires = ["backend"]; + get provides() { + return this.avatars.map((a => "avatar:" + a.avatar_id)) + } + avatars = []; + $getAvatarConfigurations() { + return this.avatars + } + mixamoAvatar = { + type: "mesh", + mesh_bounding_box: !0, + "modifier:avatar-controller": !0, + "modifier:physics": !0, + physics_enabled: !0, + physics_shape: "capsule", + physics_lockRotation: !0, + physics_anchorBottom: !0, + physics_kinematicVelocity: !0, + "modifier:transform-smoothing": !0, + "modifier:face-movement-direction": !0, + "modifier:animator": !0 + }; + onLoad() { + this.avatars = [{ + avatar_id: "extra.dart", + avatar_image: metapress.backend.getAsset("avatars/images/dart.jpg"), + avatar_name: "Arty", + avatar_description: "Arty", + avatar_height: 1.8, + avatar_walkSpeed: 1.2, + avatar_runSpeed: 4, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/logo.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.brandon", + avatar_image: metapress.backend.getAsset("avatars/images/brandon.jpg"), + avatar_name: "Brandon", + avatar_description: "Brandon from RPM", + avatar_height: 1.8, + avatar_walkSpeed: 1.2, + avatar_runSpeed: 4, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/brandon.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.jess", + avatar_image: metapress.backend.getAsset("avatars/images/jess.jpg"), + avatar_name: "Jess", + avatar_description: "Jess from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/jess.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.dena", + avatar_image: metapress.backend.getAsset("avatars/images/dena.jpg"), + avatar_name: "Dena", + avatar_description: "Dena from RPM", + avatar_height: 1.8, + avatar_walkSpeed: 1.2, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/dena.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.charles", + avatar_image: metapress.backend.getAsset("avatars/images/charles.jpg"), + avatar_name: "Charles", + avatar_description: "Charles from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/charles.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.jim", + avatar_image: metapress.backend.getAsset("avatars/images/jim.jpg"), + avatar_name: "Jim", + avatar_description: "Jim from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/jim.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.joslin", + avatar_image: metapress.backend.getAsset("avatars/images/joslin.jpg"), + avatar_name: "Joslin", + avatar_description: "Joslin from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/joslin.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.justin", + avatar_image: metapress.backend.getAsset("avatars/images/justin.jpg"), + avatar_name: "Justin", + avatar_description: "Justin from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/justin.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.monique", + avatar_image: metapress.backend.getAsset("avatars/images/monique.jpg"), + avatar_name: "Monique", + avatar_description: "Monique from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/monique.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.tyler", + avatar_image: metapress.backend.getAsset("avatars/images/tyler.jpg"), + avatar_name: "Tyler", + avatar_description: "Tyler from RPM", + avatar_height: 1.8, + extra_offset_y: 0, + url: metapress.backend.getAsset("avatars/tyler.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.amy", + avatar_image: metapress.backend.getAsset("avatars/images/amy.jpg"), + avatar_name: "Amy", + avatar_description: "Amy from Mixamo.com", + avatar_height: 1.4, + avatar_walkSpeed: 1.2, + avatar_runSpeed: 4, + extra_offset_y: -.2, + url: metapress.backend.getAsset("avatars/amy.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.mannequin", + avatar_image: metapress.backend.getAsset("avatars/images/manny.jpg"), + avatar_name: "Mannequin", + avatar_description: "Mannequin from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: .05, + url: metapress.backend.getAsset("avatars/mannequin.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.elvis", + avatar_image: metapress.backend.getAsset("avatars/images/elvis.jpg"), + avatar_name: "Elvis", + avatar_description: "Elvis from Mixamo.com", + avatar_height: 1.5, + avatar_walkSpeed: 1.2, + extra_offset_y: -.1, + url: metapress.backend.getAsset("avatars/elvis.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.knight", + avatar_image: metapress.backend.getAsset("avatars/images/knight.jpg"), + avatar_name: "Knight", + avatar_description: "Knight D Pelegrini from Mixamo.com", + avatar_height: 2, + extra_offset_y: .2, + url: metapress.backend.getAsset("avatars/knight.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.paladin", + avatar_image: metapress.backend.getAsset("avatars/images/paladin.jpg"), + avatar_name: "Paladin", + avatar_description: "Paladin J Nordstrom from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: -.05, + url: metapress.backend.getAsset("avatars/paladin.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.ybot", + avatar_image: metapress.backend.getAsset("avatars/images/y-bot.jpg"), + avatar_name: "Y Bot", + avatar_description: "Y Bot from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: .05, + url: metapress.backend.getAsset("avatars/ybot.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.xbot", + avatar_image: metapress.backend.getAsset("avatars/images/x-bot.jpg"), + avatar_name: "X Bot", + avatar_description: "X Bot from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: .05, + url: metapress.backend.getAsset("avatars/xbot.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.ely", + avatar_image: metapress.backend.getAsset("avatars/images/ely.jpg"), + avatar_name: "Ely", + avatar_description: "Ely By K.Atienza from Mixamo.com", + avatar_height: 1.7, + url: metapress.backend.getAsset("avatars/ely.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.medea", + avatar_image: metapress.backend.getAsset("avatars/images/medea.jpg"), + avatar_name: "Medea", + avatar_description: "Medea By M. Arrebola from Mixamo.com", + avatar_height: 1.5, + extra_offset_y: .1, + url: metapress.backend.getAsset("avatars/medea.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.lola", + avatar_image: metapress.backend.getAsset("avatars/images/lola.jpg"), + avatar_name: "Lola", + avatar_description: "Lola By M. Arrebola from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: .15, + url: metapress.backend.getAsset("avatars/lola.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.granny", + avatar_image: metapress.backend.getAsset("avatars/images/granny.jpg"), + avatar_name: "Granny", + avatar_description: "Sporty Granny from Mixamo.com", + avatar_height: 1.5, + avatar_walkSpeed: 1.2, + extra_offset_y: -.15, + url: metapress.backend.getAsset("avatars/granny.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.pirate", + avatar_image: metapress.backend.getAsset("avatars/images/pirate.jpg"), + avatar_name: "Pirate", + avatar_description: "Pirate By P. Konstantinov from Mixamo.com", + avatar_height: 1.7, + extra_offset_y: .05, + url: metapress.backend.getAsset("avatars/pirate.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.franco", + avatar_image: metapress.backend.getAsset("avatars/images/franco.jpg"), + avatar_name: "Franco", + avatar_description: "Franco", + avatar_height: 1.7, + url: metapress.backend.getAsset("avatars/franco.glb"), + ...this.mixamoAvatar + }, { + avatar_id: "extra.vrguy", + avatar_image: metapress.backend.getAsset("avatars/images/vrguy.jpg"), + avatar_name: "VR Guy", + avatar_description: "VR Guy", + avatar_height: 1.7, + url: metapress.backend.getAsset("avatars/vrguy.glb"), + ...this.mixamoAvatar + }] + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/452.c0a7d2c9e078899a3956.bundle.js b/mp-core/452.c0a7d2c9e078899a3956.bundle.js new file mode 100644 index 0000000..ec0b424 --- /dev/null +++ b/mp-core/452.c0a7d2c9e078899a3956.bundle.js @@ -0,0 +1,1674 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [452], { + 20452: (e, t, r) => { + r.d(t, { + y: () => h + }); + var n = r(99477), + o = r(78646); + + function a(e, t, r) { + const n = r.length - e - 1; + if (t >= r[n]) return n - 1; + if (t <= r[e]) return e; + let o = e, + a = n, + s = Math.floor((o + a) / 2); + for (; t < r[s] || t >= r[s + 1];) t < r[s] ? a = s : o = s, s = Math.floor((o + a) / 2); + return s + } + + function s(e, t) { + let r = 1; + for (let t = 2; t <= e; ++t) r *= t; + let n = 1; + for (let e = 2; e <= t; ++e) n *= e; + for (let r = 2; r <= e - t; ++r) n *= r; + return r / n + } + class i extends n.Curve { + constructor(e, t, r, o, a) { + super(), this.degree = e, this.knots = t, this.controlPoints = [], this.startKnot = o || 0, this.endKnot = a || this.knots.length - 1; + for (let e = 0; e < r.length; ++e) { + const t = r[e]; + this.controlPoints[e] = new n.Vector4(t.x, t.y, t.z, t.w) + } + } + getPoint(e, t = new n.Vector3) { + const r = t, + o = this.knots[this.startKnot] + e * (this.knots[this.endKnot] - this.knots[this.startKnot]), + s = function(e, t, r, o) { + const s = a(e, o, t), + i = function(e, t, r, n) { + const o = [], + a = [], + s = []; + o[0] = 1; + for (let i = 1; i <= r; ++i) { + a[i] = t - n[e + 1 - i], s[i] = n[e + i] - t; + let r = 0; + for (let e = 0; e < i; ++e) { + const t = s[e + 1], + n = a[i - e], + l = o[e] / (t + n); + o[e] = r + t * l, r = n * l + } + o[i] = r + } + return o + }(s, o, e, t), + l = new n.Vector4(0, 0, 0, 0); + for (let t = 0; t <= e; ++t) { + const n = r[s - e + t], + o = i[t], + a = n.w * o; + l.x += n.x * a, l.y += n.y * a, l.z += n.z * a, l.w += n.w * o + } + return l + }(this.degree, this.knots, this.controlPoints, o); + return 1 !== s.w && s.divideScalar(s.w), r.set(s.x, s.y, s.z) + } + getTangent(e, t = new n.Vector3) { + const r = t, + o = this.knots[0] + e * (this.knots[this.knots.length - 1] - this.knots[0]), + i = function(e, t, r, o, i) { + const l = function(e, t, r, o, s) { + const i = s < e ? s : e, + l = [], + c = a(e, o, t), + u = function(e, t, r, n, o) { + const a = []; + for (let e = 0; e <= r; ++e) a[e] = 0; + const s = []; + for (let e = 0; e <= n; ++e) s[e] = a.slice(0); + const i = []; + for (let e = 0; e <= r; ++e) i[e] = a.slice(0); + i[0][0] = 1; + const l = a.slice(0), + c = a.slice(0); + for (let n = 1; n <= r; ++n) { + l[n] = t - o[e + 1 - n], c[n] = o[e + n] - t; + let r = 0; + for (let e = 0; e < n; ++e) { + const t = c[e + 1], + o = l[n - e]; + i[n][e] = t + o; + const a = i[e][n - 1] / i[n][e]; + i[e][n] = r + t * a, r = o * a + } + i[n][n] = r + } + for (let e = 0; e <= r; ++e) s[0][e] = i[e][r]; + for (let e = 0; e <= r; ++e) { + let t = 0, + o = 1; + const l = []; + for (let e = 0; e <= r; ++e) l[e] = a.slice(0); + l[0][0] = 1; + for (let a = 1; a <= n; ++a) { + let n = 0; + const c = e - a, + u = r - a; + e >= a && (l[o][0] = l[t][0] / i[u + 1][c], n = l[o][0] * i[c][u]); + const p = e - 1 <= u ? a - 1 : r - e; + for (let e = c >= -1 ? 1 : -c; e <= p; ++e) l[o][e] = (l[t][e] - l[t][e - 1]) / i[u + 1][c + e], n += l[o][e] * i[c + e][u]; + e <= u && (l[o][a] = -l[t][a - 1] / i[u + 1][e], n += l[o][a] * i[e][u]), s[a][e] = n; + const h = t; + t = o, o = h + } + } + let u = r; + for (let e = 1; e <= n; ++e) { + for (let t = 0; t <= r; ++t) s[e][t] *= u; + u *= r - e + } + return s + }(c, o, e, i, t), + p = []; + for (let e = 0; e < r.length; ++e) { + const t = r[e].clone(), + n = t.w; + t.x *= n, t.y *= n, t.z *= n, p[e] = t + } + for (let t = 0; t <= i; ++t) { + const r = p[c - e].clone().multiplyScalar(u[t][0]); + for (let n = 1; n <= e; ++n) r.add(p[c - e + n].clone().multiplyScalar(u[t][n])); + l[t] = r + } + for (let e = i + 1; e <= s + 1; ++e) l[e] = new n.Vector4(0, 0, 0); + return l + }(e, t, r, o, i); + return function(e) { + const t = e.length, + r = [], + o = []; + for (let a = 0; a < t; ++a) { + const t = e[a]; + r[a] = new n.Vector3(t.x, t.y, t.z), o[a] = t.w + } + const a = []; + for (let e = 0; e < t; ++e) { + const t = r[e].clone(); + for (let r = 1; r <= e; ++r) t.sub(a[e - r].clone().multiplyScalar(s(e, r) * o[r])); + a[e] = t.divideScalar(o[0]) + } + return a + }(l) + }(this.degree, this.knots, this.controlPoints, o, 1); + return r.copy(i[1]).normalize(), r + } + } + var l = r(25108); + let c, u, p; + class h extends n.Loader { + constructor(e) { + super(e) + } + load(e, t, r, o) { + const a = this, + s = "" === a.path ? n.LoaderUtils.extractUrlBase(e) : a.path, + i = new n.FileLoader(this.manager); + i.setPath(a.path), i.setResponseType("arraybuffer"), i.setRequestHeader(a.requestHeader), i.setWithCredentials(a.withCredentials), i.load(e, (function(r) { + try { + t(a.parse(r, s)) + } catch (t) { + o ? o(t) : l.error(t), a.manager.itemError(e) + } + }), r, o) + } + parse(e, t) { + if (function(e) { + const t = "Kaydara FBX Binary \0"; + return e.byteLength >= t.length && t === N(e, 0, t.length) + }(e)) c = (new v).parse(e); + else { + const t = N(e); + if (! function(e) { + const t = ["K", "a", "y", "d", "a", "r", "a", "\\", "F", "B", "X", "\\", "B", "i", "n", "a", "r", "y", "\\", "\\"]; + let r = 0; + + function n(t) { + const n = e[t - 1]; + return e = e.slice(r + t), r++, n + } + for (let e = 0; e < t.length; ++e) + if (n(1) === t[e]) return !1; + return !0 + }(t)) throw new Error("THREE.FBXLoader: Unknown format."); + if (x(t) < 7e3) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + x(t)); + c = (new g).parse(t) + } + const r = new n.TextureLoader(this.manager).setPath(this.resourcePath || t).setCrossOrigin(this.crossOrigin); + return new d(r, this.manager).parse(c) + } + } + class d { + constructor(e, t) { + this.textureLoader = e, this.manager = t + } + parse() { + u = this.parseConnections(); + const e = this.parseImages(), + t = this.parseTextures(e), + r = this.parseMaterials(t), + n = this.parseDeformers(), + o = (new f).parse(n); + return this.parseScene(n, o, r), p + } + parseConnections() { + const e = new Map; + return "Connections" in c && c.Connections.connections.forEach((function(t) { + const r = t[0], + n = t[1], + o = t[2]; + e.has(r) || e.set(r, { + parents: [], + children: [] + }); + const a = { + ID: n, + relationship: o + }; + e.get(r).parents.push(a), e.has(n) || e.set(n, { + parents: [], + children: [] + }); + const s = { + ID: r, + relationship: o + }; + e.get(n).children.push(s) + })), e + } + parseImages() { + const e = {}, + t = {}; + if ("Video" in c.Objects) { + const r = c.Objects.Video; + for (const n in r) { + const o = r[n]; + if (e[parseInt(n)] = o.RelativeFilename || o.Filename, "Content" in o) { + const e = o.Content instanceof ArrayBuffer && o.Content.byteLength > 0, + a = "string" == typeof o.Content && "" !== o.Content; + if (e || a) { + const e = this.parseImage(r[n]); + t[o.RelativeFilename || o.Filename] = e + } + } + } + } + for (const r in e) { + const n = e[r]; + void 0 !== t[n] ? e[r] = t[n] : e[r] = e[r].split("\\").pop() + } + return e + } + parseImage(e) { + const t = e.Content, + r = e.RelativeFilename || e.Filename, + n = r.slice(r.lastIndexOf(".") + 1).toLowerCase(); + let o; + switch (n) { + case "bmp": + o = "image/bmp"; + break; + case "jpg": + case "jpeg": + o = "image/jpeg"; + break; + case "png": + o = "image/png"; + break; + case "tif": + o = "image/tiff"; + break; + case "tga": + null === this.manager.getHandler(".tga") && l.warn("FBXLoader: TGA loader not found, skipping ", r), o = "image/tga"; + break; + default: + return void l.warn('FBXLoader: Image type "' + n + '" is not supported.') + } + if ("string" == typeof t) return "data:" + o + ";base64," + t; + { + const e = new Uint8Array(t); + return window.URL.createObjectURL(new Blob([e], { + type: o + })) + } + } + parseTextures(e) { + const t = new Map; + if ("Texture" in c.Objects) { + const r = c.Objects.Texture; + for (const n in r) { + const o = this.parseTexture(r[n], e); + t.set(parseInt(n), o) + } + } + return t + } + parseTexture(e, t) { + const r = this.loadTexture(e, t); + r.ID = e.id, r.name = e.attrName; + const o = e.WrapModeU, + a = e.WrapModeV, + s = void 0 !== o ? o.value : 0, + i = void 0 !== a ? a.value : 0; + if (r.wrapS = 0 === s ? n.RepeatWrapping : n.ClampToEdgeWrapping, r.wrapT = 0 === i ? n.RepeatWrapping : n.ClampToEdgeWrapping, "Scaling" in e) { + const t = e.Scaling.value; + r.repeat.x = t[0], r.repeat.y = t[1] + } + if ("Translation" in e) { + const t = e.Translation.value; + r.offset.x = t[0], r.offset.y = t[1] + } + return r + } + loadTexture(e, t) { + let r; + const o = this.textureLoader.path, + a = u.get(e.id).children; + let s; + void 0 !== a && a.length > 0 && void 0 !== t[a[0].ID] && (r = t[a[0].ID], 0 !== r.indexOf("blob:") && 0 !== r.indexOf("data:") || this.textureLoader.setPath(void 0)); + const i = e.FileName.slice(-3).toLowerCase(); + if ("tga" === i) { + const t = this.manager.getHandler(".tga"); + null === t ? (l.warn("FBXLoader: TGA loader not found, creating placeholder texture for", e.RelativeFilename), s = new n.Texture) : (t.setPath(this.textureLoader.path), s = t.load(r)) + } else if ("dds" === i) { + const t = this.manager.getHandler(".dds"); + null === t ? (l.warn("FBXLoader: DDS loader not found, creating placeholder texture for", e.RelativeFilename), s = new n.Texture) : (t.setPath(this.textureLoader.path), s = t.load(r)) + } else "psd" === i ? (l.warn("FBXLoader: PSD textures are not supported, creating placeholder texture for", e.RelativeFilename), s = new n.Texture) : s = this.textureLoader.load(r); + return this.textureLoader.setPath(o), s + } + parseMaterials(e) { + const t = new Map; + if ("Material" in c.Objects) { + const r = c.Objects.Material; + for (const n in r) { + const o = this.parseMaterial(r[n], e); + null !== o && t.set(parseInt(n), o) + } + } + return t + } + parseMaterial(e, t) { + const r = e.id, + o = e.attrName; + let a = e.ShadingModel; + if ("object" == typeof a && (a = a.value), !u.has(r)) return null; + const s = this.parseParameters(e, t, r); + let i; + switch (a.toLowerCase()) { + case "phong": + i = new n.MeshPhongMaterial; + break; + case "lambert": + i = new n.MeshLambertMaterial; + break; + default: + l.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', a), i = new n.MeshPhongMaterial + } + return i.setValues(s), i.name = o, i + } + parseParameters(e, t, r) { + const o = {}; + e.BumpFactor && (o.bumpScale = e.BumpFactor.value), e.Diffuse ? o.color = (new n.Color).fromArray(e.Diffuse.value).convertSRGBToLinear() : !e.DiffuseColor || "Color" !== e.DiffuseColor.type && "ColorRGB" !== e.DiffuseColor.type || (o.color = (new n.Color).fromArray(e.DiffuseColor.value).convertSRGBToLinear()), e.DisplacementFactor && (o.displacementScale = e.DisplacementFactor.value), e.Emissive ? o.emissive = (new n.Color).fromArray(e.Emissive.value).convertSRGBToLinear() : !e.EmissiveColor || "Color" !== e.EmissiveColor.type && "ColorRGB" !== e.EmissiveColor.type || (o.emissive = (new n.Color).fromArray(e.EmissiveColor.value).convertSRGBToLinear()), e.EmissiveFactor && (o.emissiveIntensity = parseFloat(e.EmissiveFactor.value)), e.Opacity && (o.opacity = parseFloat(e.Opacity.value)), o.opacity < 1 && (o.transparent = !0), e.ReflectionFactor && (o.reflectivity = e.ReflectionFactor.value), e.Shininess && (o.shininess = e.Shininess.value), e.Specular ? o.specular = (new n.Color).fromArray(e.Specular.value).convertSRGBToLinear() : e.SpecularColor && "Color" === e.SpecularColor.type && (o.specular = (new n.Color).fromArray(e.SpecularColor.value).convertSRGBToLinear()); + const a = this; + return u.get(r).children.forEach((function(e) { + const r = e.relationship; + switch (r) { + case "Bump": + o.bumpMap = a.getTexture(t, e.ID); + break; + case "Maya|TEX_ao_map": + o.aoMap = a.getTexture(t, e.ID); + break; + case "DiffuseColor": + case "Maya|TEX_color_map": + o.map = a.getTexture(t, e.ID), void 0 !== o.map && (o.map.colorSpace = n.SRGBColorSpace); + break; + case "DisplacementColor": + o.displacementMap = a.getTexture(t, e.ID); + break; + case "EmissiveColor": + o.emissiveMap = a.getTexture(t, e.ID), void 0 !== o.emissiveMap && (o.emissiveMap.colorSpace = n.SRGBColorSpace); + break; + case "NormalMap": + case "Maya|TEX_normal_map": + o.normalMap = a.getTexture(t, e.ID); + break; + case "ReflectionColor": + o.envMap = a.getTexture(t, e.ID), void 0 !== o.envMap && (o.envMap.mapping = n.EquirectangularReflectionMapping, o.envMap.colorSpace = n.SRGBColorSpace); + break; + case "SpecularColor": + o.specularMap = a.getTexture(t, e.ID), void 0 !== o.specularMap && (o.specularMap.colorSpace = n.SRGBColorSpace); + break; + case "TransparentColor": + case "TransparencyFactor": + o.alphaMap = a.getTexture(t, e.ID), o.transparent = !0; + break; + default: + l.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", r) + } + })), o + } + getTexture(e, t) { + return "LayeredTexture" in c.Objects && t in c.Objects.LayeredTexture && (l.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."), t = u.get(t).children[0].ID), e.get(t) + } + parseDeformers() { + const e = {}, + t = {}; + if ("Deformer" in c.Objects) { + const r = c.Objects.Deformer; + for (const n in r) { + const o = r[n], + a = u.get(parseInt(n)); + if ("Skin" === o.attrType) { + const t = this.parseSkeleton(a, r); + t.ID = n, a.parents.length > 1 && l.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."), t.geometryID = a.parents[0].ID, e[n] = t + } else if ("BlendShape" === o.attrType) { + const e = { + id: n + }; + e.rawTargets = this.parseMorphTargets(a, r), e.id = n, a.parents.length > 1 && l.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."), t[n] = e + } + } + } + return { + skeletons: e, + morphTargets: t + } + } + parseSkeleton(e, t) { + const r = []; + return e.children.forEach((function(e) { + const o = t[e.ID]; + if ("Cluster" !== o.attrType) return; + const a = { + ID: e.ID, + indices: [], + weights: [], + transformLink: (new n.Matrix4).fromArray(o.TransformLink.a) + }; + "Indexes" in o && (a.indices = o.Indexes.a, a.weights = o.Weights.a), r.push(a) + })), { + rawBones: r, + bones: [] + } + } + parseMorphTargets(e, t) { + const r = []; + for (let n = 0; n < e.children.length; n++) { + const o = e.children[n], + a = t[o.ID], + s = { + name: a.attrName, + initialWeight: a.DeformPercent, + id: a.id, + fullWeights: a.FullWeights.a + }; + if ("BlendShapeChannel" !== a.attrType) return; + s.geoID = u.get(parseInt(o.ID)).children.filter((function(e) { + return void 0 === e.relationship + }))[0].ID, r.push(s) + } + return r + } + parseScene(e, t, r) { + p = new n.Group; + const o = this.parseModels(e.skeletons, t, r), + a = c.Objects.Model, + s = this; + o.forEach((function(e) { + const t = a[e.ID]; + s.setLookAtProperties(e, t), u.get(e.ID).parents.forEach((function(t) { + const r = o.get(t.ID); + void 0 !== r && r.add(e) + })), null === e.parent && p.add(e) + })), this.bindSkeleton(e.skeletons, t, o), this.addGlobalSceneSettings(), p.traverse((function(e) { + if (e.userData.transformData) { + e.parent && (e.userData.transformData.parentMatrix = e.parent.matrix, e.userData.transformData.parentMatrixWorld = e.parent.matrixWorld); + const t = A(e.userData.transformData); + e.applyMatrix4(t), e.updateWorldMatrix() + } + })); + const i = (new m).parse(); + 1 === p.children.length && p.children[0].isGroup && (p.children[0].animations = i, p = p.children[0]), p.animations = i + } + parseModels(e, t, r) { + const o = new Map, + a = c.Objects.Model; + for (const s in a) { + const i = parseInt(s), + l = a[s], + c = u.get(i); + let p = this.buildSkeleton(c, e, i, l.attrName); + if (!p) { + switch (l.attrType) { + case "Camera": + p = this.createCamera(c); + break; + case "Light": + p = this.createLight(c); + break; + case "Mesh": + p = this.createMesh(c, t, r); + break; + case "NurbsCurve": + p = this.createCurve(c, t); + break; + case "LimbNode": + case "Root": + p = new n.Bone; + break; + default: + p = new n.Group + } + p.name = l.attrName ? n.PropertyBinding.sanitizeNodeName(l.attrName) : "", p.userData.originalName = l.attrName, p.ID = i + } + this.getTransformData(p, l), o.set(i, p) + } + return o + } + buildSkeleton(e, t, r, o) { + let a = null; + return e.parents.forEach((function(e) { + for (const s in t) { + const i = t[s]; + i.rawBones.forEach((function(t, s) { + if (t.ID === e.ID) { + const e = a; + a = new n.Bone, a.matrixWorld.copy(t.transformLink), a.name = o ? n.PropertyBinding.sanitizeNodeName(o) : "", a.userData.originalName = o, a.ID = r, i.bones[s] = a, null !== e && a.add(e) + } + })) + } + })), a + } + createCamera(e) { + let t, r; + if (e.children.forEach((function(e) { + const t = c.Objects.NodeAttribute[e.ID]; + void 0 !== t && (r = t) + })), void 0 === r) t = new n.Object3D; + else { + let e = 0; + void 0 !== r.CameraProjectionType && 1 === r.CameraProjectionType.value && (e = 1); + let o = 1; + void 0 !== r.NearPlane && (o = r.NearPlane.value / 1e3); + let a = 1e3; + void 0 !== r.FarPlane && (a = r.FarPlane.value / 1e3); + let s = window.innerWidth, + i = window.innerHeight; + void 0 !== r.AspectWidth && void 0 !== r.AspectHeight && (s = r.AspectWidth.value, i = r.AspectHeight.value); + const c = s / i; + let u = 45; + void 0 !== r.FieldOfView && (u = r.FieldOfView.value); + const p = r.FocalLength ? r.FocalLength.value : null; + switch (e) { + case 0: + t = new n.PerspectiveCamera(u, c, o, a), null !== p && t.setFocalLength(p); + break; + case 1: + t = new n.OrthographicCamera(-s / 2, s / 2, i / 2, -i / 2, o, a); + break; + default: + l.warn("THREE.FBXLoader: Unknown camera type " + e + "."), t = new n.Object3D + } + } + return t + } + createLight(e) { + let t, r; + if (e.children.forEach((function(e) { + const t = c.Objects.NodeAttribute[e.ID]; + void 0 !== t && (r = t) + })), void 0 === r) t = new n.Object3D; + else { + let e; + e = void 0 === r.LightType ? 0 : r.LightType.value; + let o = 16777215; + void 0 !== r.Color && (o = (new n.Color).fromArray(r.Color.value).convertSRGBToLinear()); + let a = void 0 === r.Intensity ? 1 : r.Intensity.value / 100; + void 0 !== r.CastLightOnObject && 0 === r.CastLightOnObject.value && (a = 0); + let s = 0; + void 0 !== r.FarAttenuationEnd && (s = void 0 !== r.EnableFarAttenuation && 0 === r.EnableFarAttenuation.value ? 0 : r.FarAttenuationEnd.value); + const i = 1; + switch (e) { + case 0: + t = new n.PointLight(o, a, s, i); + break; + case 1: + t = new n.DirectionalLight(o, a); + break; + case 2: + let e = Math.PI / 3; + void 0 !== r.InnerAngle && (e = n.MathUtils.degToRad(r.InnerAngle.value)); + let c = 0; + void 0 !== r.OuterAngle && (c = n.MathUtils.degToRad(r.OuterAngle.value), c = Math.max(c, 1)), t = new n.SpotLight(o, a, s, e, c, i); + break; + default: + l.warn("THREE.FBXLoader: Unknown light type " + r.LightType.value + ", defaulting to a PointLight."), t = new n.PointLight(o, a) + } + void 0 !== r.CastShadows && 1 === r.CastShadows.value && (t.castShadow = !0) + } + return t + } + createMesh(e, t, r) { + let o, a = null, + s = null; + const i = []; + return e.children.forEach((function(e) { + t.has(e.ID) && (a = t.get(e.ID)), r.has(e.ID) && i.push(r.get(e.ID)) + })), i.length > 1 ? s = i : i.length > 0 ? s = i[0] : (s = new n.MeshPhongMaterial({ + name: n.Loader.DEFAULT_MATERIAL_NAME, + color: 13421772 + }), i.push(s)), "color" in a.attributes && i.forEach((function(e) { + e.vertexColors = !0 + })), a.FBX_Deformer ? (o = new n.SkinnedMesh(a, s), o.normalizeSkinWeights()) : o = new n.Mesh(a, s), o + } + createCurve(e, t) { + const r = e.children.reduce((function(e, r) { + return t.has(r.ID) && (e = t.get(r.ID)), e + }), null), + o = new n.LineBasicMaterial({ + name: n.Loader.DEFAULT_MATERIAL_NAME, + color: 3342591, + linewidth: 1 + }); + return new n.Line(r, o) + } + getTransformData(e, t) { + const r = {}; + "InheritType" in t && (r.inheritType = parseInt(t.InheritType.value)), r.eulerOrder = "RotationOrder" in t ? D(t.RotationOrder.value) : "ZYX", "Lcl_Translation" in t && (r.translation = t.Lcl_Translation.value), "PreRotation" in t && (r.preRotation = t.PreRotation.value), "Lcl_Rotation" in t && (r.rotation = t.Lcl_Rotation.value), "PostRotation" in t && (r.postRotation = t.PostRotation.value), "Lcl_Scaling" in t && (r.scale = t.Lcl_Scaling.value), "ScalingOffset" in t && (r.scalingOffset = t.ScalingOffset.value), "ScalingPivot" in t && (r.scalingPivot = t.ScalingPivot.value), "RotationOffset" in t && (r.rotationOffset = t.RotationOffset.value), "RotationPivot" in t && (r.rotationPivot = t.RotationPivot.value), e.userData.transformData = r + } + setLookAtProperties(e, t) { + "LookAtProperty" in t && u.get(e.ID).children.forEach((function(t) { + if ("LookAtProperty" === t.relationship) { + const r = c.Objects.Model[t.ID]; + if ("Lcl_Translation" in r) { + const t = r.Lcl_Translation.value; + void 0 !== e.target ? (e.target.position.fromArray(t), p.add(e.target)) : e.lookAt((new n.Vector3).fromArray(t)) + } + } + })) + } + bindSkeleton(e, t, r) { + const o = this.parsePoseNodes(); + for (const a in e) { + const s = e[a]; + u.get(parseInt(s.ID)).parents.forEach((function(e) { + if (t.has(e.ID)) { + const t = e.ID; + u.get(t).parents.forEach((function(e) { + r.has(e.ID) && r.get(e.ID).bind(new n.Skeleton(s.bones), o[e.ID]) + })) + } + })) + } + } + parsePoseNodes() { + const e = {}; + if ("Pose" in c.Objects) { + const t = c.Objects.Pose; + for (const r in t) + if ("BindPose" === t[r].attrType && t[r].NbPoseNodes > 0) { + const o = t[r].PoseNode; + Array.isArray(o) ? o.forEach((function(t) { + e[t.Node] = (new n.Matrix4).fromArray(t.Matrix.a) + })) : e[o.Node] = (new n.Matrix4).fromArray(o.Matrix.a) + } + } + return e + } + addGlobalSceneSettings() { + if ("GlobalSettings" in c) { + if ("AmbientColor" in c.GlobalSettings) { + const e = c.GlobalSettings.AmbientColor.value, + t = e[0], + r = e[1], + o = e[2]; + if (0 !== t || 0 !== r || 0 !== o) { + const e = new n.Color(t, r, o).convertSRGBToLinear(); + p.add(new n.AmbientLight(e, 1)) + } + } + "UnitScaleFactor" in c.GlobalSettings && (p.userData.unitScaleFactor = c.GlobalSettings.UnitScaleFactor.value) + } + } + } + class f { + constructor() { + this.negativeMaterialIndices = !1 + } + parse(e) { + const t = new Map; + if ("Geometry" in c.Objects) { + const r = c.Objects.Geometry; + for (const n in r) { + const o = u.get(parseInt(n)), + a = this.parseGeometry(o, r[n], e); + t.set(parseInt(n), a) + } + } + return !0 === this.negativeMaterialIndices && l.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."), t + } + parseGeometry(e, t, r) { + switch (t.attrType) { + case "Mesh": + return this.parseMeshGeometry(e, t, r); + case "NurbsCurve": + return this.parseNurbsGeometry(t) + } + } + parseMeshGeometry(e, t, r) { + const n = r.skeletons, + o = [], + a = e.parents.map((function(e) { + return c.Objects.Model[e.ID] + })); + if (0 === a.length) return; + const s = e.children.reduce((function(e, t) { + return void 0 !== n[t.ID] && (e = n[t.ID]), e + }), null); + e.children.forEach((function(e) { + void 0 !== r.morphTargets[e.ID] && o.push(r.morphTargets[e.ID]) + })); + const i = a[0], + l = {}; + "RotationOrder" in i && (l.eulerOrder = D(i.RotationOrder.value)), "InheritType" in i && (l.inheritType = parseInt(i.InheritType.value)), "GeometricTranslation" in i && (l.translation = i.GeometricTranslation.value), "GeometricRotation" in i && (l.rotation = i.GeometricRotation.value), "GeometricScaling" in i && (l.scale = i.GeometricScaling.value); + const u = A(l); + return this.genGeometry(t, s, o, u) + } + genGeometry(e, t, r, o) { + const a = new n.BufferGeometry; + e.attrName && (a.name = e.attrName); + const s = this.parseGeoNode(e, t), + i = this.genBuffers(s), + l = new n.Float32BufferAttribute(i.vertex, 3); + if (l.applyMatrix4(o), a.setAttribute("position", l), i.colors.length > 0 && a.setAttribute("color", new n.Float32BufferAttribute(i.colors, 3)), t && (a.setAttribute("skinIndex", new n.Uint16BufferAttribute(i.weightsIndices, 4)), a.setAttribute("skinWeight", new n.Float32BufferAttribute(i.vertexWeights, 4)), a.FBX_Deformer = t), i.normal.length > 0) { + const e = (new n.Matrix3).getNormalMatrix(o), + t = new n.Float32BufferAttribute(i.normal, 3); + t.applyNormalMatrix(e), a.setAttribute("normal", t) + } + if (i.uvs.forEach((function(e, t) { + const r = 0 === t ? "uv" : `uv${t}`; + a.setAttribute(r, new n.Float32BufferAttribute(i.uvs[t], 2)) + })), s.material && "AllSame" !== s.material.mappingType) { + let e = i.materialIndex[0], + t = 0; + if (i.materialIndex.forEach((function(r, n) { + r !== e && (a.addGroup(t, n - t, e), e = r, t = n) + })), a.groups.length > 0) { + const t = a.groups[a.groups.length - 1], + r = t.start + t.count; + r !== i.materialIndex.length && a.addGroup(r, i.materialIndex.length - r, e) + } + 0 === a.groups.length && a.addGroup(0, i.materialIndex.length, i.materialIndex[0]) + } + return this.addMorphTargets(a, e, r, o), a + } + parseGeoNode(e, t) { + const r = {}; + if (r.vertexPositions = void 0 !== e.Vertices ? e.Vertices.a : [], r.vertexIndices = void 0 !== e.PolygonVertexIndex ? e.PolygonVertexIndex.a : [], e.LayerElementColor && (r.color = this.parseVertexColors(e.LayerElementColor[0])), e.LayerElementMaterial && (r.material = this.parseMaterialIndices(e.LayerElementMaterial[0])), e.LayerElementNormal && (r.normal = this.parseNormals(e.LayerElementNormal[0])), e.LayerElementUV) { + r.uv = []; + let t = 0; + for (; e.LayerElementUV[t];) e.LayerElementUV[t].UV && r.uv.push(this.parseUVs(e.LayerElementUV[t])), t++ + } + return r.weightTable = {}, null !== t && (r.skeleton = t, t.rawBones.forEach((function(e, t) { + e.indices.forEach((function(n, o) { + void 0 === r.weightTable[n] && (r.weightTable[n] = []), r.weightTable[n].push({ + id: t, + weight: e.weights[o] + }) + })) + }))), r + } + genBuffers(e) { + const t = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [] + }; + let r = 0, + n = 0, + o = !1, + a = [], + s = [], + i = [], + c = [], + u = [], + p = []; + const h = this; + return e.vertexIndices.forEach((function(d, f) { + let m, g = !1; + d < 0 && (d ^= -1, g = !0); + let v = [], + y = []; + if (a.push(3 * d, 3 * d + 1, 3 * d + 2), e.color) { + const t = b(f, r, d, e.color); + i.push(t[0], t[1], t[2]) + } + if (e.skeleton) { + if (void 0 !== e.weightTable[d] && e.weightTable[d].forEach((function(e) { + y.push(e.weight), v.push(e.id) + })), y.length > 4) { + o || (l.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."), o = !0); + const e = [0, 0, 0, 0], + t = [0, 0, 0, 0]; + y.forEach((function(r, n) { + let o = r, + a = v[n]; + t.forEach((function(t, r, n) { + if (o > t) { + n[r] = o, o = t; + const s = e[r]; + e[r] = a, a = s + } + })) + })), v = e, y = t + } + for (; y.length < 4;) y.push(0), v.push(0); + for (let e = 0; e < 4; ++e) u.push(y[e]), p.push(v[e]) + } + if (e.normal) { + const t = b(f, r, d, e.normal); + s.push(t[0], t[1], t[2]) + } + e.material && "AllSame" !== e.material.mappingType && (m = b(f, r, d, e.material)[0], m < 0 && (h.negativeMaterialIndices = !0, m = 0)), e.uv && e.uv.forEach((function(e, t) { + const n = b(f, r, d, e); + void 0 === c[t] && (c[t] = []), c[t].push(n[0]), c[t].push(n[1]) + })), n++, g && (h.genFace(t, e, a, m, s, i, c, u, p, n), r++, n = 0, a = [], s = [], i = [], c = [], u = [], p = []) + })), t + } + getNormalNewell(e) { + const t = new n.Vector3(0, 0, 0); + for (let r = 0; r < e.length; r++) { + const n = e[r], + o = e[(r + 1) % e.length]; + t.x += (n.y - o.y) * (n.z + o.z), t.y += (n.z - o.z) * (n.x + o.x), t.z += (n.x - o.x) * (n.y + o.y) + } + return t.normalize(), t + } + getNormalTangentAndBitangent(e) { + const t = this.getNormalNewell(e), + r = (Math.abs(t.z) > .5 ? new n.Vector3(0, 1, 0) : new n.Vector3(0, 0, 1)).cross(t).normalize(), + o = t.clone().cross(r).normalize(); + return { + normal: t, + tangent: r, + bitangent: o + } + } + flattenVertex(e, t, r) { + return new n.Vector2(e.dot(t), e.dot(r)) + } + genFace(e, t, r, o, a, s, i, l, c, u) { + let p; + if (u > 3) { + const e = []; + for (let o = 0; o < r.length; o += 3) e.push(new n.Vector3(t.vertexPositions[r[o]], t.vertexPositions[r[o + 1]], t.vertexPositions[r[o + 2]])); + const { + tangent: o, + bitangent: a + } = this.getNormalTangentAndBitangent(e), s = []; + for (const t of e) s.push(this.flattenVertex(t, o, a)); + p = n.ShapeUtils.triangulateShape(s, []) + } else p = [ + [0, 1, 2] + ]; + for (const [n, u, h] of p) e.vertex.push(t.vertexPositions[r[3 * n]]), e.vertex.push(t.vertexPositions[r[3 * n + 1]]), e.vertex.push(t.vertexPositions[r[3 * n + 2]]), e.vertex.push(t.vertexPositions[r[3 * u]]), e.vertex.push(t.vertexPositions[r[3 * u + 1]]), e.vertex.push(t.vertexPositions[r[3 * u + 2]]), e.vertex.push(t.vertexPositions[r[3 * h]]), e.vertex.push(t.vertexPositions[r[3 * h + 1]]), e.vertex.push(t.vertexPositions[r[3 * h + 2]]), t.skeleton && (e.vertexWeights.push(l[4 * n]), e.vertexWeights.push(l[4 * n + 1]), e.vertexWeights.push(l[4 * n + 2]), e.vertexWeights.push(l[4 * n + 3]), e.vertexWeights.push(l[4 * u]), e.vertexWeights.push(l[4 * u + 1]), e.vertexWeights.push(l[4 * u + 2]), e.vertexWeights.push(l[4 * u + 3]), e.vertexWeights.push(l[4 * h]), e.vertexWeights.push(l[4 * h + 1]), e.vertexWeights.push(l[4 * h + 2]), e.vertexWeights.push(l[4 * h + 3]), e.weightsIndices.push(c[4 * n]), e.weightsIndices.push(c[4 * n + 1]), e.weightsIndices.push(c[4 * n + 2]), e.weightsIndices.push(c[4 * n + 3]), e.weightsIndices.push(c[4 * u]), e.weightsIndices.push(c[4 * u + 1]), e.weightsIndices.push(c[4 * u + 2]), e.weightsIndices.push(c[4 * u + 3]), e.weightsIndices.push(c[4 * h]), e.weightsIndices.push(c[4 * h + 1]), e.weightsIndices.push(c[4 * h + 2]), e.weightsIndices.push(c[4 * h + 3])), t.color && (e.colors.push(s[3 * n]), e.colors.push(s[3 * n + 1]), e.colors.push(s[3 * n + 2]), e.colors.push(s[3 * u]), e.colors.push(s[3 * u + 1]), e.colors.push(s[3 * u + 2]), e.colors.push(s[3 * h]), e.colors.push(s[3 * h + 1]), e.colors.push(s[3 * h + 2])), t.material && "AllSame" !== t.material.mappingType && (e.materialIndex.push(o), e.materialIndex.push(o), e.materialIndex.push(o)), t.normal && (e.normal.push(a[3 * n]), e.normal.push(a[3 * n + 1]), e.normal.push(a[3 * n + 2]), e.normal.push(a[3 * u]), e.normal.push(a[3 * u + 1]), e.normal.push(a[3 * u + 2]), e.normal.push(a[3 * h]), e.normal.push(a[3 * h + 1]), e.normal.push(a[3 * h + 2])), t.uv && t.uv.forEach((function(t, r) { + void 0 === e.uvs[r] && (e.uvs[r] = []), e.uvs[r].push(i[r][2 * n]), e.uvs[r].push(i[r][2 * n + 1]), e.uvs[r].push(i[r][2 * u]), e.uvs[r].push(i[r][2 * u + 1]), e.uvs[r].push(i[r][2 * h]), e.uvs[r].push(i[r][2 * h + 1]) + })) + } + addMorphTargets(e, t, r, n) { + if (0 === r.length) return; + e.morphTargetsRelative = !0, e.morphAttributes.position = []; + const o = this; + r.forEach((function(r) { + r.rawTargets.forEach((function(r) { + const a = c.Objects.Geometry[r.geoID]; + void 0 !== a && o.genMorphGeometry(e, t, a, n, r.name) + })) + })) + } + genMorphGeometry(e, t, r, o, a) { + const s = void 0 !== t.PolygonVertexIndex ? t.PolygonVertexIndex.a : [], + i = void 0 !== r.Vertices ? r.Vertices.a : [], + l = void 0 !== r.Indexes ? r.Indexes.a : [], + c = 3 * e.attributes.position.count, + u = new Float32Array(c); + for (let e = 0; e < l.length; e++) { + const t = 3 * l[e]; + u[t] = i[3 * e], u[t + 1] = i[3 * e + 1], u[t + 2] = i[3 * e + 2] + } + const p = { + vertexIndices: s, + vertexPositions: u + }, + h = this.genBuffers(p), + d = new n.Float32BufferAttribute(h.vertex, 3); + d.name = a || r.attrName, d.applyMatrix4(o), e.morphAttributes.position.push(d) + } + parseNormals(e) { + const t = e.MappingInformationType, + r = e.ReferenceInformationType, + n = e.Normals.a; + let o = []; + return "IndexToDirect" === r && ("NormalIndex" in e ? o = e.NormalIndex.a : "NormalsIndex" in e && (o = e.NormalsIndex.a)), { + dataSize: 3, + buffer: n, + indices: o, + mappingType: t, + referenceType: r + } + } + parseUVs(e) { + const t = e.MappingInformationType, + r = e.ReferenceInformationType, + n = e.UV.a; + let o = []; + return "IndexToDirect" === r && (o = e.UVIndex.a), { + dataSize: 2, + buffer: n, + indices: o, + mappingType: t, + referenceType: r + } + } + parseVertexColors(e) { + const t = e.MappingInformationType, + r = e.ReferenceInformationType, + o = e.Colors.a; + let a = []; + "IndexToDirect" === r && (a = e.ColorIndex.a); + for (let e = 0, t = new n.Color; e < o.length; e += 4) t.fromArray(o, e).convertSRGBToLinear().toArray(o, e); + return { + dataSize: 4, + buffer: o, + indices: a, + mappingType: t, + referenceType: r + } + } + parseMaterialIndices(e) { + const t = e.MappingInformationType, + r = e.ReferenceInformationType; + if ("NoMappingInformation" === t) return { + dataSize: 1, + buffer: [0], + indices: [0], + mappingType: "AllSame", + referenceType: r + }; + const n = e.Materials.a, + o = []; + for (let e = 0; e < n.length; ++e) o.push(e); + return { + dataSize: 1, + buffer: n, + indices: o, + mappingType: t, + referenceType: r + } + } + parseNurbsGeometry(e) { + const t = parseInt(e.Order); + if (isNaN(t)) return l.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", e.Order, e.id), new n.BufferGeometry; + const r = t - 1, + o = e.KnotVector.a, + a = [], + s = e.Points.a; + for (let e = 0, t = s.length; e < t; e += 4) a.push((new n.Vector4).fromArray(s, e)); + let c, u; + if ("Closed" === e.Form) a.push(a[0]); + else if ("Periodic" === e.Form) { + c = r, u = o.length - 1 - c; + for (let e = 0; e < r; ++e) a.push(a[e]) + } + const p = new i(r, o, a, c, u).getPoints(12 * a.length); + return (new n.BufferGeometry).setFromPoints(p) + } + } + class m { + parse() { + const e = [], + t = this.parseClips(); + if (void 0 !== t) + for (const r in t) { + const n = t[r], + o = this.addClip(n); + e.push(o) + } + return e + } + parseClips() { + if (void 0 === c.Objects.AnimationCurve) return; + const e = this.parseAnimationCurveNodes(); + this.parseAnimationCurves(e); + const t = this.parseAnimationLayers(e); + return this.parseAnimStacks(t) + } + parseAnimationCurveNodes() { + const e = c.Objects.AnimationCurveNode, + t = new Map; + for (const r in e) { + const n = e[r]; + if (null !== n.attrName.match(/S|R|T|DeformPercent/)) { + const e = { + id: n.id, + attr: n.attrName, + curves: {} + }; + t.set(e.id, e) + } + } + return t + } + parseAnimationCurves(e) { + const t = c.Objects.AnimationCurve; + for (const r in t) { + const n = { + id: t[r].id, + times: t[r].KeyTime.a.map(T), + values: t[r].KeyValueFloat.a + }, + o = u.get(n.id); + if (void 0 !== o) { + const t = o.parents[0].ID, + r = o.parents[0].relationship; + r.match(/X/) ? e.get(t).curves.x = n : r.match(/Y/) ? e.get(t).curves.y = n : r.match(/Z/) ? e.get(t).curves.z = n : r.match(/DeformPercent/) && e.has(t) && (e.get(t).curves.morph = n) + } + } + } + parseAnimationLayers(e) { + const t = c.Objects.AnimationLayer, + r = new Map; + for (const o in t) { + const t = [], + a = u.get(parseInt(o)); + void 0 !== a && (a.children.forEach((function(r, o) { + if (e.has(r.ID)) { + const a = e.get(r.ID); + if (void 0 !== a.curves.x || void 0 !== a.curves.y || void 0 !== a.curves.z) { + if (void 0 === t[o]) { + const e = u.get(r.ID).parents.filter((function(e) { + return void 0 !== e.relationship + }))[0].ID; + if (void 0 !== e) { + const a = c.Objects.Model[e.toString()]; + if (void 0 === a) return void l.warn("THREE.FBXLoader: Encountered a unused curve.", r); + const s = { + modelName: a.attrName ? n.PropertyBinding.sanitizeNodeName(a.attrName) : "", + ID: a.id, + initialPosition: [0, 0, 0], + initialRotation: [0, 0, 0], + initialScale: [1, 1, 1] + }; + p.traverse((function(e) { + e.ID === a.id && (s.transform = e.matrix, e.userData.transformData && (s.eulerOrder = e.userData.transformData.eulerOrder)) + })), s.transform || (s.transform = new n.Matrix4), "PreRotation" in a && (s.preRotation = a.PreRotation.value), "PostRotation" in a && (s.postRotation = a.PostRotation.value), t[o] = s + } + } + t[o] && (t[o][a.attr] = a) + } else if (void 0 !== a.curves.morph) { + if (void 0 === t[o]) { + const e = u.get(r.ID).parents.filter((function(e) { + return void 0 !== e.relationship + }))[0].ID, + a = u.get(e).parents[0].ID, + s = u.get(a).parents[0].ID, + i = u.get(s).parents[0].ID, + l = c.Objects.Model[i], + p = { + modelName: l.attrName ? n.PropertyBinding.sanitizeNodeName(l.attrName) : "", + morphName: c.Objects.Deformer[e].attrName + }; + t[o] = p + } + t[o][a.attr] = a + } + } + })), r.set(parseInt(o), t)) + } + return r + } + parseAnimStacks(e) { + const t = c.Objects.AnimationStack, + r = {}; + for (const n in t) { + const o = u.get(parseInt(n)).children; + o.length > 1 && l.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); + const a = e.get(o[0].ID); + r[n] = { + name: t[n].attrName, + layer: a + } + } + return r + } + addClip(e) { + let t = []; + const r = this; + return e.layer.forEach((function(e) { + t = t.concat(r.generateTracks(e)) + })), new n.AnimationClip(e.name, -1, t) + } + generateTracks(e) { + const t = []; + let r = new n.Vector3, + o = new n.Vector3; + if (e.transform && e.transform.decompose(r, new n.Quaternion, o), r = r.toArray(), o = o.toArray(), void 0 !== e.T && Object.keys(e.T.curves).length > 0) { + const n = this.generateVectorTrack(e.modelName, e.T.curves, r, "position"); + void 0 !== n && t.push(n) + } + if (void 0 !== e.R && Object.keys(e.R.curves).length > 0) { + const r = this.generateRotationTrack(e.modelName, e.R.curves, e.preRotation, e.postRotation, e.eulerOrder); + void 0 !== r && t.push(r) + } + if (void 0 !== e.S && Object.keys(e.S.curves).length > 0) { + const r = this.generateVectorTrack(e.modelName, e.S.curves, o, "scale"); + void 0 !== r && t.push(r) + } + if (void 0 !== e.DeformPercent) { + const r = this.generateMorphTrack(e); + void 0 !== r && t.push(r) + } + return t + } + generateVectorTrack(e, t, r, o) { + const a = this.getTimesForAllAxes(t), + s = this.getKeyframeTrackValues(a, t, r); + return new n.VectorKeyframeTrack(e + "." + o, a, s) + } + generateRotationTrack(e, t, r, o, a) { + let s, i; + if (void 0 !== t.x && void 0 !== t.y && void 0 !== t.z) { + const e = this.interpolateRotations(t.x, t.y, t.z, a); + s = e[0], i = e[1] + } + void 0 !== r && ((r = r.map(n.MathUtils.degToRad)).push(a), r = (new n.Euler).fromArray(r), r = (new n.Quaternion).setFromEuler(r)), void 0 !== o && ((o = o.map(n.MathUtils.degToRad)).push(a), o = (new n.Euler).fromArray(o), o = (new n.Quaternion).setFromEuler(o).invert()); + const l = new n.Quaternion, + c = new n.Euler, + u = []; + if (!i || !s) return new n.QuaternionKeyframeTrack(e + ".quaternion", [0], [0]); + for (let e = 0; e < i.length; e += 3) c.set(i[e], i[e + 1], i[e + 2], a), l.setFromEuler(c), void 0 !== r && l.premultiply(r), void 0 !== o && l.multiply(o), e > 2 && (new n.Quaternion).fromArray(u, (e - 3) / 3 * 4).dot(l) < 0 && l.set(-l.x, -l.y, -l.z, -l.w), l.toArray(u, e / 3 * 4); + return new n.QuaternionKeyframeTrack(e + ".quaternion", s, u) + } + generateMorphTrack(e) { + const t = e.DeformPercent.curves.morph, + r = t.values.map((function(e) { + return e / 100 + })), + o = p.getObjectByName(e.modelName).morphTargetDictionary[e.morphName]; + return new n.NumberKeyframeTrack(e.modelName + ".morphTargetInfluences[" + o + "]", t.times, r) + } + getTimesForAllAxes(e) { + let t = []; + if (void 0 !== e.x && (t = t.concat(e.x.times)), void 0 !== e.y && (t = t.concat(e.y.times)), void 0 !== e.z && (t = t.concat(e.z.times)), t = t.sort((function(e, t) { + return e - t + })), t.length > 1) { + let e = 1, + r = t[0]; + for (let n = 1; n < t.length; n++) { + const o = t[n]; + o !== r && (t[e] = o, r = o, e++) + } + t = t.slice(0, e) + } + return t + } + getKeyframeTrackValues(e, t, r) { + const n = r, + o = []; + let a = -1, + s = -1, + i = -1; + return e.forEach((function(e) { + if (t.x && (a = t.x.times.indexOf(e)), t.y && (s = t.y.times.indexOf(e)), t.z && (i = t.z.times.indexOf(e)), -1 !== a) { + const e = t.x.values[a]; + o.push(e), n[0] = e + } else o.push(n[0]); + if (-1 !== s) { + const e = t.y.values[s]; + o.push(e), n[1] = e + } else o.push(n[1]); + if (-1 !== i) { + const e = t.z.values[i]; + o.push(e), n[2] = e + } else o.push(n[2]) + })), o + } + interpolateRotations(e, t, r, o) { + const a = [], + s = []; + a.push(e.times[0]), s.push(n.MathUtils.degToRad(e.values[0])), s.push(n.MathUtils.degToRad(t.values[0])), s.push(n.MathUtils.degToRad(r.values[0])); + for (let i = 1; i < e.values.length; i++) { + const l = [e.values[i - 1], t.values[i - 1], r.values[i - 1]]; + if (isNaN(l[0]) || isNaN(l[1]) || isNaN(l[2])) continue; + const c = l.map(n.MathUtils.degToRad), + u = [e.values[i], t.values[i], r.values[i]]; + if (isNaN(u[0]) || isNaN(u[1]) || isNaN(u[2])) continue; + const p = u.map(n.MathUtils.degToRad), + h = [u[0] - l[0], u[1] - l[1], u[2] - l[2]], + d = [Math.abs(h[0]), Math.abs(h[1]), Math.abs(h[2])]; + if (d[0] >= 180 || d[1] >= 180 || d[2] >= 180) { + const t = Math.max(...d) / 180, + r = new n.Euler(...c, o), + l = new n.Euler(...p, o), + u = (new n.Quaternion).setFromEuler(r), + h = (new n.Quaternion).setFromEuler(l); + u.dot(h) && h.set(-h.x, -h.y, -h.z, -h.w); + const f = e.times[i - 1], + m = e.times[i] - f, + g = new n.Quaternion, + v = new n.Euler; + for (let e = 0; e < 1; e += 1 / t) g.copy(u.clone().slerp(h.clone(), e)), a.push(f + e * m), v.setFromQuaternion(g, o), s.push(v.x), s.push(v.y), s.push(v.z) + } else a.push(e.times[i]), s.push(n.MathUtils.degToRad(e.values[i])), s.push(n.MathUtils.degToRad(t.values[i])), s.push(n.MathUtils.degToRad(r.values[i])) + } + return [a, s] + } + } + class g { + getPrevNode() { + return this.nodeStack[this.currentIndent - 2] + } + getCurrentNode() { + return this.nodeStack[this.currentIndent - 1] + } + getCurrentProp() { + return this.currentProp + } + pushStack(e) { + this.nodeStack.push(e), this.currentIndent += 1 + } + popStack() { + this.nodeStack.pop(), this.currentIndent -= 1 + } + setCurrentProp(e, t) { + this.currentProp = e, this.currentPropName = t + } + parse(e) { + this.currentIndent = 0, this.allNodes = new w, this.nodeStack = [], this.currentProp = [], this.currentPropName = ""; + const t = this, + r = e.split(/[\r\n]+/); + return r.forEach((function(e, n) { + const o = e.match(/^[\s\t]*;/), + a = e.match(/^[\s\t]*$/); + if (o || a) return; + const s = e.match("^\\t{" + t.currentIndent + "}(\\w+):(.*){", ""), + i = e.match("^\\t{" + t.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"), + l = e.match("^\\t{" + (t.currentIndent - 1) + "}}"); + s ? t.parseNodeBegin(e, s) : i ? t.parseNodeProperty(e, i, r[++n]) : l ? t.popStack() : e.match(/^[^\s\t}]/) && t.parseNodePropertyContinued(e) + })), this.allNodes + } + parseNodeBegin(e, t) { + const r = t[1].trim().replace(/^"/, "").replace(/"$/, ""), + n = t[2].split(",").map((function(e) { + return e.trim().replace(/^"/, "").replace(/"$/, "") + })), + o = { + name: r + }, + a = this.parseNodeAttr(n), + s = this.getCurrentNode(); + 0 === this.currentIndent ? this.allNodes.add(r, o) : r in s ? ("PoseNode" === r ? s.PoseNode.push(o) : void 0 !== s[r].id && (s[r] = {}, s[r][s[r].id] = s[r]), "" !== a.id && (s[r][a.id] = o)) : "number" == typeof a.id ? (s[r] = {}, s[r][a.id] = o) : "Properties70" !== r && (s[r] = "PoseNode" === r ? [o] : o), "number" == typeof a.id && (o.id = a.id), "" !== a.name && (o.attrName = a.name), "" !== a.type && (o.attrType = a.type), this.pushStack(o) + } + parseNodeAttr(e) { + let t = e[0]; + "" !== e[0] && (t = parseInt(e[0]), isNaN(t) && (t = e[0])); + let r = "", + n = ""; + return e.length > 1 && (r = e[1].replace(/^(\w+)::/, ""), n = e[2]), { + id: t, + name: r, + type: n + } + } + parseNodeProperty(e, t, r) { + let n = t[1].replace(/^"/, "").replace(/"$/, "").trim(), + o = t[2].replace(/^"/, "").replace(/"$/, "").trim(); + "Content" === n && "," === o && (o = r.replace(/"/g, "").replace(/,$/, "").trim()); + const a = this.getCurrentNode(); + if ("Properties70" !== a.name) { + if ("C" === n) { + const e = o.split(",").slice(1), + t = parseInt(e[0]), + r = parseInt(e[1]); + let s = o.split(",").slice(3); + s = s.map((function(e) { + return e.trim().replace(/^"/, "") + })), n = "connections", o = [t, r], + function(e, t) { + for (let r = 0, n = e.length, o = t.length; r < o; r++, n++) e[n] = t[r] + }(o, s), void 0 === a[n] && (a[n] = []) + } + "Node" === n && (a.id = o), n in a && Array.isArray(a[n]) ? a[n].push(o) : "a" !== n ? a[n] = o : a.a = o, this.setCurrentProp(a, n), "a" === n && "," !== o.slice(-1) && (a.a = L(o)) + } else this.parseNodeSpecialProperty(e, n, o) + } + parseNodePropertyContinued(e) { + const t = this.getCurrentNode(); + t.a += e, "," !== e.slice(-1) && (t.a = L(t.a)) + } + parseNodeSpecialProperty(e, t, r) { + const n = r.split('",').map((function(e) { + return e.trim().replace(/^\"/, "").replace(/\s/, "_") + })), + o = n[0], + a = n[1], + s = n[2], + i = n[3]; + let l = n[4]; + switch (a) { + case "int": + case "enum": + case "bool": + case "ULongLong": + case "double": + case "Number": + case "FieldOfView": + l = parseFloat(l); + break; + case "Color": + case "ColorRGB": + case "Vector3D": + case "Lcl_Translation": + case "Lcl_Rotation": + case "Lcl_Scaling": + l = L(l) + } + this.getPrevNode()[o] = { + type: a, + type2: s, + flag: i, + value: l + }, this.setCurrentProp(this.getPrevNode(), o) + } + } + class v { + parse(e) { + const t = new y(e); + t.skip(23); + const r = t.getUint32(); + if (r < 6400) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + r); + const n = new w; + for (; !this.endOfContent(t);) { + const e = this.parseNode(t, r); + null !== e && n.add(e.name, e) + } + return n + } + endOfContent(e) { + return e.size() % 16 == 0 ? (e.getOffset() + 160 + 16 & -16) >= e.size() : e.getOffset() + 160 + 16 >= e.size() + } + parseNode(e, t) { + const r = {}, + n = t >= 7500 ? e.getUint64() : e.getUint32(), + o = t >= 7500 ? e.getUint64() : e.getUint32(); + t >= 7500 ? e.getUint64() : e.getUint32(); + const a = e.getUint8(), + s = e.getString(a); + if (0 === n) return null; + const i = []; + for (let t = 0; t < o; t++) i.push(this.parseProperty(e)); + const l = i.length > 0 ? i[0] : "", + c = i.length > 1 ? i[1] : "", + u = i.length > 2 ? i[2] : ""; + for (r.singleProperty = 1 === o && e.getOffset() === n; n > e.getOffset();) { + const n = this.parseNode(e, t); + null !== n && this.parseSubNode(s, r, n) + } + return r.propertyList = i, "number" == typeof l && (r.id = l), "" !== c && (r.attrName = c), "" !== u && (r.attrType = u), "" !== s && (r.name = s), r + } + parseSubNode(e, t, r) { + if (!0 === r.singleProperty) { + const e = r.propertyList[0]; + Array.isArray(e) ? (t[r.name] = r, r.a = e) : t[r.name] = e + } else if ("Connections" === e && "C" === r.name) { + const e = []; + r.propertyList.forEach((function(t, r) { + 0 !== r && e.push(t) + })), void 0 === t.connections && (t.connections = []), t.connections.push(e) + } else if ("Properties70" === r.name) Object.keys(r).forEach((function(e) { + t[e] = r[e] + })); + else if ("Properties70" === e && "P" === r.name) { + let e = r.propertyList[0], + n = r.propertyList[1]; + const o = r.propertyList[2], + a = r.propertyList[3]; + let s; + 0 === e.indexOf("Lcl ") && (e = e.replace("Lcl ", "Lcl_")), 0 === n.indexOf("Lcl ") && (n = n.replace("Lcl ", "Lcl_")), s = "Color" === n || "ColorRGB" === n || "Vector" === n || "Vector3D" === n || 0 === n.indexOf("Lcl_") ? [r.propertyList[4], r.propertyList[5], r.propertyList[6]] : r.propertyList[4], t[e] = { + type: n, + type2: o, + flag: a, + value: s + } + } else void 0 === t[r.name] ? "number" == typeof r.id ? (t[r.name] = {}, t[r.name][r.id] = r) : t[r.name] = r : "PoseNode" === r.name ? (Array.isArray(t[r.name]) || (t[r.name] = [t[r.name]]), t[r.name].push(r)) : void 0 === t[r.name][r.id] && (t[r.name][r.id] = r) + } + parseProperty(e) { + const t = e.getString(1); + let r; + switch (t) { + case "C": + return e.getBoolean(); + case "D": + return e.getFloat64(); + case "F": + return e.getFloat32(); + case "I": + return e.getInt32(); + case "L": + return e.getInt64(); + case "R": + return r = e.getUint32(), e.getArrayBuffer(r); + case "S": + return r = e.getUint32(), e.getString(r); + case "Y": + return e.getInt16(); + case "b": + case "c": + case "d": + case "f": + case "i": + case "l": + const n = e.getUint32(), + a = e.getUint32(), + s = e.getUint32(); + if (0 === a) switch (t) { + case "b": + case "c": + return e.getBooleanArray(n); + case "d": + return e.getFloat64Array(n); + case "f": + return e.getFloat32Array(n); + case "i": + return e.getInt32Array(n); + case "l": + return e.getInt64Array(n) + } + const i = o.HT(new Uint8Array(e.getArrayBuffer(s))), + l = new y(i.buffer); + switch (t) { + case "b": + case "c": + return l.getBooleanArray(n); + case "d": + return l.getFloat64Array(n); + case "f": + return l.getFloat32Array(n); + case "i": + return l.getInt32Array(n); + case "l": + return l.getInt64Array(n) + } + break; + default: + throw new Error("THREE.FBXLoader: Unknown property type " + t) + } + } + } + class y { + constructor(e, t) { + this.dv = new DataView(e), this.offset = 0, this.littleEndian = void 0 === t || t, this._textDecoder = new TextDecoder + } + getOffset() { + return this.offset + } + size() { + return this.dv.buffer.byteLength + } + skip(e) { + this.offset += e + } + getBoolean() { + return 1 == (1 & this.getUint8()) + } + getBooleanArray(e) { + const t = []; + for (let r = 0; r < e; r++) t.push(this.getBoolean()); + return t + } + getUint8() { + const e = this.dv.getUint8(this.offset); + return this.offset += 1, e + } + getInt16() { + const e = this.dv.getInt16(this.offset, this.littleEndian); + return this.offset += 2, e + } + getInt32() { + const e = this.dv.getInt32(this.offset, this.littleEndian); + return this.offset += 4, e + } + getInt32Array(e) { + const t = []; + for (let r = 0; r < e; r++) t.push(this.getInt32()); + return t + } + getUint32() { + const e = this.dv.getUint32(this.offset, this.littleEndian); + return this.offset += 4, e + } + getInt64() { + let e, t; + return this.littleEndian ? (e = this.getUint32(), t = this.getUint32()) : (t = this.getUint32(), e = this.getUint32()), 2147483648 & t ? (t = 4294967295 & ~t, e = 4294967295 & ~e, 4294967295 === e && (t = t + 1 & 4294967295), e = e + 1 & 4294967295, -(4294967296 * t + e)) : 4294967296 * t + e + } + getInt64Array(e) { + const t = []; + for (let r = 0; r < e; r++) t.push(this.getInt64()); + return t + } + getUint64() { + let e, t; + return this.littleEndian ? (e = this.getUint32(), t = this.getUint32()) : (t = this.getUint32(), e = this.getUint32()), 4294967296 * t + e + } + getFloat32() { + const e = this.dv.getFloat32(this.offset, this.littleEndian); + return this.offset += 4, e + } + getFloat32Array(e) { + const t = []; + for (let r = 0; r < e; r++) t.push(this.getFloat32()); + return t + } + getFloat64() { + const e = this.dv.getFloat64(this.offset, this.littleEndian); + return this.offset += 8, e + } + getFloat64Array(e) { + const t = []; + for (let r = 0; r < e; r++) t.push(this.getFloat64()); + return t + } + getArrayBuffer(e) { + const t = this.dv.buffer.slice(this.offset, this.offset + e); + return this.offset += e, t + } + getString(e) { + const t = this.offset; + let r = new Uint8Array(this.dv.buffer, t, e); + this.skip(e); + const n = r.indexOf(0); + return n >= 0 && (r = new Uint8Array(this.dv.buffer, t, n)), this._textDecoder.decode(r) + } + } + class w { + add(e, t) { + this[e] = t + } + } + + function x(e) { + const t = e.match(/FBXVersion: (\d+)/); + if (t) return parseInt(t[1]); + throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.") + } + + function T(e) { + return e / 46186158e3 + } + const I = []; + + function b(e, t, r, n) { + let o; + switch (n.mappingType) { + case "ByPolygonVertex": + o = e; + break; + case "ByPolygon": + o = t; + break; + case "ByVertice": + o = r; + break; + case "AllSame": + o = n.indices[0]; + break; + default: + l.warn("THREE.FBXLoader: unknown attribute mapping type " + n.mappingType) + } + "IndexToDirect" === n.referenceType && (o = n.indices[o]); + const a = o * n.dataSize, + s = a + n.dataSize; + return function(e, t, r, n) { + for (let o = r, a = 0; o < n; o++, a++) e[a] = t[o]; + return e + }(I, n.buffer, a, s) + } + const E = new n.Euler, + M = new n.Vector3; + + function A(e) { + const t = new n.Matrix4, + r = new n.Matrix4, + o = new n.Matrix4, + a = new n.Matrix4, + s = new n.Matrix4, + i = new n.Matrix4, + l = new n.Matrix4, + c = new n.Matrix4, + u = new n.Matrix4, + p = new n.Matrix4, + h = new n.Matrix4, + d = new n.Matrix4, + f = e.inheritType ? e.inheritType : 0; + if (e.translation && t.setPosition(M.fromArray(e.translation)), e.preRotation) { + const t = e.preRotation.map(n.MathUtils.degToRad); + t.push(e.eulerOrder || n.Euler.DEFAULT_ORDER), r.makeRotationFromEuler(E.fromArray(t)) + } + if (e.rotation) { + const t = e.rotation.map(n.MathUtils.degToRad); + t.push(e.eulerOrder || n.Euler.DEFAULT_ORDER), o.makeRotationFromEuler(E.fromArray(t)) + } + if (e.postRotation) { + const t = e.postRotation.map(n.MathUtils.degToRad); + t.push(e.eulerOrder || n.Euler.DEFAULT_ORDER), a.makeRotationFromEuler(E.fromArray(t)), a.invert() + } + e.scale && s.scale(M.fromArray(e.scale)), e.scalingOffset && l.setPosition(M.fromArray(e.scalingOffset)), e.scalingPivot && i.setPosition(M.fromArray(e.scalingPivot)), e.rotationOffset && c.setPosition(M.fromArray(e.rotationOffset)), e.rotationPivot && u.setPosition(M.fromArray(e.rotationPivot)), e.parentMatrixWorld && (h.copy(e.parentMatrix), p.copy(e.parentMatrixWorld)); + const m = r.clone().multiply(o).multiply(a), + g = new n.Matrix4; + g.extractRotation(p); + const v = new n.Matrix4; + v.copyPosition(p); + const y = v.clone().invert().multiply(p), + w = g.clone().invert().multiply(y), + x = s, + T = new n.Matrix4; + if (0 === f) T.copy(g).multiply(m).multiply(w).multiply(x); + else if (1 === f) T.copy(g).multiply(w).multiply(m).multiply(x); + else { + const e = (new n.Matrix4).scale((new n.Vector3).setFromMatrixScale(h)).clone().invert(), + t = w.clone().multiply(e); + T.copy(g).multiply(m).multiply(t).multiply(x) + } + const I = u.clone().invert(), + b = i.clone().invert(); + let A = t.clone().multiply(c).multiply(u).multiply(r).multiply(o).multiply(a).multiply(I).multiply(l).multiply(i).multiply(s).multiply(b); + const D = (new n.Matrix4).copyPosition(A), + L = p.clone().multiply(D); + return d.copyPosition(L), A = d.clone().multiply(T), A.premultiply(p.invert()), A + } + + function D(e) { + const t = ["ZYX", "YZX", "XZY", "ZXY", "YXZ", "XYZ"]; + return 6 === (e = e || 0) ? (l.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."), t[0]) : t[e] + } + + function L(e) { + return e.split(",").map((function(e) { + return parseFloat(e) + })) + } + + function N(e, t, r) { + return void 0 === t && (t = 0), void 0 === r && (r = e.byteLength), (new TextDecoder).decode(new Uint8Array(e, t, r)) + } + } + } +]); \ No newline at end of file diff --git a/mp-core/4530.6c47ddfc70bcd7c85a4c.bundle.js b/mp-core/4530.6c47ddfc70bcd7c85a4c.bundle.js new file mode 100644 index 0000000..054b3e7 --- /dev/null +++ b/mp-core/4530.6c47ddfc70bcd7c85a4c.bundle.js @@ -0,0 +1,368 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4530], { + 4530: (t, e, o) => { + o.r(e), o.d(e, { + default: () => d + }), o(25108), Math.PI, Math.PI; + var n = o(8838), + i = o(60516), + a = o(25108); + class r { + name = "Logo Slot"; + icon = o(56607); + hidden = !0; + provides = ["material"]; + settings = [{ + type: "description", + name: "A slot for website logo content, pulled automatically from the site." + }]; + async onLoad() { + if (!this.renderer.object?.isMesh) throw new Error("Unable to attach PostModifier to a non-mesh entity."); + this.material = metapress.ui.createMaterial({ + width: 1024, + height: 512 + }), this.renderer.object.material = this.material, this.recalculateViewportSize(), this.renderNotice(o(2747)), metapress.config["core.integration.sitecontent"]?.websiteLogoImage ? this.renderLogoImage(metapress.config["core.integration.sitecontent"]?.websiteLogoImage) : this.renderLogoImage(o(7305)) + } + onEntityEdited() { + this.recalculateViewportSize() + } + recalculateViewportSize() { + let t = (this.entity.scaleY || 1) / (this.entity.scaleX || 1), + e = this.entity.contentSlot_aspectRatio || t; + this.material.viewportSize.width = 1024, this.material.viewportSize.height = 1024 * e, this.material.invalidate() + } + renderNotice(t, e, o) { + this.material.baseView = metapress.ui.createElement("flex-layout"), this.material.baseView.background = "#333", this.material.baseView.direction = "column", this.material.baseView.justify = "center", this.material.baseView.align = "center", this.material.invalidate(); + let n = metapress.ui.createElement("image"); + n.width = 80, n.height = 80, n.url = t, t && this.material.baseView.add(n); + let i = metapress.ui.createElement("text"); + i.width = 500, i.autoHeight = !0, i.text = e || "Error", i.textAlign = "center", i.color = "#FFF", i.font = "44px Comfortaa, Arial", i.lineHeight = 1.5, i.marginTop = 40, e && this.material.baseView.add(i); + let a = metapress.ui.createElement("text"); + a.width = 500, a.autoHeight = !0, a.text = o || "", a.textAlign = "center", a.color = "#AAA", a.font = "24px Comfortaa, Arial", a.lineHeight = 1.5, a.marginTop = 20, o && this.material.baseView.add(a) + } + async renderLogoImage(t) { + try { + let e = await metapress.assets.download(t), + o = URL.createObjectURL(e); + this.material.baseView = metapress.ui.createElement("image"), this.material.baseView.url = o, this.material.baseView.scaleMode = "fit", this.renderer.object.material.transparent = !0, this.renderer.object.material.opacity = this.entity.opacity || 1, this.renderer.object.material.alphaTest = .01, this.material.invalidate() + } catch (t) { + a.warn(`[MetaPress > ContentSlotModifier] Error rendering post image for '${this.entity.contentSlot_source||"any:0"}':`, t), this.renderNotice(o(48174), "Unable to Load", t.message) + } + } + } + var s, l = o(25108); + + function c(t, e, o) { + return (c = function() { + function t(t, e) { + return function(n) { + ! function(t, e) { + if (t.v) throw new Error("attempted to call addInitializer after decoration was finished") + }(e), o(n, "An initializer"), t.push(n) + } + } + + function e(e, o, n, i, a, r, s, l) { + var c; + switch (a) { + case 1: + c = "accessor"; + break; + case 2: + c = "method"; + break; + case 3: + c = "getter"; + break; + case 4: + c = "setter"; + break; + default: + c = "field" + } + var d, u, h = { + kind: c, + name: s ? "#" + o : o, + static: r, + private: s + }, + f = { + v: !1 + }; + 0 !== a && (h.addInitializer = t(i, f)), 0 === a ? s ? (d = n.get, u = n.set) : (d = function() { + return this[o] + }, u = function(t) { + this[o] = t + }) : 2 === a ? d = function() { + return n.value + } : (1 !== a && 3 !== a || (d = function() { + return n.get.call(this) + }), 1 !== a && 4 !== a || (u = function(t) { + n.set.call(this, t) + })), h.access = d && u ? { + get: d, + set: u + } : d ? { + get: d + } : { + set: u + }; + try { + return e(l, h) + } finally { + f.v = !0 + } + } + + function o(t, e) { + if ("function" != typeof t) throw new TypeError(e + " must be a function") + } + + function n(t, e) { + var n = typeof e; + if (1 === t) { + if ("object" !== n || null === e) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); + void 0 !== e.get && o(e.get, "accessor.get"), void 0 !== e.set && o(e.set, "accessor.set"), void 0 !== e.init && o(e.init, "accessor.init") + } else if ("function" !== n) throw new TypeError((0 === t ? "field" : 10 === t ? "class" : "method") + " decorators must return a function or void 0") + } + + function i(t, o, i, a, r, s, l, c) { + var d, u, h, f, m, p, g = i[0]; + if (l ? d = 0 === r || 1 === r ? { + get: i[3], + set: i[4] + } : 3 === r ? { + get: i[3] + } : 4 === r ? { + set: i[3] + } : { + value: i[3] + } : 0 !== r && (d = Object.getOwnPropertyDescriptor(o, a)), 1 === r ? h = { + get: d.get, + set: d.set + } : 2 === r ? h = d.value : 3 === r ? h = d.get : 4 === r && (h = d.set), "function" == typeof g) void 0 !== (f = e(g, a, d, c, r, s, l, h)) && (n(r, f), 0 === r ? u = f : 1 === r ? (u = f.init, m = f.get || h.get, p = f.set || h.set, h = { + get: m, + set: p + }) : h = f); + else + for (var w = g.length - 1; w >= 0; w--) { + var v; + void 0 !== (f = e(g[w], a, d, c, r, s, l, h)) && (n(r, f), 0 === r ? v = f : 1 === r ? (v = f.init, m = f.get || h.get, p = f.set || h.set, h = { + get: m, + set: p + }) : h = f, void 0 !== v && (void 0 === u ? u = v : "function" == typeof u ? u = [u, v] : u.push(v))) + } + if (0 === r || 1 === r) { + if (void 0 === u) u = function(t, e) { + return e + }; + else if ("function" != typeof u) { + var y = u; + u = function(t, e) { + for (var o = e, n = 0; n < y.length; n++) o = y[n].call(t, o); + return o + } + } else { + var b = u; + u = function(t, e) { + return b.call(t, e) + } + } + t.push(u) + } + 0 !== r && (1 === r ? (d.get = h.get, d.set = h.set) : 2 === r ? d.value = h : 3 === r ? d.get = h : 4 === r && (d.set = h), l ? 1 === r ? (t.push((function(t, e) { + return h.get.call(t, e) + })), t.push((function(t, e) { + return h.set.call(t, e) + }))) : 2 === r ? t.push(h) : t.push((function(t, e) { + return h.call(t, e) + })) : Object.defineProperty(o, a, d)) + } + + function a(t, e) { + for (var o, n, a = [], s = new Map, l = new Map, c = 0; c < e.length; c++) { + var d = e[c]; + if (Array.isArray(d)) { + var u, h, f = d[1], + m = d[2], + p = d.length > 3, + g = f >= 5; + if (g ? (u = t, 0 != (f -= 5) && (h = n = n || [])) : (u = t.prototype, 0 !== f && (h = o = o || [])), 0 !== f && !p) { + var w = g ? l : s, + v = w.get(m) || 0; + if (!0 === v || 3 === v && 4 !== f || 4 === v && 3 !== f) throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + m); + !v && f > 2 ? w.set(m, f) : w.set(m, !0) + } + i(a, u, d, m, f, g, p, h) + } + } + return r(a, o), r(a, n), a + } + + function r(t, e) { + e && t.push((function(t) { + for (var o = 0; o < e.length; o++) e[o].call(t); + return t + })) + } + return function(e, o, i) { + return { + e: a(e, o), + get c() { + return function(e, o) { + if (o.length > 0) { + for (var i = [], a = e, r = e.name, s = o.length - 1; s >= 0; s--) { + var l = { + v: !1 + }; + try { + var c = o[s](a, { + kind: "class", + name: r, + addInitializer: t(i, l) + }) + } finally { + l.v = !0 + } + void 0 !== c && (n(10, c), a = c) + } + return [a, function() { + for (var t = 0; t < i.length; t++) i[t].call(a) + }] + } + }(e, i) + } + } + } + }())(t, e, o) + } + class d { + static { + [s] = c(this, [ + [n.j8, 2, "updateFeed"] + ], []).e + } + constructor(...t) { + s(this) + } + id = "core.integration.sitecontent"; + name = "Site Content"; + description = "Handles pulling site content."; + version = "1.0.0"; + requires = ["ui"]; + provides = ["siteContent", "modifier:contentSlot", "modifier:logoSlot"]; + feed = []; + maxSourceItems = 60; + onLoad() { + this.updateFeed() + } + createModifier(t) { + return "contentSlot" == t ? new i.Z : "logoSlot" == t ? new r : void 0 + } + async updateFeed() { + let t = metapress.plugins.callAll("siteContent_getSource"); + t = t.flat(2), this.feed = await Promise.all(t.map((async t => await (t.fetchFeed?.(null, this.maxSourceItems))))), this.feed = this.feed.flat(2).filter((t => !!t)), this.feed.sort(((t, e) => e.date - t.date)), metapress.plugins.callAll("siteContent_onFeedUpdated", this.feed) + } + getItems(t) { + return "any" == t ? this.feed : this.feed.filter((e => e.type == t)) + } + getItem(t) { + let e = t.indexOf(":"); + if (-1 == e) throw new Error("Invalid identifier."); + let o = t.substr(0, e), + n = t.substr(e + 1); + if ("id" == o) return this.feed.find((t => t.id == n)); + if (n = parseInt(n), isNaN(n)) throw new Error("Invalid identifier."); + return this.getItems(o)[n] + } + $editor_getAddableEntities = () => [{ + id: "contentSlot", + name: "Content Slot", + icon: o(56607), + description: "Adds a post or product from your site.", + action: t => metapress.entities.add({ + ...t, + type: "plane", + name: "Content Slot", + scaleX: 16 / 9, + "modifier:contentSlot": !0, + contentSlot_source: "any:" + this.getNextAvailableSource() + }) + }, { + id: "logoSlot", + name: "Logo Slot", + icon: o(44877), + description: "Adds a logo from your site.", + action: t => metapress.entities.add({ + ...t, + type: "plane", + name: "Logo Slot", + scaleX: 16 / 9, + "modifier:logoSlot": !0 + }) + }]; + getNextAvailableSource() { + let t = 0; + for (;;) { + if (!metapress.entities.all.find((e => e.contentSlot_source == `any:${t}`))) return t; + t++ + } + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "Site content", + tags: "site content, website content, content slots, content slot, logo slot, logo slots, content feed, feed, content feed items, content feed item, content feed source, content feed sources, blog post, product, article", + content: "\n Content Slots are automatically filled with articles, blog posts and products from the hosting website. Logo Slots automatically pull the site's logo. \n This is useful when creating template worlds that automatically populate with the latest content from the hosting site when they are loaded.\n To create a new content slot or logo slot, use the Editor in the sidebar.\n " + }, { + id: `${this.id}:get-closest-content-action`, + type: "action", + tags: "content, take me to content, content slot, move me to content", + content: "Call this KB action to position the user to the closest content slot.", + action: () => { + let t = this.GetClosestContentSlot(), + e = new THREE.Vector3(t.x, t.y, t.z), + o = new THREE.Quaternion(t.quatX, t.quatY, t.quatZ, t.quatW), + n = new THREE.Vector3(0, 0, 1); + n.applyQuaternion(o), e.add(n.multiplyScalar(2)), metapress.avatars.moveTo(e.x, e.y, e.z) + } + }, { + id: `${this.id}:get-random-content-action`, + type: "action", + tags: "content, take to content, content slot, random content, random content slot", + content: "Call this KB action to position the user to a random content slot.", + action: () => { + let t = this.GetRandomContentSlot(), + e = new THREE.Vector3(t.x, t.y, t.z), + o = new THREE.Quaternion(t.quatX, t.quatY, t.quatZ, t.quatW), + n = new THREE.Vector3(0, 0, 1); + n.applyQuaternion(o), e.add(n.multiplyScalar(2)), metapress.avatars.moveTo(e.x, e.y, e.z) + } + }]; + GetAllContentSlots() { + let t = metapress.entities.all.filter((t => "template" == t.sync)).filter((t => null != t.contentSlot_source)); + return l.log(t.length, t.count), t + } + GetClosestContentSlot() { + let t = null, + e = 999999; + return this.GetAllContentSlots().forEach((o => { + metapress.avatar.distanceTo(o) < e && (e = metapress.avatar.distanceTo(o), t = o) + })), t + } + GetRandomContentSlot() { + let t = this.GetAllContentSlots(); + return t[(e = 0, o = t.length, e + Math.floor(Math.random() * (o - e + 1)))]; + var e, o + } + } + }, + 44877: (t, e, o) => { + t.exports = o.p + "mp-core/logo-slot.4f7fb28a3817e594fe99.svg" + }, + 7305: (t, e, o) => { + t.exports = o.p + "mp-core/mp-logo.c30005ccdcb762bdc0e0.png" + } + } +]); \ No newline at end of file diff --git a/mp-core/4659.01838f8486534144d729.bundle.js b/mp-core/4659.01838f8486534144d729.bundle.js new file mode 100644 index 0000000..1e2b8a0 --- /dev/null +++ b/mp-core/4659.01838f8486534144d729.bundle.js @@ -0,0 +1,71 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4659], { + 4659: (e, t, s) => { + s.r(t), s.d(t, { + default: () => n + }); + var a = s(83977), + i = s(43897); + class n { + id = "core.backend"; + name = "Backend"; + description = "This plugin provides access to the MetaPress backend server."; + version = "1.0.0"; + requires = []; + provides = ["backend"]; + apiURL = "https://get.metapress.dev/api"; + onLoad() { + this.config.disableAnalytics || (this.fbApp = (0, a.ZF)({ + apiKey: "AIzaSyD-UIoGF1eizNk99a7QjLR34EA96H6buF8", + authDomain: "mp-backend-api.firebaseapp.com", + projectId: "mp-backend-api", + storageBucket: "mp-backend-api.appspot.com", + messagingSenderId: "100760407859", + appId: "1:100760407859:web:55ce7df3625f5df5ea7846", + measurementId: "G-WXEMM03B6X" + }, "mp-backend"), this.fbAnalytics = (0, i.IH)(this.fbApp), this.logEvent("world_load"), this.logWorldMinute(), setInterval((() => this.logWorldMinute()), 6e4)) + } + get assetsURL() { + return metapress.config?.["core.integration.wordpress"]?.isLocalEnvironment ? "/cdn.metapress.dev/mp-core-assets" : "https://cdn.metapress.dev/mp-core-assets" + } + async callApi(e, t = {}) { + let s = await fetch(this.apiURL + e, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(t) + }); + if (!s.ok) { + let e = {}; + try { + e = await s.json() + } catch (e) {} + let t = e?.errorText || s.status + " " + s.statusText, + a = new Error(t); + throw a.code = e?.errorCode || s.status, a + } + return await s.json() + } + getAsset(e) { + return this.assetsURL + "/" + e + } + async $editor_getTemplates() { + let e = await fetch(this.assetsURL + "/templates/templates.json").then((e => e.json())), + t = new URL(this.assetsURL + "/templates/", window.location.href); + for (let s of e) s.image && (s.image = new URL(s.image, t).href), s.url && (s.url = new URL(s.url, t).href); + return e + } + logEvent(e, t) { + this.fbAnalytics && ((t = t || {}).domain = window.location.hostname, (0, i.Kz)(this.fbAnalytics, e, t)) + } + logWorldMinute() { + (0, i.Kz)(this.fbAnalytics, "world_minute", { + domain: window.location.hostname + }) + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/4716.58661ad1306ee5037402.bundle.js b/mp-core/4716.58661ad1306ee5037402.bundle.js new file mode 100644 index 0000000..8037df8 --- /dev/null +++ b/mp-core/4716.58661ad1306ee5037402.bundle.js @@ -0,0 +1,614 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [4716], { + 40001: (e, t, i) => { + i.d(t, { + Lm: () => o, + U8: () => s, + lk: () => n, + sN: () => r + }); + var a = i(67294); + const n = e => a.createElement(a.Fragment, null, a.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, a.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? a.createElement("img", { + draggable: "false", + src: i(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), a.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + o = e => { + let [t, n] = a.useState(!!e.openByDefault); + return !1 === e.visible ? a.createElement(a.Fragment, null) : a.createElement(a.Fragment, null, a.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => n(!t) + }, a.createElement("img", { + draggable: "false", + src: i(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), a.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? a.createElement("img", { + draggable: "false", + src: i(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + r = e => { + let [t, n] = a.useState(!1); + return a.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => n(!0), + onPointerLeave: e => n(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? a.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||i(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||i(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : a.createElement("img", { + draggable: "false", + src: e.icon || i(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), a.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + s = e => a.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, a.createElement("img", { + src: i(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), a.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 4716: (e, t, i) => { + i.r(t), i.d(t, { + default: () => y + }); + var a = i(67294), + n = i(28250), + o = i(47743), + r = i(28721), + s = i(55437), + m = i(32589), + l = i(40001); + const c = [{ + description: "acenar", + emoji: "👋" + }, { + description: "dançar", + emoji: "🕺" + }, { + description: "rir", + emoji: "😂" + }, { + description: "joinha", + emoji: "👍" + }, { + description: "festa", + emoji: "🥳" + }, { + description: "explodir", + emoji: "🤯" + }, { + description: "saudar", + emoji: "🫡" + }, { + description: "levantar", + emoji: "🙌" + }, { + description: "rock", + emoji: "🤘" + }, { + description: "amor", + emoji: "🥰" + }, { + description: "cantar", + emoji: "🎤" + }, { + description: "chorar", + emoji: "😭" + }], + d = s.m6(), + p = d.filter((e => c.findIndex((t => t.emoji === e.emoji)) < 0)), + h = []; + for (let e = 0; e < 4; e++) h.push(Math.floor(e / 4 * p.length)); + h.push(p.length); + class u extends a.PureComponent { + state = { + searchEmojis: [], + searchText: "" + }; + prevSearch = ""; + renderedEmojis = p.slice(h[0], h[1]); + emojiShowTimers = []; + componentDidMount() { + this.staggeredTimer = setTimeout(this.startStaggeredEmojiDisplay, 1e3) + } + componentWillUnmount() { + this.staggeredTimer && clearTimeout(this.staggeredTimer); + for (let e = 0; e < this.emojiShowTimers.length; e++) clearTimeout(this.emojiShowTimers[e]) + } + startStaggeredEmojiDisplay = () => { + for (let e = 1; e < h.length - 1; e++) { + let t = setTimeout((() => { + this.renderedEmojis = p.slice(h[0], h[e + 1]), this.forceUpdate(), this.emojiShowTimers = this.emojiShowTimers.filter((e => e != t)) + }), 800 * e); + this.emojiShowTimers.push(t) + } + this.staggeredTimer = null + }; + triggerEmoji(e) { + metapress.emojis.triggerEmoji(e) + } + onSearch(e) { + if (e === this.prevSearch) return; + this.prevSearch = e, this.setState({ + searchText: e || "" + }); + let t = e.trim(); + if (!t) return this.renderedEmojis = p.slice(h[0], h[1]), void this.setState({ + searchEmojis: [] + }, (() => this.startStaggeredEmojiDisplay())); + t = t.toLowerCase(); + const i = d.filter((e => e.description.toLowerCase().includes(t) || e.keywords.includes(t))); + this.setState({ + searchEmojis: i + }) + } + renderSearch() { + return a.createElement(a.Fragment, null, this.state.searchEmojis.length > 0 ? this.state.searchEmojis.map((e => a.createElement(g, { + key: e.description, + emoji: e, + onClick: t => this.triggerEmoji(e) + }))) : a.createElement("div", { + style: { + color: "white", + textAlign: "center", + fontSize: 16, + marginTop: 10 + } + }, "Nenhum emoji encontrado.")) + } + renderEmojis() { + return a.createElement(a.Fragment, null, a.createElement(l.Lm, { + title: "Animados", + openByDefault: !0, + style: { + margin: "5px 10px 10px 10px" + } + }, c.map((e => a.createElement(g, { + key: e.description, + emoji: e, + onClick: t => this.triggerEmoji(e) + })))), a.createElement(l.Lm, { + title: "Todos", + openByDefault: !0 + }, this.renderedEmojis.length > 0 ? this.renderedEmojis.map((e => { + let t = { + ...e, + description: e.description.replace("grinning face", "rosto sorridente").replace("grinning face with big eyes", "rosto sorridente com olhos grandes").replace("grinning face with smiling eyes", "rosto sorridente com olhos sorridentes").replace("beaming face with smiling eyes", "rosto radiante com olhos sorridentes").replace("grinning squinting face", "rosto sorridente com olhos semicerrados").replace("grinning face with sweat", "rosto sorridente com suor").replace("rolling on the floor laughing", "rolando de rir").replace("face with tears of joy", "rosto com lágrimas de alegria").replace("slightly smiling face", "rosto levemente sorridente").replace("upside-down face", "rosto de cabeça para baixo").replace("melting face", "rosto derretendo").replace("winking face", "rosto piscando").replace("smiling face with smiling eyes", "rosto sorridente com olhos sorridentes").replace("smiling face with halo", "rosto sorridente com auréola").replace("smiling face with hearts", "rosto sorridente com corações").replace("smiling face with heart-eyes", "rosto sorridente com olhos de coração") + }; + return a.createElement(g, { + key: t.description, + emoji: t, + onClick: e => this.triggerEmoji(t) + }) + })) : null)) + } + render() { + return a.createElement(l.lk, { + title: "Emojis", + onClose: () => metapress.menubar.closePanel() + }, a.createElement(m.Um, { + onSearch: e => this.onSearch(e) + }), a.createElement("div", { + style: { + overflowY: "scroll", + height: "calc(100% - 71px)", + padding: 5 + } + }, this.state.searchText.length > 0 ? this.renderSearch() : this.renderEmojis())) + } + } + const g = e => a.createElement("div", { + title: e.emoji.description, + onClick: t => e.onClick(e.emoji), + style: { + display: "inline-block", + width: 52, + height: 52, + fontSize: 30, + fontFamily: "monospace", + textAlign: "center", + cursor: "pointer", + margin: 5 + } + }, e.emoji.emoji); + class y { + id = "core.ui.emojis"; + name = "Emoji Plugin"; + description = "Allows the user to use animated emojis."; + requires = ["backend", "avatars", "menubar", "entities", "messaging", "renderer", "animation", "render:animation", "modifier:animator", "modifier:avatar-animations"]; + provides = ["emojis"]; + onLoad() { + metapress.entities.add({ + id: "emojis.menu", + type: "menubar.item", + name: "Emojis", + description: "Lets you perform emoji animations.", + is_panel: !0, + icon: i(2520), + onClick: () => this.toggleUI() + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/laugh.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.laugh" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/cry.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.cry" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/thumbsup.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.thumbsup" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/party.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.party" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/love.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.love" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/mindblown.fbx"), + animation_cache_priority: 1, + animation_name_override: "core.human.mindblown" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/dance.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.dance" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/salute.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.salute" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/sing.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.sing" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/rock.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.rock" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/raise.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.raise" + }), metapress.entities.add({ + type: "animation", + url: metapress.backend.getAsset("emoji-animations/wave.glb"), + animation_cache_priority: 1, + animation_name_override: "core.human.wave" + }) + } + toggleUI() { + metapress.menubar.toggleReactPanel("emojis.menu", (() => a.createElement(u, { + plugin: this + }))) + } + triggerEmoji(e) { + if (!e) return; + let t = { + x: metapress.avatars.currentUserEntity.x, + y: metapress.avatars.currentUserEntity.y, + z: metapress.avatars.currentUserEntity.z + }, + i = (0, r.Z)(); + metapress.messaging.send("global", "emoji:msg", { + username: "Guest", + emoji: e.emoji, + description: e.description, + id: i, + position: t + }), this.onEmojiIncoming({ + data: { + username: "Guest", + emoji: e.emoji, + description: e.description, + id: i, + position: t + } + }); + let a = c.find((t => t.emoji == e.emoji)); + a ? this.animateUser({ + data: { + username: "Guest", + emoji: a.emoji, + description: a.description, + id: i, + position: t + } + }) : this.animateUser({ + data: { + username: "Guest", + emoji: e.emoji, + description: e.description, + id: i, + position: t + } + }), metapress.menubar.closePanel() + } + $onIncomingMessage(e) { + "emoji:msg" != e.name || this.onEmojiIncoming(e) + } + async onEmojiIncoming(e) { + if (!e?.data?.emoji || !e?.data?.position) return; + let t = e?.data?.emoji, + i = o.Z.get(t, { + author: "apple", + size: 64, + type: "png" + }), + a = null; + const n = (new THREE.TextureLoader).load(i); + a = new THREE.SpriteMaterial({ + map: n + }), this.handleEmoji(e, 0, 2, 2500, 0, a), this.handleEmoji(e, .55, 1.51, 2e3, 1e3, a), this.handleEmoji(e, .45, -1.42, 1500, 500, a), this.handleEmoji(e, .3, 1.6, 1500, 1e3, a), this.handleEmoji(e, .22, -1.75, 1e3, 1500, a), this.handleEmoji(e, .15, 1.88, 2e3, 1e3, a), this.handleEmoji(e, .08, -2, 2e3, 500, a) + } + async handleEmoji(e, t, i, a, n, o) { + let r = await this.create(e, o); + r && (await Promise.all([this.animate({ + property: "scaleX", + entity: r, + value: .8 - t, + duration: a, + delay: n + }, t, i), this.animate({ + property: "scaleY", + entity: r, + value: .8 - t, + duration: a, + delay: n + }, t, i), this.animate({ + property: "positionY", + entity: r, + value: r.position.y + Math.abs(i) / 1.5, + duration: a, + delay: n + }, t, i), this.animate({ + property: "positionX", + entity: r, + value: r.position.x + i * t, + duration: a, + delay: n + }, t, i), this.animate({ + property: "positionZ", + entity: r, + value: r.position.z + i * t / 10, + duration: a, + delay: n + }, t), this.animate({ + property: "opacity", + entity: r, + value: 1, + delay: n, + duration: a + }, t)]), metapress.renderer.scene.remove(r)) + } + async create(e, t) { + let i = e?.data?.position, + a = new THREE.Vector3(i.x, i.y + 1.55, i.z), + n = new THREE.Vector3; + metapress.renderer.camera.getWorldDirection(n), n.set(a.x, a.y, a.z); + let o = null; + return o = new THREE.Sprite(t), o.position.set(n.x, n.y, n.z), o.scale.set(0, 0, 0), o.material.opacity = 1, metapress.renderer.scene.add(o), o + } + async animate(e) { + let t = e.duration || 2e3, + i = e.entity, + a = null; + switch (e.property) { + case "positionX": + a = new n.ZP.Tween(i.position).to({ + x: e.value + }, t); + break; + case "positionY": + a = new n.ZP.Tween(i.position).to({ + y: e.value + }, t); + break; + case "positionZ": + a = new n.ZP.Tween(i.position).to({ + z: e.value + }, t); + break; + case "scaleX": + a = new n.ZP.Tween(i.scale).to({ + x: e.value + }, t); + break; + case "scaleY": + a = new n.ZP.Tween(i.scale).to({ + y: e.value + }, t); + break; + case "scaleZ": + a = new n.ZP.Tween(i.scale).to({ + z: e.value + }, t); + break; + case "opacity": + a = new n.ZP.Tween(i.material).to({ + opacity: e.value + }, 1e3) + } + e.delay && (a = a.delay(e.delay)), await new Promise((e => { + a = a.onComplete((t => { + e() + })), a = a.start() + })) + } + async animateUser(e) { + let t = e?.data?.description; + if (!t) return; + let i = metapress.avatar.currentUserEntity.id, + a = metapress.entities.getModifier(i, "avatar-controller"); + a && await a.overrideAnimation({ + animation: t, + pauseAtEnd: !1, + interruptOnMovement: !0 + }) + } + ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:sendEmoji`, + type: "action", + name: "Send emoji", + tags: "send emoji, show emoji, display emoji, present emoji, animate emoji, send emote, avatar animation", + content: `\n Assistant instruction: Run this action when the user wants to display an emote or avatar animation. The 'value' is the emoji to present. Any emoji can be used, though certain emojis have avatar animations associated with them:\n ${c.map((e=>`- ${e.emoji} - ${e.description}`)).join("\n")}\n `, + action: e => { + let t = d.find((t => t.emoji == e.value)); + if (!t) throw new Error(`Emoji '${e.value}' not found.`); + return this.triggerEmoji(t), "Success" + } + }] + } + }, + 40313: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, i) => { + e.exports = i.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 83203: (e, t, i) => { + e.exports = i.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, i) => { + e.exports = i.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, i) => { + e.exports = i.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 2520: (e, t, i) => { + e.exports = i.p + "mp-core/icon.5387bc7a752dd0b42064.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/488.eaeea95fba7ad1ac2e0c.bundle.js b/mp-core/488.eaeea95fba7ad1ac2e0c.bundle.js new file mode 100644 index 0000000..e06f79a --- /dev/null +++ b/mp-core/488.eaeea95fba7ad1ac2e0c.bundle.js @@ -0,0 +1,185 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [488], { + 10488: (e, t, r) => { + r.r(t), r.d(t, { + default: () => n + }); + var s = r(25108); + class n { + id = "core.integration.wordpress"; + name = "WordPress Integration"; + description = "Handles integration with the WordPress server."; + version = "1.0.0"; + requires = ["siteContent"]; + provides = ["wordpress", "storage"]; + get contentURL() { + return this.config.contentURL + } + get apiURL() { + return this.config.apiURL + } + get worldID() { + return this.config.worldID || null + } + onLoad() { + if (!this.config.contentURL) throw { + message: "Not configured.", + cancelled: !0 + }; + metapress.siteContent.updateFeed() + } + async ajax(e, t = new FormData) { + if (!e) throw new Error("Name must be set."); + t.set("action", e), t.set("_ajax_nonce", this.config.apiNonce); + let r = await fetch(this.config.ajaxURL, { + method: "POST", + credentials: "same-origin", + body: t + }), + s = await r.json(); + if (!s.success) throw new Error(s.data || "An unexpected server error occured."); + return s.data + } + get canEdit() { + return this.config.canEdit + } + async uploadFile(e, t) { + if (!e) throw new Error("contentDirectory must be set."); + if (!t) throw new Error("You must specify a file to upload."); + if (!(t instanceof File)) throw new Error("File must be a valid File instance."); + let r = 1048576, + s = []; + if (t.size <= r) s = [t]; + else { + let e = 0; + for (let n = 0; n < t.size; n += r) { + let i = t.slice(n, n + r), + o = new File([i], t.name + ".mpchunk" + e++, { + type: t.type + }); + s.push(o) + } + } + for (;;) { + await new Promise((e => setTimeout(e, 100))); + let t = s.find((e => e.error)); + if (t) throw new Error(t.error); + if (s.every((e => e.completed))) break; + if (s.reduce(((e, t) => e + (t.uploading ? 1 : 0)), 0) >= 1) continue; + let r = s.find((e => !e.uploading && !e.completed)); + if (!r) continue; + r.uploading = !0; + let n = new FormData; + n.append("directory", e), n.append("file", r), this.worldID && n.append("worldID", this.worldID), this.ajax("metapress_save_file", n).then((e => { + r.url = e.url, r.completed = !0, r.uploading = !1 + })).catch((e => { + r.retry || (r.retry = 0), r.retry += 1, r.uploading = !1, r.retry > 2 ? r.error = e : r.error = null + })) + } + if (1 == s.length) return s[0].url; + let n = new FormData; + return n.append("directory", e), n.append("name", t.name), this.worldID && n.append("worldID", this.worldID), (await this.ajax("metapress_merge_chunks", n)).url + } + async getFileURL(e, t) { + return this.contentURL + "/" + e + "/" + t + } + async api(e, t, r = {}, s, n) { + t.startsWith("/") && (t = t.substring(1)); + let i = this.apiURL + t; + if (r) + for (let e in r) i += (i.includes("?") ? "&" : "?") + e + "=" + encodeURIComponent(r[e]); + "object" == typeof s && (s = JSON.stringify(s), (n = n || {})["Content-Type"] = "application/json"), null === s && (s = void 0), n || (n = {}), this.config.apiNonce && (n["X-WP-Nonce"] = this.config.apiNonce); + let o = await fetch(i, { + method: e, + body: s, + headers: n, + credentials: "same-origin" + }); + if (!o.ok) { + let e = o.status + " " + o.statusText, + t = o.status; + try { + let r = await o.json(); + e = r.message || e, t = r.code || t + } catch (e) {} + let r = new Error(e); + throw r.code = t, r + } + return await o.json() + } + async getPostsFromFeed(e = 0, t = 1) { + return await this.api("GET", "/wp/v2/posts", { + per_page: t, + offset: e + }) + } + async getMediaDetails(e) { + return await this.api("GET", `/wp/v2/media/${e}`) + } + async getTypes() { + return this._cachedTypes || (this._cachedTypes = await metapress.wordpress.api("GET", "/metapress/v1/post-types")), this._cachedTypes + } + startLogin() { + window.parent.location.href = "/wp-login.php" + } + $getAssetProviders = () => [{ + id: "wordpress.posts", + name: "WordPress Posts", + icon: r(44812), + action: e => s.log("hereeeee") + }]; + $siteContent_getSource = () => ({ + id: "wordpress", + name: "WordPress", + icon: r(44812), + fetchFeed: async (e, t) => { + let r = await this.getTypes(), + s = []; + return await Promise.all(r.map((async r => { + if (!r.supports.metapress_content_feed) return; + let n = await this.api("GET", `/${r.rest_namespace}/${r.rest_base}`, { + per_page: t || 20, + offset: e || 0, + _embed: !0 + }); + for (let e of n) { + let t = { + id: "wordpress:" + e.id, + link: e.link, + date: new Date(e.date).getTime(), + title: e.title?.rendered || "", + type: r.name, + excerpt: e.excerpt?.rendered || "", + content: e.content?.rendered || "" + }, + n = e._embedded?.["wp:featuredmedia"]?.[0], + i = n?.media_details?.sizes?.large?.source_url || n?.source_url; + t.image = i, s.push(t) + } + }))), s + } + }); + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "WordPress backend integration", + content: `\n MetaPress is using WordPress as the backend server. The current user is ${this.canEdit?"an admin and can edit this world":"a guest user and cannot modify this world"}. \n Posts, products, and other public WordPress post types from the WordPress backend are pulled into the site content feed in date descending order, which is then used to populate the content slots along the walls.\n Visit https://metapress.dev for details on setting up MetaPress on WordPress.\n ` + }, { + id: `${this.id}:openConfig`, + type: "action", + disabled: !this.canEdit, + name: "Open MetaPress WordPress configuration", + content: "Call this KB action to open the MetaPress configuration panel in the WordPress dashboard.", + action: () => { + if (!window.open("/wp-admin/admin.php?page=metapress", "_blank")) throw new Error("window.open() returned null"); + return "success" + } + }] + } + }, + 44812: (e, t, r) => { + e.exports = r.p + "mp-core/wordpress-logo.dfdf688bbbd08bbee05c.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/510.8e42de5365b69e32aee6.bundle.js b/mp-core/510.8e42de5365b69e32aee6.bundle.js new file mode 100644 index 0000000..246b57b --- /dev/null +++ b/mp-core/510.8e42de5365b69e32aee6.bundle.js @@ -0,0 +1,347 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [510], { + 21611: (e, t, n) => { + "use strict"; + n.d(t, { + Z: () => l, + a: () => c + }); + var i = n(38853), + s = n.n(i), + o = n(28721), + r = n(99477), + a = n(25108); + const c = { + Connecting: "connecting", + Connected: "connected", + Closed: "closed" + }; + let d = 1; + class l { + id = ""; + instanceID = ""; + isInitiator = !1; + p2p = null; + state = c.Connecting; + plugin = null; + index = d++; + audioPlayer = null; + user = null; + constructor(e, t, n) { + this.plugin = e, this.user = t, this.instanceID = t.instanceID, this.isInitiator = !n, this.id = n ? n.connectionID : (0, o.Z)(), this.micNode = metapress.audio.context.createMediaStreamDestination(), metapress.audio.inputNode.connect(this.micNode), this.p2p = new(s())({ + objectMode: !0, + channelConfig: { + ordered: !1 + }, + initiator: this.isInitiator, + stream: this.micNode.stream, + config: { + iceServers: metapress.p2p.iceServers + } + }), this.p2p.on("connect", this.onConnect.bind(this)), this.p2p.on("close", this.onClose.bind(this)), this.p2p.on("signal", this.onOutgoingSignal.bind(this)), this.p2p.on("data", this.onData.bind(this)), this.p2p.on("error", this.onError.bind(this)), this.p2p.on("stream", this.onStream.bind(this)), this.connectTimeout = setTimeout((() => { + a.debug(`[MetaPress > P2P Audio #${this.index}] Audio connection timed out`), this.onClose() + }), 15e3), this.pingTimer = setInterval(this.doPing.bind(this), 2e3) + } + getEntityID() { + return metapress.entities.all.find((e => e.instanceID == this.instanceID && "avatar" == e.type))?.id + } + onConnect() { + clearTimeout(this.connectTimeout), this.state = c.Connected, metapress.plugins.sendEvent("p2p_peerConnected", this) + } + onClose() { + this.p2p && (clearTimeout(this.connectTimeout), clearTimeout(this.pingTimer), this.state = c.Closed, this.p2p.destroy(), this.p2p = null, this.plugin.connections = this.plugin.connections.filter((e => e != this)), this.micNode && metapress.audio.inputNode.disconnect(this.micNode), this.micNode = null, this.audioPlayer?.removeFromParent(), this.audioPlayer = null, this.chromeHackPlayer && (this.chromeHackPlayer.srcObject = null), this.chromeHackPlayer = null, metapress.plugins.sendEvent("p2p_peerDisconnected", this)) + } + onError(e) { + a.debug(`[MetaPress > P2P Audio #${this.index}] Audio connection error: connection=${this.id} error=${e.message}`) + } + onOutgoingSignal(e) { + metapress.messaging.send(this.instanceID, "audio.p2p.users.signal", { + connectionID: this.id, + instanceID: metapress.instanceID, + data: e, + advertisement: metapress.avatars.getAdvertisementPacket() + }) + } + onIncomingSignal(e) { + e.connectionID == this.id && this.p2p.signal(e.data) + } + doPing() { + this.state == c.Connected && (this.lastPingTime = Date.now(), this.lastPingID = (this.lastPingID || 0) + 1, this.send({ + action: "ping", + data: this.lastPingID + })) + } + sendEvent(e, t) { + if (this.state != c.Connected) return !1; + this.send({ + action: "event", + name: e, + data: t + }) + } + send(e) { + this.p2p.send(JSON.stringify(e)) + } + onData(e) { + let t = JSON.parse(e); + if ("ping" == t.action) this.send({ + action: "pong", + data: t.data + }); + else if ("pong" == t.action) this.ping = Date.now() - this.lastPingTime; + else if ("sync" == t.action) { + delete t.fields.id, delete t.fields.instanceID, delete t.fields.type, delete t.fields.isPubSubAvatar; + let e = this.getEntityID(); + e && metapress.entities.update(e, t.fields) + } else "advertise" == t.action ? metapress.avatars.onAdvertisementPacketReceived(t, this.user.instanceID) : "event" == t.action && metapress.plugins.sendEvent("p2p_event_" + t.name, this, t.data) + } + onStream(e) { + this.audioPlayer?.removeFromParent(), this.chromeHackPlayer && (this.chromeHackPlayer.srcObject = null), this.audioPlayer = new r.PositionalAudio(metapress.audio.listener), this.audioPlayer.setDistanceModel("linear"), this.audioPlayer.setRefDistance(1), this.audioPlayer.setMaxDistance(10), this.audioPlayer.setMediaStreamSource(e), metapress.renderer.scene.add(this.audioPlayer), this.chromeHackPlayer = new Audio, this.chromeHackPlayer.srcObject = e, this.chromeHackPlayer.muted = !0 + } + get debugText() { + let e = metapress.renderer.camera.position, + t = this.user ? Math.sqrt((this.user.x - e.x) ** 2 + (this.user.y - e.y) ** 2 + (this.user.z - e.z) ** 2) : void 0; + return `#${String(this.index).padStart(4,"0")}: ${this.state} distance=${t?.toFixed(0)||"?"}m ping=${this.ping?.toFixed(0)??"?"}ms user=${this.instanceID}` + } + } + }, + 82944: (e, t, n) => { + "use strict"; + n.r(t), n.d(t, { + default: () => u + }); + var i = n(38853), + s = n.n(i), + o = n(28721), + r = n(25108); + let a = 0; + class c { + peerID = ""; + serviceID = ""; + initiator = !1; + connectionID = ""; + readableStream = null; + writableStream = null; + error = null; + id = a++; + constructor(e, t, n = null) { + if (!e) throw new Error("Missing peerID in P2PSocket constructor"); + if (!t) throw new Error("Missing serviceID in P2PSocket constructor"); + this.peerID = e, this.serviceID = t, n ? (this.initiator = !1, this.connectionID = n) : (this.initiator = !0, this.connectionID = (0, o.Z)()), this.p2p = new(s())({ + objectMode: !0, + channelConfig: { + ordered: !0 + }, + initiator: this.initiator, + iceCompleteTimeout: 1e4, + config: { + iceServers: metapress.p2p.iceServers + } + }), this.p2p.on("signal", (e => { + metapress.messaging.send(this.peerID, "p2p.socketSignal", { + signal: e, + serviceID: this.serviceID, + connectionID: this.connectionID + }) + })), this.readableStream = new ReadableStream({ + start: async e => { + this.readableStreamController = e, this.p2p.on("data", (t => { + "string" == typeof t && (t = JSON.parse(t)), e.enqueue(t) + })), this.p2p.on("error", (t => { + r.debug(`[P2PSocket #${this.id}] Error: (read stream) ${t.message}`), e.error(t), this.close() + })), this.p2p.once("close", (() => { + this.close() + })), this.p2p.connected || await new Promise((e => this.p2p.once("connect", e))) + }, + cancel: () => { + this.close() + } + }), this.writableStream = new WritableStream({ + start: async e => { + this.writableStreamController = e, this.p2p.on("error", (t => { + r.debug(`[P2PSocket #${this.id}] Error: (write stream) ${t.message}`), e.error(t), this.close() + })), this.p2p.once("close", (() => { + this.close() + })), this.p2p.connected || await new Promise((e => this.p2p.once("connect", e))) + }, + write: async (e, t) => { + e instanceof ArrayBuffer || e instanceof Blob || e instanceof File || e instanceof Uint8Array || e instanceof Uint16Array || e instanceof Uint32Array || e instanceof Int8Array || e instanceof Int16Array || e instanceof Int32Array || e instanceof Float32Array || e instanceof Float64Array || (e = JSON.stringify(e)), !this.p2p.write(e) && await new Promise((e => this.p2p.once("drain", e))) + }, + close: () => { + this.close() + }, + abort: e => { + this.close() + } + }) + } + close() { + try { + this.p2p?.destroy() + } catch (e) {} + try { + readableStreamController?.close() + } catch (e) {} + try { + writableStreamController?.error(new Error("This stream has been closed.")) + } catch (e) {} + } + onIncomingSignal(e) { + this.p2p?.destroyed || this.p2p?.signal(e) + } + } + var d = n(21611), + l = n(25108); + class u { + id = "core.audio.users"; + name = "Avatar P2P + Audio"; + description = "Provides P2P realtime connection and spatial audio between nearby users in the environment."; + version = "1.0.0"; + requires = ["avatars", "audio", "renderer", "mqtt"]; + provides = ["p2p"]; + connections = []; + get iceServers() { + return this.config.iceServers || [{ + urls: "stun:stun.l.google.com:19302" + }, { + urls: "stun:global.stun.twilio.com:3478" + }, { + urls: "stun:stun.relay.metered.ca:80" + }, { + urls: "turn:a.relay.metered.ca:80", + username: "90ce206d0f0a832e446287c7", + credential: "6IrBLPtZiCCp6Thy" + }, { + urls: "turn:a.relay.metered.ca:80?transport=tcp", + username: "90ce206d0f0a832e446287c7", + credential: "6IrBLPtZiCCp6Thy" + }, { + urls: "turn:a.relay.metered.ca:443", + username: "90ce206d0f0a832e446287c7", + credential: "6IrBLPtZiCCp6Thy" + }, { + urls: "turn:a.relay.metered.ca:443?transport=tcp", + username: "90ce206d0f0a832e446287c7", + credential: "6IrBLPtZiCCp6Thy" + }] + } + onLoad() { + this.connectionTimer = setInterval(this.onConnectionLoop.bind(this), 2e3), this.updateTimer = setInterval(this.sendAvatarUpdates.bind(this), 250), metapress.entities.add({ + id: "core.audio.users:menubutton", + type: "menubar.item", + name: "Unmute", + description: "This button controls if other people can hear the user. If red, they are muted.", + order: -100, + icon: n(23873), + onClick: null + }), this.updateMicButton() + } + toggleMute() { + metapress.audio.muted = !metapress.audio.muted + } + $onAudioMuteChanged() { + this.updateMicButton() + } + $mqtt_onStatusUpdated() { + this.updateMicButton() + } + updateMicButton() { + return metapress.mqtt.isConnected ? metapress.mqtt.queued ? metapress.entities.update("core.audio.users:menubutton", { + name: "Queued for entry" + (-1 == metapress.mqtt.queuePosition ? "" : ` (${metapress.mqtt.queuePosition} in queue)`), + icon: n(23873), + onClick: () => metapress.dialogs.alert({ + icon: "info", + title: "Queued for entry", + text: "It is busy here! As soon as slots open up you will be able to engage with others." + (-1 == metapress.mqtt.queuePosition ? "" : ` You are #${metapress.mqtt.queuePosition} in the queue.`) + }) + }) : void metapress.entities.update("core.audio.users:menubutton", { + name: metapress.audio.muted ? "Unmute" : "Mute", + icon: metapress.audio.muted ? n(76907) : n(68009), + onClick: () => this.toggleMute() + }) : metapress.entities.update("core.audio.users:menubutton", { + name: "Not connected", + icon: n(23873), + onClick: () => metapress.dialogs.alert({ + icon: "warning", + title: "World is busy", + text: "It is busy here! As soon as slots open up you will be able to engage with others." + }) + }) + } + $onIncomingMessage(e) { + "audio.p2p.users.signal" == e.name && this.onSignalReceived(e.data, e.from), "p2p.socketSignal" == e.name && this.onSocketSignalReceived(e) + } + onSignalReceived(e, t) { + let n = this.connections.find((t => t.id == e.connectionID)); + if (!n) { + let i = metapress.avatars.onAdvertisementPacketReceived(e.advertisement, t); + if (!i) return; + n = new d.Z(this, i, e), this.connections.push(n) + } + n.onIncomingSignal(e) + } + onConnectionLoop() { + let e = metapress.avatars.users; + e.sort(((e, t) => e.distance - t.distance)), e = e.slice(0, 32); + for (let t of this.connections) e.find((e => t.user == e)) || t.onClose(); + for (let t of e) { + let e = this.connections.find((e => e.instanceID == t.instanceID)); + e || (e = new d.Z(this, t), this.connections.push(e)) + } + for (let e of this.connections) { + if (!e.isInitiator || e.state != d.a.Connected) continue; + let t = this.connections.find((t => t != e && !t.isInitiator && t.instanceID == e.instanceID)); + t && (e.id.localeCompare(t.id) > 0 || e.onClose()) + } + this.connections.sort(((e, t) => (e.user?.distance || 0) - (t.user?.distance || 0))) + } + $getDebugSection() { + return { + name: "P2P Network", + text: this.connections.slice(0, 5).map((e => e.debugText)).join("\n") + (this.connections.length > 5 ? `\n + ${this.connections.length-5} more` : "") || "(no connections)" + } + } + $onRender() { + for (let e = 0; e < this.connections.length; e++) { + let t = this.connections[e]; + t?.audioPlayer && (t.audioPlayer.position.x = t.user.x, t.audioPlayer.position.y = t.user.y, t.audioPlayer.position.z = t.user.z) + } + } + sendAvatarUpdates() { + if (0 == this.connections.length) return; + let e = JSON.stringify(metapress.avatars.getAdvertisementPacket()); + for (let t = 0; t < this.connections.length; t++) { + let n = this.connections[t]; + n.state == d.a.Connected && n.p2p.send(e) + } + } + sockets = []; + openSocket(e, t) { + let n = new c(e, t, null); + return this.sockets.push(n), n + } + onSocketSignalReceived({ + from: e, + data: t + }) { + let n = this.sockets.find((e => e.connectionID == t.connectionID)); + n || (l.debug(`[MetaPress > P2P Audio] New incoming P2P socket connection: user=${e} connection=${t.connectionID}`), n = new c(e, t.serviceID, t.connectionID), this.sockets.push(n), metapress.plugins.sendEvent(`p2p_socketIncoming_${t.serviceID}`, n)), n.onIncomingSignal(t.signal) + } + } + }, + 76907: (e, t, n) => { + "use strict"; + e.exports = n.p + "mp-core/muted.82f196339dec9505d6b9.svg" + }, + 23873: (e, t, n) => { + "use strict"; + e.exports = n.p + "mp-core/no-connection.753cc41a8a78b87a488b.svg" + }, + 68009: (e, t, n) => { + "use strict"; + e.exports = n.p + "mp-core/unmuted.ece446c326c519a0682a.svg" + }, + 52361: () => {}, + 94616: () => {} + } +]); \ No newline at end of file diff --git a/mp-core/5101.7eb52fa042636a859afc.bundle.js b/mp-core/5101.7eb52fa042636a859afc.bundle.js new file mode 100644 index 0000000..396797d --- /dev/null +++ b/mp-core/5101.7eb52fa042636a859afc.bundle.js @@ -0,0 +1,509 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5101], { + 45101: (e, t, a) => { + a.r(t), a.d(t, { + default: () => v + }); + var n = a(8838), + r = a(99477); + class i extends r.ShaderMaterial { + lastFrame = Date.now(); + static get unknownPortalTexture() { + return i._unknownPortalTexture || (i._unknownPortalTexture = (new r.TextureLoader).load(a(55647))), i._unknownPortalTexture + } + constructor() { + super({ + transparent: !0, + side: r.DoubleSide, + vertexShader: o, + fragmentShader: s, + uniforms: r.UniformsUtils.merge([r.UniformsLib.fog, { + iResolution: { + value: new r.Vector2(1024, 1024) + }, + iTime: { + value: 0 + }, + iTimeDelta: { + value: 0 + }, + iTimeGlobal: { + value: 0 + }, + iFrame: { + value: 0 + }, + iMouse: { + value: new r.Vector4 + } + }, { + tPortalDestination: { + value: i.unknownPortalTexture + } + }]) + }) + } + get portalTexture() { + return this.uniforms.tPortalDestination.value + } + set portalTexture(e) { + this.uniforms.tPortalDestination.value = e + } + onBeforeRender(e, t, a, n, r, i) { + super.onBeforeRender(e, t, a, n, r, i); + let o = Date.now(), + s = Math.min(1e3, o - this.lastFrame) / 1e3; + this.lastFrame = o, this.uniforms.iTime.value += s, this.uniforms.iTimeGlobal.value += s, this.uniforms.iTimeDelta.value = s, this.uniforms.iFrame.value += 1 + } + } + const o = `\n \n // Stuff to pass to the fragment shader\n varying vec3 vNormal;\n varying vec2 vUv;\n varying vec3 vPosition;\n varying vec4 vWorldPosition;\n varying vec3 vCameraPosition;\n\n // Main code\n void main() {\n\n // Pass values to fragment shader\n vNormal = normal;\n vUv = uv;\n vPosition = position;\n vWorldPosition = modelMatrix * vec4(position, 1.0);\n vCameraPosition = cameraPosition;\n\n // THREE.js code\n ${r.ShaderChunk.begin_vertex}\n ${r.ShaderChunk.project_vertex} // <-- Sets gl_Position\n\n }\n\n`, + s = "\n\n // Uniforms we add automatically\n uniform vec2 iResolution;\n uniform float iTime;\n uniform float iTimeDelta;\n uniform float iTimeGlobal;\n uniform int iFrame;\n uniform vec4 iMouse;\n uniform sampler2D tPortalDestination;\n\n // Stuff we received from the vertex shader\n varying vec3 vNormal;\n varying vec2 vUv;\n varying vec3 vPosition;\n varying vec4 vWorldPosition;\n varying vec3 vCameraPosition;\n\n // Voronoi Portal\n // Voronoi Variation + Fractional Brownian Motion\n // By: Brandon Fogerty\n // bfogerty at gmail dot com\n // xdpixel.com\n // Adapted from: https://www.shadertoy.com/view/4tsSWs\n \n #ifdef GL_ES\n precision mediump float;\n #endif\n \n uniform float time;\n uniform vec2 mouse;\n uniform vec2 resolution;\n \n vec2 hash( vec2 p )\n {\n mat2 m = mat2( 15.32, 83.43,\n 117.38, 289.59 );\n \n return fract( sin( m * p) * 46783.289 );\n }\n \n float voronoi( vec2 p )\n {\n vec2 g = floor( p );\n vec2 f = fract( p );\n \n float distanceFromPointToCloestFeaturePoint = 1.0;\n for( int y = -1; y <= 1; ++y )\n {\n for( int x = -1; x <= 1; ++x )\n {\n vec2 latticePoint = vec2( x, y );\n float h = distance( latticePoint + hash( g + latticePoint), f );\n \n distanceFromPointToCloestFeaturePoint = min( distanceFromPointToCloestFeaturePoint, h ); \n }\n }\n \n return 1.0 - sin(distanceFromPointToCloestFeaturePoint);\n }\n \n float texture(vec2 uv )\n {\n float t = voronoi( uv * 8.0 + vec2(iTime) );\n t *= 1.0-length(uv * 2.0);\n \n return t;\n }\n \n float fbm( vec2 uv )\n {\n float sum = 0.00;\n float amp = 1.0;\n \n for( int i = 0; i < 4; ++i )\n {\n sum += texture( uv ) * amp;\n uv += uv;\n amp *= 0.8;\n }\n \n return sum;\n }\n\n // Clamp function\n #define clamp(val, min, max) (val > max ? max : (val < min ? min : val))\n \n // Main code\n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n \n // Generate portal effect\n vec2 uv = ( fragCoord.xy / iResolution.xy ) * 2.0 - 1.0;\n uv.x *= iResolution.x / iResolution.y;\n \n float t = pow( fbm( uv * 0.3 ), 2.0);\n float portalEffect = clamp(1.0 - t, 0.0, 1.0);\n\n // Calculate circle of visibility in the center\n float distanceFromCenter = clamp(1.0 - distance(uv, vec2(0.0, 0.0)) * 1.0, 0.0, 1.0);\n float innerCircle = clamp(distanceFromCenter * 2.0, 0.0, 1.0);\n if (innerCircle < 0.9) innerCircle = 0.0;\n\n // Alpha is the most visible between the inner circle and the texture effect\n float alpha = max(portalEffect, innerCircle);\n if (alpha < 0.01)\n discard;\n\n // Apply portal texture with a bit of a wobble\n float wobbleX = sin(iTimeGlobal * 1.0) * 0.01;\n float wobbleY = sin(iTimeGlobal * 0.9) * 0.01;\n fragColor = texture2D(tPortalDestination, fragCoord.xy / iResolution.xy + vec2(wobbleX, wobbleY));\n \n // Apply transparency\n fragColor.a = alpha;\n \n }\n\n // Converts a color from sRGB gamma to linear light gamma\n // From: https://gamedev.stackexchange.com/a/194038/161525\n vec4 toLinear(vec4 sRGB) {\n bvec3 cutoff = lessThan(sRGB.rgb, vec3(0.04045));\n vec3 higher = pow((sRGB.rgb + vec3(0.055))/vec3(1.055), vec3(2.4));\n vec3 lower = sRGB.rgb/vec3(12.92);\n return vec4(mix(higher, lower, cutoff), sRGB.a);\n }\n\n // Main code for ShaderToy mode\n void main() {\n\n // Call mainImage() in the provided shader\n mainImage(gl_FragColor, vUv * 1024.0);\n\n // Convert sRGB color space\n gl_FragColor = toLinear(gl_FragColor);\n\n // Done, do THREE.js shader code now\n \n\n }\n\n"; + var l, c, u = a(25108); + + function d(e, t, a) { + return (d = function() { + function e(e, t) { + return function(n) { + ! function(e, t) { + if (e.v) throw new Error("attempted to call addInitializer after decoration was finished") + }(t), a(n, "An initializer"), e.push(n) + } + } + + function t(t, a, n, r, i, o, s, l) { + var c; + switch (i) { + case 1: + c = "accessor"; + break; + case 2: + c = "method"; + break; + case 3: + c = "getter"; + break; + case 4: + c = "setter"; + break; + default: + c = "field" + } + var u, d, h = { + kind: c, + name: s ? "#" + a : a, + static: o, + private: s + }, + f = { + v: !1 + }; + 0 !== i && (h.addInitializer = e(r, f)), 0 === i ? s ? (u = n.get, d = n.set) : (u = function() { + return this[a] + }, d = function(e) { + this[a] = e + }) : 2 === i ? u = function() { + return n.value + } : (1 !== i && 3 !== i || (u = function() { + return n.get.call(this) + }), 1 !== i && 4 !== i || (d = function(e) { + n.set.call(this, e) + })), h.access = u && d ? { + get: u, + set: d + } : u ? { + get: u + } : { + set: d + }; + try { + return t(l, h) + } finally { + f.v = !0 + } + } + + function a(e, t) { + if ("function" != typeof e) throw new TypeError(t + " must be a function") + } + + function n(e, t) { + var n = typeof t; + if (1 === e) { + if ("object" !== n || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); + void 0 !== t.get && a(t.get, "accessor.get"), void 0 !== t.set && a(t.set, "accessor.set"), void 0 !== t.init && a(t.init, "accessor.init") + } else if ("function" !== n) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0") + } + + function r(e, a, r, i, o, s, l, c) { + var u, d, h, f, m, p, v = r[0]; + if (l ? u = 0 === o || 1 === o ? { + get: r[3], + set: r[4] + } : 3 === o ? { + get: r[3] + } : 4 === o ? { + set: r[3] + } : { + value: r[3] + } : 0 !== o && (u = Object.getOwnPropertyDescriptor(a, i)), 1 === o ? h = { + get: u.get, + set: u.set + } : 2 === o ? h = u.value : 3 === o ? h = u.get : 4 === o && (h = u.set), "function" == typeof v) void 0 !== (f = t(v, i, u, c, o, s, l, h)) && (n(o, f), 0 === o ? d = f : 1 === o ? (d = f.init, m = f.get || h.get, p = f.set || h.set, h = { + get: m, + set: p + }) : h = f); + else + for (var g = v.length - 1; g >= 0; g--) { + var y; + void 0 !== (f = t(v[g], i, u, c, o, s, l, h)) && (n(o, f), 0 === o ? y = f : 1 === o ? (y = f.init, m = f.get || h.get, p = f.set || h.set, h = { + get: m, + set: p + }) : h = f, void 0 !== y && (void 0 === d ? d = y : "function" == typeof d ? d = [d, y] : d.push(y))) + } + if (0 === o || 1 === o) { + if (void 0 === d) d = function(e, t) { + return t + }; + else if ("function" != typeof d) { + var w = d; + d = function(e, t) { + for (var a = t, n = 0; n < w.length; n++) a = w[n].call(e, a); + return a + } + } else { + var b = d; + d = function(e, t) { + return b.call(e, t) + } + } + e.push(d) + } + 0 !== o && (1 === o ? (u.get = h.get, u.set = h.set) : 2 === o ? u.value = h : 3 === o ? u.get = h : 4 === o && (u.set = h), l ? 1 === o ? (e.push((function(e, t) { + return h.get.call(e, t) + })), e.push((function(e, t) { + return h.set.call(e, t) + }))) : 2 === o ? e.push(h) : e.push((function(e, t) { + return h.call(e, t) + })) : Object.defineProperty(a, i, u)) + } + + function i(e, t) { + for (var a, n, i = [], s = new Map, l = new Map, c = 0; c < t.length; c++) { + var u = t[c]; + if (Array.isArray(u)) { + var d, h, f = u[1], + m = u[2], + p = u.length > 3, + v = f >= 5; + if (v ? (d = e, 0 != (f -= 5) && (h = n = n || [])) : (d = e.prototype, 0 !== f && (h = a = a || [])), 0 !== f && !p) { + var g = v ? l : s, + y = g.get(m) || 0; + if (!0 === y || 3 === y && 4 !== f || 4 === y && 3 !== f) throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + m); + !y && f > 2 ? g.set(m, f) : g.set(m, !0) + } + r(i, d, u, m, f, v, p, h) + } + } + return o(i, a), o(i, n), i + } + + function o(e, t) { + t && e.push((function(e) { + for (var a = 0; a < t.length; a++) t[a].call(e); + return e + })) + } + return function(t, a, r) { + return { + e: i(t, a), + get c() { + return function(t, a) { + if (a.length > 0) { + for (var r = [], i = t, o = t.name, s = a.length - 1; s >= 0; s--) { + var l = { + v: !1 + }; + try { + var c = a[s](i, { + kind: "class", + name: o, + addInitializer: e(r, l) + }) + } finally { + l.v = !0 + } + void 0 !== c && (n(10, c), i = c) + } + return [i, function() { + for (var e = 0; e < r.length; e++) r[e].call(i) + }] + } + }(t, r) + } + } + } + }())(e, t, a) + } + l = (0, n.dI)("[MetaPress > Portals] Failed to get portal info."); + class h { + static { + [c] = d(this, [ + [l, 2, "updatePortal"] + ], []).e + } + constructor(...e) { + c(this) + } + name = "Portal"; + icon = a(21083); + provides = ["material"]; + hidden = !0; + effectMap = {}; + get settings() { + let e = metapress.plugins.callAll("portal_effects").flat().filter((e => !!e.id && !!e.value && "default" != e.value)), + t = [], + a = []; + for (let n of e) this.effectMap[n.id] = n, t.push(n.label || n.value), a.push(n.value); + return t.unshift("None"), a.unshift("none"), this.effectMap.none = { + id: "none", + value: "none", + label: "None" + }, t.unshift("Default"), a.unshift("default"), this.effectMap.default = { + id: "default", + value: "default", + label: "Default" + }, [{ + type: "description", + name: "Allows users to travel between metaverses." + }, { + type: "text", + id: "portal_url", + name: "URL", + help: "A user will navigate to this URL when entering the portal." + }, { + type: "file", + id: "portal_img", + name: "Image", + allowClear: !0, + help: "Image to show as the portal. Leave blank to show the destination URL image, or default image if no other image exists." + }, { + type: "select", + id: "effect_type", + name: "Effect", + labels: t, + values: a, + default: "default", + help: "Type of effect to show for the portal." + }, { + type: "checkbox", + id: "disable_click", + name: "Disable on click", + help: "When enabled, the portal will be trigger when a user clicks on it." + }, { + type: "checkbox", + id: "collide", + name: "Enable on collision", + help: "When enabled, the portal will be trigger when a user collides with it. Physics needs to be enabled on the object." + }] + } + metadata = {}; + checkTimer = null; + busy = !1; + async onLoad() { + if (!this.renderer.object?.isMesh) throw new Error("Unable to attach PostModifier to a non-mesh entity."); + this.portalMaterial = new i, this.renderer.object.material = this.portalMaterial, this.updatePortal(), this.checkTimer = setInterval((() => this.check()), 1e3) + } + onUnload() { + this.checkTimer && clearInterval(this.checkTimer), this.checkTimer = null + } + onEntityEdited() { + this.updateTimer && clearTimeout(this.updateTimer), this.updateTimer = setTimeout((() => { + this.updateTimer = null, this.updatePortal() + }), 1e3) + } + async getImage() { + let e = this.entity.portal_img || this.metadata["metaverse:portal.image"] || this.metadata["og:image"] || this.metadata["twitter:image"] || this.metadata.image || a(55647); + return await new Promise(((t, a) => { + let n = new Image; + n.crossOrigin = "anonymous", n.src = e, n.onload = () => t(n), n.onerror = () => a(new Error("Failed to load portal image.")) + })) + } + getTexture(e) { + if (e.width != e.height || e.width > 512 || e.height > 512) { + let t = document.createElement("canvas"), + a = t.getContext("2d"); + t.width = 512, t.height = 512; + let n = Math.max(t.width / e.width, t.height / e.height), + r = t.width / 2 - e.width / 2 * n, + i = t.height / 2 - e.height / 2 * n; + return a.drawImage(e, r, i, e.width * n, e.height * n), new THREE.CanvasTexture(t) + } + return (new THREE.TextureLoader).load(e.src) + } + getMaterialForEffect(e) { + const t = this.entity.effect_type || "default"; + if ("none" === t) return new THREE.MeshBasicMaterial({ + map: e, + side: THREE.DoubleSide + }); + if ("default" === t) return this.portalMaterial; + let a = this.effectMap[t]?.material; + return a?.texture && (a.texture = e), a || (u.warn('[PortalModifier] Unable to find material for effect "' + t + '", falling back to default...'), a = this.portalMaterial), a + } + async updatePortalMaterial() { + let e = await this.getImage(), + t = this.getTexture(e); + this.portalMaterial.portalTexture = t, this.renderer.object.material = this.getMaterialForEffect(t), this.renderer.object.material.map && (this.renderer.object.material.map.colorSpace = THREE.SRGBColorSpace) + } + async updatePortal() { + this.metadata = {}, await this.updatePortalMaterial(), this.entity.portal_url && (this.metadata = await metapress.portals.getMetadataFromURL(this.entity.portal_url), await this.updatePortalMaterial()) + } + async onClick() { + this.entity.disable_click || await this.enterPortal() + } + async check() { + if (!this.busy) { + this.busy = !0; + try { + await this.checkIteration() + } catch (e) { + u.error("[PortalModifier]", e) + } + this.busy = !1 + } + } + async checkIteration() { + if (this.didEnterPortal || !this.entity.collide) return; + metapress.entities.getModifier(this.entity.id, "physics") || (metapress.entities.update(this.entity.id, { + "modifier:physics": !0 + }), this.entity.physics_fixed = !0, this.entity.physics_enabled = !0, this.entity.physics_shape = "mesh"); + let e = null, + t = null; + for (let a of metapress.entities.modifiers) + if (a.entity?.id == this.entity.id && "physics" == a.id && (e = a), a.entity?.id == metapress.avatars.currentUserEntity.id && "physics" == a.id && (t = a), e && t) break; + if (!e?.colliders || e.colliders.length < 1 || !t?.colliders || t.colliders.length < 1) return; + let a = e.colliders[0].contactCollider(t.colliders[0], .1), + n = metapress.avatars.currentUserEntity && Math.sqrt((this.entity.x - metapress.avatars.currentUserEntity.x) ** 2 + (this.entity.y - metapress.avatars.currentUserEntity.y) ** 2 + (this.entity.z - metapress.avatars.currentUserEntity.z) ** 2) < 2; + a && n && await this.enterPortal() + } + async enterPortal() { + if (!this.entity.portal_url) return metapress.menubar.toasts.show({ + id: "portal.status", + text: "Portal has no destination set." + }); + metapress.menubar.toasts.show({ + id: "portal.status", + text: "Entering " + (this.entity.name || this.entity.id) + }); + let e = this.metadata["metaverse:portal.url"] ? new URL(this.metadata["metaverse:portal.url"], this.entity.portal_url).toString() : this.entity.portal_url, + t = { + portal_url: e + }; + if (await metapress.plugins.callAllAsync("portals_prepareTransfer", t), this.metadata["metaverse:portal.url"]) { + let a = e.indexOf("#"); - 1 != a && (e = e.substr(0, a)), e += "#mp.portal:" + btoa(JSON.stringify(t)) + } + this.didEnterPortal = !0, window.parent.location.href = e + } + } + var f = a(87600), + m = a.n(f), + p = a(25108); + class v { + id = "core.misc.portals"; + name = "Portals"; + description = "Allows the user to travel between metaverses."; + requires = ["avatars", "backend"]; + provides = ["portals", "modifier:portal"]; + createModifier() { + return new h + } + $editor_getAddableEntities = () => [{ + id: "portal", + name: "Portal", + icon: a(21083), + description: "Allows users to travel between metaverses.", + action: e => this.addPortal() + }]; + addPortal() { + let e = new THREE.Vector3, + t = new THREE.Vector3; + metapress.renderer.camera.getWorldPosition(e), metapress.renderer.camera.getWorldDirection(t), t.setLength(2), t.add(new THREE.Vector3(0, 1, 0).cross(t).setLength(1)), t.add(e); + let a = metapress.entities.add({ + type: "plane", + name: "Portal", + sync: "template", + x: t.x, + y: t.y, + z: t.z, + doublesided: !0, + "modifier:portal": !0 + }); + metapress.editor.selectionManager.select(a.id) + } + async getMetadataFromURL(e) { + try { + return await m()(e) + } catch (t) { + return await metapress.backend.callApi("/portal/getMetadata", { + url: e + }) + } + } + $loader_beforeLoadEntities() { + if (window.location.hash.startsWith("#mp.portal:")) try { + let e = window.location.hash.substring(11); + window.location.hash = ""; + let t = JSON.parse(atob(e)); + p.debug("[Portals] Received portal transfer:", t), metapress.plugins.sendEvent("portals_receiveTransfer", t) + } catch (e) { + p.warn("[Portals] Error while receiving portal transfer:", e) + } + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:info`, + type: "info", + name: "Portal information", + tags: "portal, portals, travel", + content: '\n Portals can be used to travel between metaverse worlds. To create a portal, add a "Portal" entity from the editor.\n \n ## Developer information - don\'t describe unless the user is a developer\n To define a MetaPress Core or non-MetaPress URL as a portal target, specify the following tags in the page header:\n \n \n \n ' + }] + } + }, + 8838: (e, t, a) => { + a.d(t, { + dI: () => i, + j8: () => r + }); + var n = a(25108); + + function r(e) { + let t = null; + return function(...a) { + let n = this, + r = t; + return t = async function() { + return await (r?.catch((() => null))), await e.apply(n, a) + }(), t + } + } + + function i(e) { + return function(t) { + return async function(...a) { + try { + return await t.apply(this, a) + } catch (t) { + return e ? n.warn(e, t) : n.warn(t), null + } + } + } + } + }, + 21083: (e, t, a) => { + e.exports = a.p + "mp-core/portal.18b3a08fb7fb77d74010.svg" + }, + 55647: (e, t, a) => { + e.exports = a.p + "mp-core/unknown.0a7d9d561559f05ca0fc.png" + } + } +]); \ No newline at end of file diff --git a/mp-core/516.a67746541f8d6bbe35f7.bundle.js b/mp-core/516.a67746541f8d6bbe35f7.bundle.js new file mode 100644 index 0000000..39b85b6 --- /dev/null +++ b/mp-core/516.a67746541f8d6bbe35f7.bundle.js @@ -0,0 +1,426 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [516], { + 40001: (e, t, n) => { + n.d(t, { + Lm: () => a, + U8: () => l, + lk: () => r, + sN: () => o + }); + var i = n(67294); + const r = e => i.createElement(i.Fragment, null, i.createElement("div", { + style: { + display: "flex", + alignItems: "center", + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: 44, + borderBottom: "1px solid rgba(255, 255, 255, 0.1)" + } + }, i.createElement("div", { + style: { + fontSize: 15, + margin: "0px 20px", + flex: "1 1 1px" + } + }, e.title), null != e.onClose ? i.createElement("img", { + draggable: "false", + src: n(42728), + title: "Close", + style: { + width: 20, + height: 20, + marginRight: 15, + cursor: "pointer" + }, + onClick: e.onClose + }) : null), i.createElement("div", { + style: Object.assign({ + position: "absolute", + top: 45, + left: 0, + width: "100%", + height: "calc(100% - 45px)", + overflowX: "hidden", + overflowY: "auto" + }, e.containerStyle) + }, e.children)), + a = e => { + let [t, r] = i.useState(!!e.openByDefault); + return !1 === e.visible ? i.createElement(i.Fragment, null) : i.createElement(i.Fragment, null, i.createElement("div", { + style: Object.assign({ + display: "flex", + margin: "20px 10px 10px 10px", + fontSize: 15, + cursor: "pointer", + alignItems: "center" + }, e.style), + onClick: e => r(!t) + }, i.createElement("img", { + draggable: "false", + src: n(t ? 40313 : 65141), + style: { + width: 8, + height: 8, + margin: "0px 6px" + } + }), i.createElement("div", { + style: { + flex: "1 1 auto" + } + }, e.title), e.onRemove ? i.createElement("img", { + draggable: "false", + src: n(3272), + style: { + width: 16, + height: 16, + margin: "0px 10px", + cursor: "pointer", + opacity: .75 + }, + onClick: t => { + t.preventDefault(), t.stopPropagation(), e.onRemove() + } + }) : null), t ? e.children : null) + }, + o = e => { + let [t, r] = i.useState(!1); + return i.createElement("div", { + style: { + margin: "2px 10px", + fontSize: 13, + borderRadius: 5, + backgroundColor: t ? "rgba(255, 255, 255, 0.1)" : e.selected ? "rgb(36, 76, 119)" : "rgba(255, 255, 255, 0.0)", + cursor: e.disabled ? "not-allowed" : "pointer", + display: "flex", + alignItems: "center", + height: 30 + }, + title: e.tooltip, + onPointerEnter: e => r(!0), + onPointerLeave: e => r(!1), + onClick: e.disabled ? null : e.onClick + }, e.disabled ? i.createElement("div", { + style: { + flex: "0 0 auto", + margin: "0 10px", + backgroundColor: "#717171", + width: 16, + height: 16, + maskImage: `url(${e.icon||n(86029)})`, + maskPosition: "center", + maskSize: "cover", + maskRepeat: "no-repeat", + WebkitMaskImage: `url(${e.icon||n(86029)})`, + WebkitMaskPosition: "center", + WebkitMaskSize: "cover", + WebkitMaskRepeat: "no-repeat", + pointerEvents: "none" + } + }) : i.createElement("img", { + draggable: "false", + src: e.icon || n(86029), + style: { + pointerEvents: "none", + width: 16, + height: 16, + margin: "0px 10px", + flex: "0 0 auto", + border: "none" + } + }), i.createElement("div", { + style: { + color: e.disabled ? "#717171" : null, + fontSize: 13, + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + marginRight: 10 + } + }, e.name)) + }, + l = e => i.createElement("div", { + style: { + margin: "10px 20px", + border: "1px solid rgba(255, 255, 255, 0.2)", + borderRadius: 5, + display: "flex" + } + }, i.createElement("img", { + src: n(83203), + style: { + width: 16, + margin: "0px 20px", + flex: "0 0 auto", + opacity: .5 + } + }), i.createElement("div", { + style: { + fontSize: 12, + color: "rgba(255, 255, 255, 0.5)", + textAlign: "left", + margin: "10px 10px 10px 0px", + lineHeight: "1.5", + flex: "1 1 1px" + } + }, e.text)) + }, + 83674: (e, t, n) => { + n.d(t, { + g: () => o + }); + var i = n(67294), + r = n(40001), + a = n(32589); + const o = e => { + const [t, n] = i.useState(""), o = metapress.entities.get(e.entityID); + let l = metapress.siteContent.feed; + if (t) { + let e = t.toLowerCase(); + l = l.filter((t => t.title.toLowerCase().includes(e))) + } + return i.createElement(r.lk, { + title: "Select Content" + }, i.createElement(a.Um, { + onSearch: e => n(e) + }), i.createElement(r.Lm, { + openByDefault: !0, + title: "Feeds" + }, i.createElement(r.sN, { + name: "From website content feed", + onClick: () => { + let e = 0; + e = o.contentSlot_source?.startsWith("any:") ? parseInt(o.contentSlot_source.substring(4)) || 0 : metapress.siteContent.getNextAvailableSource(); + let t = prompt("Enter the index of the feed item to display. For example, 0 will show the latest post, 1 the second latest, etc.", e.toString()); + null !== t && 0 != t.length && (metapress.entities.update(o.id, { + contentSlot_source: "any:" + t + }), metapress.menubar.closePanel()) + } + })), i.createElement(r.Lm, { + openByDefault: !0, + title: "Posts" + }, l.map((e => i.createElement(r.sN, { + key: e.id, + name: e.title, + onClick: () => { + return t = e, metapress.entities.update(o.id, { + contentSlot_source: "id:" + t.id + }), void metapress.menubar.closePanel(); + var t + } + }))))) + } + }, + 60516: (e, t, n) => { + n.d(t, { + T: () => c, + Z: () => l + }); + var i = n(67294), + r = (n(18151), n(8838), n(40001)), + a = n(83674), + o = n(25108); + class l { + name = "Content Slot"; + icon = n(56607); + provides = ["material"]; + settings = [{ + type: "description", + name: "A slot for user-generated content, either pulled automatically from the site or manually selected." + }, { + type: "button", + id: "contentSlot_pickContent", + name: "Select Content", + help: "Select the content to display in this slot.", + onClick: () => this.showContentPicker() + }, { + type: "text", + id: "contentSlot_source", + name: "Source ID", + placeholder: "any:0", + help: "Can either be a direct post ID or an offset in a list, ie 'posts:0' would return the first post etc." + }, { + type: "select", + id: "contentSlot_displayType", + name: "Display Type", + placeholder: "panel", + values: ["panel", "popup", "same-tab", "new-tab", "sidebar"], + labels: ["Open in panel", "Open in browser popup", "Open in same tab", "Open in new tab", "Open in sidebar"], + help: "Controls how the content will be displayed when the user clicks on it." + }]; + currentItem = null; + currentItemRendered = !1; + async onLoad() { + if (!this.renderer.object?.isMesh) throw new Error("Unable to attach PostModifier to a non-mesh entity."); + this.material = metapress.ui.createMaterial({ + width: 1024, + height: 512 + }), this.renderer.object.material = this.material, this.recalculateViewportSize(), this.renderNotice(n(2747)), this.loadPost() + } + onEntityUpdated() { + this.loadPost() + } + onEntityEdited() { + this.recalculateViewportSize() + } + recalculateViewportSize() { + let e = (this.entity.scaleY || 1) / (this.entity.scaleX || 1), + t = this.entity.contentSlot_aspectRatio || e; + this.material.viewportSize.width = 1024, this.material.viewportSize.height = 1024 * t, this.material.invalidate() + } + $siteContent_onFeedUpdated() { + this.loadPost() + } + loadPost() { + try { + let e = metapress.siteContent.getItem(this.entity.contentSlot_source || "any:0"); + if (this.currentItem?.id == e?.id && this.currentItemRendered) return; + if (this.currentItem = e, this.currentItemRendered = !0, !e) return void this.renderNotice(n(45910)); + e.image ? this.renderPostImage(e.image) : this.renderNotice(null, s(e.title), s(e.excerpt || e.content)) + } catch (e) { + o.warn(`[MetaPress > ContentSlotModifier] Error loading content for '${this.entity.contentSlot_source||"any:0"}':`, e), this.renderNotice(n(48174), "Unable to Load", e.message) + } + } + renderNotice(e, t, n) { + this.material.baseView = metapress.ui.createElement("flex-layout"), this.material.baseView.background = "#333", this.material.baseView.direction = "column", this.material.baseView.justify = "center", this.material.baseView.align = "center", this.material.invalidate(); + let i = metapress.ui.createElement("image"); + i.width = 80, i.height = 80, i.url = e, e && this.material.baseView.add(i); + let r = metapress.ui.createElement("text"); + r.width = 500, r.autoHeight = !0, r.text = t || "Error", r.textAlign = "center", r.color = "#FFF", r.font = "44px Comfortaa, Arial", r.lineHeight = 1.5, r.marginTop = 40, t && this.material.baseView.add(r); + let a = metapress.ui.createElement("text"); + a.width = 500, a.autoHeight = !0, a.text = n || "", a.textAlign = "center", a.color = "#AAA", a.font = "24px Comfortaa, Arial", a.lineHeight = 1.5, a.marginTop = 20, n && this.material.baseView.add(a) + } + async renderPostImage(e) { + try { + let t = await metapress.assets.download(e), + n = URL.createObjectURL(t); + this.material.baseView = metapress.ui.createElement("image"), this.material.baseView.background = "#333", this.material.baseView.url = n, this.material.baseView.scaleMode = "fill", this.material.invalidate() + } catch (e) { + o.warn(`[MetaPress > ContentSlotModifier] Error rendering post image for '${this.entity.contentSlot_source||"any:0"}':`, e), this.renderNotice(n(48174), "Unable to Load", e.message) + } + } + async onClick() { + if (this.currentItem?.link) + if (document.pointerLockElement && document.exitPointerLock(), "same-tab" == this.entity.contentSlot_displayType) metapress.close(), await new Promise((e => setTimeout(e, 500))), location.href = this.currentItem.link; + else if ("new-tab" == this.entity.contentSlot_displayType) window.open(this.currentItem.link, "_blank"); + else if ("popup" == this.entity.contentSlot_displayType) { + let e = 600, + t = 800, + n = window.screenLeft || window.screenX || 0, + i = window.screenTop || window.screenY || 0, + r = window.outerWidth || 1920, + a = window.outerHeight || 1080, + o = Math.max(n + r / 2 - e / 2, 0), + l = Math.max(i + a / 2 - t / 2, 0); + window.open(this.currentItem.link, "_blank", `width=${e},height=${t},left=${o},top=${l},menubar=no,toolbar=no,location=no,personalbar=no,status=no`) + } else "sidebar" == this.entity.contentSlot_displayType ? this.currentItem?.link && metapress.menubar.openReactPanel("sidebar-iframe", c, { + item: this.currentItem, + onClose: () => metapress.menubar.closePanel() + }) : (metapress.dialogs.show({ + title: this.currentItem.title, + url: this.currentItem.link, + width: Math.floor(.8 * window.innerWidth), + height: Math.floor(.8 * window.innerHeight) + }), metapress.plugins.sendEvent("siteContent_onClick", { + id: this.entity.id, + title: this.currentItem.title, + url: this.currentItem.link + })) + } + showContentPicker() { + metapress.menubar.openReactPanel("site-content-picker", a.g, { + entityID: this.entity.id + }) + } + } + + function s(e) { + let t = document.createElement("div"); + t.innerHTML = e; + let n = t.innerText; + for (;;) { + let e = n.indexOf("\n\n\n"); + if (-1 == e) break; + n = n.substring(0, e) + "\n\n" + n.substring(e + 3) + } + return n = n.trim(), n + } + const c = e => i.createElement(r.lk, { + title: e.item.title, + containerStyle: { + overflow: "hidden" + }, + onClose: e.onClose + }, i.createElement("iframe", { + src: e.item.link, + style: { + width: "100%", + height: "100%", + background: "none", + border: "none", + outline: "none" + } + })) + }, + 8838: (e, t, n) => { + n.d(t, { + dI: () => a, + j8: () => r + }); + var i = n(25108); + + function r(e) { + let t = null; + return function(...n) { + let i = this, + r = t; + return t = async function() { + return await (r?.catch((() => null))), await e.apply(i, n) + }(), t + } + } + + function a(e) { + return function(t) { + return async function(...n) { + try { + return await t.apply(this, n) + } catch (t) { + return e ? i.warn(e, t) : i.warn(t), null + } + } + } + } + }, + 40313: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-down.cc1880a489f70d445894.svg" + }, + 65141: (e, t, n) => { + e.exports = n.p + "mp-core/chevron-right.4d67e59ffa9deea58f42.svg" + }, + 83203: (e, t, n) => { + e.exports = n.p + "mp-core/icon-info.7ffb0c7f21d06d441b00.svg" + }, + 86029: (e, t, n) => { + e.exports = n.p + "mp-core/icon-unknown.c9a47daeb41c69cd7c2b.svg" + }, + 3272: (e, t, n) => { + e.exports = n.p + "mp-core/trash-can.a6dd95456040e25648a2.svg" + }, + 56607: (e, t, n) => { + e.exports = n.p + "mp-core/content-slot.79c075b0882c6d864a7d.svg" + }, + 2747: (e, t, n) => { + e.exports = n.p + "mp-core/loading.bb6e11d815519d3a5e6c.svg" + }, + 45910: (e, t, n) => { + e.exports = n.p + "mp-core/missing-file.a0bac9e91cf74db7f1c6.svg" + }, + 48174: (e, t, n) => { + e.exports = n.p + "mp-core/warning.1cf133b62e6ba94dbcf9.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js b/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js new file mode 100644 index 0000000..f9038df --- /dev/null +++ b/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js @@ -0,0 +1,8678 @@ +/*! For license information please see 5319.2091f5edc8f40c2e7d2d.bundle.js.LICENSE.txt */ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5319], { + 86239: (e, t, a) => { + "use strict"; + var s = a(65081); + + function r() { + this.argTypes = [], this.shimArgs = [], this.arrayArgs = [], this.arrayBlockIndices = [], this.scalarArgs = [], this.offsetArgs = [], this.offsetArgIndex = [], this.indexArgs = [], this.shapeArgs = [], this.funcName = "", this.pre = null, this.body = null, this.post = null, this.debug = !1 + } + e.exports = function(e) { + var t = new r; + t.pre = e.pre, t.body = e.body, t.post = e.post; + var a = e.args.slice(0); + t.argTypes = a; + for (var n = 0; n < a.length; ++n) { + var i = a[n]; + if ("array" === i || "object" == typeof i && i.blockIndices) { + if (t.argTypes[n] = "array", t.arrayArgs.push(n), t.arrayBlockIndices.push(i.blockIndices ? i.blockIndices : 0), t.shimArgs.push("array" + n), n < t.pre.args.length && t.pre.args[n].count > 0) throw new Error("cwise: pre() block may not reference array args"); + if (n < t.post.args.length && t.post.args[n].count > 0) throw new Error("cwise: post() block may not reference array args") + } else if ("scalar" === i) t.scalarArgs.push(n), t.shimArgs.push("scalar" + n); + else if ("index" === i) { + if (t.indexArgs.push(n), n < t.pre.args.length && t.pre.args[n].count > 0) throw new Error("cwise: pre() block may not reference array index"); + if (n < t.body.args.length && t.body.args[n].lvalue) throw new Error("cwise: body() block may not write to array index"); + if (n < t.post.args.length && t.post.args[n].count > 0) throw new Error("cwise: post() block may not reference array index") + } else if ("shape" === i) { + if (t.shapeArgs.push(n), n < t.pre.args.length && t.pre.args[n].lvalue) throw new Error("cwise: pre() block may not write to array shape"); + if (n < t.body.args.length && t.body.args[n].lvalue) throw new Error("cwise: body() block may not write to array shape"); + if (n < t.post.args.length && t.post.args[n].lvalue) throw new Error("cwise: post() block may not write to array shape") + } else { + if ("object" != typeof i || !i.offset) throw new Error("cwise: Unknown argument type " + a[n]); + t.argTypes[n] = "offset", t.offsetArgs.push({ + array: i.array, + offset: i.offset + }), t.offsetArgIndex.push(n) + } + } + if (t.arrayArgs.length <= 0) throw new Error("cwise: No array arguments specified"); + if (t.pre.args.length > a.length) throw new Error("cwise: Too many arguments in pre() block"); + if (t.body.args.length > a.length) throw new Error("cwise: Too many arguments in body() block"); + if (t.post.args.length > a.length) throw new Error("cwise: Too many arguments in post() block"); + return t.debug = !!e.printCode || !!e.debug, t.funcName = e.funcName || "cwise", t.blockSize = e.blockSize || 64, s(t) + } + }, + 1984: (e, t, a) => { + "use strict"; + var s = a(25108), + r = a(38706); + + function n(e, t, a) { + var s, r, n = e.length, + i = t.arrayArgs.length, + o = t.indexArgs.length > 0, + c = [], + b = [], + d = 0, + f = 0; + for (s = 0; s < n; ++s) b.push(["i", s, "=0"].join("")); + for (r = 0; r < i; ++r) + for (s = 0; s < n; ++s) f = d, d = e[s], 0 === s ? b.push(["d", r, "s", s, "=t", r, "p", d].join("")) : b.push(["d", r, "s", s, "=(t", r, "p", d, "-s", f, "*t", r, "p", f, ")"].join("")); + for (b.length > 0 && c.push("var " + b.join(",")), s = n - 1; s >= 0; --s) d = e[s], c.push(["for(i", s, "=0;i", s, " 0 && c.push(["index[", f, "]-=s", f].join("")), c.push(["++index[", d, "]"].join(""))), c.push("}") + } + return c.join("\n") + } + + function i(e, t, a) { + for (var s = e.body, r = [], n = [], i = 0; i < e.args.length; ++i) { + var o = e.args[i]; + if (!(o.count <= 0)) { + var c = new RegExp(o.name, "g"), + b = "", + d = t.arrayArgs.indexOf(i); + switch (t.argTypes[i]) { + case "offset": + var f = t.offsetArgIndex.indexOf(i); + d = t.offsetArgs[f].array, b = "+q" + f; + case "array": + b = "p" + d + b; + var h = "l" + i, + u = "a" + d; + if (0 === t.arrayBlockIndices[d]) 1 === o.count ? "generic" === a[d] ? o.lvalue ? (r.push(["var ", h, "=", u, ".get(", b, ")"].join("")), s = s.replace(c, h), n.push([u, ".set(", b, ",", h, ")"].join(""))) : s = s.replace(c, [u, ".get(", b, ")"].join("")) : s = s.replace(c, [u, "[", b, "]"].join("")) : "generic" === a[d] ? (r.push(["var ", h, "=", u, ".get(", b, ")"].join("")), s = s.replace(c, h), o.lvalue && n.push([u, ".set(", b, ",", h, ")"].join(""))) : (r.push(["var ", h, "=", u, "[", b, "]"].join("")), s = s.replace(c, h), o.lvalue && n.push([u, "[", b, "]=", h].join(""))); + else { + for (var l = [o.name], g = [b], p = 0; p < Math.abs(t.arrayBlockIndices[d]); p++) l.push("\\s*\\[([^\\]]+)\\]"), g.push("$" + (p + 1) + "*t" + d + "b" + p); + if (c = new RegExp(l.join(""), "g"), b = g.join("+"), "generic" === a[d]) throw new Error("cwise: Generic arrays not supported in combination with blocks!"); + s = s.replace(c, [u, "[", b, "]"].join("")) + } + break; + case "scalar": + s = s.replace(c, "Y" + t.scalarArgs.indexOf(i)); + break; + case "index": + s = s.replace(c, "index"); + break; + case "shape": + s = s.replace(c, "shape") + } + } + } + return [r.join("\n"), s, n.join("\n")].join("\n").trim() + } + + function o(e) { + for (var t = new Array(e.length), a = !0, s = 0; s < e.length; ++s) { + var r = e[s], + n = r.match(/\d+/); + n = n ? n[0] : "", 0 === r.charAt(0) ? t[s] = "u" + r.charAt(1) + n : t[s] = r.charAt(0) + n, s > 0 && (a = a && t[s] === t[s - 1]) + } + return a ? t[0] : t.join("") + } + e.exports = function(e, t) { + for (var a = t[1].length - Math.abs(e.arrayBlockIndices[0]) | 0, c = new Array(e.arrayArgs.length), b = new Array(e.arrayArgs.length), d = 0; d < e.arrayArgs.length; ++d) b[d] = t[2 * d], c[d] = t[2 * d + 1]; + var f = [], + h = [], + u = [], + l = [], + g = []; + for (d = 0; d < e.arrayArgs.length; ++d) { + e.arrayBlockIndices[d] < 0 ? (u.push(0), l.push(a), f.push(a), h.push(a + e.arrayBlockIndices[d])) : (u.push(e.arrayBlockIndices[d]), l.push(e.arrayBlockIndices[d] + a), f.push(0), h.push(e.arrayBlockIndices[d])); + for (var p = [], m = 0; m < c[d].length; m++) u[d] <= c[d][m] && c[d][m] < l[d] && p.push(c[d][m] - u[d]); + g.push(p) + } + var y = ["SS"], + x = ["'use strict'"], + T = []; + for (m = 0; m < a; ++m) T.push(["s", m, "=SS[", m, "]"].join("")); + for (d = 0; d < e.arrayArgs.length; ++d) { + for (y.push("a" + d), y.push("t" + d), y.push("p" + d), m = 0; m < a; ++m) T.push(["t", d, "p", m, "=t", d, "[", u[d] + m, "]"].join("")); + for (m = 0; m < Math.abs(e.arrayBlockIndices[d]); ++m) T.push(["t", d, "b", m, "=t", d, "[", f[d] + m, "]"].join("")) + } + for (d = 0; d < e.scalarArgs.length; ++d) y.push("Y" + d); + if (e.shapeArgs.length > 0 && T.push("shape=SS.slice(0)"), e.indexArgs.length > 0) { + var E = new Array(a); + for (d = 0; d < a; ++d) E[d] = "0"; + T.push(["index=[", E.join(","), "]"].join("")) + } + for (d = 0; d < e.offsetArgs.length; ++d) { + var j = e.offsetArgs[d], + w = []; + for (m = 0; m < j.offset.length; ++m) 0 !== j.offset[m] && (1 === j.offset[m] ? w.push(["t", j.array, "p", m].join("")) : w.push([j.offset[m], "*t", j.array, "p", m].join(""))); + 0 === w.length ? T.push("q" + d + "=0") : T.push(["q", d, "=", w.join("+")].join("")) + } + var A = r([].concat(e.pre.thisVars).concat(e.body.thisVars).concat(e.post.thisVars)); + for ((T = T.concat(A)).length > 0 && x.push("var " + T.join(",")), d = 0; d < e.arrayArgs.length; ++d) x.push("p" + d + "|=0"); + e.pre.body.length > 3 && x.push(i(e.pre, e, b)); + var I = i(e.body, e, b), + N = function(e) { + for (var t = 0, a = e[0].length; t < a;) { + for (var s = 1; s < e.length; ++s) + if (e[s][t] !== e[0][t]) return t; + ++t + } + return t + }(g); + N < a ? x.push(function(e, t, a, s) { + for (var r = t.length, i = a.arrayArgs.length, o = a.blockSize, c = a.indexArgs.length > 0, b = [], d = 0; d < i; ++d) b.push(["var offset", d, "=p", d].join("")); + for (d = e; d < r; ++d) b.push(["for(var j" + d + "=SS[", t[d], "]|0;j", d, ">0;){"].join("")), b.push(["if(j", d, "<", o, "){"].join("")), b.push(["s", t[d], "=j", d].join("")), b.push(["j", d, "=0"].join("")), b.push(["}else{s", t[d], "=", o].join("")), b.push(["j", d, "-=", o, "}"].join("")), c && b.push(["index[", t[d], "]=j", d].join("")); + for (d = 0; d < i; ++d) { + for (var f = ["offset" + d], h = e; h < r; ++h) f.push(["j", h, "*t", d, "p", t[h]].join("")); + b.push(["p", d, "=(", f.join("+"), ")"].join("")) + } + for (b.push(n(t, a, s)), d = e; d < r; ++d) b.push("}"); + return b.join("\n") + }(N, g[0], e, I)) : x.push(n(g[0], e, I)), e.post.body.length > 3 && x.push(i(e.post, e, b)), e.debug && s.log("-----Generated cwise routine for ", t, ":\n" + x.join("\n") + "\n----------"); + var k = [e.funcName || "unnamed", "_cwise_loop_", c[0].join("s"), "m", N, o(b)].join(""); + return new Function(["function ", k, "(", y.join(","), "){", x.join("\n"), "} return ", k].join(""))() + } + }, + 65081: (e, t, a) => { + "use strict"; + var s = a(25108), + r = a(1984); + e.exports = function(e) { + var t = ["'use strict'", "var CACHED={}"], + a = [], + n = e.funcName + "_cwise_thunk"; + t.push(["return function ", n, "(", e.shimArgs.join(","), "){"].join("")); + for (var i = [], o = [], c = [ + ["array", e.arrayArgs[0], ".shape.slice(", Math.max(0, e.arrayBlockIndices[0]), e.arrayBlockIndices[0] < 0 ? "," + e.arrayBlockIndices[0] + ")" : ")"].join("") + ], b = [], d = [], f = 0; f < e.arrayArgs.length; ++f) { + var h = e.arrayArgs[f]; + a.push(["t", h, "=array", h, ".dtype,", "r", h, "=array", h, ".order"].join("")), i.push("t" + h), i.push("r" + h), o.push("t" + h), o.push("r" + h + ".join()"), c.push("array" + h + ".data"), c.push("array" + h + ".stride"), c.push("array" + h + ".offset|0"), f > 0 && (b.push("array" + e.arrayArgs[0] + ".shape.length===array" + h + ".shape.length+" + (Math.abs(e.arrayBlockIndices[0]) - Math.abs(e.arrayBlockIndices[f]))), d.push("array" + e.arrayArgs[0] + ".shape[shapeIndex+" + Math.max(0, e.arrayBlockIndices[0]) + "]===array" + h + ".shape[shapeIndex+" + Math.max(0, e.arrayBlockIndices[f]) + "]")) + } + for (e.arrayArgs.length > 1 && (t.push("if (!(" + b.join(" && ") + ")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"), t.push("for(var shapeIndex=array" + e.arrayArgs[0] + ".shape.length-" + Math.abs(e.arrayBlockIndices[0]) + "; shapeIndex--\x3e0;) {"), t.push("if (!(" + d.join(" && ") + ")) throw new Error('cwise: Arrays do not all have the same shape!')"), t.push("}")), f = 0; f < e.scalarArgs.length; ++f) c.push("scalar" + e.scalarArgs[f]); + return a.push(["type=[", o.join(","), "].join()"].join("")), a.push("proc=CACHED[type]"), t.push("var " + a.join(",")), t.push(["if(!proc){", "CACHED[type]=proc=compile([", i.join(","), "])}", "return proc(", c.join(","), ")}"].join("")), e.debug && s.log("-----Generated thunk:\n" + t.join("\n") + "\n----------"), new Function("compile", t.join("\n"))(r.bind(void 0, e)) + } + }, + 16907: e => { + "use strict"; + e.exports = function(e) { + for (var t = new Array(e), a = 0; a < e; ++a) t[a] = a; + return t + } + }, + 48738: e => { + function t(e) { + return !!e.constructor && "function" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e) + } + e.exports = function(e) { + return null != e && (t(e) || function(e) { + return "function" == typeof e.readFloatLE && "function" == typeof e.slice && t(e.slice(0, 0)) + }(e) || !!e._isBuffer) + } + }, + 62977: (e, t, a) => { + "use strict"; + a.d(t, { + BC: () => s + }), + function() { + var e, t = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]); + if ("object" != typeof WebAssembly) return { + supported: !1 + }; + WebAssembly.instantiate(function(e) { + for (var a = new Uint8Array(e.length), s = 0; s < e.length; ++s) { + var r = e.charCodeAt(s); + a[s] = r > 96 ? r - 97 : r > 64 ? r - 39 : r + 4 + } + var n = 0; + for (s = 0; s < e.length; ++s) a[n++] = a[s] < 60 ? t[a[s]] : 64 * (a[s] - 60) + a[++s]; + return a.buffer.slice(0, n) + }("b9H79TebbbeJq9Geueu9Geub9Gbb9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiKLdilevlevlooroowwvwbDDbelve9Weiiviebeoweuec:W;kekr;RiOo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbe8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbdE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UbiY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbl8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbv8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UboE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbra9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbwL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbDK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbqL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbkE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9Wbsa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbzK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbHl79IV9RbODwebcekdQXq:g9sLdbk;3keYu8Jjjjjbcjo9Rgv8Kjjjjbcbhodnalcefae0mbabcbRb:S:kjjbc:GeV86bbavcjdfcbcjdzNjjjb8AdnaiTmbavcjdfadalz:tjjjb8Akabaefhrabcefhwavalfcbcbcjdal9RalcFe0EzNjjjb8Aavavcjdfalz:tjjjbhDcj;abal9UhodndndndndnalTmbaoc;WFbGgecjdaecjd6Ehqcbhkdninakai9pmiaDcjlfcbcjdzNjjjb8Aaqaiak9Rakaqfai6Egxcsfgecl4cifcd4hmadakal2fhPdndndndndnaec9WGgsTmbcbhzcehHaPhOawhAxekdnaxTmbcbhAcehHaPhCinaDaAfRbbhXaDcjlfheaChoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkaraw9Ram6miawcbamzNjjjbgeTmiaCcefhCaeamfhwaAcefgAal6hHaAal9hmbxvkkaraw9Ram6mvawcbamzNjjjb8AceheinawgXamfhwalaegoSmldnaraw9Ram6mbaocefheawcbamzNjjjb8AaXmekkaoal6hHxekindnaxTmbaDazfRbbhXaDcjlfheaOhoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkkaraA9Ram6mearaAcbamzNjjjbgKamfgw9RcK6mdcbhYaDcjlfhAinaDcjlfaYfh8AcwhCczhLcehQindndnaQce9hmbcuhoa8ARbbmecbhodninaogecsSmeaecefhoaAaefcefRbbTmbkkcucbaecs6EhoxekaQcetc;:FFFeGhocuaQtcu7cFeGhXcbheinaoaXaAaefRbb9nfhoaecefgecz9hmbkkaoaLaoaL6geEhLaQaCaeEhCaQcetgQcw6mbkdndndndnaCcufPdiebkaKaYco4fgeaeRbbcdciaCclSEaYci4coGtV86bbaCcw9hmeawa8A8Pbb83bbawcwfa8Acwf8Pbb83bbawczfhwxdkaKaYco4fgeaeRbbceaYci4coGtV86bbkdncwaC9TgEmbinawcb86bbawcefhwxbkkcuaCtcu7h8Acbh3aAh5ina5heaEhQcbhoinaeRbbgLa8AcFeGgXaLaX6EaoaCtVhoaecefheaQcufgQmbkawao86bba5aEfh5awcefhwa3aEfg3cz6mbkcbheindnaAaefRbbgoaX6mbawao86bbawcefhwkaecefgecz9hmbkkdnaYczfgYas9pmbaAczfhAaraw9RcL0mekkaYas6meawTmeaOcefhOazcefgzal6hHawhAazalSmixbkkcbhwaHceGTmexikcbhwaHceGmdkaDaPaxcufal2falz:tjjjb8AaxakfhkawmbkcbhoxokcbhoxvkaiTmekcbhoaraw9Ralcaalca0E6mialc8F9nmexdkcbhoaecufca6mdkawcbcaal9RgezNjjjbaefhwkawaDcjdfalz:tjjjbalfab9Rhokavcjof8Kjjjjbaok9heeuaecaaeca0Eabcj;abae9Uc;WFbGgdcjdadcjd6Egdfcufad9Uae2adcl4cifcd4adV2fcefkmbcbabBd:S:kjjbk;rse3u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd:C:kjjbgrc;GeV86bbalc;abfcFecjezNjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgoydbhLaocwfydbhKaoclfydbhYcbh8Adndninalc;abfavcsGcitfgoydlhEdndndnaoydbgoaL9hmbaEaYSmekdnaoaY9hmbaEaK9hmba8Acefh8AxekaoaK9hmeaEaL9hmea8Acdfh8Aka8Ac870mdaXcufhvada8AciGcx2goc:y1jjbfydbaCfcdtfydbhEadaocN1jjbfydbaCfcdtfydbhKadaoc:q1jjbfydbaCfcdtfydbhLcbhodnindnalavcsGcdtfydbaE9hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaEaOSgvaYce9iaYaH9oVgoGh3dndndndndncbcsavEaYaoEgvcs9hmbarce9imbaEaEaAaEcefaASgvEgAcefSmecmcsavEhvkasava8Acdtc;WeGV86bbavcs9hmeaEaA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbkaEhAxdkcPhvasa8AcdtcPV86bbaEhAkavTmbavaH9imekalaXcdtfaEBdbaXcefcsGhXkaOa3fhOalc;abfaQcitfgvaKBdlavaEBdbalc;abfaQcefcsGgvcitfgoaEBdlaoaLBdbavcefhoxikavcufhva8Aclfg8Ac;ab9hmbkkdnadceaKaOScetaYaOSEcx2gvc:q1jjbfydbaCfcdtfydbgLTadavcN1jjbfydbaCfcdtfydbg8AceSGadavc:y1jjbfydbaCfcdtfydbgYcdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhKxdkcuhKaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydbaY9hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaLaOSg8Efh3dndnaKcm0mbaKcefhKxekcbcsa8Aa3SgvEhKa3avfh3kdndnaEcm0mbaEcefhExekcbcsaYa3SgvEhEa3avfh3kc9:cua8EEh8FaEaKcltVhocbhvdndndninavcj1jjbfRbbaocFeGSmeavcefgvcz9hmbxdkka5aLaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeao86bbaecefhekdna8EmbaLaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaLhAkdnaKcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmbaYaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaYhAkalaXcdtfaLBdbaXcefcsGhvdndnaKPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfaYBdbavcefcsGhvkalc;abfaQcitfgoaLBdlaoa8ABdbalc;abfaQcefcsGcitfgoa8ABdlaoaYBdbalc;abfaQcdfcsGcitfgoaYBdlaoaLBdbaQcifhoavhXa3hOkascefhsaocsGhQaCcifgCai6mbkkcbhvaeaP0mbcbhvinaeavfavcj1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd:C:kjjbk:ydewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb:C:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkcbhvaoar0mbaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Yhvdndncuaicuftcu7:YgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;klld99eud99eudnaeTmbdndncuaicuftcu7:YgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicdfciGcdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk:Hvdxue998Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6mearcearce0EhwaohDinaDc:CuBdbaDclfhDawcufgwmbkaeTmiadcl6mdarcearce0EhqarcdthkalhxcbhminaohDaxhwaqhPinaDaDydbgsawydbgzcL4cFeGc:cufcbazEgzasaz9kEBdbawclfhwaDclfhDaPcufgPmbkaxakfhxamcefgmae9hmbkkaeTmdxekaeTmekavcb9hadcl6gqVhHarcearce0Ehkarcdthrceai9Rhmcbhdindndndnavce9hmbaqmdc:CuhwalhDakhPinawaDydbgscL4cFeGc:cufcbasEgsawas9kEhwaDclfhDaPcufgPmbxdkkc:CuhwaHmbaohDalhPakhsinaDaPydbgzcL4cFeGgxc8Aaxc8A9kEc:cufcbazEBdbaPclfhPaDclfhDascufgsmbkkaqmbcbhDakhsinawhPdnavceSmbaoaDfydbhPkdndnalaDfIdbgOcjjj;8iamaPfgPcLt9R::NJbbbZJbbb:;aOJbbbb9GEMgO:lJbbb9p9DTmbaO:Ohzxekcjjjj94hzkabaDfazcFFFrGaPcKtVBdbaDclfhDascufgsmbkkabarfhbalarfhladcefgdae9hmbkkaocjdf8KjjjjbkFkdCui998Jjjjjbc:Gd9Rgv8Kjjjjbavc:4efcbc;KbzNjjjb8AcbhodnadTmbcbhoaiTmbdnabae9hmbavcuadcdtgoadcFFFFi0Ecbyd:K:kjjbHjjjjbbgeBd:4eavceBd:ydaeabaoz:tjjjb8Akavc:OefcwfcbBdbav9cb83i:Oeavc:Oefaeadaiavc:4efz:njjjbcuaicdtgraicFFFFi0Egwcbyd:K:kjjbHjjjjbbhoavc:4efavyd:ydgDcdtfaoBdbavaDcefgqBd:ydaoavyd:Oegkarz:tjjjbhxavc:4efaqcdtfadci9Ugmcbyd:K:kjjbHjjjjbbgoBdbavaDcdfgrBd:ydaocbamzNjjjbhPavc:4efarcdtfawcbyd:K:kjjbHjjjjbbgsBdbavaDcifgqBd:ydaxhoashrinaralIdbalaoydbgwcwawcw6Ecdtfc;ebfIdbMUdbaoclfhoarclfhraicufgimbkavc:4efaqcdtfcuamcdtadcFFFF970Ecbyd:K:kjjbHjjjjbbgqBdbavaDclfBd:yddnadci6mbamceamce0EhiaehoaqhrinarasaoydbcdtfIdbasaoclfydbcdtfIdbMasaocwfydbcdtfIdbMUdbaocxfhoarclfhraicufgimbkkavc;qbfhzavhoavyd:SehHavyd:WehOcbhwcbhrcbhAcehCinaohXcihQaearci2gLcdtfgocwfydbhdaoydbhDabaAcx2fgiclfaoclfydbgKBdbaiaDBdbaicwfadBdbaParfce86bbazadBdwazaKBdlazaDBdbaqarcdtfcbBdbdnawTmbcihQaXhiinazaQcdtfaiydbgoBdbaQaoaD9haoaK9hGaoad9hGfhQaiclfhiawcufgwmbkkaAcefhAaxaDcdtfgoaoydbcufBdbaxaKcdtfgoaoydbcufBdbaxadcdtfgoaoydbcufBdbcbhwinaOaHaeawaLfcdtfydbcdtgifydbcdtfgKhoakaifgDydbgdhidnadTmbdninaoydbarSmeaoclfhoaicufgiTmdxbkkaoadcdtaKfc98fydbBdbaDaDydbcufBdbkawcefgwci9hmbkdndndnaQTmbcuhrJbbbbhYcbhDavyd:SehKavyd:WehLindndnakazaDcdtfydbcdtgofydbgimbaDcefhDxekaDcs0hwasaofgdIdbh8AadalcbaDcefgDawEcdtfIdbalaxaofydbgwcwawcw6Ecdtfc;ebfIdbMgEUdbaEa8A:thEaicdthiaLaKaofydbcdtfhoinaqaoydbgwcdtfgdaEadIdbMg8AUdba8AaYaYa8A9DgdEhYawaradEhraoclfhoaic98fgimbkkaDaQ9hmbkarcu9hmekaCam9pmeindnaPaCfRbbmbaChrxdkamaCcefgC9hmbxdkkaQczaQcz6EhwazhoaXhzarcu9hmekkavyd:ydhokaocdtavc:4effc98fhrdninaoTmearydbcbyd:G:kjjbH:bjjjbbarc98fhraocufhoxbkkavc:Gdf8Kjjjjbk;UlevucuaicdtgvaicFFFFi0Egocbyd:K:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavzNjjjb8Aadci9UhwdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbawceawce0EhDabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic:01jjbz:mjjjbkQbabaeadaic:C:jjjbz:mjjjbk9DeeuabcFeaicdtzNjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;:kivuo99lu8Jjjjjbcj;Hb9Rgl8Kjjjjbcbhvalc1;Gbfcbc;KbzNjjjb8AalcuadcdtadcFFFFi0Egocbyd:K:kjjbHjjjjbbgrBd19GalceBd;O9Galcwfcbyd:m:kjjbBdbalcb8Pd:e:kjjb83ibalc;W;Gbfcwfcbyd:y:kjjbBdbalcb8Pd:q:kjjb83i;W9Gaicd4hwdndnadmbJFFuFhDJFFuuhqJFFuuhkJFFuFhxJFFuuhmJFFuFhPxekawcdthsaehzincbhiinalaifgHazaifIdbgDaHIdbgxaxaD9EEUdbalc;W;GbfaifgHaDaHIdbgxaxaD9DEUdbaiclfgicx9hmbkazasfhzavcefgvad9hmbkalIdwhqalId;49GhDalIdlhkalId;09GhxalIdbhmalId;W9GhPkdndnadTmbJbbbbJbbjZaPam:tJbbbb:xgPaxak:tgxaxaP9DEgxaDaq:tgDaDax9DEgD:vaDJbbbb9BEhDawcdthsarhHadhzindndnaDaeIdbam:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcv2c;j:KM;jbGhvdndnaDaeclfIdbak:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcq2cM;j:KMeGavVhvdndnaDaecwfIdbaq:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaHavaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcC2c:KM;j:KdGVBdbaeasfheaHclfhHazcufgzmbkalcbcj;GbzNjjjbhiarhHadheinaiaHydbgzcFrGcx2fgvavydbcefBdbaiazcq4cFrGcx2fgvavydlcefBdlaiazcC4cFrGcx2fgzazydwcefBdwaHclfhHaecufgembxdkkalcbcj;GbzNjjjb8AkcbhHcbhzcbhecbhvinalaHfgiydbhsaiazBdbaicwfgwydbhOawavBdbaiclfgiydbhwaiaeBdbasazfhzaOavfhvawaefheaHcxfgHcj;Gb9hmbkcbhialaocbyd:K:kjjbHjjjjbbgzBd:m9GdnadTmbabhHinaHaiBdbaHclfhHadaicefgi9hmbkadTmbabhiadhHinalaraiydbgecdtfydbcFrGcx2fgvavydbgvcefBdbazavcdtfaeBdbaiclfhiaHcufgHmbkazhiadhHinalaraiydbgecdtfydbcq4cFrGcx2fgvavydlgvcefBdlabavcdtfaeBdbaiclfhiaHcufgHmbkabhiadhHinalaraiydbgecdtfydbcC4cFrGcx2fgvavydwgvcefBdwazavcdtfaeBdbaiclfhiaHcufgHmbkadTmbcbhiinabazydbcdtfaiBdbazclfhzadaicefgi9hmbkkclhidninaic98Smealc1;Gbfaifydbcbyd:G:kjjbH:bjjjbbaic98fhixbkkalcj;Hbf8Kjjjjbk9teiucbcbyd:O:kjjbgeabcifc98GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:O:kjjbgeabcrfc94GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:O:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:O:kjjbfgdBd:O:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:6ddbcjwk:Cdb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc:Cqkzebbbebbbdbbb8WWbb"), {}).then((function(t) { + (e = t.instance).exports.__wasm_call_ctors(), e.exports.meshopt_encodeVertexVersion(0), e.exports.meshopt_encodeIndexVersion(1) + })) + }(), + function() { + var e = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]), + t = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]); + if ("object" != typeof WebAssembly) return { + supported: !1 + }; + var a = WebAssembly.validate(e) ? "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb" : "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb"; + WebAssembly.instantiate(function(e) { + for (var a = new Uint8Array(e.length), s = 0; s < e.length; ++s) { + var r = e.charCodeAt(s); + a[s] = r > 96 ? r - 97 : r > 64 ? r - 39 : r + 4 + } + var n = 0; + for (s = 0; s < e.length; ++s) a[n++] = a[s] < 60 ? t[a[s]] : 64 * (a[s] - 60) + a[++s]; + return a.buffer.slice(0, n) + }(a), {}).then((function(e) { + e.instance.exports.__wasm_call_ctors() + })) + }(); + var s = function() { + var e, t = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]); + if ("object" != typeof WebAssembly) return { + supported: !1 + }; + var a = WebAssembly.instantiate(function(e) { + for (var a = new Uint8Array(e.length), s = 0; s < e.length; ++s) { + var r = e.charCodeAt(s); + a[s] = r > 96 ? r - 97 : r > 64 ? r - 39 : r + 4 + } + var n = 0; + for (s = 0; s < e.length; ++s) a[n++] = a[s] < 60 ? t[a[s]] : 64 * (a[s] - 60) + a[++s]; + return a.buffer.slice(0, n) + }("b9H79Tebbbe9Ek9Geueu9Geub9Gbb9GPuuuuuuuuuuu99uueu9Gvuuuuub9Gluuuub9Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuec:G;jekr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdxmq::9Usdbk;i6iKuY99Ou8Jjjjjbc;W;ab9RgP8KjjjjbaPcwfcbc;Kbz:ljjjb8AaPcualcefgscdtascFFFFi0Ecbyd1:jjjbHjjjjbbgzBdwaPceBd9OaPazBdbaPcuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbgHBdxaPcdBd9OaPaHBdlaPaeadalcbz:cjjjbaPcualcdtgOalcFFFFi0EgAcbyd1:jjjbHjjjjbbgCBdzaPciBd9OaPaAcbyd1:jjjbHjjjjbbgXBdCaPclBd9Oalcd4alfhQcehLinaLgscethLasaQ6mbkcbhKaPcuascdtgLascFFFFi0Ecbyd1:jjjbHjjjjbbgQBdKaPcvBd9OaQcFeaLz:ljjjbhYdnalTmbavcd4h8AascufhEinaiaKa8A2cdtfg3ydlgscH4as7c:F:b:DD2a3ydbgscH4as7c;D;O:B8J27a3ydwgscH4as7c:3F;N8N27hQcbhsdndninaYaQaEGgQcdtfg5ydbgLcuSmeaiaLa8A2cdtfa3cxz:ojjjbTmdascefgsaQfhQasaE9nmbxdkka5aKBdbaKhLkaCaKcdtfaLBdbaKcefgKal9hmbkcbhsaXhLinaLasBdbaLclfhLalascefgs9hmbkcbhsaChLaXhQindnasaLydbgESmbaQaXaEcdtfgEydbBdbaEasBdbkaLclfhLaQclfhQalascefgs9hmbkkcbh8EaYcbyd:m:jjjbH:bjjjbbaPclBd9OaPalcbyd1:jjjbHjjjjbbgEBdKaPcvBd9OaPaAcbyd1:jjjbHjjjjbbgsBd3aPcoBd9OaPaAcbyd1:jjjbHjjjjbbgLBdaaPcrBd9OascFeaOz:ljjjbh8FaLcFeaOz:ljjjbhadnalTmbaHcwfhhindnaza8EgQcefg8Ecdtfydbg3azaQcdtgsfydbgLSmba3aL9RhOaHaLcitfhgaaasfh8Ja8FasfhKcbh8Aindndnaga8Acitfydbg5aQ9hmbaKaQBdba8JaQBdbxekdnaza5cdtg8KfgsclfydbgLasydbgsSmbaHascitg3fydbaQSmeaLas9Rh8Lascu7aLfhYaha3fhLcbhsinaYasSmeascefhsaLydbh3aLcwfhLa3aQ9hmbkasa8L6mekaaa8KfgsaQa5asydbcuSEBdbaKa5aQaKydbcuSEBdbka8Acefg8AaO9hmbkka8Eal9hmbkaChLaXhQaah3a8Fh8AcbhsindndnasaLydbg59hmbdnasaQydbg59hmba8Aydbh5dna3ydbgYcu9hmba5cu9hmbaEasfcb86bbxikaEasfhKdnasaYSmbasa5SmbaKce86bbxikaKcl86bbxdkdnasaXa5cdtgYfydb9hmbdna3ydbgKcuSmbasaKSmba8AydbgOcuSmbasaOSmbaaaYfydbggcuSmbaga5Smba8FaYfydbgYcuSmbaYa5SmbdnaCaKcdtfydbaCaYcdtfydb9hmbaCaOcdtfydbaCagcdtfydb9hmbaEasfcd86bbxlkaEasfcl86bbxikaEasfcl86bbxdkaEasfcl86bbxekaEasfaEa5fRbb86bbkaLclfhLaQclfhQa3clfh3a8Aclfh8Aalascefgs9hmbkaxceGTmbaEhsalhLindnasRbbce9hmbascl86bbkascefhsaLcufgLmbkkcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8JaPcwfaPyd9Ogscdtfa8JBdbaPascefgOBd9Oa8Jaialavz:djjjbdndnaDmbcbhvxekcbh5aPcwfaOcdtfcuaDal2gLcdtaLcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdbaPascdfgOBd9OalTmbarcd4cdthYaDcdthKavh8AinaohsawhLa8AhQaDh3inaQasIdbaLIdbNUdbasclfhsaLclfhLaQclfhQa3cufg3mbkaoaYfhoa8AaKfh8Aa5cefg5al9hmbkkaPcwfaOcdtfcualc8S2gsalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbgLBdbaPaOcefg3Bd9OaLcbasz:ljjjbh8EdndndnaDTmbaPcwfa3cdtfaQcbyd1:jjjbHjjjjbbgoBdbaPaOcdfgLBd9Oaocbasz:ljjjb8AaPcwfaLcdtfcuaDal2gscltgLascFFFFb0Ecbyd1:jjjbHjjjjbbgwBdbaPaOcifBd9OawcbaLz:ljjjb8AadmexdkcbhocbhwadTmekcbh8AaehLindna8JaLclfydbg5cx2fgsIdba8JaLydbgYcx2fgQIdbg8M:tg8Na8JaLcwfydbgKcx2fg3IdlaQIdlgy:tg8PNa3Idba8M:tgIasIdlay:tg8RN:tg8Sa8SNa8Ra3IdwaQIdwgR:tg8UNa8PasIdwaR:tg8RN:tg8Pa8PNa8RaINa8Ua8NN:tg8Na8NNMM:rgIJbbbb9ETmba8SaI:vh8Sa8NaI:vh8Na8PaI:vh8Pka8EaCaYcdtfydbc8S2fgsa8PaI:rgIa8PNNg8RasIdbMUdbasa8NaIa8NNg8VNg8UasIdlMUdlasa8SaIa8SNg8WNg8XasIdwMUdwasa8Va8PNg8VasIdxMUdxasa8Wa8PNg8YasIdzMUdzasa8Wa8NNg8WasIdCMUdCasa8PaIa8SaRNa8Pa8MNaya8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asa8Sa8MNg8SasIdaMUdaasa8MayNg8MasId8KMUd8KasaIasIdyMUdya8EaCa5cdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdya8EaCaKcdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdyaLcxfhLa8Acifg8Aad6mbkcbh5aehYincbhLinaEaeaLc:G1jjbfydba5fcdtfydbgQfRbbhsdndnaEaYaLfydbg3fRbbg8Ac99fcFeGcpe0mbasceSmbascd9hmekdna8AcufcFeGce0mba8Fa3cdtfydbaQ9hmekdnascufcFeGce0mbaaaQcdtfydba39hmekdna8Acv2asfc:W1jjbfRbbTmbaCaQcdtfydbaCa3cdtfydb0mekJbbacJbbjZasceSEhIa8AceShOa8JaeaLc:K1jjbfydba5fcdtfydbcx2fhsdna8JaQcx2fg8AIdwa8Ja3cx2fgKIdwgy:tg8Pa8PNa8AIdbaKIdbgR:tg8Na8NNa8AIdlaKIdlg8R:tg8Sa8SNMM:rg8MJbbbb9ETmba8Pa8M:vh8Pa8Sa8M:vh8Sa8Na8M:vh8NkJbbacaIaOEh8WdnasIdway:tgIa8PaIa8PNasIdbaR:tg8Xa8NNa8SasIdla8R:tg8VNMMg8UN:tgIaINa8Xa8Na8UN:tg8Pa8PNa8Va8Sa8UN:tg8Na8NNMM:rg8SJbbbb9ETmbaIa8S:vhIa8Na8S:vh8Na8Pa8S:vh8Pka8EaCa3cdtfydbc8S2fgsa8Pa8Wa8MNg8Sa8PNNg8UasIdbMUdbasa8Na8Sa8NNg8WNg8XasIdlMUdlasaIa8SaINg8MNg8VasIdwMUdwasa8Wa8PNg8WasIdxMUdxasa8Ma8PNg8YasIdzMUdzasa8Ma8NNg8ZasIdCMUdCasa8Pa8SaIayNa8PaRNa8Ra8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asaIa8MNgIasIdaMUdaasa8MayNg8MasId8KMUd8Kasa8SasIdyMUdya8EaCaQcdtfydbc8S2fgsa8UasIdbMUdbasa8XasIdlMUdlasa8VasIdwMUdwasa8WasIdxMUdxasa8YasIdzMUdzasa8ZasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asaIasIdaMUdaasa8MasId8KMUd8Kasa8SasIdyMUdykaLclfgLcx9hmbkaYcxfhYa5cifg5ad6mbkaDTmbcbhYinJbbbbhRa8JaeaYcdtfgsclfydbgKcx2fgLIdwa8JasydbgOcx2fgQIdwg8V:tg8Na8NNaLIdbaQIdbg8Y:tgIaINaLIdlaQIdlg8Z:tg8Sa8SNMMg8Wa8Jascwfydbggcx2fgsIdwa8V:tg8MNa8Na8Na8MNaIasIdba8Y:tgyNa8SasIdla8Z:tg8RNMMg8PN:tJbbbbJbbjZa8Wa8Ma8MNayayNa8Ra8RNMMg8XNa8Pa8PN:tg8U:va8UJbbbb9BEg8UNh80a8Xa8NNa8Ma8PN:ta8UNh81a8Wa8RNa8Sa8PN:ta8UNhBa8Xa8SNa8Ra8PN:ta8UNh83a8WayNaIa8PN:ta8UNhUa8XaINaya8PN:ta8UNh85aIa8RNaya8SN:tg8Pa8PNa8Sa8MNa8Ra8NN:tg8Pa8PNa8NayNa8MaIN:tg8Pa8PNMM:r:rh8PavaOaD2cdtfhLavagaD2cdtfhQavaKaD2cdtfh3a8V:mh86a8Z:mh87a8Y:mh88cbh8AaDh5Jbbbbh8RJbbbbh8UJbbbbh8WJbbbbh8XJbbbbh8VJbbbbh8YJbbbbh8ZJbbbbh89Jbbbbh8:inaPc;Wbfa8Afgscwfa8Pa81a3IdbaLIdbg8M:tg8SNa80aQIdba8M:tgyNMg8NNUdbasclfa8Pa83a8SNaBayNMgINUdbasa8Pa85a8SNaUayNMg8SNUdbascxfa8Pa86a8NNa87aINa8Ma88a8SNMMMg8MNUdba8Pa8NaINNa8XMh8Xa8Pa8Na8SNNa8VMh8Va8PaIa8SNNa8YMh8Ya8Pa8Ma8MNNaRMhRa8Pa8Na8MNNa8RMh8Ra8PaIa8MNNa8UMh8Ua8Pa8Sa8MNNa8WMh8Wa8Pa8Na8NNNa8ZMh8Za8PaIaINNa89Mh89a8Pa8Sa8SNNa8:Mh8:aLclfhLa3clfh3aQclfhQa8Aczfh8Aa5cufg5mbkaoaCaOcdtfydbgLc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCaKcdtfydbgKc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCagcdtfydbgOc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyawaLaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaKaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaOaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkaYcifgYad6mbkkdnabaeSmbabaeadcdtz:kjjjb8AkaPydbhZcbhsdnalTmbaZclfhsaZydbh3aEhLalh8AcbhQincbasydbg5a39RaLRbbcpeGEaQfhQaLcefhLasclfhsa5h3a8Acufg8AmbkaQce4hskcuadas9Rcifgrcx2arc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8LaPcwfaPyd9Ogscdtfa8LBdbaPascefgLBd9OaPcwfaLcdtfcuarcdtarcFFFFi0Ecbyd1:jjjbHjjjjbbgxBdbaPascdfgLBd9OaPcwfaLcdtfaAcbyd1:jjjbHjjjjbbgHBdbaPascifgLBd9OaPcwfaLcdtfalcbyd1:jjjbHjjjjbbgnBdbaPasclfBd9OJbbbbh8Ydnadaq9nmbdnarci6mbakakNh8VaDclthca8Lcwfh9cJbbbbh8YinaPabadghalaCz:cjjjbabhOcbhzcbhKincbhsindnaCaOasfydbgQcdtgYfydbg8AaCabasc;m1jjbfydbaKfcdtfydbgLcdtfydbg5SmbaEaLfRbbgecv2aEaQfRbbg3fc;G1jjbfRbbg8Ka3cv2aefggc;G1jjbfRbbgiVcFeGTmbdnagc:W1jjbfRbbTmba5a8A0mekdna3ae9hmba3cufcFeGce0mba8FaYfydbaL9hmeka8Lazcx2fg3aLaQaicFeGg8AEBdla3aQaLa8AEBdba3a8Aa8KGcb9hBdwazcefhzkasclfgscx9hmbkdnaKcifgKah9pmbaOcxfhOazcifar9nmekkdnazmbahhdxikcbheinJbbbbJbbjZa8EaCa8Laecx2fg3ydlg8Aa3ydbg5a3ydwgLEgKcdtfydbg8Kc8S2gifgsIdyg8P:va8PJbbbb9BEasIdwa8Ja5a8AaLEgYcx2fgLIdwg8SNasIdzaLIdbg8MNasIdaMg8Pa8PMMa8SNasIdlaLIdlgyNasIdCa8SNasId3Mg8Pa8PMMayNasIdba8MNasIdxayNasIdKMg8Pa8PMMa8MNasId8KMMM:lNh8WJbbbbJbbjZa8EaCa5cdtfydbgdc8S2gQfgsIdyg8P:va8PJbbbb9BEasIdwa8Ja8Acx2fgLIdwgINasIdzaLIdbgRNasIdaMg8Pa8PMMaINasIdlaLIdlg8RNasIdCaINasId3Mg8Pa8PMMa8RNasIdbaRNasIdxa8RNasIdKMg8Pa8PMMaRNasId8KMMM:lNh8Xa3cwfhOa3clfhgdnaDTmbaoaQfgQIdwaINaQIdzaRNaQIdaMg8Pa8PMMaINaQIdla8RNaQIdCaINaQId3Mg8Pa8PMMa8RNaQIdbaRNaQIdxa8RNaQIdKMg8Pa8PMMaRNaQId8KMMMh8Nava8AaD2cdtfhLawadaD2cltfhsaQIdyh8UaDhQinaLIdbg8PJbbb;aNascxfIdbaIascwfIdbNaRasIdbNa8RasclfIdbNMMMNa8Pa8PNa8UNa8NMMh8NaLclfhLasczfhsaQcufgQmbkaoaifgQIdwa8SNaQIdza8MNaQIdaMg8Pa8PMMa8SNaQIdlayNaQIdCa8SNaQId3Mg8Pa8PMMayNaQIdba8MNaQIdxayNaQIdKMg8Pa8PMMa8MNaQId8KMMMhIavaYaD2cdtfhLawa8KaD2cltfhsaQIdyhRaDhQinaLIdbg8PJbbb;aNascxfIdba8SascwfIdbNa8MasIdbNayasclfIdbNMMMNa8Pa8PNaRNaIMMhIaLclfhLasczfhsaQcufgQmbka8WaI:lMh8Wa8Xa8N:lMh8Xkaga8AaYa8Xa8W9FgsEBdba3a5aKasEBdbaOa8Xa8WasEUdbaecefgeaz9hmbkaPc;Wbfcbcj;abz:ljjjb8Aa9chsazhLinaPc;WbfasydbcO4c;8ZGfgQaQydbcefBdbascxfhsaLcufgLmbkcbhscbhLinaPc;WbfasfgQydbh3aQaLBdba3aLfhLasclfgscj;ab9hmbkcbhsa9chLinaPc;WbfaLydbcO4c;8ZGfgQaQydbgQcefBdbaxaQcdtfasBdbaLcxfhLazascefgs9hmbkahaq9RgQci9UhJdnalTmbcbhsaHhLinaLasBdbaLclfhLalascefgs9hmbkkcbh9eancbalz:ljjjbhTaQcO9UhSaJce4h9haPydlh9icbhicbhgdnina8Laxagcdtfydbcx2fgOIdwg8Na8V9EmeaiaJ9pmeJFFuuh8Pdna9haz9pmba8Laxa9hcdtfydbcx2fIdwJbb;aZNh8Pkdna8Na8P9ETmbaiaS0mdkdnaTaCaOydlg6cdtg9kfydbg3fg0RbbaTaCaOydbgKcdtg9mfydbg9nfg9oRbbVmbdnaZa9ncdtfgsclfydbgLasydbgsSmbaLas9Rh5a9iascitfhsa8Ja3cx2fgYcwfhdaYclfhAa8Ja9ncx2fg8Kcwfh9pa8Kclfh9qcbhLcehednindnaHasydbcdtfydbgQa3SmbaHasclfydbcdtfydbg8Aa3SmbaQa8ASmba8Ja8Acx2fg8AIdba8JaQcx2fgQIdbgI:tg8Pa9qIdbaQIdlg8S:tg8MNa8KIdbaI:tgya8AIdla8S:tg8NN:ta8PaAIdba8S:tgRNaYIdbaI:tg8Ra8NN:tNa8Na9pIdbaQIdwg8S:tg8UNa8Ma8AIdwa8S:tgIN:ta8NadIdba8S:tg8SNaRaIN:tNaIayNa8Ua8PN:taIa8RNa8Sa8PN:tNMMJbbbb9FmdkascwfhsaLcefgLa56hea5aL9hmbkkaeceGTmba9hcefh9hxeka8Ea3c8S2gQfgsa8Ea9nc8S2g8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdydnaDTmbaoaQfgsaoa8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdyaca9n2heaca32hYawhLaDh8AinaLaYfgsaLaefgQIdbasIdbMUdbasclfg5aQclfIdba5IdbMUdbascwfg5aQcwfIdba5IdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa8Acufg8AmbkkaOcwfhLdndndndnaEaKfgQRbbc9:fPdebdkaKhsinaHascdtgsfa3BdbaXasfydbgsaK9hmbxikkaXa9kfydbhsaXa9mfydbhKaHa9mfa6Bdbash6kaHaKcdtfa6Bdbka9oce86bba0ce86bbaLIdbg8Pa8Ya8Ya8P9DEh8Ya9ecefh9ececdaQRbbceSEaifhikagcefggaz9hmbkkdna9embahhdxikdnalTmbcbhLa8FhsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmba8Fa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkcbhLaahsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmbaaa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkkcbhdabhscbh8AindnaHasydbcdtfydbgLaHasclfydbcdtfydbgQSmbaLaHascwfydbcdtfydbg3SmbaQa3Smbabadcdtfg5aLBdba5clfaQBdba5cwfa3Bdbadcifhdkascxfhsa8Acifg8Aah6mbkadaq9nmdxbkkaPabadalaCz:cjjjbkdnamTmbama8Y:rUdbkaPyd9OgscdtaPcwffc98fhCdninasTmeaCydbcbyd:m:jjjbH:bjjjbbaCc98fhCascufhsxbkkaPc;W;abf8Kjjjjbadk;:ieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbarcearce0EhdinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfheadcufgdmbkkabydbcbBdbk:Zldouv998Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdnadTmbaicd4hvdnabTmbavcdthocbhraehwinabarcx2fgiaearav2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinalczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawaofhwarcefgrad9hmbxdkkavcdthrcbhwincbhiinalczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbkkdnabTmbadTmbJbbbbJbbjZalIdbalIdzgk:tJbbbb:xgqalIdlalIdCgx:tgmamaq9DEgqalIdwalIdKgm:tgPaPaq9DEgq:vaqJbbbb9BEhqinabaqabIdbak:tNUdbabclfgiaqaiIdbax:tNUdbabcwfgiaqaiIdbam:tNUdbabcxfhbadcufgdmbkkk8KbabaeadaialavcbcbcbcbaoarawaDz:bjjjbk8KbabaeadaialavaoarawaDaqakaxamz:bjjjbk;lOowud99wue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcwfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdwawceBd9Oaqaeadaiz:djjjbawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdxawcdBd9Oadcd4adfhmceheinaegicetheaiam6mbkcbhmawcuaicdtgPaicFFFFi0Ecbyd1:jjjbHjjjjbbgsBdzawciBd9Odndnar:Zgz:rJbbbZMgH:lJbbb9p9DTmbaH:Ohexekcjjjj94hekaicufhOc:bwhAcbhCcbhXadhQinaChLaeaAgKcufaeaK9iEamgDcefaeaD9kEhYdndnadTmbaYcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbh3cbh5indnaEaxa5cdtfydbgAcm4aA7c:v;t;h;Ev2gics4ai7aOGgmcdtfgCydbgecuSmbaeaASmbcehiinaEamaifaOGgmcdtfgCydbgecuSmeaicefhiaeaA9hmbkkaCaABdba3aecuSfh3a5cefg5ad9hmbxdkkascFeaPz:ljjjb8Acbh3kaDaYa3ar0giEhmaLa3aiEhCdna3arSmbaYaKaiEgAam9Rcd9imbdndnaXcl0mbdnaQ:ZgHaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa3:Zghaz:tNNNaHaz:taaNa8Aah:tNa8Aaz:ta8FNahaH:tNM:va8EMJbbbZMgH:lJbbb9p9DTmbaH:Ohexdkcjjjj94hexekamaAfcd9Theka3aQaiEhQaXcefgXcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdCawclBd9OdndnadTmbamcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbhDcbh3inaxa3cdtgYfydbgAcm4aA7c:v;t;h;Ev2gics4ai7hecbhidndninaEaeaOGgmcdtfgCydbgecuSmednaxaecdtgCfydbaASmbaicefgiamfheaiaO9nmekka5aCfydbhixekaCa3BdbaDhiaDcefhDka5aYfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekascFeaPz:ljjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBdKawcvBd9Oaecbaiz:ljjjbhOavcd4hxdnadTmbaxcdth3a5hmalhAaqheadhEinaOamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaAc;81jjbalEgCIdbaiIdxMUdxaiaCIdlaiIdzMUdzaiaCIdwaiIdCMUdCaiaiIdKJbbjZMUdKamclfhmaAa3fhAaecxfheaEcufgEmbkkdnaDTmbaOcxfhiaDheinaictfgmamIdbJbbbbJbbjZaicxfIdbgH:vaHJbbbb9BEgHNUdbaic94fgmaHamIdbNUdbaic98fgmaHamIdbNUdbaiaHaiIdbNUdbaiclfgmaHamIdbNUdbaicwfgmaHamIdbNUdbaic3fhiaecufgembkkcbhAawcuaDcdtgYaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBd3awcoBd9Oawaicbyd1:jjjbHjjjjbbgEBdaaecFeaYz:ljjjbh3dnadTmbaoaoNh8Aaxcdthxalheina8Aaec;81jjbalEgmIdwaOa5ydbgCc32fgiIdC:tgHaHNamIdbaiIdx:tgHaHNamIdlaiIdz:tgHaHNMMNaqcwfIdbaiIdw:tgHaHNaqIdbaiIdb:tgHaHNaqclfIdbaiIdl:tgHaHNMMMhHdndna3aCcdtgifgmydbcuSmbaEaifIdbaH9ETmekamaABdbaEaifaHUdbka5clfh5aeaxfheaqcxfhqadaAcefgA9hmbkkaba3aYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcwffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Qdidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgoaDIdbgrarao9EEUdbaladfgDaoaDIdbgrarao9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkavJbbbb:xgvaoaoav9DEgoararao9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbeeebeebebbeeebebbbbbebebbbbbebbbdbbbbbbbbbbbbbbbeeeeebebbbbbebbbbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:G9Kbb"), {}).then((function(t) { + (e = t.instance).exports.__wasm_call_ctors() + })); + + function s(e) { + if (!e) throw new Error("Assertion failed") + } + + function r(e) { + return new Uint8Array(e.buffer, e.byteOffset, e.byteLength) + } + + function n(t, a, s, n, i, o, c, b) { + var d = e.exports.sbrk, + f = d(4 * b), + h = d(s * n), + u = d(s * o), + l = new Uint8Array(e.exports.memory.buffer); + l.set(r(a), h), i && l.set(r(i), u); + var g = t(f, h, s, n, u, o, c, b); + l = new Uint8Array(e.exports.memory.buffer); + var p = new Uint32Array(g); + return r(p).set(l.subarray(f, f + 4 * g)), d(f - d(0)), p + } + var i = { + LockBorder: 1 + }; + return { + ready: a, + supported: !0, + useExperimentalFeatures: !1, + compactMesh: function(t) { + s(t instanceof Uint32Array || t instanceof Int32Array || t instanceof Uint16Array || t instanceof Int16Array), s(t.length % 3 == 0); + var a = 4 == t.BYTES_PER_ELEMENT ? t : new Uint32Array(t); + return function(t, a, s) { + var n = e.exports.sbrk, + i = n(4 * a.length), + o = n(4 * s), + c = new Uint8Array(e.exports.memory.buffer), + b = r(a); + c.set(b, i); + var d = t(o, i, a.length, s); + c = new Uint8Array(e.exports.memory.buffer); + var f = new Uint32Array(s); + new Uint8Array(f.buffer).set(c.subarray(o, o + 4 * s)), b.set(c.subarray(i, i + 4 * a.length)), n(i - n(0)); + for (var h = 0; h < a.length; ++h) a[h] = f[a[h]]; + return [f, d] + }(e.exports.meshopt_optimizeVertexFetchRemap, a, function(e) { + for (var t = 0, a = 0; a < e.length; ++a) { + var s = e[a]; + t = t < s ? s : t + } + return t + }(t) + 1) + }, + simplify: function(t, a, n, o, c, b) { + s(t instanceof Uint32Array || t instanceof Int32Array || t instanceof Uint16Array || t instanceof Int16Array), s(t.length % 3 == 0), s(a instanceof Float32Array), s(a.length % n == 0), s(n >= 3), s(o >= 0 && o <= t.length), s(o % 3 == 0), s(c >= 0 && c <= 1); + for (var d = 0, f = 0; f < (b ? b.length : 0); ++f) d |= i[b[f]]; + var h = 4 == t.BYTES_PER_ELEMENT ? t : new Uint32Array(t), + u = function(t, a, s, n, i, o, c, b, d) { + var f = e.exports.sbrk, + h = f(4), + u = f(4 * s), + l = f(i * o), + g = f(4 * s), + p = new Uint8Array(e.exports.memory.buffer); + p.set(r(n), l), p.set(r(a), g); + var m = t(u, g, s, l, i, o, c, b, d, h); + p = new Uint8Array(e.exports.memory.buffer); + var y = new Uint32Array(m); + r(y).set(p.subarray(u, u + 4 * m)); + var x = new Float32Array(1); + return r(x).set(p.subarray(h, h + 4)), f(h - f(0)), [y, x[0]] + }(e.exports.meshopt_simplify, h, t.length, a, a.length / n, 4 * n, o, c, d); + return u[0] = t instanceof Uint32Array ? u[0] : new t.constructor(u[0]), u + }, + simplifyWithAttributes: function(t, a, n, o, c, b, d, f, h) { + s(this.useExperimentalFeatures), s(t instanceof Uint32Array || t instanceof Int32Array || t instanceof Uint16Array || t instanceof Int16Array), s(t.length % 3 == 0), s(a instanceof Float32Array), s(a.length % n == 0), s(n >= 3), s(o instanceof Float32Array), s(o.length % c == 0), s(c >= 0), s(d >= 0 && d <= t.length), s(d % 3 == 0), s(f >= 0 && f <= 1), s(Array.isArray(b)), s(c >= b.length), s(b.length <= 16); + for (var u = 0, l = 0; l < (h ? h.length : 0); ++l) u |= i[h[l]]; + var g = 4 == t.BYTES_PER_ELEMENT ? t : new Uint32Array(t), + p = function(t, a, s, n, i, o, c, b, d, f, h, u) { + var l = e.exports.sbrk, + g = l(4), + p = l(4 * s), + m = l(i * o), + y = l(i * b), + x = l(4 * d.length), + T = l(4 * s), + E = new Uint8Array(e.exports.memory.buffer); + E.set(r(n), m), E.set(r(c), y), E.set(r(d), x), E.set(r(a), T); + var j = t(p, T, s, m, i, o, y, b, x, d.length, f, h, u, g); + E = new Uint8Array(e.exports.memory.buffer); + var w = new Uint32Array(j); + r(w).set(E.subarray(p, p + 4 * j)); + var A = new Float32Array(1); + return r(A).set(E.subarray(g, g + 4)), l(g - l(0)), [w, A[0]] + }(e.exports.meshopt_simplifyWithAttributes, g, t.length, a, a.length / n, 4 * n, o, 4 * c, new Float32Array(b), d, f, u); + return p[0] = t instanceof Uint32Array ? p[0] : new t.constructor(p[0]), p + }, + getScale: function(t, a) { + return s(t instanceof Float32Array), s(t.length % a == 0), s(a >= 3), + function(t, a, s, n) { + var i = e.exports.sbrk, + o = i(s * n); + new Uint8Array(e.exports.memory.buffer).set(r(a), o); + var c = t(o, s, n); + return i(o - i(0)), c + }(e.exports.meshopt_simplifyScale, t, t.length / a, 4 * a) + }, + simplifyPoints: function(t, a, r, i, o, c) { + return s(this.useExperimentalFeatures), s(t instanceof Float32Array), s(t.length % a == 0), s(a >= 3), s(r >= 0 && r <= t.length / a), i ? (s(i instanceof Float32Array), s(i.length % o == 0), s(o >= 3), s(t.length / a == i.length / o), n(e.exports.meshopt_simplifyPoints, t, t.length / a, 4 * a, i, 4 * o, c, r)) : n(e.exports.meshopt_simplifyPoints, t, t.length / a, 4 * a, void 0, 0, 0, r) + } + } + }() + }, + 38897: (e, t, a) => { + "use strict"; + var s = a(86239), + r = { + body: "", + args: [], + thisVars: [], + localVars: [] + }; + + function n(e) { + if (!e) return r; + for (var t = 0; t < e.args.length; ++t) { + var a = e.args[t]; + e.args[t] = 0 === t ? { + name: a, + lvalue: !0, + rvalue: !!e.rvalue, + count: e.count || 1 + } : { + name: a, + lvalue: !1, + rvalue: !0, + count: 1 + } + } + return e.thisVars || (e.thisVars = []), e.localVars || (e.localVars = []), e + } + + function i(e) { + for (var t = [], a = 0; a < e.args.length; ++a) t.push("a" + a); + return new Function("P", ["return function ", e.funcName, "_ndarrayops(", t.join(","), ") {P(", t.join(","), ");return a0}"].join(""))(function(e) { + return s({ + args: e.args, + pre: n(e.pre), + body: n(e.body), + post: n(e.proc), + funcName: e.funcName + }) + }(e)) + } + var o = { + add: "+", + sub: "-", + mul: "*", + div: "/", + mod: "%", + band: "&", + bor: "|", + bxor: "^", + lshift: "<<", + rshift: ">>", + rrshift: ">>>" + }; + ! function() { + for (var e in o) { + var a = o[e]; + t[e] = i({ + args: ["array", "array", "array"], + body: { + args: ["a", "b", "c"], + body: "a=b" + a + "c" + }, + funcName: e + }), t[e + "eq"] = i({ + args: ["array", "array"], + body: { + args: ["a", "b"], + body: "a" + a + "=b" + }, + rvalue: !0, + funcName: e + "eq" + }), t[e + "s"] = i({ + args: ["array", "array", "scalar"], + body: { + args: ["a", "b", "s"], + body: "a=b" + a + "s" + }, + funcName: e + "s" + }), t[e + "seq"] = i({ + args: ["array", "scalar"], + body: { + args: ["a", "s"], + body: "a" + a + "=s" + }, + rvalue: !0, + funcName: e + "seq" + }) + } + }(); + var c = { + not: "!", + bnot: "~", + neg: "-", + recip: "1.0/" + }; + ! function() { + for (var e in c) { + var a = c[e]; + t[e] = i({ + args: ["array", "array"], + body: { + args: ["a", "b"], + body: "a=" + a + "b" + }, + funcName: e + }), t[e + "eq"] = i({ + args: ["array"], + body: { + args: ["a"], + body: "a=" + a + "a" + }, + rvalue: !0, + count: 2, + funcName: e + "eq" + }) + } + }(); + var b = { + and: "&&", + or: "||", + eq: "===", + neq: "!==", + lt: "<", + gt: ">", + leq: "<=", + geq: ">=" + }; + ! function() { + for (var e in b) { + var a = b[e]; + t[e] = i({ + args: ["array", "array", "array"], + body: { + args: ["a", "b", "c"], + body: "a=b" + a + "c" + }, + funcName: e + }), t[e + "s"] = i({ + args: ["array", "array", "scalar"], + body: { + args: ["a", "b", "s"], + body: "a=b" + a + "s" + }, + funcName: e + "s" + }), t[e + "eq"] = i({ + args: ["array", "array"], + body: { + args: ["a", "b"], + body: "a=a" + a + "b" + }, + rvalue: !0, + count: 2, + funcName: e + "eq" + }), t[e + "seq"] = i({ + args: ["array", "scalar"], + body: { + args: ["a", "s"], + body: "a=a" + a + "s" + }, + rvalue: !0, + count: 2, + funcName: e + "seq" + }) + } + }(); + var d = ["abs", "acos", "asin", "atan", "ceil", "cos", "exp", "floor", "log", "round", "sin", "sqrt", "tan"]; + ! function() { + for (var e = 0; e < d.length; ++e) { + var a = d[e]; + t[a] = i({ + args: ["array", "array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b"], + body: "a=this_f(b)", + thisVars: ["this_f"] + }, + funcName: a + }), t[a + "eq"] = i({ + args: ["array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a"], + body: "a=this_f(a)", + thisVars: ["this_f"] + }, + rvalue: !0, + count: 2, + funcName: a + "eq" + }) + } + }(); + var f = ["max", "min", "atan2", "pow"]; + ! function() { + for (var e = 0; e < f.length; ++e) { + var a = f[e]; + t[a] = i({ + args: ["array", "array", "array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b", "c"], + body: "a=this_f(b,c)", + thisVars: ["this_f"] + }, + funcName: a + }), t[a + "s"] = i({ + args: ["array", "array", "scalar"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b", "c"], + body: "a=this_f(b,c)", + thisVars: ["this_f"] + }, + funcName: a + "s" + }), t[a + "eq"] = i({ + args: ["array", "array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b"], + body: "a=this_f(a,b)", + thisVars: ["this_f"] + }, + rvalue: !0, + count: 2, + funcName: a + "eq" + }), t[a + "seq"] = i({ + args: ["array", "scalar"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b"], + body: "a=this_f(a,b)", + thisVars: ["this_f"] + }, + rvalue: !0, + count: 2, + funcName: a + "seq" + }) + } + }(); + var h = ["atan2", "pow"]; + ! function() { + for (var e = 0; e < h.length; ++e) { + var a = h[e]; + t[a + "op"] = i({ + args: ["array", "array", "array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b", "c"], + body: "a=this_f(c,b)", + thisVars: ["this_f"] + }, + funcName: a + "op" + }), t[a + "ops"] = i({ + args: ["array", "array", "scalar"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b", "c"], + body: "a=this_f(c,b)", + thisVars: ["this_f"] + }, + funcName: a + "ops" + }), t[a + "opeq"] = i({ + args: ["array", "array"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b"], + body: "a=this_f(b,a)", + thisVars: ["this_f"] + }, + rvalue: !0, + count: 2, + funcName: a + "opeq" + }), t[a + "opseq"] = i({ + args: ["array", "scalar"], + pre: { + args: [], + body: "this_f=Math." + a, + thisVars: ["this_f"] + }, + body: { + args: ["a", "b"], + body: "a=this_f(b,a)", + thisVars: ["this_f"] + }, + rvalue: !0, + count: 2, + funcName: a + "opseq" + }) + } + }(), t.any = s({ + args: ["array"], + pre: r, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 1 + }], + body: "if(a){return true}", + localVars: [], + thisVars: [] + }, + post: { + args: [], + localVars: [], + thisVars: [], + body: "return false" + }, + funcName: "any" + }), t.all = s({ + args: ["array"], + pre: r, + body: { + args: [{ + name: "x", + lvalue: !1, + rvalue: !0, + count: 1 + }], + body: "if(!x){return false}", + localVars: [], + thisVars: [] + }, + post: { + args: [], + localVars: [], + thisVars: [], + body: "return true" + }, + funcName: "all" + }), t.sum = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=0" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 1 + }], + body: "this_s+=a", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return this_s" + }, + funcName: "sum" + }), t.prod = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=1" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 1 + }], + body: "this_s*=a", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return this_s" + }, + funcName: "prod" + }), t.norm2squared = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=0" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 2 + }], + body: "this_s+=a*a", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return this_s" + }, + funcName: "norm2squared" + }), t.norm2 = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=0" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 2 + }], + body: "this_s+=a*a", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return Math.sqrt(this_s)" + }, + funcName: "norm2" + }), t.norminf = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=0" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 4 + }], + body: "if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return this_s" + }, + funcName: "norminf" + }), t.norm1 = s({ + args: ["array"], + pre: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "this_s=0" + }, + body: { + args: [{ + name: "a", + lvalue: !1, + rvalue: !0, + count: 3 + }], + body: "this_s+=a<0?-a:a", + localVars: [], + thisVars: ["this_s"] + }, + post: { + args: [], + localVars: [], + thisVars: ["this_s"], + body: "return this_s" + }, + funcName: "norm1" + }), t.sup = s({ + args: ["array"], + pre: { + body: "this_h=-Infinity", + args: [], + thisVars: ["this_h"], + localVars: [] + }, + body: { + body: "if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_", + args: [{ + name: "_inline_1_arg0_", + lvalue: !1, + rvalue: !0, + count: 2 + }], + thisVars: ["this_h"], + localVars: [] + }, + post: { + body: "return this_h", + args: [], + thisVars: ["this_h"], + localVars: [] + } + }), t.inf = s({ + args: ["array"], + pre: { + body: "this_h=Infinity", + args: [], + thisVars: ["this_h"], + localVars: [] + }, + body: { + body: "if(_inline_1_arg0_this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}", + args: [{ + name: "_inline_1_arg0_", + lvalue: !1, + rvalue: !0, + count: 2 + }, { + name: "_inline_1_arg1_", + lvalue: !1, + rvalue: !0, + count: 2 + }], + thisVars: ["this_i", "this_v"], + localVars: ["_inline_1_k"] + }, + post: { + body: "{return this_i}", + args: [], + thisVars: ["this_i"], + localVars: [] + } + }), t.random = i({ + args: ["array"], + pre: { + args: [], + body: "this_f=Math.random", + thisVars: ["this_f"] + }, + body: { + args: ["a"], + body: "a=this_f()", + thisVars: ["this_f"] + }, + funcName: "random" + }), t.assign = i({ + args: ["array", "array"], + body: { + args: ["a", "b"], + body: "a=b" + }, + funcName: "assign" + }), t.assigns = i({ + args: ["array", "scalar"], + body: { + args: ["a", "b"], + body: "a=b" + }, + funcName: "assigns" + }), t.equals = s({ + args: ["array", "array"], + pre: r, + body: { + args: [{ + name: "x", + lvalue: !1, + rvalue: !0, + count: 1 + }, { + name: "y", + lvalue: !1, + rvalue: !0, + count: 1 + }], + body: "if(x!==y){return false}", + localVars: [], + thisVars: [] + }, + post: { + args: [], + localVars: [], + thisVars: [], + body: "return true" + }, + funcName: "equals" + }) + }, + 62861: (e, t, a) => { + var s = a(16907), + r = a(48738), + n = "undefined" != typeof Float64Array; + + function i(e, t) { + return e[0] - t[0] + } + + function o() { + var e, t = this.stride, + a = new Array(t.length); + for (e = 0; e < a.length; ++e) a[e] = [Math.abs(t[e]), e]; + a.sort(i); + var s = new Array(a.length); + for (e = 0; e < s.length; ++e) s[e] = a[e][1]; + return s + } + + function c(e, t) { + var a = ["View", t, "d", e].join(""); + t < 0 && (a = "View_Nil" + e); + var r = "generic" === e; + if (-1 === t) { + var n = "function " + a + "(a){this.data=a;};var proto=" + a + ".prototype;proto.dtype='" + e + "';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new " + a + "(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_" + a + "(a){return new " + a + "(a);}"; + return new Function(n)() + } + if (0 === t) return n = "function " + a + "(a,d) {this.data = a;this.offset = d};var proto=" + a + ".prototype;proto.dtype='" + e + "';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function " + a + "_copy() {return new " + a + "(this.data,this.offset)};proto.pick=function " + a + "_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function " + a + "_get(){return " + (r ? "this.data.get(this.offset)" : "this.data[this.offset]") + "};proto.set=function " + a + "_set(v){return " + (r ? "this.data.set(this.offset,v)" : "this.data[this.offset]=v") + "};return function construct_" + a + "(a,b,c,d){return new " + a + "(a,d)}", new Function("TrivialArray", n)(b[e][0]); + n = ["'use strict'"]; + var i = s(t), + c = i.map((function(e) { + return "i" + e + })), + d = "this.offset+" + i.map((function(e) { + return "this.stride[" + e + "]*i" + e + })).join("+"), + f = i.map((function(e) { + return "b" + e + })).join(","), + h = i.map((function(e) { + return "c" + e + })).join(","); + n.push("function " + a + "(a," + f + "," + h + ",d){this.data=a", "this.shape=[" + f + "]", "this.stride=[" + h + "]", "this.offset=d|0}", "var proto=" + a + ".prototype", "proto.dtype='" + e + "'", "proto.dimension=" + t), n.push("Object.defineProperty(proto,'size',{get:function " + a + "_size(){return " + i.map((function(e) { + return "this.shape[" + e + "]" + })).join("*"), "}})"), 1 === t ? n.push("proto.order=[0]") : (n.push("Object.defineProperty(proto,'order',{get:"), t < 4 ? (n.push("function " + a + "_order(){"), 2 === t ? n.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})") : 3 === t && n.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")) : n.push("ORDER})")), n.push("proto.set=function " + a + "_set(" + c.join(",") + ",v){"), r ? n.push("return this.data.set(" + d + ",v)}") : n.push("return this.data[" + d + "]=v}"), n.push("proto.get=function " + a + "_get(" + c.join(",") + "){"), r ? n.push("return this.data.get(" + d + ")}") : n.push("return this.data[" + d + "]}"), n.push("proto.index=function " + a + "_index(", c.join(), "){return " + d + "}"), n.push("proto.hi=function " + a + "_hi(" + c.join(",") + "){return new " + a + "(this.data," + i.map((function(e) { + return ["(typeof i", e, "!=='number'||i", e, "<0)?this.shape[", e, "]:i", e, "|0"].join("") + })).join(",") + "," + i.map((function(e) { + return "this.stride[" + e + "]" + })).join(",") + ",this.offset)}"); + var u = i.map((function(e) { + return "a" + e + "=this.shape[" + e + "]" + })), + l = i.map((function(e) { + return "c" + e + "=this.stride[" + e + "]" + })); + n.push("proto.lo=function " + a + "_lo(" + c.join(",") + "){var b=this.offset,d=0," + u.join(",") + "," + l.join(",")); + for (var g = 0; g < t; ++g) n.push("if(typeof i" + g + "==='number'&&i" + g + ">=0){d=i" + g + "|0;b+=c" + g + "*d;a" + g + "-=d}"); + for (n.push("return new " + a + "(this.data," + i.map((function(e) { + return "a" + e + })).join(",") + "," + i.map((function(e) { + return "c" + e + })).join(",") + ",b)}"), n.push("proto.step=function " + a + "_step(" + c.join(",") + "){var " + i.map((function(e) { + return "a" + e + "=this.shape[" + e + "]" + })).join(",") + "," + i.map((function(e) { + return "b" + e + "=this.stride[" + e + "]" + })).join(",") + ",c=this.offset,d=0,ceil=Math.ceil"), g = 0; g < t; ++g) n.push("if(typeof i" + g + "==='number'){d=i" + g + "|0;if(d<0){c+=b" + g + "*(a" + g + "-1);a" + g + "=ceil(-a" + g + "/d)}else{a" + g + "=ceil(a" + g + "/d)}b" + g + "*=d}"); + n.push("return new " + a + "(this.data," + i.map((function(e) { + return "a" + e + })).join(",") + "," + i.map((function(e) { + return "b" + e + })).join(",") + ",c)}"); + var p = new Array(t), + m = new Array(t); + for (g = 0; g < t; ++g) p[g] = "a[i" + g + "]", m[g] = "b[i" + g + "]"; + for (n.push("proto.transpose=function " + a + "_transpose(" + c + "){" + c.map((function(e, t) { + return e + "=(" + e + "===undefined?" + t + ":" + e + "|0)" + })).join(";"), "var a=this.shape,b=this.stride;return new " + a + "(this.data," + p.join(",") + "," + m.join(",") + ",this.offset)}"), n.push("proto.pick=function " + a + "_pick(" + c + "){var a=[],b=[],c=this.offset"), g = 0; g < t; ++g) n.push("if(typeof i" + g + "==='number'&&i" + g + ">=0){c=(c+this.stride[" + g + "]*i" + g + ")|0}else{a.push(this.shape[" + g + "]);b.push(this.stride[" + g + "])}"); + return n.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"), n.push("return function construct_" + a + "(data,shape,stride,offset){return new " + a + "(data," + i.map((function(e) { + return "shape[" + e + "]" + })).join(",") + "," + i.map((function(e) { + return "stride[" + e + "]" + })).join(",") + ",offset)}"), new Function("CTOR_LIST", "ORDER", n.join("\n"))(b[e], o) + } + var b = { + float32: [], + float64: [], + int8: [], + int16: [], + int32: [], + uint8: [], + uint16: [], + uint32: [], + array: [], + uint8_clamped: [], + bigint64: [], + biguint64: [], + buffer: [], + generic: [] + }; + e.exports = function(e, t, a, s) { + if (void 0 === e) return (0, b.array[0])([]); + "number" == typeof e && (e = [e]), void 0 === t && (t = [e.length]); + var i = t.length; + if (void 0 === a) { + a = new Array(i); + for (var o = i - 1, d = 1; o >= 0; --o) a[o] = d, d *= t[o] + } + if (void 0 === s) + for (s = 0, o = 0; o < i; ++o) a[o] < 0 && (s -= (t[o] - 1) * a[o]); + for (var f = function(e) { + if (r(e)) return "buffer"; + if (n) switch (Object.prototype.toString.call(e)) { + case "[object Float64Array]": + return "float64"; + case "[object Float32Array]": + return "float32"; + case "[object Int8Array]": + return "int8"; + case "[object Int16Array]": + return "int16"; + case "[object Int32Array]": + return "int32"; + case "[object Uint8Array]": + return "uint8"; + case "[object Uint16Array]": + return "uint16"; + case "[object Uint32Array]": + return "uint32"; + case "[object Uint8ClampedArray]": + return "uint8_clamped"; + case "[object BigInt64Array]": + return "bigint64"; + case "[object BigUint64Array]": + return "biguint64" + } + return Array.isArray(e) ? "array" : "generic" + }(e), h = b[f]; h.length <= i + 1;) h.push(c(f, h.length - 1)); + return (0, h[i + 1])(e, t, a, s) + } + }, + 38706: e => { + "use strict"; + e.exports = function(e, t, a) { + return 0 === e.length ? e : t ? (a || e.sort(t), function(e, t) { + for (var a = 1, s = e.length, r = e[0], n = e[0], i = 1; i < s; ++i) + if (n = r, t(r = e[i], n)) { + if (i === a) { + a++; + continue + } + e[a++] = r + } return e.length = a, e + }(e, t)) : (a || e.sort(), function(e) { + for (var t = 1, a = e.length, s = e[0], r = e[0], n = 1; n < a; ++n, r = s) + if (r = s, (s = e[n]) !== r) { + if (n === t) { + t++; + continue + } + e[t++] = s + } return e.length = t, e + }(e)) + } + }, + 69584: (e, t, a) => { + "use strict"; + a.d(t, { + AH: () => Ce, + BB: () => pe, + BD: () => X, + F5: () => ie, + M8: () => _, + Pp: () => I, + U_: () => J, + VS: () => d, + WV: () => be, + Yd: () => S, + Zt: () => Y, + aw: () => i, + eY: () => ee, + fC: () => ge, + hj: () => me, + i5: () => w, + lO: () => te, + oY: () => j, + qi: () => we, + tn: () => h, + uS: () => o, + xE: () => le, + xs: () => he, + zX: () => x + }); + var s = a(24987), + r = a(48764).Buffer, + n = a(25108); + const i = "@glb.bin"; + var o, c, b, d, f; + ! function(e) { + e.ACCESSOR = "Accessor", e.ANIMATION = "Animation", e.ANIMATION_CHANNEL = "AnimationChannel", e.ANIMATION_SAMPLER = "AnimationSampler", e.BUFFER = "Buffer", e.CAMERA = "Camera", e.MATERIAL = "Material", e.MESH = "Mesh", e.PRIMITIVE = "Primitive", e.PRIMITIVE_TARGET = "PrimitiveTarget", e.NODE = "Node", e.ROOT = "Root", e.SCENE = "Scene", e.SKIN = "Skin", e.TEXTURE = "Texture", e.TEXTURE_INFO = "TextureInfo" + }(o || (o = {})), + function(e) { + e.INTERLEAVED = "interleaved", e.SEPARATE = "separate" + }(c || (c = {})), + function(e) { + e.ARRAY_BUFFER = "ARRAY_BUFFER", e.ELEMENT_ARRAY_BUFFER = "ELEMENT_ARRAY_BUFFER", e.INVERSE_BIND_MATRICES = "INVERSE_BIND_MATRICES", e.OTHER = "OTHER", e.SPARSE = "SPARSE" + }(b || (b = {})), + function(e) { + e[e.R = 4096] = "R", e[e.G = 256] = "G", e[e.B = 16] = "B", e[e.A = 1] = "A" + }(d || (d = {})), + function(e) { + e.GLTF = "GLTF", e.GLB = "GLB" + }(f || (f = {})); + const h = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }; + var u, l, g, p = "undefined" != typeof Float32Array ? Float32Array : Array; + + function m(e) { + var t = e[0], + a = e[1], + s = e[2]; + return Math.hypot(t, a, s) + } + + function y(e, t, a) { + var s = t[0], + r = t[1], + n = t[2], + i = a[3] * s + a[7] * r + a[11] * n + a[15]; + return i = i || 1, e[0] = (a[0] * s + a[4] * r + a[8] * n + a[12]) / i, e[1] = (a[1] * s + a[5] * r + a[9] * n + a[13]) / i, e[2] = (a[2] * s + a[6] * r + a[10] * n + a[14]) / i, e + } + + function x(e) { + const t = { + min: [1 / 0, 1 / 0, 1 / 0], + max: [-1 / 0, -1 / 0, -1 / 0] + }, + a = e.propertyType === o.NODE ? [e] : e.listChildren(); + for (const e of a) e.traverse((e => { + const a = e.getMesh(); + if (!a) return; + const s = T(a, e.getWorldMatrix()); + s.min.every(isFinite) && s.max.every(isFinite) && (E(s.min, t), E(s.max, t)) + })); + return t + } + + function T(e, t) { + const a = { + min: [1 / 0, 1 / 0, 1 / 0], + max: [-1 / 0, -1 / 0, -1 / 0] + }; + for (const s of e.listPrimitives()) { + const e = s.getAttribute("POSITION"), + r = s.getIndices(); + if (!e) continue; + let n = [0, 0, 0], + i = [0, 0, 0]; + for (let s = 0, o = r ? r.getCount() : e.getCount(); s < o; s++) { + const o = r ? r.getScalar(s) : s; + n = e.getElement(o, n), i = y(i, n, t), E(i, a) + } + } + return a + } + + function E(e, t) { + for (let a = 0; a < 3; a++) t.min[a] = Math.min(e[a], t.min[a]), t.max[a] = Math.max(e[a], t.max[a]) + } + Math.hypot || (Math.hypot = function() { + for (var e = 0, t = arguments.length; t--;) e += arguments[t] * arguments[t]; + return Math.sqrt(e) + }), u = new p(3), p != Float32Array && (u[0] = 0, u[1] = 0, u[2] = 0); + class j { + static createBufferFromDataURI(e) { + if (void 0 === r) { + const t = atob(e.split(",")[1]), + a = new Uint8Array(t.length); + for (let e = 0; e < t.length; e++) a[e] = t.charCodeAt(e); + return a + } { + const t = e.split(",")[1], + a = e.indexOf("base64") >= 0; + return r.from(t, a ? "base64" : "utf8") + } + } + static encodeText(e) { + return "undefined" != typeof TextEncoder ? (new TextEncoder).encode(e) : r.from(e) + } + static decodeText(e) { + return "undefined" != typeof TextDecoder ? (new TextDecoder).decode(e) : r.from(e).toString("utf8") + } + static concat(e) { + let t = 0; + for (const a of e) t += a.byteLength; + const a = new Uint8Array(t); + let s = 0; + for (const t of e) a.set(t, s), s += t.byteLength; + return a + } + static pad(e, t = 0) { + const a = this.padNumber(e.byteLength); + if (a === e.byteLength) return e; + const s = new Uint8Array(a); + if (s.set(e), 0 !== t) + for (let r = e.byteLength; r < a; r++) s[r] = t; + return s + } + static padNumber(e) { + return 4 * Math.ceil(e / 4) + } + static equals(e, t) { + if (e === t) return !0; + if (e.byteLength !== t.byteLength) return !1; + let a = e.byteLength; + for (; a--;) + if (e[a] !== t[a]) return !1; + return !0 + } + static toView(e, t = 0, a = 1 / 0) { + return new Uint8Array(e.buffer, e.byteOffset + t, Math.min(e.byteLength, a)) + } + static assertView(e) { + if (e && !ArrayBuffer.isView(e)) throw new Error(`Method requires Uint8Array parameter; received "${typeof e}".`); + return e + } + } + class w { + static hexToFactor(e, t) { + e = Math.floor(e); + const a = t; + return a[0] = (e >> 16 & 255) / 255, a[1] = (e >> 8 & 255) / 255, a[2] = (255 & e) / 255, this.convertSRGBToLinear(t, t) + } + static factorToHex(e) { + const t = [...e], + [a, s, r] = this.convertLinearToSRGB(e, t); + return 255 * a << 16 ^ 255 * s << 8 ^ 255 * r << 0 + } + static convertSRGBToLinear(e, t) { + const a = e, + s = t; + for (let e = 0; e < 3; e++) s[e] = a[e] < .04045 ? .0773993808 * a[e] : Math.pow(.9478672986 * a[e] + .0521327014, 2.4); + return t + } + static convertLinearToSRGB(e, t) { + const a = e, + s = t; + for (let e = 0; e < 3; e++) s[e] = a[e] < .0031308 ? 12.92 * a[e] : 1.055 * Math.pow(a[e], .41666) - .055; + return t + } + } + class A { + match(e) { + return e.length >= 8 && 137 === e[0] && 80 === e[1] && 78 === e[2] && 71 === e[3] && 13 === e[4] && 10 === e[5] && 26 === e[6] && 10 === e[7] + } + getSize(e) { + const t = new DataView(e.buffer, e.byteOffset); + return j.decodeText(e.slice(12, 16)) === A.PNG_FRIED_CHUNK_NAME ? [t.getUint32(32, !1), t.getUint32(36, !1)] : [t.getUint32(16, !1), t.getUint32(20, !1)] + } + getChannels(e) { + return 4 + } + } + A.PNG_FRIED_CHUNK_NAME = "CgBI"; + class I { + static registerFormat(e, t) { + this.impls[e] = t + } + static getMimeType(e) { + for (const t in this.impls) + if (this.impls[t].match(e)) return t; + return null + } + static getSize(e, t) { + return this.impls[t] ? this.impls[t].getSize(e) : null + } + static getChannels(e, t) { + return this.impls[t] ? this.impls[t].getChannels(e) : null + } + static getVRAMByteLength(e, t) { + if (!this.impls[t]) return null; + if (this.impls[t].getVRAMByteLength) return this.impls[t].getVRAMByteLength(e); + let a = 0; + const s = this.getSize(e, t); + if (!s) return null; + for (; s[0] > 1 || s[1] > 1;) a += s[0] * s[1] * 4, s[0] = Math.max(Math.floor(s[0] / 2), 1), s[1] = Math.max(Math.floor(s[1] / 2), 1); + return a += 4, a + } + static mimeTypeToExtension(e) { + return "image/jpeg" === e ? "jpg" : e.split("/").pop() + } + static extensionToMimeType(e) { + return "jpg" === e ? "image/jpeg" : e ? `image/${e}` : "" + } + } + + function N(e, t) { + if (t > e.byteLength) throw new TypeError("Corrupt JPG, exceeded buffer limits"); + if (255 !== e.getUint8(t)) throw new TypeError("Invalid JPG, marker table corrupted"); + return e + } + I.impls = { + "image/jpeg": new class { + match(e) { + return e.length >= 3 && 255 === e[0] && 216 === e[1] && 255 === e[2] + } + getSize(e) { + let t, a, s = new DataView(e.buffer, e.byteOffset + 4); + for (; s.byteLength;) { + if (t = s.getUint16(0, !1), N(s, t), a = s.getUint8(t + 1), 192 === a || 193 === a || 194 === a) return [s.getUint16(t + 7, !1), s.getUint16(t + 5, !1)]; + s = new DataView(e.buffer, s.byteOffset + t + 2) + } + throw new TypeError("Invalid JPG, no size found") + } + getChannels(e) { + return 3 + } + }, + "image/png": new A + }; + class k { + static basename(e) { + const t = e.split(/[\\/]/).pop(); + return t.substring(0, t.lastIndexOf(".")) + } + static extension(e) { + if (e.startsWith("data:image/")) { + const t = e.match(/data:(image\/\w+)/)[1]; + return I.mimeTypeToExtension(t) + } + return e.startsWith("data:model/gltf+json") ? "gltf" : e.startsWith("data:model/gltf-binary") ? "glb" : e.startsWith("data:application/") ? "bin" : e.split(/[\\/]/).pop().split(/[.]/).pop() + } + } + + function v(e) { + return "[object Object]" === Object.prototype.toString.call(e) + } + + function R(e) { + if (!1 === v(e)) return !1; + const t = e.constructor; + if (void 0 === t) return !0; + const a = t.prototype; + return !1 !== v(a) && !1 !== Object.prototype.hasOwnProperty.call(a, "isPrototypeOf") + }! function(e) { + e[e.SILENT = 4] = "SILENT", e[e.ERROR = 3] = "ERROR", e[e.WARN = 2] = "WARN", e[e.INFO = 1] = "INFO", e[e.DEBUG = 0] = "DEBUG" + }(g || (g = {})); + class S { + constructor(e) { + this.verbosity = void 0, this.verbosity = e + } + debug(e) { + this.verbosity <= S.Verbosity.DEBUG && n.debug(e) + } + info(e) { + this.verbosity <= S.Verbosity.INFO && n.info(e) + } + warn(e) { + this.verbosity <= S.Verbosity.WARN && n.warn(e) + } + error(e) { + this.verbosity <= S.Verbosity.ERROR && n.error(e) + } + } + + function M(e, t, a) { + var s = t[0], + r = t[1], + n = t[2], + i = t[3], + o = t[4], + c = t[5], + b = t[6], + d = t[7], + f = t[8], + h = t[9], + u = t[10], + l = t[11], + g = t[12], + p = t[13], + m = t[14], + y = t[15], + x = a[0], + T = a[1], + E = a[2], + j = a[3]; + return e[0] = x * s + T * o + E * f + j * g, e[1] = x * r + T * c + E * h + j * p, e[2] = x * n + T * b + E * u + j * m, e[3] = x * i + T * d + E * l + j * y, x = a[4], T = a[5], E = a[6], j = a[7], e[4] = x * s + T * o + E * f + j * g, e[5] = x * r + T * c + E * h + j * p, e[6] = x * n + T * b + E * u + j * m, e[7] = x * i + T * d + E * l + j * y, x = a[8], T = a[9], E = a[10], j = a[11], e[8] = x * s + T * o + E * f + j * g, e[9] = x * r + T * c + E * h + j * p, e[10] = x * n + T * b + E * u + j * m, e[11] = x * i + T * d + E * l + j * y, x = a[12], T = a[13], E = a[14], j = a[15], e[12] = x * s + T * o + E * f + j * g, e[13] = x * r + T * c + E * h + j * p, e[14] = x * n + T * b + E * u + j * m, e[15] = x * i + T * d + E * l + j * y, e + } + l = S, S.Verbosity = g, S.DEFAULT_INSTANCE = new l(l.Verbosity.INFO); + class _ { + static identity(e) { + return e + } + static eq(e, t, a = 1e-5) { + if (e.length !== t.length) return !1; + for (let s = 0; s < e.length; s++) + if (Math.abs(e[s] - t[s]) > a) return !1; + return !0 + } + static clamp(e, t, a) { + return e < t ? t : e > a ? a : e + } + static decodeNormalizedInt(e, t) { + switch (t) { + case 5126: + return e; + case 5123: + return e / 65535; + case 5121: + return e / 255; + case 5122: + return Math.max(e / 32767, -1); + case 5120: + return Math.max(e / 127, -1); + default: + throw new Error("Invalid component type.") + } + } + static encodeNormalizedInt(e, t) { + switch (t) { + case 5126: + return e; + case 5123: + return Math.round(65535 * _.clamp(e, 0, 1)); + case 5121: + return Math.round(255 * _.clamp(e, 0, 1)); + case 5122: + return Math.round(32767 * _.clamp(e, -1, 1)); + case 5120: + return Math.round(127 * _.clamp(e, -1, 1)); + default: + throw new Error("Invalid component type.") + } + } + static decompose(e, t, a, s) { + let r = m([e[0], e[1], e[2]]); + const n = m([e[4], e[5], e[6]]), + i = m([e[8], e[9], e[10]]); + var o, c, b, d, f, h, u, l, g, y, x, T, E, j, w, A, I; + c = (o = e)[0], b = o[1], d = o[2], f = o[3], h = o[4], u = o[5], l = o[6], g = o[7], y = o[8], x = o[9], T = o[10], E = o[11], j = o[12], w = o[13], A = o[14], (c * u - b * h) * (T * (I = o[15]) - E * A) - (c * l - d * h) * (x * I - E * w) + (c * g - f * h) * (x * A - T * w) + (b * l - d * u) * (y * I - E * j) - (b * g - f * u) * (y * A - T * j) + (d * g - f * l) * (y * w - x * j) < 0 && (r = -r), t[0] = e[12], t[1] = e[13], t[2] = e[14]; + const N = e.slice(), + k = 1 / r, + v = 1 / n, + R = 1 / i; + N[0] *= k, N[1] *= k, N[2] *= k, N[4] *= v, N[5] *= v, N[6] *= v, N[8] *= R, N[9] *= R, N[10] *= R, + function(e, t) { + var a = new p(3); + ! function(e, t) { + var a = t[0], + s = t[1], + r = t[2], + n = t[4], + i = t[5], + o = t[6], + c = t[8], + b = t[9], + d = t[10]; + e[0] = Math.hypot(a, s, r), e[1] = Math.hypot(n, i, o), e[2] = Math.hypot(c, b, d) + }(a, t); + var s = 1 / a[0], + r = 1 / a[1], + n = 1 / a[2], + i = t[0] * s, + o = t[1] * r, + c = t[2] * n, + b = t[4] * s, + d = t[5] * r, + f = t[6] * n, + h = t[8] * s, + u = t[9] * r, + l = t[10] * n, + g = i + d + l, + m = 0; + g > 0 ? (m = 2 * Math.sqrt(g + 1), e[3] = .25 * m, e[0] = (f - u) / m, e[1] = (h - c) / m, e[2] = (o - b) / m) : i > d && i > l ? (m = 2 * Math.sqrt(1 + i - d - l), e[3] = (f - u) / m, e[0] = .25 * m, e[1] = (o + b) / m, e[2] = (h + c) / m) : d > l ? (m = 2 * Math.sqrt(1 + d - i - l), e[3] = (h - c) / m, e[0] = (o + b) / m, e[1] = .25 * m, e[2] = (f + u) / m) : (m = 2 * Math.sqrt(1 + l - i - d), e[3] = (o - b) / m, e[0] = (h + c) / m, e[1] = (f + u) / m, e[2] = .25 * m) + }(a, N), s[0] = r, s[1] = n, s[2] = i + } + static compose(e, t, a, s) { + const r = s, + n = t[0], + i = t[1], + o = t[2], + c = t[3], + b = n + n, + d = i + i, + f = o + o, + h = n * b, + u = n * d, + l = n * f, + g = i * d, + p = i * f, + m = o * f, + y = c * b, + x = c * d, + T = c * f, + E = a[0], + j = a[1], + w = a[2]; + return r[0] = (1 - (g + m)) * E, r[1] = (u + T) * E, r[2] = (l - x) * E, r[3] = 0, r[4] = (u - T) * j, r[5] = (1 - (h + m)) * j, r[6] = (p + y) * j, r[7] = 0, r[8] = (l + x) * w, r[9] = (p - y) * w, r[10] = (1 - (h + g)) * w, r[11] = 0, r[12] = e[0], r[13] = e[1], r[14] = e[2], r[15] = 1, r + } + } + + function C(e, t) { + if (!!e != !!t) return !1; + const a = e.getChild(), + s = t.getChild(); + return a === s || a.equals(s) + } + + function D(e, t) { + if (!!e != !!t) return !1; + const a = e.values(), + s = t.values(); + if (a.length !== s.length) return !1; + for (let e = 0; e < a.length; e++) { + const t = a[e], + r = s[e]; + if (t.getChild() !== r.getChild() && !t.getChild().equals(r.getChild())) return !1 + } + return !0 + } + + function O(e, t) { + if (!!e != !!t) return !1; + const a = e.keys(), + s = t.keys(); + if (a.length !== s.length) return !1; + for (const s of a) { + const a = e.get(s), + r = t.get(s); + if (!!a != !!r) return !1; + const n = a.getChild(), + i = r.getChild(); + if (n !== i && !n.equals(i)) return !1 + } + return !0 + } + + function F(e, t) { + if (e === t) return !0; + if (!!e != !!t || !e || !t) return !1; + if (e.length !== t.length) return !1; + for (let a = 0; a < e.length; a++) + if (e[a] !== t[a]) return !1; + return !0 + } + + function U(e, t) { + if (e === t) return !0; + if (!!e != !!t) return !1; + if (!R(e) || !R(t)) return e === t; + const a = e, + s = t; + let r, n = 0, + i = 0; + for (r in a) n++; + for (r in s) i++; + if (n !== i) return !1; + for (r in a) { + const e = a[r], + t = s[r]; + if (P(e) && P(t)) { + if (!F(e, t)) return !1 + } else if (R(e) && R(t)) { + if (!U(e, t)) return !1 + } else if (e !== t) return !1 + } + return !0 + } + + function P(e) { + return Array.isArray(e) || ArrayBuffer.isView(e) + } + const L = "23456789abdegjkmnpqrvwxyzABDEGJKMNPQRVWXYZ", + B = new Set, + G = function() { + let e = ""; + for (let t = 0; t < 6; t++) e += L.charAt(Math.floor(Math.random() * L.length)); + return e + }, + z = "https://null.example"; + class V { + static dirname(e) { + const t = e.lastIndexOf("/"); + return -1 === t ? "./" : e.substring(0, t + 1) + } + static basename(e) { + return k.basename(new URL(e, z).pathname) + } + static extension(e) { + return k.extension(new URL(e, z).pathname) + } + static resolve(e, t) { + if (!this.isRelativePath(t)) return t; + const a = e.split("/"), + s = t.split("/"); + a.pop(); + for (let e = 0; e < s.length; e++) "." !== s[e] && (".." === s[e] ? a.pop() : a.push(s[e])); + return a.join("/") + } + static isAbsoluteURL(e) { + return this.PROTOCOL_REGEXP.test(e) + } + static isRelativePath(e) { + return !/^(?:[a-zA-Z]+:)?\//.test(e) + } + } + V.DEFAULT_INIT = {}, V.PROTOCOL_REGEXP = /^[a-zA-Z]+:\/\//; + const q = e => e, + K = new Set; + class H extends s.Ao { + constructor(e, t = "") { + super(e), this[s.kE].name = t, this.init(), this.dispatchEvent({ + type: "create" + }) + } + getGraph() { + return this.graph + } + getDefaults() { + return Object.assign(super.getDefaults(), { + name: "", + extras: {} + }) + } + set(e, t) { + return Array.isArray(t) && (t = t.slice()), super.set(e, t) + } + getName() { + return this.get("name") + } + setName(e) { + return this.set("name", e) + } + getExtras() { + return this.get("extras") + } + setExtras(e) { + return this.set("extras", e) + } + clone() { + return new(0, this.constructor)(this.graph).copy(this, q) + } + copy(e, t = q) { + for (const e in this[s.kE]) { + const t = this[s.kE][e]; + if (t instanceof s.w3) this[s.Wb].has(e) || t.dispose(); + else if (t instanceof s.Rl || t instanceof s.BK) + for (const e of t.values()) e.dispose(); + else if (t instanceof s.lA) + for (const e of t.values()) e.dispose() + } + for (const a in e[s.kE]) { + const r = this[s.kE][a], + n = e[s.kE][a]; + if (n instanceof s.w3) this[s.Wb].has(a) ? r.getChild().copy(t(n.getChild()), t) : this.setRef(a, t(n.getChild()), n.getAttributes()); + else if (n instanceof s.BK || n instanceof s.Rl) + for (const e of n.values()) this.addRef(a, t(e.getChild()), e.getAttributes()); + else if (n instanceof s.lA) + for (const e of n.keys()) { + const s = n.get(e); + this.setRefMap(a, e, t(s.getChild()), s.getAttributes()) + } else R(n) ? this[s.kE][a] = JSON.parse(JSON.stringify(n)) : Array.isArray(n) || n instanceof ArrayBuffer || ArrayBuffer.isView(n) ? this[s.kE][a] = n.slice() : this[s.kE][a] = n + } + return this + } + equals(e, t = K) { + if (this === e) return !0; + if (this.propertyType !== e.propertyType) return !1; + for (const a in this[s.kE]) { + if (t.has(a)) continue; + const r = this[s.kE][a], + n = e[s.kE][a]; + if (r instanceof s.w3 || n instanceof s.w3) { + if (!C(r, n)) return !1 + } else if (r instanceof s.BK || n instanceof s.BK || r instanceof s.Rl || n instanceof s.Rl) { + if (!D(r, n)) return !1 + } else if (r instanceof s.lA || n instanceof s.lA) { + if (!O(r, n)) return !1 + } else if (R(r) || R(n)) { + if (!U(r, n)) return !1 + } else if (P(r) || P(n)) { + if (!F(r, n)) return !1 + } else if (r !== n) return !1 + } + return !0 + } + detach() { + return this.graph.disconnectParents(this, (e => "Root" !== e.propertyType)), this + } + listParents() { + return this.graph.listParents(this) + } + } + class W extends H { + getDefaults() { + return Object.assign(super.getDefaults(), { + extensions: new s.lA + }) + } + getExtension(e) { + return this.getRefMap("extensions", e) + } + setExtension(e, t) { + return t && t._validateParent(this), this.setRefMap("extensions", e, t) + } + listExtensions() { + return this.listRefMapValues("extensions") + } + } + class J extends W { + init() { + this.propertyType = o.ACCESSOR + } + getDefaults() { + return Object.assign(super.getDefaults(), { + array: null, + type: J.Type.SCALAR, + componentType: J.ComponentType.FLOAT, + normalized: !1, + sparse: !1, + buffer: null + }) + } + static getElementSize(e) { + switch (e) { + case J.Type.SCALAR: + return 1; + case J.Type.VEC2: + return 2; + case J.Type.VEC3: + return 3; + case J.Type.VEC4: + case J.Type.MAT2: + return 4; + case J.Type.MAT3: + return 9; + case J.Type.MAT4: + return 16; + default: + throw new Error("Unexpected type: " + e) + } + } + static getComponentSize(e) { + switch (e) { + case J.ComponentType.BYTE: + case J.ComponentType.UNSIGNED_BYTE: + return 1; + case J.ComponentType.SHORT: + case J.ComponentType.UNSIGNED_SHORT: + return 2; + case J.ComponentType.UNSIGNED_INT: + case J.ComponentType.FLOAT: + return 4; + default: + throw new Error("Unexpected component type: " + e) + } + } + getMinNormalized(e) { + const t = this.getNormalized(), + a = this.getElementSize(), + s = this.getComponentType(); + if (this.getMin(e), t) + for (let t = 0; t < a; t++) e[t] = _.decodeNormalizedInt(e[t], s); + return e + } + getMin(e) { + const t = this.getArray(), + a = this.getCount(), + s = this.getElementSize(); + for (let t = 0; t < s; t++) e[t] = 1 / 0; + for (let r = 0; r < a * s; r += s) + for (let a = 0; a < s; a++) { + const s = t[r + a]; + Number.isFinite(s) && (e[a] = Math.min(e[a], s)) + } + return e + } + getMaxNormalized(e) { + const t = this.getNormalized(), + a = this.getElementSize(), + s = this.getComponentType(); + if (this.getMax(e), t) + for (let t = 0; t < a; t++) e[t] = _.decodeNormalizedInt(e[t], s); + return e + } + getMax(e) { + const t = this.get("array"), + a = this.getCount(), + s = this.getElementSize(); + for (let t = 0; t < s; t++) e[t] = -1 / 0; + for (let r = 0; r < a * s; r += s) + for (let a = 0; a < s; a++) { + const s = t[r + a]; + Number.isFinite(s) && (e[a] = Math.max(e[a], s)) + } + return e + } + getCount() { + const e = this.get("array"); + return e ? e.length / this.getElementSize() : 0 + } + getType() { + return this.get("type") + } + setType(e) { + return this.set("type", e) + } + getElementSize() { + return J.getElementSize(this.get("type")) + } + getComponentSize() { + return this.get("array").BYTES_PER_ELEMENT + } + getComponentType() { + return this.get("componentType") + } + getNormalized() { + return this.get("normalized") + } + setNormalized(e) { + return this.set("normalized", e) + } + getScalar(e) { + const t = this.getElementSize(), + a = this.getComponentType(), + s = this.getArray(); + return this.getNormalized() ? _.decodeNormalizedInt(s[e * t], a) : s[e * t] + } + setScalar(e, t) { + const a = this.getElementSize(), + s = this.getComponentType(), + r = this.getArray(); + return this.getNormalized() ? r[e * a] = _.encodeNormalizedInt(t, s) : r[e * a] = t, this + } + getElement(e, t) { + const a = this.getNormalized(), + s = this.getElementSize(), + r = this.getComponentType(), + n = this.getArray(); + for (let i = 0; i < s; i++) t[i] = a ? _.decodeNormalizedInt(n[e * s + i], r) : n[e * s + i]; + return t + } + setElement(e, t) { + const a = this.getNormalized(), + s = this.getElementSize(), + r = this.getComponentType(), + n = this.getArray(); + for (let i = 0; i < s; i++) n[e * s + i] = a ? _.encodeNormalizedInt(t[i], r) : t[i]; + return this + } + getSparse() { + return this.get("sparse") + } + setSparse(e) { + return this.set("sparse", e) + } + getBuffer() { + return this.getRef("buffer") + } + setBuffer(e) { + return this.setRef("buffer", e) + } + getArray() { + return this.get("array") + } + setArray(e) { + return this.set("componentType", e ? function(e) { + switch (e.constructor) { + case Float32Array: + return J.ComponentType.FLOAT; + case Uint32Array: + return J.ComponentType.UNSIGNED_INT; + case Uint16Array: + return J.ComponentType.UNSIGNED_SHORT; + case Uint8Array: + return J.ComponentType.UNSIGNED_BYTE; + case Int16Array: + return J.ComponentType.SHORT; + case Int8Array: + return J.ComponentType.BYTE; + default: + throw new Error("Unknown accessor componentType.") + } + }(e) : J.ComponentType.FLOAT), this.set("array", e), this + } + getByteLength() { + const e = this.get("array"); + return e ? e.byteLength : 0 + } + } + J.Type = { + SCALAR: "SCALAR", + VEC2: "VEC2", + VEC3: "VEC3", + VEC4: "VEC4", + MAT2: "MAT2", + MAT3: "MAT3", + MAT4: "MAT4" + }, J.ComponentType = { + BYTE: 5120, + UNSIGNED_BYTE: 5121, + SHORT: 5122, + UNSIGNED_SHORT: 5123, + UNSIGNED_INT: 5125, + FLOAT: 5126 + }; + class Q extends W { + init() { + this.propertyType = o.ANIMATION + } + getDefaults() { + return Object.assign(super.getDefaults(), { + channels: new s.BK, + samplers: new s.BK + }) + } + addChannel(e) { + return this.addRef("channels", e) + } + removeChannel(e) { + return this.removeRef("channels", e) + } + listChannels() { + return this.listRefs("channels") + } + addSampler(e) { + return this.addRef("samplers", e) + } + removeSampler(e) { + return this.removeRef("samplers", e) + } + listSamplers() { + return this.listRefs("samplers") + } + } + class Y extends W { + init() { + this.propertyType = o.ANIMATION_CHANNEL + } + getDefaults() { + return Object.assign(super.getDefaults(), { + targetPath: null, + targetNode: null, + sampler: null + }) + } + getTargetPath() { + return this.get("targetPath") + } + setTargetPath(e) { + return this.set("targetPath", e) + } + getTargetNode() { + return this.getRef("targetNode") + } + setTargetNode(e) { + return this.setRef("targetNode", e) + } + getSampler() { + return this.getRef("sampler") + } + setSampler(e) { + return this.setRef("sampler", e) + } + } + Y.TargetPath = { + TRANSLATION: "translation", + ROTATION: "rotation", + SCALE: "scale", + WEIGHTS: "weights" + }; + class X extends W { + init() { + this.propertyType = o.ANIMATION_SAMPLER + } + getDefaultAttributes() { + return Object.assign(super.getDefaults(), { + interpolation: X.Interpolation.LINEAR, + input: null, + output: null + }) + } + getInterpolation() { + return this.get("interpolation") + } + setInterpolation(e) { + return this.set("interpolation", e) + } + getInput() { + return this.getRef("input") + } + setInput(e) { + return this.setRef("input", e, { + usage: b.OTHER + }) + } + getOutput() { + return this.getRef("output") + } + setOutput(e) { + return this.setRef("output", e, { + usage: b.OTHER + }) + } + } + X.Interpolation = { + LINEAR: "LINEAR", + STEP: "STEP", + CUBICSPLINE: "CUBICSPLINE" + }; + class Z extends W { + init() { + this.propertyType = o.BUFFER + } + getDefaults() { + return Object.assign(super.getDefaults(), { + uri: "" + }) + } + getURI() { + return this.get("uri") + } + setURI(e) { + return this.set("uri", e) + } + } + class $ extends W { + init() { + this.propertyType = o.CAMERA + } + getDefaults() { + return Object.assign(super.getDefaults(), { + type: $.Type.PERSPECTIVE, + znear: .1, + zfar: 100, + aspectRatio: null, + yfov: 2 * Math.PI * 50 / 360, + xmag: 1, + ymag: 1 + }) + } + getType() { + return this.get("type") + } + setType(e) { + return this.set("type", e) + } + getZNear() { + return this.get("znear") + } + setZNear(e) { + return this.set("znear", e) + } + getZFar() { + return this.get("zfar") + } + setZFar(e) { + return this.set("zfar", e) + } + getAspectRatio() { + return this.get("aspectRatio") + } + setAspectRatio(e) { + return this.set("aspectRatio", e) + } + getYFov() { + return this.get("yfov") + } + setYFov(e) { + return this.set("yfov", e) + } + getXMag() { + return this.get("xmag") + } + setXMag(e) { + return this.set("xmag", e) + } + getYMag() { + return this.get("ymag") + } + setYMag(e) { + return this.set("ymag", e) + } + } + $.Type = { + PERSPECTIVE: "perspective", + ORTHOGRAPHIC: "orthographic" + }; + class ee extends H { + _validateParent(e) { + if (!this.parentTypes.includes(e.propertyType)) throw new Error(`Parent "${e.propertyType}" invalid for child "${this.propertyType}".`) + } + } + ee.EXTENSION_NAME = void 0; + class te extends W { + init() { + this.propertyType = o.TEXTURE_INFO + } + getDefaults() { + return Object.assign(super.getDefaults(), { + texCoord: 0, + magFilter: null, + minFilter: null, + wrapS: te.WrapMode.REPEAT, + wrapT: te.WrapMode.REPEAT + }) + } + getTexCoord() { + return this.get("texCoord") + } + setTexCoord(e) { + return this.set("texCoord", e) + } + getMagFilter() { + return this.get("magFilter") + } + setMagFilter(e) { + return this.set("magFilter", e) + } + getMinFilter() { + return this.get("minFilter") + } + setMinFilter(e) { + return this.set("minFilter", e) + } + getWrapS() { + return this.get("wrapS") + } + setWrapS(e) { + return this.set("wrapS", e) + } + getWrapT() { + return this.get("wrapT") + } + setWrapT(e) { + return this.set("wrapT", e) + } + } + te.WrapMode = { + CLAMP_TO_EDGE: 33071, + MIRRORED_REPEAT: 33648, + REPEAT: 10497 + }, te.MagFilter = { + NEAREST: 9728, + LINEAR: 9729 + }, te.MinFilter = { + NEAREST: 9728, + LINEAR: 9729, + NEAREST_MIPMAP_NEAREST: 9984, + LINEAR_MIPMAP_NEAREST: 9985, + NEAREST_MIPMAP_LINEAR: 9986, + LINEAR_MIPMAP_LINEAR: 9987 + }; + const { + R: ae, + G: se, + B: re, + A: ne + } = d; + class ie extends W { + init() { + this.propertyType = o.MATERIAL + } + getDefaults() { + return Object.assign(super.getDefaults(), { + alphaMode: ie.AlphaMode.OPAQUE, + alphaCutoff: .5, + doubleSided: !1, + baseColorFactor: [1, 1, 1, 1], + baseColorTexture: null, + baseColorTextureInfo: new te(this.graph, "baseColorTextureInfo"), + emissiveFactor: [0, 0, 0], + emissiveTexture: null, + emissiveTextureInfo: new te(this.graph, "emissiveTextureInfo"), + normalScale: 1, + normalTexture: null, + normalTextureInfo: new te(this.graph, "normalTextureInfo"), + occlusionStrength: 1, + occlusionTexture: null, + occlusionTextureInfo: new te(this.graph, "occlusionTextureInfo"), + roughnessFactor: 1, + metallicFactor: 1, + metallicRoughnessTexture: null, + metallicRoughnessTextureInfo: new te(this.graph, "metallicRoughnessTextureInfo") + }) + } + getDoubleSided() { + return this.get("doubleSided") + } + setDoubleSided(e) { + return this.set("doubleSided", e) + } + getAlpha() { + return this.get("baseColorFactor")[3] + } + setAlpha(e) { + const t = this.get("baseColorFactor").slice(); + return t[3] = e, this.set("baseColorFactor", t) + } + getAlphaMode() { + return this.get("alphaMode") + } + setAlphaMode(e) { + return this.set("alphaMode", e) + } + getAlphaCutoff() { + return this.get("alphaCutoff") + } + setAlphaCutoff(e) { + return this.set("alphaCutoff", e) + } + getBaseColorFactor() { + return this.get("baseColorFactor") + } + setBaseColorFactor(e) { + return this.set("baseColorFactor", e) + } + getBaseColorTexture() { + return this.getRef("baseColorTexture") + } + getBaseColorTextureInfo() { + return this.getRef("baseColorTexture") ? this.getRef("baseColorTextureInfo") : null + } + setBaseColorTexture(e) { + return this.setRef("baseColorTexture", e, { + channels: ae | se | re | ne, + isColor: !0 + }) + } + getEmissiveFactor() { + return this.get("emissiveFactor") + } + setEmissiveFactor(e) { + return this.set("emissiveFactor", e) + } + getEmissiveTexture() { + return this.getRef("emissiveTexture") + } + getEmissiveTextureInfo() { + return this.getRef("emissiveTexture") ? this.getRef("emissiveTextureInfo") : null + } + setEmissiveTexture(e) { + return this.setRef("emissiveTexture", e, { + channels: ae | se | re, + isColor: !0 + }) + } + getNormalScale() { + return this.get("normalScale") + } + setNormalScale(e) { + return this.set("normalScale", e) + } + getNormalTexture() { + return this.getRef("normalTexture") + } + getNormalTextureInfo() { + return this.getRef("normalTexture") ? this.getRef("normalTextureInfo") : null + } + setNormalTexture(e) { + return this.setRef("normalTexture", e, { + channels: ae | se | re + }) + } + getOcclusionStrength() { + return this.get("occlusionStrength") + } + setOcclusionStrength(e) { + return this.set("occlusionStrength", e) + } + getOcclusionTexture() { + return this.getRef("occlusionTexture") + } + getOcclusionTextureInfo() { + return this.getRef("occlusionTexture") ? this.getRef("occlusionTextureInfo") : null + } + setOcclusionTexture(e) { + return this.setRef("occlusionTexture", e, { + channels: ae + }) + } + getRoughnessFactor() { + return this.get("roughnessFactor") + } + setRoughnessFactor(e) { + return this.set("roughnessFactor", e) + } + getMetallicFactor() { + return this.get("metallicFactor") + } + setMetallicFactor(e) { + return this.set("metallicFactor", e) + } + getMetallicRoughnessTexture() { + return this.getRef("metallicRoughnessTexture") + } + getMetallicRoughnessTextureInfo() { + return this.getRef("metallicRoughnessTexture") ? this.getRef("metallicRoughnessTextureInfo") : null + } + setMetallicRoughnessTexture(e) { + return this.setRef("metallicRoughnessTexture", e, { + channels: se | re + }) + } + } + ie.AlphaMode = { + OPAQUE: "OPAQUE", + MASK: "MASK", + BLEND: "BLEND" + }; + class oe extends W { + init() { + this.propertyType = o.MESH + } + getDefaults() { + return Object.assign(super.getDefaults(), { + weights: [], + primitives: new s.BK + }) + } + addPrimitive(e) { + return this.addRef("primitives", e) + } + removePrimitive(e) { + return this.removeRef("primitives", e) + } + listPrimitives() { + return this.listRefs("primitives") + } + getWeights() { + return this.get("weights") + } + setWeights(e) { + return this.set("weights", e) + } + } + class ce extends W { + init() { + this.propertyType = o.NODE + } + getDefaults() { + return Object.assign(super.getDefaults(), { + translation: [0, 0, 0], + rotation: [0, 0, 0, 1], + scale: [1, 1, 1], + weights: [], + camera: null, + mesh: null, + skin: null, + children: new s.BK + }) + } + copy(e, t = q) { + if (t === q) throw new Error("Node cannot be copied."); + return super.copy(e, t) + } + getTranslation() { + return this.get("translation") + } + getRotation() { + return this.get("rotation") + } + getScale() { + return this.get("scale") + } + setTranslation(e) { + return this.set("translation", e) + } + setRotation(e) { + return this.set("rotation", e) + } + setScale(e) { + return this.set("scale", e) + } + getMatrix() { + return _.compose(this.get("translation"), this.get("rotation"), this.get("scale"), []) + } + setMatrix(e) { + const t = this.get("translation").slice(), + a = this.get("rotation").slice(), + s = this.get("scale").slice(); + return _.decompose(e, t, a, s), this.set("translation", t).set("rotation", a).set("scale", s) + } + getWorldTranslation() { + const e = [0, 0, 0]; + return _.decompose(this.getWorldMatrix(), e, [0, 0, 0, 1], [1, 1, 1]), e + } + getWorldRotation() { + const e = [0, 0, 0, 1]; + return _.decompose(this.getWorldMatrix(), [0, 0, 0], e, [1, 1, 1]), e + } + getWorldScale() { + const e = [1, 1, 1]; + return _.decompose(this.getWorldMatrix(), [0, 0, 0], [0, 0, 0, 1], e), e + } + getWorldMatrix() { + const e = []; + for (let t = this; null != t; t = t.getParentNode()) e.push(t); + let t; + const a = e.pop().getMatrix(); + for (; t = e.pop();) M(a, a, t.getMatrix()); + return a + } + addChild(e) { + const t = e.getParentNode(); + t && t.removeChild(e); + for (const t of e.listParents()) t.propertyType === o.SCENE && t.removeChild(e); + return this.addRef("children", e) + } + removeChild(e) { + return this.removeRef("children", e) + } + listChildren() { + return this.listRefs("children") + } + getParentNode() { + for (const e of this.listParents()) + if (e.propertyType === o.NODE) return e; + return null + } + getMesh() { + return this.getRef("mesh") + } + setMesh(e) { + return this.setRef("mesh", e) + } + getCamera() { + return this.getRef("camera") + } + setCamera(e) { + return this.setRef("camera", e) + } + getSkin() { + return this.getRef("skin") + } + setSkin(e) { + return this.setRef("skin", e) + } + getWeights() { + return this.get("weights") + } + setWeights(e) { + return this.set("weights", e) + } + traverse(e) { + e(this); + for (const t of this.listChildren()) t.traverse(e); + return this + } + } + class be extends W { + init() { + this.propertyType = o.PRIMITIVE + } + getDefaults() { + return Object.assign(super.getDefaults(), { + mode: be.Mode.TRIANGLES, + material: null, + indices: null, + attributes: new s.lA, + targets: new s.BK + }) + } + getIndices() { + return this.getRef("indices") + } + setIndices(e) { + return this.setRef("indices", e, { + usage: b.ELEMENT_ARRAY_BUFFER + }) + } + getAttribute(e) { + return this.getRefMap("attributes", e) + } + setAttribute(e, t) { + return this.setRefMap("attributes", e, t, { + usage: b.ARRAY_BUFFER + }) + } + listAttributes() { + return this.listRefMapValues("attributes") + } + listSemantics() { + return this.listRefMapKeys("attributes") + } + getMaterial() { + return this.getRef("material") + } + setMaterial(e) { + return this.setRef("material", e) + } + getMode() { + return this.get("mode") + } + setMode(e) { + return this.set("mode", e) + } + listTargets() { + return this.listRefs("targets") + } + addTarget(e) { + return this.addRef("targets", e) + } + removeTarget(e) { + return this.removeRef("targets", e) + } + } + be.Mode = { + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6 + }; + class de extends H { + init() { + this.propertyType = o.PRIMITIVE_TARGET + } + getDefaults() { + return Object.assign(super.getDefaults(), { + attributes: new s.lA + }) + } + getAttribute(e) { + return this.getRefMap("attributes", e) + } + setAttribute(e, t) { + return this.setRefMap("attributes", e, t, { + usage: b.ARRAY_BUFFER + }) + } + listAttributes() { + return this.listRefMapValues("attributes") + } + listSemantics() { + return this.listRefMapKeys("attributes") + } + } + + function fe() { + return fe = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var a = arguments[t]; + for (var s in a) Object.prototype.hasOwnProperty.call(a, s) && (e[s] = a[s]) + } + return e + }, fe.apply(this, arguments) + } + class he extends W { + init() { + this.propertyType = o.SCENE + } + getDefaults() { + return Object.assign(super.getDefaults(), { + children: new s.BK + }) + } + copy(e, t = q) { + if (t === q) throw new Error("Scene cannot be copied."); + return super.copy(e, t) + } + addChild(e) { + const t = e.getParentNode(); + return t && t.removeChild(e), this.addRef("children", e) + } + removeChild(e) { + return this.removeRef("children", e) + } + listChildren() { + return this.listRefs("children") + } + traverse(e) { + for (const t of this.listChildren()) t.traverse(e); + return this + } + } + class ue extends W { + init() { + this.propertyType = o.SKIN + } + getDefaults() { + return Object.assign(super.getDefaults(), { + skeleton: null, + inverseBindMatrices: null, + joints: new s.BK + }) + } + getSkeleton() { + return this.getRef("skeleton") + } + setSkeleton(e) { + return this.setRef("skeleton", e) + } + getInverseBindMatrices() { + return this.getRef("inverseBindMatrices") + } + setInverseBindMatrices(e) { + return this.setRef("inverseBindMatrices", e, { + usage: b.INVERSE_BIND_MATRICES + }) + } + addJoint(e) { + return this.addRef("joints", e) + } + removeJoint(e) { + return this.removeRef("joints", e) + } + listJoints() { + return this.listRefs("joints") + } + } + class le extends W { + init() { + this.propertyType = o.TEXTURE + } + getDefaults() { + return Object.assign(super.getDefaults(), { + image: null, + mimeType: "", + uri: "" + }) + } + getMimeType() { + return this.get("mimeType") || I.extensionToMimeType(k.extension(this.get("uri"))) + } + setMimeType(e) { + return this.set("mimeType", e) + } + getURI() { + return this.get("uri") + } + setURI(e) { + this.set("uri", e); + const t = I.extensionToMimeType(k.extension(e)); + return t && this.set("mimeType", t), this + } + getImage() { + return this.get("image") + } + setImage(e) { + return this.set("image", j.assertView(e)) + } + getSize() { + const e = this.get("image"); + return e ? I.getSize(e, this.getMimeType()) : null + } + } + class ge extends W { + init() { + this.propertyType = o.ROOT + } + getDefaults() { + return Object.assign(super.getDefaults(), { + asset: { + generator: "glTF-Transform v4.0.1", + version: "2.0" + }, + defaultScene: null, + accessors: new s.BK, + animations: new s.BK, + buffers: new s.BK, + cameras: new s.BK, + materials: new s.BK, + meshes: new s.BK, + nodes: new s.BK, + scenes: new s.BK, + skins: new s.BK, + textures: new s.BK + }) + } + constructor(e) { + super(e), this._extensions = new Set, e.addEventListener("node:create", (e => { + this._addChildOfRoot(e.target) + })) + } + clone() { + throw new Error("Root cannot be cloned.") + } + copy(e, t = q) { + if (t === q) throw new Error("Root cannot be copied."); + this.set("asset", fe({}, e.get("asset"))), this.setName(e.getName()), this.setExtras(fe({}, e.getExtras())), this.setDefaultScene(e.getDefaultScene() ? t(e.getDefaultScene()) : null); + for (const a of e.listRefMapKeys("extensions")) { + const s = e.getExtension(a); + this.setExtension(a, t(s)) + } + return this + } + _addChildOfRoot(e) { + return e instanceof he ? this.addRef("scenes", e) : e instanceof ce ? this.addRef("nodes", e) : e instanceof $ ? this.addRef("cameras", e) : e instanceof ue ? this.addRef("skins", e) : e instanceof oe ? this.addRef("meshes", e) : e instanceof ie ? this.addRef("materials", e) : e instanceof le ? this.addRef("textures", e) : e instanceof Q ? this.addRef("animations", e) : e instanceof J ? this.addRef("accessors", e) : e instanceof Z && this.addRef("buffers", e), this + } + getAsset() { + return this.get("asset") + } + listExtensionsUsed() { + return Array.from(this._extensions) + } + listExtensionsRequired() { + return this.listExtensionsUsed().filter((e => e.isRequired())) + } + _enableExtension(e) { + return this._extensions.add(e), this + } + _disableExtension(e) { + return this._extensions.delete(e), this + } + listScenes() { + return this.listRefs("scenes") + } + setDefaultScene(e) { + return this.setRef("defaultScene", e) + } + getDefaultScene() { + return this.getRef("defaultScene") + } + listNodes() { + return this.listRefs("nodes") + } + listCameras() { + return this.listRefs("cameras") + } + listSkins() { + return this.listRefs("skins") + } + listMeshes() { + return this.listRefs("meshes") + } + listMaterials() { + return this.listRefs("materials") + } + listTextures() { + return this.listRefs("textures") + } + listAnimations() { + return this.listRefs("animations") + } + listAccessors() { + return this.listRefs("accessors") + } + listBuffers() { + return this.listRefs("buffers") + } + } + class pe { + static fromGraph(e) { + return pe._GRAPH_DOCUMENTS.get(e) || null + } + constructor() { + this._graph = new s.kJ, this._root = new ge(this._graph), this._logger = S.DEFAULT_INSTANCE, pe._GRAPH_DOCUMENTS.set(this._graph, this) + } + getRoot() { + return this._root + } + getGraph() { + return this._graph + } + getLogger() { + return this._logger + } + setLogger(e) { + return this._logger = e, this + } + clone() { + throw new Error("Use 'cloneDocument(source)' from '@gltf-transform/functions'.") + } + merge(e) { + throw new Error("Use 'mergeDocuments(target, source)' from '@gltf-transform/functions'.") + } + async transform(...e) { + const t = e.map((e => e.name)); + for (const a of e) await a(this, { + stack: t + }); + return this + } + createExtension(e) { + const t = e.EXTENSION_NAME; + return this.getRoot().listExtensionsUsed().find((e => e.extensionName === t)) || new e(this) + } + createScene(e = "") { + return new he(this._graph, e) + } + createNode(e = "") { + return new ce(this._graph, e) + } + createCamera(e = "") { + return new $(this._graph, e) + } + createSkin(e = "") { + return new ue(this._graph, e) + } + createMesh(e = "") { + return new oe(this._graph, e) + } + createPrimitive() { + return new be(this._graph) + } + createPrimitiveTarget(e = "") { + return new de(this._graph, e) + } + createMaterial(e = "") { + return new ie(this._graph, e) + } + createTexture(e = "") { + return new le(this._graph, e) + } + createAnimation(e = "") { + return new Q(this._graph, e) + } + createAnimationChannel(e = "") { + return new Y(this._graph, e) + } + createAnimationSampler(e = "") { + return new X(this._graph, e) + } + createAccessor(e = "", t = null) { + return t || (t = this.getRoot().listBuffers()[0]), new J(this._graph, e).setBuffer(t) + } + createBuffer(e = "") { + return new Z(this._graph, e) + } + } + pe._GRAPH_DOCUMENTS = new WeakMap; + class me { + constructor(e) { + this.extensionName = "", this.prereadTypes = [], this.prewriteTypes = [], this.readDependencies = [], this.writeDependencies = [], this.document = void 0, this.required = !1, this.properties = new Set, this._listener = void 0, this.document = e, e.getRoot()._enableExtension(this), this._listener = e => { + const t = e, + a = t.target; + a instanceof ee && a.extensionName === this.extensionName && ("node:create" === t.type && this._addExtensionProperty(a), "node:dispose" === t.type && this._removeExtensionProperty(a)) + }; + const t = e.getGraph(); + t.addEventListener("node:create", this._listener), t.addEventListener("node:dispose", this._listener) + } + dispose() { + this.document.getRoot()._disableExtension(this); + const e = this.document.getGraph(); + e.removeEventListener("node:create", this._listener), e.removeEventListener("node:dispose", this._listener); + for (const e of this.properties) e.dispose() + } + static register() {} + isRequired() { + return this.required + } + setRequired(e) { + return this.required = e, this + } + listProperties() { + return Array.from(this.properties) + } + _addExtensionProperty(e) { + return this.properties.add(e), this + } + _removeExtensionProperty(e) { + return this.properties.delete(e), this + } + install(e, t) { + return this + } + preread(e, t) { + return this + } + prewrite(e, t) { + return this + } + } + me.EXTENSION_NAME = void 0; + class ye { + constructor(e) { + this.jsonDoc = void 0, this.buffers = [], this.bufferViews = [], this.bufferViewBuffers = [], this.accessors = [], this.textures = [], this.textureInfos = new Map, this.materials = [], this.meshes = [], this.cameras = [], this.nodes = [], this.skins = [], this.animations = [], this.scenes = [], this.jsonDoc = e + } + setTextureInfo(e, t) { + this.textureInfos.set(e, t), void 0 !== t.texCoord && e.setTexCoord(t.texCoord), void 0 !== t.extras && e.setExtras(t.extras); + const a = this.jsonDoc.json.textures[t.index]; + if (void 0 === a.sampler) return; + const s = this.jsonDoc.json.samplers[a.sampler]; + void 0 !== s.magFilter && e.setMagFilter(s.magFilter), void 0 !== s.minFilter && e.setMinFilter(s.minFilter), void 0 !== s.wrapS && e.setWrapS(s.wrapS), void 0 !== s.wrapT && e.setWrapT(s.wrapT) + } + } + const xe = { + logger: S.DEFAULT_INSTANCE, + extensions: [], + dependencies: {} + }; + class Te { + static read(e, t = xe) { + const a = fe({}, xe, t), + { + json: s + } = e, + r = (new pe).setLogger(a.logger); + this.validate(e, a); + const n = new ye(e), + c = s.asset, + b = r.getRoot().getAsset(); + c.copyright && (b.copyright = c.copyright), c.extras && (b.extras = c.extras), void 0 !== s.extras && r.getRoot().setExtras(fe({}, s.extras)); + const d = s.extensionsUsed || [], + f = s.extensionsRequired || []; + a.extensions.sort(((e, t) => e.EXTENSION_NAME > t.EXTENSION_NAME ? 1 : -1)); + for (const e of a.extensions) + if (d.includes(e.EXTENSION_NAME)) { + const t = r.createExtension(e).setRequired(f.includes(e.EXTENSION_NAME)); + for (const e of t.readDependencies) t.install(e, a.dependencies[e]) + } const u = s.buffers || []; + r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.BUFFER))).forEach((e => e.preread(n, o.BUFFER))), n.buffers = u.map((e => { + const t = r.createBuffer(e.name); + return e.extras && t.setExtras(e.extras), e.uri && 0 !== e.uri.indexOf("__") && t.setURI(e.uri), t + })); + const l = s.bufferViews || []; + n.bufferViewBuffers = l.map(((t, a) => { + if (!n.bufferViews[a]) { + const s = e.json.buffers[t.buffer], + r = s.uri ? e.resources[s.uri] : e.resources[i], + o = t.byteOffset || 0; + n.bufferViews[a] = j.toView(r, o, t.byteLength) + } + return n.buffers[t.buffer] + })); + const g = s.accessors || []; + n.accessors = g.map((e => { + const t = n.bufferViewBuffers[e.bufferView], + a = r.createAccessor(e.name, t).setType(e.type); + return e.extras && a.setExtras(e.extras), void 0 !== e.normalized && a.setNormalized(e.normalized), void 0 === e.bufferView || a.setArray(Ee(e, n)), a + })); + const p = s.images || [], + m = s.textures || []; + r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.TEXTURE))).forEach((e => e.preread(n, o.TEXTURE))), n.textures = p.map((t => { + const a = r.createTexture(t.name); + if (t.extras && a.setExtras(t.extras), void 0 !== t.bufferView) { + const r = s.bufferViews[t.bufferView], + n = e.json.buffers[r.buffer], + o = n.uri ? e.resources[n.uri] : e.resources[i], + c = r.byteOffset || 0, + b = r.byteLength, + d = o.slice(c, c + b); + a.setImage(d) + } else void 0 !== t.uri && (a.setImage(e.resources[t.uri]), 0 !== t.uri.indexOf("__") && a.setURI(t.uri)); + if (void 0 !== t.mimeType) a.setMimeType(t.mimeType); + else if (t.uri) { + const e = k.extension(t.uri); + a.setMimeType(I.extensionToMimeType(e)) + } + return a + })), r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.MATERIAL))).forEach((e => e.preread(n, o.MATERIAL))); + const y = s.materials || []; + n.materials = y.map((e => { + const t = r.createMaterial(e.name); + e.extras && t.setExtras(e.extras), void 0 !== e.alphaMode && t.setAlphaMode(e.alphaMode), void 0 !== e.alphaCutoff && t.setAlphaCutoff(e.alphaCutoff), void 0 !== e.doubleSided && t.setDoubleSided(e.doubleSided); + const a = e.pbrMetallicRoughness || {}; + if (void 0 !== a.baseColorFactor && t.setBaseColorFactor(a.baseColorFactor), void 0 !== e.emissiveFactor && t.setEmissiveFactor(e.emissiveFactor), void 0 !== a.metallicFactor && t.setMetallicFactor(a.metallicFactor), void 0 !== a.roughnessFactor && t.setRoughnessFactor(a.roughnessFactor), void 0 !== a.baseColorTexture) { + const e = a.baseColorTexture, + s = n.textures[m[e.index].source]; + t.setBaseColorTexture(s), n.setTextureInfo(t.getBaseColorTextureInfo(), e) + } + if (void 0 !== e.emissiveTexture) { + const a = e.emissiveTexture, + s = n.textures[m[a.index].source]; + t.setEmissiveTexture(s), n.setTextureInfo(t.getEmissiveTextureInfo(), a) + } + if (void 0 !== e.normalTexture) { + const a = e.normalTexture, + s = n.textures[m[a.index].source]; + t.setNormalTexture(s), n.setTextureInfo(t.getNormalTextureInfo(), a), void 0 !== e.normalTexture.scale && t.setNormalScale(e.normalTexture.scale) + } + if (void 0 !== e.occlusionTexture) { + const a = e.occlusionTexture, + s = n.textures[m[a.index].source]; + t.setOcclusionTexture(s), n.setTextureInfo(t.getOcclusionTextureInfo(), a), void 0 !== e.occlusionTexture.strength && t.setOcclusionStrength(e.occlusionTexture.strength) + } + if (void 0 !== a.metallicRoughnessTexture) { + const e = a.metallicRoughnessTexture, + s = n.textures[m[e.index].source]; + t.setMetallicRoughnessTexture(s), n.setTextureInfo(t.getMetallicRoughnessTextureInfo(), e) + } + return t + })), r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.MESH))).forEach((e => e.preread(n, o.MESH))); + const x = s.meshes || []; + r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.PRIMITIVE))).forEach((e => e.preread(n, o.PRIMITIVE))), n.meshes = x.map((e => { + const t = r.createMesh(e.name); + return e.extras && t.setExtras(e.extras), void 0 !== e.weights && t.setWeights(e.weights), (e.primitives || []).forEach((a => { + const s = r.createPrimitive(); + a.extras && s.setExtras(a.extras), void 0 !== a.material && s.setMaterial(n.materials[a.material]), void 0 !== a.mode && s.setMode(a.mode); + for (const [e, t] of Object.entries(a.attributes || {})) s.setAttribute(e, n.accessors[t]); + void 0 !== a.indices && s.setIndices(n.accessors[a.indices]); + const i = e.extras && e.extras.targetNames || []; + (a.targets || []).forEach(((e, t) => { + const a = i[t] || t.toString(), + o = r.createPrimitiveTarget(a); + for (const [t, a] of Object.entries(e)) o.setAttribute(t, n.accessors[a]); + s.addTarget(o) + })), t.addPrimitive(s) + })), t + })); + const T = s.cameras || []; + n.cameras = T.map((e => { + const t = r.createCamera(e.name).setType(e.type); + if (e.extras && t.setExtras(e.extras), e.type === $.Type.PERSPECTIVE) { + const a = e.perspective; + t.setYFov(a.yfov), t.setZNear(a.znear), void 0 !== a.zfar && t.setZFar(a.zfar), void 0 !== a.aspectRatio && t.setAspectRatio(a.aspectRatio) + } else { + const a = e.orthographic; + t.setZNear(a.znear).setZFar(a.zfar).setXMag(a.xmag).setYMag(a.ymag) + } + return t + })); + const E = s.nodes || []; + r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.NODE))).forEach((e => e.preread(n, o.NODE))), n.nodes = E.map((e => { + const t = r.createNode(e.name); + if (e.extras && t.setExtras(e.extras), void 0 !== e.translation && t.setTranslation(e.translation), void 0 !== e.rotation && t.setRotation(e.rotation), void 0 !== e.scale && t.setScale(e.scale), void 0 !== e.matrix) { + const a = [0, 0, 0], + s = [0, 0, 0, 1], + r = [1, 1, 1]; + _.decompose(e.matrix, a, s, r), t.setTranslation(a), t.setRotation(s), t.setScale(r) + } + return void 0 !== e.weights && t.setWeights(e.weights), t + })); + const w = s.skins || []; + n.skins = w.map((e => { + const t = r.createSkin(e.name); + e.extras && t.setExtras(e.extras), void 0 !== e.inverseBindMatrices && t.setInverseBindMatrices(n.accessors[e.inverseBindMatrices]), void 0 !== e.skeleton && t.setSkeleton(n.nodes[e.skeleton]); + for (const a of e.joints) t.addJoint(n.nodes[a]); + return t + })), E.map(((e, t) => { + const a = n.nodes[t]; + (e.children || []).forEach((e => a.addChild(n.nodes[e]))), void 0 !== e.mesh && a.setMesh(n.meshes[e.mesh]), void 0 !== e.camera && a.setCamera(n.cameras[e.camera]), void 0 !== e.skin && a.setSkin(n.skins[e.skin]) + })); + const A = s.animations || []; + n.animations = A.map((e => { + const t = r.createAnimation(e.name); + e.extras && t.setExtras(e.extras); + const a = (e.samplers || []).map((e => { + const a = r.createAnimationSampler().setInput(n.accessors[e.input]).setOutput(n.accessors[e.output]).setInterpolation(e.interpolation || X.Interpolation.LINEAR); + return e.extras && a.setExtras(e.extras), t.addSampler(a), a + })); + return (e.channels || []).forEach((e => { + const s = r.createAnimationChannel().setSampler(a[e.sampler]).setTargetPath(e.target.path); + void 0 !== e.target.node && s.setTargetNode(n.nodes[e.target.node]), e.extras && s.setExtras(e.extras), t.addChannel(s) + })), t + })); + const N = s.scenes || []; + return r.getRoot().listExtensionsUsed().filter((e => e.prereadTypes.includes(o.SCENE))).forEach((e => e.preread(n, o.SCENE))), n.scenes = N.map((e => { + const t = r.createScene(e.name); + return e.extras && t.setExtras(e.extras), (e.nodes || []).map((e => n.nodes[e])).forEach((e => t.addChild(e))), t + })), void 0 !== s.scene && r.getRoot().setDefaultScene(n.scenes[s.scene]), r.getRoot().listExtensionsUsed().forEach((e => e.read(n))), g.forEach(((e, t) => { + const a = n.accessors[t], + s = !!e.sparse, + r = !e.bufferView && !a.getArray(); + (s || r) && a.setSparse(!0).setArray(function(e, t) { + const a = h[e.componentType], + s = J.getElementSize(e.type); + let r; + r = void 0 !== e.bufferView ? Ee(e, t) : new a(e.count * s); + const n = e.sparse; + if (!n) return r; + const i = n.count, + o = fe({}, e, n.indices, { + count: i, + type: "SCALAR" + }), + c = fe({}, e, n.values, { + count: i + }), + b = Ee(o, t), + d = Ee(c, t); + for (let e = 0; e < o.count; e++) + for (let t = 0; t < s; t++) r[b[e] * s + t] = d[e * s + t]; + return r + }(e, n)) + })), r + } + static validate(e, t) { + const a = e.json; + if ("2.0" !== a.asset.version) throw new Error(`Unsupported glTF version, "${a.asset.version}".`); + if (a.extensionsRequired) + for (const e of a.extensionsRequired) + if (!t.extensions.find((t => t.EXTENSION_NAME === e))) throw new Error(`Missing required extension, "${e}".`); + if (a.extensionsUsed) + for (const e of a.extensionsUsed) t.extensions.find((t => t.EXTENSION_NAME === e)) || t.logger.warn(`Missing optional extension, "${e}".`) + } + } + + function Ee(e, t) { + const a = t.jsonDoc, + s = t.bufferViews[e.bufferView], + r = a.json.bufferViews[e.bufferView], + n = h[e.componentType], + i = J.getElementSize(e.type), + o = n.BYTES_PER_ELEMENT, + c = i * o; + if (void 0 !== r.byteStride && r.byteStride !== c) return function(e, t) { + const a = t.jsonDoc, + s = t.bufferViews[e.bufferView], + r = a.json.bufferViews[e.bufferView], + n = h[e.componentType], + i = J.getElementSize(e.type), + o = n.BYTES_PER_ELEMENT, + c = e.byteOffset || 0, + b = new n(e.count * i), + d = new DataView(s.buffer, s.byteOffset, s.byteLength), + f = r.byteStride; + for (let t = 0; t < e.count; t++) + for (let a = 0; a < i; a++) { + const s = c + t * f + a * o; + let r; + switch (e.componentType) { + case J.ComponentType.FLOAT: + r = d.getFloat32(s, !0); + break; + case J.ComponentType.UNSIGNED_INT: + r = d.getUint32(s, !0); + break; + case J.ComponentType.UNSIGNED_SHORT: + r = d.getUint16(s, !0); + break; + case J.ComponentType.UNSIGNED_BYTE: + r = d.getUint8(s); + break; + case J.ComponentType.SHORT: + r = d.getInt16(s, !0); + break; + case J.ComponentType.BYTE: + r = d.getInt8(s); + break; + default: + throw new Error(`Unexpected componentType "${e.componentType}".`) + } + b[t * i + a] = r + } + return b + }(e, t); + const b = s.byteOffset + (e.byteOffset || 0), + d = e.count * i * o; + return new n(s.buffer.slice(b, b + d)) + } + var je; + ! function(e) { + e[e.ARRAY_BUFFER = 34962] = "ARRAY_BUFFER", e[e.ELEMENT_ARRAY_BUFFER = 34963] = "ELEMENT_ARRAY_BUFFER" + }(je || (je = {})); + class we { + constructor(e, t, a) { + this._doc = void 0, this.jsonDoc = void 0, this.options = void 0, this.accessorIndexMap = new Map, this.animationIndexMap = new Map, this.bufferIndexMap = new Map, this.cameraIndexMap = new Map, this.skinIndexMap = new Map, this.materialIndexMap = new Map, this.meshIndexMap = new Map, this.nodeIndexMap = new Map, this.imageIndexMap = new Map, this.textureDefIndexMap = new Map, this.textureInfoDefMap = new Map, this.samplerDefIndexMap = new Map, this.sceneIndexMap = new Map, this.imageBufferViews = [], this.otherBufferViews = new Map, this.otherBufferViewsIndexMap = new Map, this.extensionData = {}, this.bufferURIGenerator = void 0, this.imageURIGenerator = void 0, this.logger = void 0, this._accessorUsageMap = new Map, this.accessorUsageGroupedByParent = new Set(["ARRAY_BUFFER"]), this.accessorParents = new Map, this._doc = e, this.jsonDoc = t, this.options = a; + const s = e.getRoot(), + r = s.listBuffers().length, + n = s.listTextures().length; + this.bufferURIGenerator = new Ae(r > 1, (() => a.basename || "buffer")), this.imageURIGenerator = new Ae(n > 1, (t => function(e, t) { + const a = e.getGraph().listParentEdges(t).find((t => t.getParent() !== e.getRoot())); + return a ? a.getName().replace(/texture$/i, "") : "" + }(e, t) || a.basename || "texture")), this.logger = e.getLogger() + } + createTextureInfoDef(e, t) { + const a = { + magFilter: t.getMagFilter() || void 0, + minFilter: t.getMinFilter() || void 0, + wrapS: t.getWrapS(), + wrapT: t.getWrapT() + }, + s = JSON.stringify(a); + this.samplerDefIndexMap.has(s) || (this.samplerDefIndexMap.set(s, this.jsonDoc.json.samplers.length), this.jsonDoc.json.samplers.push(a)); + const r = { + source: this.imageIndexMap.get(e), + sampler: this.samplerDefIndexMap.get(s) + }, + n = JSON.stringify(r); + this.textureDefIndexMap.has(n) || (this.textureDefIndexMap.set(n, this.jsonDoc.json.textures.length), this.jsonDoc.json.textures.push(r)); + const i = { + index: this.textureDefIndexMap.get(n) + }; + return 0 !== t.getTexCoord() && (i.texCoord = t.getTexCoord()), Object.keys(t.getExtras()).length > 0 && (i.extras = t.getExtras()), this.textureInfoDefMap.set(t, i), i + } + createPropertyDef(e) { + const t = {}; + return e.getName() && (t.name = e.getName()), Object.keys(e.getExtras()).length > 0 && (t.extras = e.getExtras()), t + } + createAccessorDef(e) { + const t = this.createPropertyDef(e); + return t.type = e.getType(), t.componentType = e.getComponentType(), t.count = e.getCount(), this._doc.getGraph().listParentEdges(e).some((e => "attributes" === e.getName() && "POSITION" === e.getAttributes().key || "input" === e.getName())) && (t.max = e.getMax([]).map(Math.fround), t.min = e.getMin([]).map(Math.fround)), e.getNormalized() && (t.normalized = e.getNormalized()), t + } + createImageData(e, t, a) { + if (this.options.format === f.GLB) this.imageBufferViews.push(t), e.bufferView = this.jsonDoc.json.bufferViews.length, this.jsonDoc.json.bufferViews.push({ + buffer: 0, + byteOffset: -1, + byteLength: t.byteLength + }); + else { + const s = I.mimeTypeToExtension(a.getMimeType()); + e.uri = this.imageURIGenerator.createURI(a, s), this.jsonDoc.resources[e.uri] = t + } + } + getAccessorUsage(e) { + const t = this._accessorUsageMap.get(e); + if (t) return t; + if (e.getSparse()) return b.SPARSE; + for (const t of this._doc.getGraph().listParentEdges(e)) { + const { + usage: e + } = t.getAttributes(); + if (e) return e; + t.getParent().propertyType !== o.ROOT && this.logger.warn(`Missing attribute ".usage" on edge, "${t.getName()}".`) + } + return b.OTHER + } + addAccessorToUsageGroup(e, t) { + const a = this._accessorUsageMap.get(e); + if (a && a !== t) throw new Error(`Accessor with usage "${a}" cannot be reused as "${t}".`); + return this._accessorUsageMap.set(e, t), this + } + } + we.BufferViewTarget = je, we.BufferViewUsage = b, we.USAGE_TO_TARGET = { + [b.ARRAY_BUFFER]: je.ARRAY_BUFFER, + [b.ELEMENT_ARRAY_BUFFER]: je.ELEMENT_ARRAY_BUFFER + }; + class Ae { + constructor(e, t) { + this.multiple = void 0, this.basename = void 0, this.counter = {}, this.multiple = e, this.basename = t + } + createURI(e, t) { + if (e.getURI()) return e.getURI(); + if (this.multiple) { + const a = this.basename(e); + return this.counter[a] = this.counter[a] || 1, `${a}_${this.counter[a]++}.${t}` + } + return `${this.basename(e)}.${t}` + } + } + const { + BufferViewUsage: Ie + } = we, { + UNSIGNED_INT: Ne, + UNSIGNED_SHORT: ke, + UNSIGNED_BYTE: ve + } = J.ComponentType; + class Re { + static write(e, t) { + const a = e.getGraph(), + s = e.getRoot(), + r = { + asset: fe({ + generator: "glTF-Transform v4.0.1" + }, s.getAsset()), + extras: fe({}, s.getExtras()) + }, + n = { + json: r, + resources: {} + }, + b = new we(e, n, t), + d = t.logger || S.DEFAULT_INSTANCE, + u = new Set(t.extensions.map((e => e.EXTENSION_NAME))), + l = e.getRoot().listExtensionsUsed().filter((e => u.has(e.extensionName))).sort(((e, t) => e.extensionName > t.extensionName ? 1 : -1)), + g = e.getRoot().listExtensionsRequired().filter((e => u.has(e.extensionName))).sort(((e, t) => e.extensionName > t.extensionName ? 1 : -1)); + l.length < e.getRoot().listExtensionsUsed().length && d.warn("Some extensions were not registered for I/O, and will not be written."); + for (const e of l) + for (const a of e.writeDependencies) e.install(a, t.dependencies[a]); + + function p(e, t, a, s) { + const n = []; + let i = 0; + for (const t of e) { + const e = b.createAccessorDef(t); + e.bufferView = r.bufferViews.length; + const a = t.getArray(), + s = j.pad(j.toView(a)); + e.byteOffset = i, i += s.byteLength, n.push(s), b.accessorIndexMap.set(t, r.accessors.length), r.accessors.push(e) + } + const o = { + buffer: t, + byteOffset: a, + byteLength: j.concat(n).byteLength + }; + return s && (o.target = s), r.bufferViews.push(o), { + buffers: n, + byteLength: i + } + } + + function m(e, t, a) { + const s = e[0].getCount(); + let n = 0; + for (const t of e) { + const e = b.createAccessorDef(t); + e.bufferView = r.bufferViews.length, e.byteOffset = n; + const a = t.getElementSize(), + s = t.getComponentSize(); + n += j.padNumber(a * s), b.accessorIndexMap.set(t, r.accessors.length), r.accessors.push(e) + } + const i = s * n, + o = new ArrayBuffer(i), + c = new DataView(o); + for (let t = 0; t < s; t++) { + let a = 0; + for (const s of e) { + const e = s.getElementSize(), + r = s.getComponentSize(), + i = s.getComponentType(), + o = s.getArray(); + for (let s = 0; s < e; s++) { + const b = t * n + a + s * r, + d = o[t * e + s]; + switch (i) { + case J.ComponentType.FLOAT: + c.setFloat32(b, d, !0); + break; + case J.ComponentType.BYTE: + c.setInt8(b, d); + break; + case J.ComponentType.SHORT: + c.setInt16(b, d, !0); + break; + case J.ComponentType.UNSIGNED_BYTE: + c.setUint8(b, d); + break; + case J.ComponentType.UNSIGNED_SHORT: + c.setUint16(b, d, !0); + break; + case J.ComponentType.UNSIGNED_INT: + c.setUint32(b, d, !0); + break; + default: + throw new Error("Unexpected component type: " + i) + } + } + a += j.padNumber(e * r) + } + } + const d = { + buffer: t, + byteOffset: a, + byteLength: i, + byteStride: n, + target: we.BufferViewTarget.ARRAY_BUFFER + }; + return r.bufferViews.push(d), { + byteLength: i, + buffers: [new Uint8Array(o)] + } + } + + function y(e, t, a) { + const s = []; + let n = 0; + const i = new Map; + let o = -1 / 0, + c = !1; + for (const t of e) { + const e = b.createAccessorDef(t); + r.accessors.push(e), b.accessorIndexMap.set(t, r.accessors.length - 1); + const a = [], + s = [], + n = [], + d = new Array(t.getElementSize()).fill(0); + for (let e = 0, r = t.getCount(); e < r; e++) + if (t.getElement(e, n), !_.eq(n, d, 0)) { + o = Math.max(e, o), a.push(e); + for (let e = 0; e < n.length; e++) s.push(n[e]) + } const f = a.length, + u = { + accessorDef: e, + count: f + }; + if (i.set(t, u), 0 === f) continue; + f > t.getCount() / 2 && (c = !0); + const l = h[t.getComponentType()]; + u.indices = a, u.values = new l(s) + } + if (!Number.isFinite(o)) return { + buffers: s, + byteLength: n + }; + c && d.warn("Some sparse accessors have >50% non-zero elements, which may increase file size."); + const f = o < 255 ? Uint8Array : o < 65535 ? Uint16Array : Uint32Array, + u = o < 255 ? ve : o < 65535 ? ke : Ne, + l = { + buffer: t, + byteOffset: a + n, + byteLength: 0 + }; + for (const t of e) { + const e = i.get(t); + if (0 === e.count) continue; + e.indicesByteOffset = l.byteLength; + const a = j.pad(j.toView(new f(e.indices))); + s.push(a), n += a.byteLength, l.byteLength += a.byteLength + } + r.bufferViews.push(l); + const g = r.bufferViews.length - 1, + p = { + buffer: t, + byteOffset: a + n, + byteLength: 0 + }; + for (const t of e) { + const e = i.get(t); + if (0 === e.count) continue; + e.valuesByteOffset = p.byteLength; + const a = j.pad(j.toView(e.values)); + s.push(a), n += a.byteLength, p.byteLength += a.byteLength + } + r.bufferViews.push(p); + const m = r.bufferViews.length - 1; + for (const t of e) { + const e = i.get(t); + 0 !== e.count && (e.accessorDef.sparse = { + count: e.count, + indices: { + bufferView: g, + byteOffset: e.indicesByteOffset, + componentType: u + }, + values: { + bufferView: m, + byteOffset: e.valuesByteOffset + } + }) + } + return { + buffers: s, + byteLength: n + } + } + if (r.accessors = [], r.bufferViews = [], r.samplers = [], r.textures = [], r.images = s.listTextures().map(((e, t) => { + const a = b.createPropertyDef(e); + e.getMimeType() && (a.mimeType = e.getMimeType()); + const s = e.getImage(); + return s && b.createImageData(a, s, e), b.imageIndexMap.set(e, t), a + })), l.filter((e => e.prewriteTypes.includes(o.ACCESSOR))).forEach((e => e.prewrite(b, o.ACCESSOR))), s.listAccessors().forEach((e => { + const t = b.accessorUsageGroupedByParent, + s = b.accessorParents; + if (b.accessorIndexMap.has(e)) return; + const r = b.getAccessorUsage(e); + if (b.addAccessorToUsageGroup(e, r), t.has(r)) { + const t = a.listParents(e).find((e => e.propertyType !== o.ROOT)); + s.set(e, t) + } + })), l.filter((e => e.prewriteTypes.includes(o.BUFFER))).forEach((e => e.prewrite(b, o.BUFFER))), (s.listAccessors().length > 0 || s.listTextures().length > 0 || b.otherBufferViews.size > 0) && 0 === s.listBuffers().length) throw new Error("Buffer required for Document resources, but none was found."); + r.buffers = [], s.listBuffers().forEach(((e, a) => { + const s = b.createPropertyDef(e), + o = b.accessorUsageGroupedByParent, + d = e.listParents().filter((e => e instanceof J)), + h = new Set(d.map((e => b.accessorParents.get(e)))), + u = new Map(Array.from(h).map(((e, t) => [e, t]))), + l = {}; + for (const e of d) { + var g; + if (b.accessorIndexMap.has(e)) continue; + const t = b.getAccessorUsage(e); + let a = t; + if (o.has(t)) { + const t = b.accessorParents.get(e); + a += `:${u.get(t)}` + } + l[g = a] || (l[g] = { + usage: t, + accessors: [] + }), l[a].accessors.push(e) + } + const x = [], + T = r.buffers.length; + let E = 0; + for (const { + usage: e, + accessors: a + } + of Object.values(l)) + if (e === Ie.ARRAY_BUFFER && t.vertexLayout === c.INTERLEAVED) { + const e = m(a, T, E); + E += e.byteLength, x.push(...e.buffers) + } else if (e === Ie.ARRAY_BUFFER) + for (const e of a) { + const t = m([e], T, E); + E += t.byteLength, x.push(...t.buffers) + } else if (e === Ie.SPARSE) { + const e = y(a, T, E); + E += e.byteLength, x.push(...e.buffers) + } else if (e === Ie.ELEMENT_ARRAY_BUFFER) { + const e = p(a, T, E, we.BufferViewTarget.ELEMENT_ARRAY_BUFFER); + E += e.byteLength, x.push(...e.buffers) + } else { + const e = p(a, T, E); + E += e.byteLength, x.push(...e.buffers) + } + if (b.imageBufferViews.length && 0 === a) + for (let e = 0; e < b.imageBufferViews.length; e++) + if (r.bufferViews[r.images[e].bufferView].byteOffset = E, E += b.imageBufferViews[e].byteLength, x.push(b.imageBufferViews[e]), E % 8) { + const e = 8 - E % 8; + E += e, x.push(new Uint8Array(e)) + } if (b.otherBufferViews.has(e)) + for (const t of b.otherBufferViews.get(e)) r.bufferViews.push({ + buffer: T, + byteOffset: E, + byteLength: t.byteLength + }), b.otherBufferViewsIndexMap.set(t, r.bufferViews.length - 1), E += t.byteLength, x.push(t); + if (E) { + let a; + t.format === f.GLB ? a = i : (a = b.bufferURIGenerator.createURI(e, "bin"), s.uri = a), s.byteLength = E, n.resources[a] = j.concat(x) + } + r.buffers.push(s), b.bufferIndexMap.set(e, a) + })), s.listAccessors().find((e => !e.getBuffer())) && d.warn("Skipped writing one or more Accessors: no Buffer assigned."), l.filter((e => e.prewriteTypes.includes(o.MATERIAL))).forEach((e => e.prewrite(b, o.MATERIAL))), r.materials = s.listMaterials().map(((e, t) => { + const a = b.createPropertyDef(e); + if (e.getAlphaMode() !== ie.AlphaMode.OPAQUE && (a.alphaMode = e.getAlphaMode()), e.getAlphaMode() === ie.AlphaMode.MASK && (a.alphaCutoff = e.getAlphaCutoff()), e.getDoubleSided() && (a.doubleSided = !0), a.pbrMetallicRoughness = {}, _.eq(e.getBaseColorFactor(), [1, 1, 1, 1]) || (a.pbrMetallicRoughness.baseColorFactor = e.getBaseColorFactor()), _.eq(e.getEmissiveFactor(), [0, 0, 0]) || (a.emissiveFactor = e.getEmissiveFactor()), 1 !== e.getRoughnessFactor() && (a.pbrMetallicRoughness.roughnessFactor = e.getRoughnessFactor()), 1 !== e.getMetallicFactor() && (a.pbrMetallicRoughness.metallicFactor = e.getMetallicFactor()), e.getBaseColorTexture()) { + const t = e.getBaseColorTexture(), + s = e.getBaseColorTextureInfo(); + a.pbrMetallicRoughness.baseColorTexture = b.createTextureInfoDef(t, s) + } + if (e.getEmissiveTexture()) { + const t = e.getEmissiveTexture(), + s = e.getEmissiveTextureInfo(); + a.emissiveTexture = b.createTextureInfoDef(t, s) + } + if (e.getNormalTexture()) { + const t = e.getNormalTexture(), + s = e.getNormalTextureInfo(), + r = b.createTextureInfoDef(t, s); + 1 !== e.getNormalScale() && (r.scale = e.getNormalScale()), a.normalTexture = r + } + if (e.getOcclusionTexture()) { + const t = e.getOcclusionTexture(), + s = e.getOcclusionTextureInfo(), + r = b.createTextureInfoDef(t, s); + 1 !== e.getOcclusionStrength() && (r.strength = e.getOcclusionStrength()), a.occlusionTexture = r + } + if (e.getMetallicRoughnessTexture()) { + const t = e.getMetallicRoughnessTexture(), + s = e.getMetallicRoughnessTextureInfo(); + a.pbrMetallicRoughness.metallicRoughnessTexture = b.createTextureInfoDef(t, s) + } + return b.materialIndexMap.set(e, t), a + })), l.filter((e => e.prewriteTypes.includes(o.MESH))).forEach((e => e.prewrite(b, o.MESH))), r.meshes = s.listMeshes().map(((e, t) => { + const a = b.createPropertyDef(e); + let s = null; + return a.primitives = e.listPrimitives().map((e => { + const t = { + attributes: {} + }; + t.mode = e.getMode(); + const a = e.getMaterial(); + a && (t.material = b.materialIndexMap.get(a)), Object.keys(e.getExtras()).length && (t.extras = e.getExtras()); + const r = e.getIndices(); + r && (t.indices = b.accessorIndexMap.get(r)); + for (const a of e.listSemantics()) t.attributes[a] = b.accessorIndexMap.get(e.getAttribute(a)); + for (const a of e.listTargets()) { + const e = {}; + for (const t of a.listSemantics()) e[t] = b.accessorIndexMap.get(a.getAttribute(t)); + t.targets = t.targets || [], t.targets.push(e) + } + return e.listTargets().length && !s && (s = e.listTargets().map((e => e.getName()))), t + })), e.getWeights().length && (a.weights = e.getWeights()), s && (a.extras = a.extras || {}, a.extras.targetNames = s), b.meshIndexMap.set(e, t), a + })), r.cameras = s.listCameras().map(((e, t) => { + const a = b.createPropertyDef(e); + if (a.type = e.getType(), a.type === $.Type.PERSPECTIVE) { + a.perspective = { + znear: e.getZNear(), + zfar: e.getZFar(), + yfov: e.getYFov() + }; + const t = e.getAspectRatio(); + null !== t && (a.perspective.aspectRatio = t) + } else a.orthographic = { + znear: e.getZNear(), + zfar: e.getZFar(), + xmag: e.getXMag(), + ymag: e.getYMag() + }; + return b.cameraIndexMap.set(e, t), a + })), r.nodes = s.listNodes().map(((e, t) => { + const a = b.createPropertyDef(e); + return _.eq(e.getTranslation(), [0, 0, 0]) || (a.translation = e.getTranslation()), _.eq(e.getRotation(), [0, 0, 0, 1]) || (a.rotation = e.getRotation()), _.eq(e.getScale(), [1, 1, 1]) || (a.scale = e.getScale()), e.getWeights().length && (a.weights = e.getWeights()), b.nodeIndexMap.set(e, t), a + })), r.skins = s.listSkins().map(((e, t) => { + const a = b.createPropertyDef(e), + s = e.getInverseBindMatrices(); + s && (a.inverseBindMatrices = b.accessorIndexMap.get(s)); + const r = e.getSkeleton(); + return r && (a.skeleton = b.nodeIndexMap.get(r)), a.joints = e.listJoints().map((e => b.nodeIndexMap.get(e))), b.skinIndexMap.set(e, t), a + })), s.listNodes().forEach(((e, t) => { + const a = r.nodes[t], + s = e.getMesh(); + s && (a.mesh = b.meshIndexMap.get(s)); + const n = e.getCamera(); + n && (a.camera = b.cameraIndexMap.get(n)); + const i = e.getSkin(); + i && (a.skin = b.skinIndexMap.get(i)), e.listChildren().length > 0 && (a.children = e.listChildren().map((e => b.nodeIndexMap.get(e)))) + })), r.animations = s.listAnimations().map(((e, t) => { + const a = b.createPropertyDef(e), + s = new Map; + return a.samplers = e.listSamplers().map(((e, t) => { + const a = b.createPropertyDef(e); + return a.input = b.accessorIndexMap.get(e.getInput()), a.output = b.accessorIndexMap.get(e.getOutput()), a.interpolation = e.getInterpolation(), s.set(e, t), a + })), a.channels = e.listChannels().map((e => { + const t = b.createPropertyDef(e); + return t.sampler = s.get(e.getSampler()), t.target = { + node: b.nodeIndexMap.get(e.getTargetNode()), + path: e.getTargetPath() + }, t + })), b.animationIndexMap.set(e, t), a + })), r.scenes = s.listScenes().map(((e, t) => { + const a = b.createPropertyDef(e); + return a.nodes = e.listChildren().map((e => b.nodeIndexMap.get(e))), b.sceneIndexMap.set(e, t), a + })); + const x = s.getDefaultScene(); + return x && (r.scene = s.listScenes().indexOf(x)), r.extensionsUsed = l.map((e => e.extensionName)), r.extensionsRequired = g.map((e => e.extensionName)), l.forEach((e => e.write(b))), + function(e) { + const t = []; + for (const a in e) { + const s = e[a]; + (Array.isArray(s) && 0 === s.length || null === s || "" === s || s && "object" == typeof s && 0 === Object.keys(s).length) && t.push(a) + } + for (const a of t) delete e[a] + }(r), n + } + } + var Se; + ! function(e) { + e[e.JSON = 1313821514] = "JSON", e[e.BIN = 5130562] = "BIN" + }(Se || (Se = {})); + class Me { + constructor() { + this._logger = S.DEFAULT_INSTANCE, this._extensions = new Set, this._dependencies = {}, this._vertexLayout = c.INTERLEAVED, this.lastReadBytes = 0, this.lastWriteBytes = 0 + } + setLogger(e) { + return this._logger = e, this + } + registerExtensions(e) { + for (const t of e) this._extensions.add(t), t.register(); + return this + } + registerDependencies(e) { + return Object.assign(this._dependencies, e), this + } + setVertexLayout(e) { + return this._vertexLayout = e, this + } + async read(e) { + return await this.readJSON(await this.readAsJSON(e)) + } + async readAsJSON(e) { + const t = await this.readURI(e, "view"); + this.lastReadBytes = t.byteLength; + const a = _e(t) ? this._binaryToJSON(t) : { + json: JSON.parse(j.decodeText(t)), + resources: {} + }; + return await this._readResourcesExternal(a, this.dirname(e)), this._readResourcesInternal(a), a + } + async readJSON(e) { + return e = this._copyJSON(e), this._readResourcesInternal(e), Te.read(e, { + extensions: Array.from(this._extensions), + dependencies: this._dependencies, + logger: this._logger + }) + } + async binaryToJSON(e) { + const t = this._binaryToJSON(j.assertView(e)); + this._readResourcesInternal(t); + const a = t.json; + if (a.buffers && a.buffers.some((e => function(e, t) { + return void 0 !== t.uri && !(t.uri in e.resources) + }(t, e)))) throw new Error("Cannot resolve external buffers with binaryToJSON()."); + if (a.images && a.images.some((e => function(e, t) { + return void 0 !== t.uri && !(t.uri in e.resources) && void 0 === t.bufferView + }(t, e)))) throw new Error("Cannot resolve external images with binaryToJSON()."); + return t + } + async readBinary(e) { + return this.readJSON(await this.binaryToJSON(j.assertView(e))) + } + async writeJSON(e, t = {}) { + if (t.format === f.GLB && e.getRoot().listBuffers().length > 1) throw new Error("GLB must have 0–1 buffers."); + return Re.write(e, { + format: t.format || f.GLTF, + basename: t.basename || "", + logger: this._logger, + vertexLayout: this._vertexLayout, + dependencies: fe({}, this._dependencies), + extensions: Array.from(this._extensions) + }) + } + async writeBinary(e) { + const { + json: t, + resources: a + } = await this.writeJSON(e, { + format: f.GLB + }), s = new Uint32Array([1179937895, 2, 12]), r = JSON.stringify(t), n = j.pad(j.encodeText(r), 32), i = j.toView(new Uint32Array([n.byteLength, 1313821514])), o = j.concat([i, n]); + s[s.length - 1] += o.byteLength; + const c = Object.values(a)[0]; + if (!c || !c.byteLength) return j.concat([j.toView(s), o]); + const b = j.pad(c, 0), + d = j.toView(new Uint32Array([b.byteLength, 5130562])), + h = j.concat([d, b]); + return s[s.length - 1] += h.byteLength, j.concat([j.toView(s), o, h]) + } + async _readResourcesExternal(e, t) { + var a = this; + const s = [...e.json.images || [], ...e.json.buffers || []].map((async function(s) { + const r = s.uri; + if (!r || r.match(/data:/)) return Promise.resolve(); + e.resources[r] = await a.readURI(a.resolve(t, r), "view"), a.lastReadBytes += e.resources[r].byteLength + })); + await Promise.all(s) + } + _readResourcesInternal(e) { + function t(t) { + if (t.uri) + if (t.uri in e.resources) j.assertView(e.resources[t.uri]); + else if (t.uri.match(/data:/)) { + const a = `__${function(){for(let e=0;e<999;e++){const e=G();if(!B.has(e))return B.add(e),e}return""}()}.${k.extension(t.uri)}`; + e.resources[a] = j.createBufferFromDataURI(t.uri), t.uri = a + } + }(e.json.images || []).forEach((e => { + if (void 0 === e.bufferView && void 0 === e.uri) throw new Error("Missing resource URI or buffer view."); + t(e) + })), (e.json.buffers || []).forEach(t) + } + _copyJSON(e) { + const { + images: t, + buffers: a + } = e.json; + return e = { + json: fe({}, e.json), + resources: fe({}, e.resources) + }, t && (e.json.images = t.map((e => fe({}, e)))), a && (e.json.buffers = a.map((e => fe({}, e)))), e + } + _binaryToJSON(e) { + if (!_e(e)) throw new Error("Invalid glTF 2.0 binary."); + const t = new Uint32Array(e.buffer, e.byteOffset + 12, 2); + if (t[1] !== Se.JSON) throw new Error("Missing required GLB JSON chunk."); + const a = t[0], + s = j.decodeText(j.toView(e, 20, a)), + r = JSON.parse(s), + n = 20 + a; + if (e.byteLength <= n) return { + json: r, + resources: {} + }; + const o = new Uint32Array(e.buffer, e.byteOffset + n, 2); + if (o[1] !== Se.BIN) throw new Error("Expected GLB BIN in second chunk."); + const c = o[0], + b = j.toView(e, n + 8, c); + return { + json: r, + resources: { + [i]: b + } + } + } + } + + function _e(e) { + if (e.byteLength < 3 * Uint32Array.BYTES_PER_ELEMENT) return !1; + const t = new Uint32Array(e.buffer, e.byteOffset, 3); + return 1179937895 === t[0] && 2 === t[1] + } + class Ce extends Me { + constructor(e = null, t = V.DEFAULT_INIT) { + super(), this._fetch = void 0, this._fetchConfig = void 0, this._init = void 0, this._fetchEnabled = !1, this._fetch = e, this._fetchConfig = t, this._init = this.init() + } + async init() { + return this._init ? this._init : Promise.all([a.e(87).then(a.t.bind(a, 40087, 19)), a.e(7263).then(a.t.bind(a, 17263, 19))]).then((([e, t]) => { + this._fs = e.promises, this._path = t + })) + } + setAllowNetwork(e) { + if (e && !this._fetch) throw new Error("NodeIO requires a Fetch API implementation for HTTP requests."); + return this._fetchEnabled = e, this + } + async readURI(e, t) { + if (await this.init(), V.isAbsoluteURL(e)) { + if (!this._fetchEnabled || !this._fetch) throw new Error("Network request blocked. Allow HTTP requests explicitly, if needed."); + const a = await this._fetch(e, this._fetchConfig); + switch (t) { + case "view": + return new Uint8Array(await a.arrayBuffer()); + case "text": + return a.text() + } + } else switch (t) { + case "view": + return this._fs.readFile(e); + case "text": + return this._fs.readFile(e, "utf8") + } + } + resolve(e, t) { + return V.isAbsoluteURL(e) || V.isAbsoluteURL(t) ? V.resolve(e, t) : this._path.resolve(e, decodeURIComponent(t)) + } + dirname(e) { + return V.isAbsoluteURL(e) ? V.dirname(e) : this._path.dirname(e) + } + async write(e, t) { + await this.init(); + const a = !!e.match(/\.glb$/); + await (a ? this._writeGLB(e, t) : this._writeGLTF(e, t)) + } + async _writeGLTF(e, t) { + var a = this; + this.lastWriteBytes = 0; + const { + json: s, + resources: r + } = await this.writeJSON(t, { + format: f.GLTF, + basename: k.basename(e) + }), { + _fs: n, + _path: i + } = this, o = i.dirname(e), c = JSON.stringify(s, null, 2); + await n.writeFile(e, c), this.lastWriteBytes += c.length; + for (const e of function(e, t) { + const a = []; + for (let t = 0, s = e.length; t < s; t += 10) { + const r = []; + for (let a = 0; a < 10 && t + a < s; a++) r.push(e[t + a]); + a.push(r) + } + return a + }(Object.keys(r))) await Promise.all(e.map((async function(e) { + if (V.isAbsoluteURL(e)) { + if ("bin" === V.extension(e)) throw new Error(`Cannot write buffer to path "${e}".`); + return + } + const t = i.join(o, decodeURIComponent(e)); + await n.mkdir(i.dirname(t), { + recursive: !0 + }), await n.writeFile(t, r[e]), a.lastWriteBytes += r[e].byteLength + }))) + } + async _writeGLB(e, t) { + const a = r.from(await this.writeBinary(t)); + await this._fs.writeFile(e, a), this.lastWriteBytes = a.byteLength + } + } + }, + 84362: (e, t, a) => { + "use strict"; + a.d(t, { + Fb: () => C, + XD: () => Q, + t4: () => Z, + oh: () => ae, + r7: () => Te, + bO: () => Ae, + HN: () => Se, + X4: () => Fe, + SE: () => Qe, + S8: () => Ze, + Gq: () => st, + z4: () => dt, + V$: () => mt, + UW: () => At, + y1: () => vt, + oN: () => Mt, + vC: () => Ft, + Wh: () => Bt, + to: () => zt, + S3: () => Kt, + c7: () => Jt, + FC: () => $t + }); + var s = a(69584), + r = a(24987), + n = a(48764).Buffer; + class i { + constructor() { + this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ + vendorId: 0, + descriptorType: 0, + descriptorBlockSize: 0, + versionNumber: 2, + colorModel: 0, + colorPrimaries: 1, + transferFunction: 2, + flags: 0, + texelBlockDimension: [0, 0, 0, 0], + bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], + samples: [] + }], this.keyValue = {}, this.globalData = null + } + } + class o { + constructor(e, t, a, s) { + this._dataView = void 0, this._littleEndian = void 0, this._offset = void 0, this._dataView = new DataView(e.buffer, e.byteOffset + t, a), this._littleEndian = s, this._offset = 0 + } + _nextUint8() { + const e = this._dataView.getUint8(this._offset); + return this._offset += 1, e + } + _nextUint16() { + const e = this._dataView.getUint16(this._offset, this._littleEndian); + return this._offset += 2, e + } + _nextUint32() { + const e = this._dataView.getUint32(this._offset, this._littleEndian); + return this._offset += 4, e + } + _nextUint64() { + const e = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian); + return this._offset += 8, e + } + _nextInt32() { + const e = this._dataView.getInt32(this._offset, this._littleEndian); + return this._offset += 4, e + } + _nextUint8Array(e) { + const t = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, e); + return this._offset += e, t + } + _skip(e) { + return this._offset += e, this + } + _scan(e, t = 0) { + const a = this._offset; + let s = 0; + for (; this._dataView.getUint8(this._offset) !== t && s < e;) s++, this._offset++; + return s < e && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + a, s) + } + } + new Uint8Array([0]); + const c = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10]; + + function b(e) { + return "undefined" != typeof TextDecoder ? (new TextDecoder).decode(e) : n.from(e).toString("utf8") + } + + function d(e) { + const t = new Uint8Array(e.buffer, e.byteOffset, c.length); + if (t[0] !== c[0] || t[1] !== c[1] || t[2] !== c[2] || t[3] !== c[3] || t[4] !== c[4] || t[5] !== c[5] || t[6] !== c[6] || t[7] !== c[7] || t[8] !== c[8] || t[9] !== c[9] || t[10] !== c[10] || t[11] !== c[11]) throw new Error("Missing KTX 2.0 identifier."); + const a = new i, + s = 17 * Uint32Array.BYTES_PER_ELEMENT, + r = new o(e, c.length, s, !0); + a.vkFormat = r._nextUint32(), a.typeSize = r._nextUint32(), a.pixelWidth = r._nextUint32(), a.pixelHeight = r._nextUint32(), a.pixelDepth = r._nextUint32(), a.layerCount = r._nextUint32(), a.faceCount = r._nextUint32(); + const n = r._nextUint32(); + a.supercompressionScheme = r._nextUint32(); + const d = r._nextUint32(), + f = r._nextUint32(), + h = r._nextUint32(), + u = r._nextUint32(), + l = r._nextUint64(), + g = r._nextUint64(), + p = new o(e, c.length + s, 3 * n * 8, !0); + for (let t = 0; t < n; t++) a.levels.push({ + levelData: new Uint8Array(e.buffer, e.byteOffset + p._nextUint64(), p._nextUint64()), + uncompressedByteLength: p._nextUint64() + }); + const m = new o(e, d, f, !0), + y = { + vendorId: m._skip(4)._nextUint16(), + descriptorType: m._nextUint16(), + versionNumber: m._nextUint16(), + descriptorBlockSize: m._nextUint16(), + colorModel: m._nextUint8(), + colorPrimaries: m._nextUint8(), + transferFunction: m._nextUint8(), + flags: m._nextUint8(), + texelBlockDimension: [m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8()], + bytesPlane: [m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8()], + samples: [] + }, + x = (y.descriptorBlockSize / 4 - 6) / 4; + for (let e = 0; e < x; e++) { + const t = { + bitOffset: m._nextUint16(), + bitLength: m._nextUint8(), + channelType: m._nextUint8(), + samplePosition: [m._nextUint8(), m._nextUint8(), m._nextUint8(), m._nextUint8()], + sampleLower: -1 / 0, + sampleUpper: 1 / 0 + }; + 64 & t.channelType ? (t.sampleLower = m._nextInt32(), t.sampleUpper = m._nextInt32()) : (t.sampleLower = m._nextUint32(), t.sampleUpper = m._nextUint32()), y.samples[e] = t + } + a.dataFormatDescriptor.length = 0, a.dataFormatDescriptor.push(y); + const T = new o(e, h, u, !0); + for (; T._offset < u;) { + const e = T._nextUint32(), + t = T._scan(e), + s = b(t); + if (a.keyValue[s] = T._nextUint8Array(e - t.byteLength - 1), s.match(/^ktx/i)) { + const e = b(a.keyValue[s]); + a.keyValue[s] = e.substring(0, e.lastIndexOf("\0")) + } + const r = e % 4 ? 4 - e % 4 : 0; + T._skip(r) + } + if (g <= 0) return a; + const E = new o(e, l, g, !0), + j = E._nextUint16(), + w = E._nextUint16(), + A = E._nextUint32(), + I = E._nextUint32(), + N = E._nextUint32(), + k = E._nextUint32(), + v = []; + for (let e = 0; e < n; e++) v.push({ + imageFlags: E._nextUint32(), + rgbSliceByteOffset: E._nextUint32(), + rgbSliceByteLength: E._nextUint32(), + alphaSliceByteOffset: E._nextUint32(), + alphaSliceByteLength: E._nextUint32() + }); + const R = l + E._offset, + S = R + A, + M = S + I, + _ = M + N, + C = new Uint8Array(e.buffer, e.byteOffset + R, A), + D = new Uint8Array(e.buffer, e.byteOffset + S, I), + O = new Uint8Array(e.buffer, e.byteOffset + M, N), + F = new Uint8Array(e.buffer, e.byteOffset + _, k); + return a.globalData = { + endpointCount: j, + selectorCount: w, + imageDescs: v, + endpointsData: C, + selectorsData: D, + tablesData: O, + extendedData: F + }, a + } + const f = "EXT_mesh_gpu_instancing", + h = "KHR_draco_mesh_compression", + u = "KHR_lights_punctual", + l = "KHR_materials_anisotropy", + g = "KHR_materials_clearcoat", + p = "KHR_materials_diffuse_transmission", + m = "KHR_materials_dispersion", + y = "KHR_materials_emissive_strength", + x = "KHR_materials_ior", + T = "KHR_materials_iridescence", + E = "KHR_materials_pbrSpecularGlossiness", + j = "KHR_materials_sheen", + w = "KHR_materials_specular", + A = "KHR_materials_transmission", + I = "KHR_materials_unlit", + N = "KHR_materials_volume", + k = "KHR_materials_variants", + v = "KHR_texture_transform", + R = "KHR_xmp_json_ld", + S = "INSTANCE_ATTRIBUTE"; + class M extends s.eY { + init() { + this.extensionName = f, this.propertyType = "InstancedMesh", this.parentTypes = [s.uS.NODE] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + attributes: new r.lA + }) + } + getAttribute(e) { + return this.getRefMap("attributes", e) + } + setAttribute(e, t) { + return this.setRefMap("attributes", e, t, { + usage: S + }) + } + listAttributes() { + return this.listRefMapValues("attributes") + } + listSemantics() { + return this.listRefMapKeys("attributes") + } + } + M.EXTENSION_NAME = f; + const _ = f; + class C extends s.hj { + constructor(...e) { + super(...e), this.extensionName = _, this.provideTypes = [s.uS.NODE], this.prewriteTypes = [s.uS.ACCESSOR] + } + createInstancedMesh() { + return new M(this.document.getGraph()) + } + read(e) { + return (e.jsonDoc.json.nodes || []).forEach(((t, a) => { + if (!t.extensions || !t.extensions[_]) return; + const s = t.extensions[_], + r = this.createInstancedMesh(); + for (const t in s.attributes) r.setAttribute(t, e.accessors[s.attributes[t]]); + e.nodes[a].setExtension(_, r) + })), this + } + prewrite(e) { + e.accessorUsageGroupedByParent.add(S); + for (const t of this.properties) + for (const a of t.listAttributes()) e.addAccessorToUsageGroup(a, S); + return this + } + write(e) { + const t = e.jsonDoc; + return this.document.getRoot().listNodes().forEach((a => { + const s = a.getExtension(_); + if (s) { + const r = e.nodeIndexMap.get(a), + n = t.json.nodes[r], + i = { + attributes: {} + }; + s.listSemantics().forEach((t => { + const a = s.getAttribute(t); + i.attributes[t] = e.accessorIndexMap.get(a) + })), n.extensions = n.extensions || {}, n.extensions[_] = i + } + })), this + } + } + + function D() { + return D = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var a = arguments[t]; + for (var s in a) Object.prototype.hasOwnProperty.call(a, s) && (e[s] = a[s]) + } + return e + }, D.apply(this, arguments) + } + var O, F, U; + C.EXTENSION_NAME = _, + function(e) { + e.QUANTIZE = "quantize", e.FILTER = "filter" + }(O || (O = {})), + function(e) { + e.ATTRIBUTES = "ATTRIBUTES", e.TRIANGLES = "TRIANGLES", e.INDICES = "INDICES" + }(F || (F = {})), + function(e) { + e.NONE = "NONE", e.OCTAHEDRAL = "OCTAHEDRAL", e.QUATERNION = "QUATERNION", e.EXPONENTIAL = "EXPONENTIAL" + }(U || (U = {})); + const { + BYTE: P, + SHORT: L, + FLOAT: B + } = s.U_.ComponentType, { + encodeNormalizedInt: G, + decodeNormalizedInt: z + } = s.M8; + + function V(e, t, a, r) { + const { + filter: n, + bits: i + } = r, o = { + array: e.getArray(), + byteStride: e.getElementSize() * e.getComponentSize(), + componentType: e.getComponentType(), + normalized: e.getNormalized() + }; + if (a !== F.ATTRIBUTES) return o; + if (n !== U.NONE) { + let a = e.getNormalized() ? function(e) { + const t = e.getComponentType(), + a = e.getArray(), + s = new Float32Array(a.length); + for (let e = 0; e < a.length; e++) s[e] = z(a[e], t); + return s + }(e) : new Float32Array(o.array); + switch (n) { + case U.EXPONENTIAL: + o.byteStride = 4 * e.getElementSize(), o.componentType = B, o.normalized = !1, o.array = t.encodeFilterExp(a, e.getCount(), o.byteStride, i); + break; + case U.OCTAHEDRAL: + o.byteStride = i > 8 ? 8 : 4, o.componentType = i > 8 ? L : P, o.normalized = !0, a = 3 === e.getElementSize() ? function(e) { + const t = new Float32Array(4 * e.length / 3); + for (let a = 0, s = e.length / 3; a < s; a++) t[4 * a] = e[3 * a], t[4 * a + 1] = e[3 * a + 1], t[4 * a + 2] = e[3 * a + 2]; + return t + }(a) : a, o.array = t.encodeFilterOct(a, e.getCount(), o.byteStride, i); + break; + case U.QUATERNION: + o.byteStride = 8, o.componentType = L, o.normalized = !0, o.array = t.encodeFilterQuat(a, e.getCount(), o.byteStride, i); + break; + default: + throw new Error("Invalid filter.") + } + o.min = e.getMin([]), o.max = e.getMax([]), e.getNormalized() && (o.min = o.min.map((t => z(t, e.getComponentType()))), o.max = o.max.map((t => z(t, e.getComponentType())))), o.normalized && (o.min = o.min.map((e => G(e, o.componentType))), o.max = o.max.map((e => G(e, o.componentType)))) + } else o.byteStride % 4 && (o.array = function(e, t) { + const a = s.oY.padNumber(e.BYTES_PER_ELEMENT * t) / e.BYTES_PER_ELEMENT, + r = e.length / t, + n = new e.constructor(r * a); + for (let s = 0; s * t < e.length; s++) + for (let r = 0; r < t; r++) n[s * a + r] = e[s * t + r]; + return n + }(o.array, e.getElementSize()), o.byteStride = o.array.byteLength / e.getCount()); + return o + } + + function q(e, t) { + return t === s.qi.BufferViewUsage.ELEMENT_ARRAY_BUFFER ? e.listParents().some((e => e instanceof s.WV && e.getMode() === s.WV.Mode.TRIANGLES)) ? F.TRIANGLES : F.INDICES : F.ATTRIBUTES + } + + function K(e, t) { + const a = t.getGraph().listParentEdges(e).filter((e => !(e.getParent() instanceof s.fC))); + for (const t of a) { + const a = t.getName(), + r = t.getAttributes().key || "", + n = t.getParent().propertyType === s.uS.PRIMITIVE_TARGET; + if ("indices" === a) return { + filter: U.NONE + }; + if ("attributes" === a) { + if ("POSITION" === r) return { + filter: U.NONE + }; + if ("TEXCOORD_0" === r) return { + filter: U.NONE + }; + if (r.startsWith("JOINTS_")) return { + filter: U.NONE + }; + if (r.startsWith("WEIGHTS_")) return { + filter: U.NONE + }; + if ("NORMAL" === r || "TANGENT" === r) return n ? { + filter: U.NONE + } : { + filter: U.OCTAHEDRAL, + bits: 8 + } + } + if ("output" === a) { + const t = H(e); + return "rotation" === t ? { + filter: U.QUATERNION, + bits: 16 + } : "translation" === t || "scale" === t ? { + filter: U.EXPONENTIAL, + bits: 12 + } : { + filter: U.NONE + } + } + if ("input" === a) return { + filter: U.NONE + }; + if ("inverseBindMatrices" === a) return { + filter: U.NONE + } + } + return { + filter: U.NONE + } + } + + function H(e) { + for (const t of e.listParents()) + if (t instanceof s.BD) + for (const e of t.listParents()) + if (e instanceof s.Zt) return e.getTargetPath(); + return null + } + const W = "EXT_meshopt_compression", + J = { + method: O.QUANTIZE + }; + class Q extends s.hj { + constructor(...e) { + super(...e), this.extensionName = W, this.prereadTypes = [s.uS.BUFFER, s.uS.PRIMITIVE], this.prewriteTypes = [s.uS.BUFFER, s.uS.ACCESSOR], this.readDependencies = ["meshopt.decoder"], this.writeDependencies = ["meshopt.encoder"], this._decoder = null, this._decoderFallbackBufferMap = new Map, this._encoder = null, this._encoderOptions = J, this._encoderFallbackBuffer = null, this._encoderBufferViews = {}, this._encoderBufferViewData = {}, this._encoderBufferViewAccessors = {} + } + install(e, t) { + return "meshopt.decoder" === e && (this._decoder = t), "meshopt.encoder" === e && (this._encoder = t), this + } + setEncoderOptions(e) { + return this._encoderOptions = D({}, J, e), this + } + preread(e, t) { + if (!this._decoder) { + if (!this.isRequired()) return this; + throw new Error(`[${W}] Please install extension dependency, "meshopt.decoder".`) + } + if (!this._decoder.supported) { + if (!this.isRequired()) return this; + throw new Error(`[${W}]: Missing WASM support.`) + } + return t === s.uS.BUFFER ? this._prereadBuffers(e) : t === s.uS.PRIMITIVE && this._prereadPrimitives(e), this + } + _prereadBuffers(e) { + const t = e.jsonDoc; + (t.json.bufferViews || []).forEach(((a, r) => { + if (!a.extensions || !a.extensions[W]) return; + const n = a.extensions[W], + i = n.byteOffset || 0, + o = n.byteLength || 0, + c = n.count, + b = n.byteStride, + d = new Uint8Array(c * b), + f = t.json.buffers[n.buffer], + h = f.uri ? t.resources[f.uri] : t.resources[s.aw], + u = s.oY.toView(h, i, o); + this._decoder.decodeGltfBuffer(d, c, b, u, n.mode, n.filter), e.bufferViews[r] = d + })) + } + _prereadPrimitives(e) { + const t = e.jsonDoc; + (t.json.bufferViews || []).forEach((a => { + if (!a.extensions || !a.extensions[W]) return; + const s = a.extensions[W], + r = e.buffers[s.buffer], + n = e.buffers[a.buffer]; + var i; + (i = t.json.buffers[a.buffer]).extensions && i.extensions.EXT_meshopt_compression && i.extensions.EXT_meshopt_compression.fallback && this._decoderFallbackBufferMap.set(n, r) + })) + } + read(e) { + if (!this.isRequired()) return this; + for (const [e, t] of this._decoderFallbackBufferMap) { + for (const a of e.listParents()) a instanceof s.U_ && a.swap(e, t); + e.dispose() + } + return this + } + prewrite(e, t) { + return t === s.uS.ACCESSOR ? this._prewriteAccessors(e) : t === s.uS.BUFFER && this._prewriteBuffers(e), this + } + _prewriteAccessors(e) { + const t = e.jsonDoc.json, + a = this._encoder, + r = this._encoderOptions, + n = this.document.getGraph(), + i = this.document.createBuffer(), + o = this.document.getRoot().listBuffers().indexOf(i); + let c = 1; + const b = new Map, + d = e => { + for (const t of n.listParents(e)) { + if (t.propertyType === s.uS.ROOT) continue; + let a = b.get(e); + return void 0 === a && b.set(e, a = c++), a + } + return -1 + }; + this._encoderFallbackBuffer = i, this._encoderBufferViews = {}, this._encoderBufferViewData = {}, this._encoderBufferViewAccessors = {}; + for (const n of this.document.getRoot().listAccessors()) { + if ("weights" === H(n)) continue; + if (n.getSparse()) continue; + const i = e.getAccessorUsage(n), + c = e.accessorUsageGroupedByParent.has(i) ? d(n) : null, + b = q(n, i), + f = r.method === O.FILTER ? K(n, this.document) : { + filter: U.NONE + }, + h = V(n, a, b, f), + { + array: u, + byteStride: l + } = h, + g = n.getBuffer(); + if (!g) throw new Error(`${W}: Missing buffer for accessor.`); + const p = this.document.getRoot().listBuffers().indexOf(g), + m = [i, c, b, f.filter, l, p].join(":"); + let y = this._encoderBufferViews[m], + x = this._encoderBufferViewData[m], + T = this._encoderBufferViewAccessors[m]; + y && x || (T = this._encoderBufferViewAccessors[m] = [], x = this._encoderBufferViewData[m] = [], y = this._encoderBufferViews[m] = { + buffer: o, + target: s.qi.USAGE_TO_TARGET[i], + byteOffset: 0, + byteLength: 0, + byteStride: i === s.qi.BufferViewUsage.ARRAY_BUFFER ? l : void 0, + extensions: { + [W]: { + buffer: p, + byteOffset: 0, + byteLength: 0, + mode: b, + filter: f.filter !== U.NONE ? f.filter : void 0, + byteStride: l, + count: 0 + } + } + }); + const E = e.createAccessorDef(n); + E.componentType = h.componentType, E.normalized = h.normalized, E.byteOffset = y.byteLength, E.min && h.min && (E.min = h.min), E.max && h.max && (E.max = h.max), e.accessorIndexMap.set(n, t.accessors.length), t.accessors.push(E), T.push(E), x.push(new Uint8Array(u.buffer, u.byteOffset, u.byteLength)), y.byteLength += u.byteLength, y.extensions.EXT_meshopt_compression.count += n.getCount() + } + } + _prewriteBuffers(e) { + const t = this._encoder; + for (const a in this._encoderBufferViews) { + const r = this._encoderBufferViews[a], + n = this._encoderBufferViewData[a], + i = this.document.getRoot().listBuffers()[r.extensions[W].buffer], + o = e.otherBufferViews.get(i) || [], + { + count: c, + byteStride: b, + mode: d + } = r.extensions[W], + f = s.oY.concat(n), + h = t.encodeGltfBuffer(f, c, b, d), + u = s.oY.pad(h); + r.extensions[W].byteLength = h.byteLength, n.length = 0, n.push(u), o.push(u), e.otherBufferViews.set(i, o) + } + } + write(e) { + let t = 0; + for (const a in this._encoderBufferViews) { + const r = this._encoderBufferViews[a], + n = this._encoderBufferViewData[a][0], + i = e.otherBufferViewsIndexMap.get(n), + o = this._encoderBufferViewAccessors[a]; + for (const e of o) e.bufferView = i; + const c = e.jsonDoc.json.bufferViews[i], + b = c.byteOffset || 0; + Object.assign(c, r), c.byteOffset = t, c.extensions[W].byteOffset = b, t += s.oY.padNumber(r.byteLength) + } + const a = this._encoderFallbackBuffer, + r = e.bufferIndexMap.get(a), + n = e.jsonDoc.json.buffers[r]; + return n.byteLength = t, n.extensions = { + [W]: { + fallback: !0 + } + }, a.dispose(), this + } + } + Q.EXTENSION_NAME = W, Q.EncoderMethod = O; + const Y = "EXT_texture_avif"; + class X { + match(e) { + return e.length >= 12 && "ftypavif" === s.oY.decodeText(e.slice(4, 12)) + } + getSize(e) { + if (!this.match(e)) return null; + const t = new DataView(e.buffer, e.byteOffset, e.byteLength); + let a = $(t, 0); + if (!a) return null; + let s = a.end; + for (; a = $(t, s);) + if ("meta" === a.type) s = a.start + 4; + else if ("iprp" === a.type || "ipco" === a.type) s = a.start; + else { + if ("ispe" === a.type) return [t.getUint32(a.start + 4), t.getUint32(a.start + 8)]; + if ("mdat" === a.type) break; + s = a.end + } + return null + } + getChannels(e) { + return 4 + } + } + class Z extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Y, this.prereadTypes = [s.uS.TEXTURE] + } + static register() { + s.Pp.registerFormat("image/avif", new X) + } + preread(e) { + return (e.jsonDoc.json.textures || []).forEach((e => { + e.extensions && e.extensions[Y] && (e.source = e.extensions[Y].source) + })), this + } + read(e) { + return this + } + write(e) { + const t = e.jsonDoc; + return this.document.getRoot().listTextures().forEach((a => { + if ("image/avif" === a.getMimeType()) { + const s = e.imageIndexMap.get(a); + (t.json.textures || []).forEach((e => { + e.source === s && (e.extensions = e.extensions || {}, e.extensions[Y] = { + source: e.source + }, delete e.source) + })) + } + })), this + } + } + + function $(e, t) { + if (e.byteLength < 4 + t) return null; + const a = e.getUint32(t); + return e.byteLength < a + t || a < 8 ? null : { + type: s.oY.decodeText(new Uint8Array(e.buffer, e.byteOffset + t + 4, 4)), + start: t + 8, + end: t + a + } + } + Z.EXTENSION_NAME = Y; + const ee = "EXT_texture_webp"; + class te { + match(e) { + return e.length >= 12 && 87 === e[8] && 69 === e[9] && 66 === e[10] && 80 === e[11] + } + getSize(e) { + const t = s.oY.decodeText(e.slice(0, 4)), + a = s.oY.decodeText(e.slice(8, 12)); + if ("RIFF" !== t || "WEBP" !== a) return null; + const r = new DataView(e.buffer, e.byteOffset); + let n = 12; + for (; n < r.byteLength;) { + const e = s.oY.decodeText(new Uint8Array([r.getUint8(n), r.getUint8(n + 1), r.getUint8(n + 2), r.getUint8(n + 3)])), + t = r.getUint32(n + 4, !0); + if ("VP8 " === e) return [16383 & r.getInt16(n + 14, !0), 16383 & r.getInt16(n + 16, !0)]; + if ("VP8L" === e) { + const e = r.getUint8(n + 9), + t = r.getUint8(n + 10), + a = r.getUint8(n + 11); + return [1 + ((63 & t) << 8 | e), 1 + ((15 & r.getUint8(n + 12)) << 10 | a << 2 | (192 & t) >> 6)] + } + n += 8 + t + t % 2 + } + return null + } + getChannels(e) { + return 4 + } + } + class ae extends s.hj { + constructor(...e) { + super(...e), this.extensionName = ee, this.prereadTypes = [s.uS.TEXTURE] + } + static register() { + s.Pp.registerFormat("image/webp", new te) + } + preread(e) { + return (e.jsonDoc.json.textures || []).forEach((e => { + e.extensions && e.extensions[ee] && (e.source = e.extensions[ee].source) + })), this + } + read(e) { + return this + } + write(e) { + const t = e.jsonDoc; + return this.document.getRoot().listTextures().forEach((a => { + if ("image/webp" === a.getMimeType()) { + const s = e.imageIndexMap.get(a); + (t.json.textures || []).forEach((e => { + e.source === s && (e.extensions = e.extensions || {}, e.extensions[ee] = { + source: e.source + }, delete e.source) + })) + } + })), this + } + } + ae.EXTENSION_NAME = ee; + const se = h; + let re, ne, ie, oe; + + function ce(e, t) { + const a = new re.DecoderBuffer; + try { + if (a.Init(t, t.length), e.GetEncodedGeometryType(a) !== re.TRIANGULAR_MESH) throw new Error(`[${se}] Unknown geometry type.`); + const s = new re.Mesh; + if (!e.DecodeBufferToMesh(a, s).ok() || 0 === s.ptr) throw new Error(`[${se}] Decoding failure.`); + return s + } finally { + re.destroy(a) + } + } + + function be(e, t) { + const a = 3 * t.num_faces(); + let s, r; + if (t.num_points() <= 65534) { + const n = a * Uint16Array.BYTES_PER_ELEMENT; + s = re._malloc(n), e.GetTrianglesUInt16Array(t, n, s), r = new Uint16Array(re.HEAPU16.buffer, s, a).slice() + } else { + const n = a * Uint32Array.BYTES_PER_ELEMENT; + s = re._malloc(n), e.GetTrianglesUInt32Array(t, n, s), r = new Uint32Array(re.HEAPU32.buffer, s, a).slice() + } + return re._free(s), r + } + + function de(e, t, a, s) { + const r = ie[s.componentType], + n = ne[s.componentType], + i = a.num_components(), + o = t.num_points() * i, + c = o * n.BYTES_PER_ELEMENT, + b = re._malloc(c); + e.GetAttributeDataArrayForAllPoints(t, a, r, c, b); + const d = new n(re.HEAPF32.buffer, b, o).slice(); + return re._free(b), d + } + var fe, he; + ! function(e) { + e[e.EDGEBREAKER = 1] = "EDGEBREAKER", e[e.SEQUENTIAL = 0] = "SEQUENTIAL" + }(fe || (fe = {})), + function(e) { + e.POSITION = "POSITION", e.NORMAL = "NORMAL", e.COLOR = "COLOR", e.TEX_COORD = "TEX_COORD", e.GENERIC = "GENERIC" + }(he || (he = {})); + const ue = { + [he.POSITION]: 14, + [he.NORMAL]: 10, + [he.COLOR]: 8, + [he.TEX_COORD]: 12, + [he.GENERIC]: 12 + }, + le = { + decodeSpeed: 5, + encodeSpeed: 5, + method: fe.EDGEBREAKER, + quantizationBits: ue, + quantizationVolume: "mesh" + }; + + function ge(e, t = le) { + const a = D({}, le, t); + a.quantizationBits = D({}, ue, t.quantizationBits); + const s = new oe.MeshBuilder, + r = new oe.Mesh, + n = new oe.ExpertEncoder(r), + i = {}, + o = new oe.DracoInt8Array, + c = e.listTargets().length > 0; + let b = !1; + for (const t of e.listSemantics()) { + const o = e.getAttribute(t); + if (o.getSparse()) { + b = !0; + continue + } + const c = pe(t), + d = me(s, o.getComponentType(), r, oe[c], o.getCount(), o.getElementSize(), o.getArray()); + if (-1 === d) throw new Error(`Error compressing "${t}" attribute.`); + if (i[t] = d, "mesh" === a.quantizationVolume || "POSITION" !== t) n.SetAttributeQuantization(d, a.quantizationBits[c]); + else { + if ("object" != typeof a.quantizationVolume) throw new Error("Invalid quantization volume state."); + { + const { + quantizationVolume: e + } = a, t = Math.max(e.max[0] - e.min[0], e.max[1] - e.min[1], e.max[2] - e.min[2]); + n.SetAttributeExplicitQuantization(d, a.quantizationBits[c], o.getElementSize(), e.min, t) + } + } + } + const d = e.getIndices(); + if (!d) throw new ye("Primitive must have indices."); + s.AddFacesToMesh(r, d.getCount() / 3, d.getArray()), n.SetSpeedOptions(a.encodeSpeed, a.decodeSpeed), n.SetTrackEncodedProperties(!0), a.method === fe.SEQUENTIAL || c || b ? n.SetEncodingMethod(oe.MESH_SEQUENTIAL_ENCODING) : n.SetEncodingMethod(oe.MESH_EDGEBREAKER_ENCODING); + const f = n.EncodeToDracoBuffer(!(c || b), o); + if (f <= 0) throw new ye("Error applying Draco compression."); + const h = new Uint8Array(f); + for (let e = 0; e < f; ++e) h[e] = o.GetValue(e); + const u = n.GetNumberOfEncodedPoints(), + l = 3 * n.GetNumberOfEncodedFaces(); + return oe.destroy(o), oe.destroy(r), oe.destroy(s), oe.destroy(n), { + numVertices: u, + numIndices: l, + data: h, + attributeIDs: i + } + } + + function pe(e) { + return "POSITION" === e ? he.POSITION : "NORMAL" === e ? he.NORMAL : e.startsWith("COLOR_") ? he.COLOR : e.startsWith("TEXCOORD_") ? he.TEX_COORD : he.GENERIC + } + + function me(e, t, a, r, n, i, o) { + switch (t) { + case s.U_.ComponentType.UNSIGNED_BYTE: + return e.AddUInt8Attribute(a, r, n, i, o); + case s.U_.ComponentType.BYTE: + return e.AddInt8Attribute(a, r, n, i, o); + case s.U_.ComponentType.UNSIGNED_SHORT: + return e.AddUInt16Attribute(a, r, n, i, o); + case s.U_.ComponentType.SHORT: + return e.AddInt16Attribute(a, r, n, i, o); + case s.U_.ComponentType.UNSIGNED_INT: + return e.AddUInt32Attribute(a, r, n, i, o); + case s.U_.ComponentType.FLOAT: + return e.AddFloatAttribute(a, r, n, i, o); + default: + throw new Error(`Unexpected component type, "${t}".`) + } + } + class ye extends Error {} + const xe = h; + class Te extends s.hj { + constructor(...e) { + super(...e), this.extensionName = xe, this.prereadTypes = [s.uS.PRIMITIVE], this.prewriteTypes = [s.uS.ACCESSOR], this.readDependencies = ["draco3d.decoder"], this.writeDependencies = ["draco3d.encoder"], this._decoderModule = null, this._encoderModule = null, this._encoderOptions = {} + } + install(e, t) { + var a, r; + return "draco3d.decoder" === e && (this._decoderModule = t, a = this._decoderModule, re = a, ne = { + [s.U_.ComponentType.FLOAT]: Float32Array, + [s.U_.ComponentType.UNSIGNED_INT]: Uint32Array, + [s.U_.ComponentType.UNSIGNED_SHORT]: Uint16Array, + [s.U_.ComponentType.UNSIGNED_BYTE]: Uint8Array, + [s.U_.ComponentType.SHORT]: Int16Array, + [s.U_.ComponentType.BYTE]: Int8Array + }, ie = { + [s.U_.ComponentType.FLOAT]: re.DT_FLOAT32, + [s.U_.ComponentType.UNSIGNED_INT]: re.DT_UINT32, + [s.U_.ComponentType.UNSIGNED_SHORT]: re.DT_UINT16, + [s.U_.ComponentType.UNSIGNED_BYTE]: re.DT_UINT8, + [s.U_.ComponentType.SHORT]: re.DT_INT16, + [s.U_.ComponentType.BYTE]: re.DT_INT8 + }), "draco3d.encoder" === e && (this._encoderModule = t, r = this._encoderModule, oe = r), this + } + setEncoderOptions(e) { + return this._encoderOptions = e, this + } + preread(e) { + if (!this._decoderModule) throw new Error(`[${xe}] Please install extension dependency, "draco3d.decoder".`); + const t = this.document.getLogger(), + a = e.jsonDoc, + r = new Map; + try { + const n = a.json.meshes || []; + for (const i of n) + for (const n of i.primitives) { + if (!n.extensions || !n.extensions[xe]) continue; + const i = n.extensions[xe]; + let [o, c] = r.get(i.bufferView) || []; + if (!c || !o) { + const e = a.json.bufferViews[i.bufferView], + n = a.json.buffers[e.buffer], + b = n.uri ? a.resources[n.uri] : a.resources[s.aw], + d = e.byteOffset || 0, + f = e.byteLength, + h = s.oY.toView(b, d, f); + o = new this._decoderModule.Decoder, c = ce(o, h), r.set(i.bufferView, [o, c]), t.debug(`[${xe}] Decompressed ${h.byteLength} bytes.`) + } + for (const t in n.attributes) { + const a = e.jsonDoc.json.accessors[n.attributes[t]], + s = o.GetAttributeByUniqueId(c, i.attributes[t]), + r = de(o, c, s, a); + e.accessors[n.attributes[t]].setArray(r) + } + void 0 !== n.indices && e.accessors[n.indices].setArray(be(o, c)) + } + } finally { + for (const [e, t] of Array.from(r.values())) this._decoderModule.destroy(e), this._decoderModule.destroy(t) + } + return this + } + read(e) { + return this + } + prewrite(e, t) { + if (!this._encoderModule) throw new Error(`[${xe}] Please install extension dependency, "draco3d.encoder".`); + const a = this.document.getLogger(); + a.debug(`[${xe}] Compression options: ${JSON.stringify(this._encoderOptions)}`); + const r = function(e) { + const t = e.getLogger(), + a = new Set, + r = new Set; + let n = 0, + i = 0; + for (const t of e.getRoot().listMeshes()) + for (const e of t.listPrimitives()) e.getIndices() ? e.getMode() !== s.WV.Mode.TRIANGLES ? (r.add(e), i++) : a.add(e) : (r.add(e), n++); + n > 0 && t.warn(`[${xe}] Skipping Draco compression of ${n} non-indexed primitives.`), i > 0 && t.warn(`[${xe}] Skipping Draco compression of ${i} non-TRIANGLES primitives.`); + const o = e.getRoot().listAccessors(), + c = new Map; + for (let e = 0; e < o.length; e++) c.set(o[e], e); + const b = new Map, + d = new Set, + f = new Map; + for (const t of Array.from(a)) { + let a = Ee(t, c); + if (d.has(a)) f.set(t, a); + else { + if (b.has(t.getIndices())) { + const a = t.getIndices(), + s = a.clone(); + c.set(s, e.getRoot().listAccessors().length - 1), t.swap(a, s) + } + for (const a of t.listAttributes()) + if (b.has(a)) { + const s = a.clone(); + c.set(s, e.getRoot().listAccessors().length - 1), t.swap(a, s) + } a = Ee(t, c), d.add(a), f.set(t, a), b.set(t.getIndices(), a); + for (const e of t.listAttributes()) b.set(e, a) + } + } + for (const e of Array.from(b.keys())) { + const t = new Set(e.listParents().map((e => e.propertyType))); + if (2 !== t.size || !t.has(s.uS.PRIMITIVE) || !t.has(s.uS.ROOT)) throw new Error(`[${xe}] Compressed accessors must only be used as indices or vertex attributes.`) + } + for (const e of Array.from(a)) { + const t = f.get(e), + a = e.getIndices(); + if (b.get(a) !== t || e.listAttributes().some((e => b.get(e) !== t))) throw new Error(`[${xe}] Draco primitives must share all, or no, accessors.`) + } + for (const e of Array.from(r)) { + const t = e.getIndices(); + if (b.has(t) || e.listAttributes().some((e => b.has(e)))) throw new Error(`[${xe}] Accessor cannot be shared by compressed and uncompressed primitives.`) + } + return f + }(this.document), + n = new Map; + let i = "mesh"; + "scene" === this._encoderOptions.quantizationVolume && (1 !== this.document.getRoot().listScenes().length ? a.warn(`[${xe}]: quantizationVolume=scene requires exactly 1 scene.`) : i = (0, s.zX)(this.document.getRoot().listScenes().pop())); + for (const t of Array.from(r.keys())) { + const o = r.get(t); + if (!o) throw new Error("Unexpected primitive."); + if (n.has(o)) { + n.set(o, n.get(o)); + continue + } + const c = t.getIndices(), + b = e.jsonDoc.json.accessors; + let d; + try { + d = ge(t, D({}, this._encoderOptions, { + quantizationVolume: i + })) + } catch (e) { + if (e instanceof ye) { + a.warn(`[${xe}]: ${e.message} Skipping primitive compression.`); + continue + } + throw e + } + n.set(o, d); + const f = e.createAccessorDef(c); + f.count = d.numIndices, e.accessorIndexMap.set(c, b.length), b.push(f), d.numVertices > 65534 && f.componentType !== s.U_.ComponentType.UNSIGNED_INT && (f.componentType = s.U_.ComponentType.UNSIGNED_INT); + for (const a of t.listSemantics()) { + const s = t.getAttribute(a); + if (void 0 === d.attributeIDs[a]) continue; + const r = e.createAccessorDef(s); + r.count = d.numVertices, e.accessorIndexMap.set(s, b.length), b.push(r) + } + const h = t.getAttribute("POSITION").getBuffer() || this.document.getRoot().listBuffers()[0]; + e.otherBufferViews.has(h) || e.otherBufferViews.set(h, []), e.otherBufferViews.get(h).push(d.data) + } + return a.debug(`[${xe}] Compressed ${r.size} primitives.`), e.extensionData[xe] = { + primitiveHashMap: r, + primitiveEncodingMap: n + }, this + } + write(e) { + const t = e.extensionData[xe]; + for (const a of this.document.getRoot().listMeshes()) { + const s = e.jsonDoc.json.meshes[e.meshIndexMap.get(a)]; + for (let r = 0; r < a.listPrimitives().length; r++) { + const n = a.listPrimitives()[r], + i = s.primitives[r], + o = t.primitiveHashMap.get(n); + if (!o) continue; + const c = t.primitiveEncodingMap.get(o); + c && (i.extensions = i.extensions || {}, i.extensions[xe] = { + bufferView: e.otherBufferViewsIndexMap.get(c.data), + attributes: c.attributeIDs + }) + } + } + if (!t.primitiveHashMap.size) { + const t = e.jsonDoc.json; + t.extensionsUsed = (t.extensionsUsed || []).filter((e => e !== xe)), t.extensionsRequired = (t.extensionsRequired || []).filter((e => e !== xe)) + } + return this + } + } + + function Ee(e, t) { + const a = [], + s = e.getIndices(); + a.push(t.get(s)); + for (const s of e.listAttributes()) a.push(t.get(s)); + return a.sort().join("|") + } + Te.EXTENSION_NAME = xe, Te.EncoderMethod = fe; + class je extends s.eY { + init() { + this.extensionName = u, this.propertyType = "Light", this.parentTypes = [s.uS.NODE] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + color: [1, 1, 1], + intensity: 1, + type: je.Type.POINT, + range: null, + innerConeAngle: 0, + outerConeAngle: Math.PI / 4 + }) + } + getColor() { + return this.get("color") + } + setColor(e) { + return this.set("color", e) + } + getIntensity() { + return this.get("intensity") + } + setIntensity(e) { + return this.set("intensity", e) + } + getType() { + return this.get("type") + } + setType(e) { + return this.set("type", e) + } + getRange() { + return this.get("range") + } + setRange(e) { + return this.set("range", e) + } + getInnerConeAngle() { + return this.get("innerConeAngle") + } + setInnerConeAngle(e) { + return this.set("innerConeAngle", e) + } + getOuterConeAngle() { + return this.get("outerConeAngle") + } + setOuterConeAngle(e) { + return this.set("outerConeAngle", e) + } + } + je.EXTENSION_NAME = u, je.Type = { + POINT: "point", + SPOT: "spot", + DIRECTIONAL: "directional" + }; + const we = u; + class Ae extends s.hj { + constructor(...e) { + super(...e), this.extensionName = we + } + createLight(e = "") { + return new je(this.document.getGraph(), e) + } + read(e) { + const t = e.jsonDoc; + if (!t.json.extensions || !t.json.extensions[we]) return this; + const a = (t.json.extensions[we].lights || []).map((e => { + var t, a; + const s = this.createLight().setName(e.name || "").setType(e.type); + return void 0 !== e.color && s.setColor(e.color), void 0 !== e.intensity && s.setIntensity(e.intensity), void 0 !== e.range && s.setRange(e.range), void 0 !== (null == (t = e.spot) ? void 0 : t.innerConeAngle) && s.setInnerConeAngle(e.spot.innerConeAngle), void 0 !== (null == (a = e.spot) ? void 0 : a.outerConeAngle) && s.setOuterConeAngle(e.spot.outerConeAngle), s + })); + return t.json.nodes.forEach(((t, s) => { + if (!t.extensions || !t.extensions[we]) return; + const r = t.extensions[we]; + e.nodes[s].setExtension(we, a[r.light]) + })), this + } + write(e) { + const t = e.jsonDoc; + if (0 === this.properties.size) return this; + const a = [], + r = new Map; + for (const e of this.properties) { + const t = e, + n = { + type: t.getType() + }; + s.M8.eq(t.getColor(), [1, 1, 1]) || (n.color = t.getColor()), 1 !== t.getIntensity() && (n.intensity = t.getIntensity()), null != t.getRange() && (n.range = t.getRange()), t.getName() && (n.name = t.getName()), t.getType() === je.Type.SPOT && (n.spot = { + innerConeAngle: t.getInnerConeAngle(), + outerConeAngle: t.getOuterConeAngle() + }), a.push(n), r.set(t, a.length - 1) + } + return this.document.getRoot().listNodes().forEach((a => { + const s = a.getExtension(we); + if (s) { + const n = e.nodeIndexMap.get(a), + i = t.json.nodes[n]; + i.extensions = i.extensions || {}, i.extensions[we] = { + light: r.get(s) + } + } + })), t.json.extensions = t.json.extensions || {}, t.json.extensions[we] = { + lights: a + }, this + } + } + Ae.EXTENSION_NAME = we; + const { + R: Ie, + G: Ne, + B: ke + } = s.VS; + class ve extends s.eY { + init() { + this.extensionName = l, this.propertyType = "Anisotropy", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + anisotropyStrength: 0, + anisotropyRotation: 0, + anisotropyTexture: null, + anisotropyTextureInfo: new s.lO(this.graph, "anisotropyTextureInfo") + }) + } + getAnisotropyStrength() { + return this.get("anisotropyStrength") + } + setAnisotropyStrength(e) { + return this.set("anisotropyStrength", e) + } + getAnisotropyRotation() { + return this.get("anisotropyRotation") + } + setAnisotropyRotation(e) { + return this.set("anisotropyRotation", e) + } + getAnisotropyTexture() { + return this.getRef("anisotropyTexture") + } + getAnisotropyTextureInfo() { + return this.getRef("anisotropyTexture") ? this.getRef("anisotropyTextureInfo") : null + } + setAnisotropyTexture(e) { + return this.setRef("anisotropyTexture", e, { + channels: Ie | Ne | ke + }) + } + } + ve.EXTENSION_NAME = l; + const Re = l; + class Se extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Re, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createAnisotropy() { + return new ve(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[Re]) { + const r = this.createAnisotropy(); + e.materials[a].setExtension(Re, r); + const n = t.extensions[Re]; + if (void 0 !== n.anisotropyStrength && r.setAnisotropyStrength(n.anisotropyStrength), void 0 !== n.anisotropyRotation && r.setAnisotropyRotation(n.anisotropyRotation), void 0 !== n.anisotropyTexture) { + const t = n.anisotropyTexture, + a = e.textures[s[t.index].source]; + r.setAnisotropyTexture(a), e.setTextureInfo(r.getAnisotropyTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(Re); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[Re] = {}; + if (s.getAnisotropyStrength() > 0 && (i.anisotropyStrength = s.getAnisotropyStrength()), 0 !== s.getAnisotropyRotation() && (i.anisotropyRotation = s.getAnisotropyRotation()), s.getAnisotropyTexture()) { + const t = s.getAnisotropyTexture(), + a = s.getAnisotropyTextureInfo(); + i.anisotropyTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + Se.EXTENSION_NAME = Re; + const { + R: Me, + G: _e, + B: Ce + } = s.VS; + class De extends s.eY { + init() { + this.extensionName = g, this.propertyType = "Clearcoat", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + clearcoatFactor: 0, + clearcoatTexture: null, + clearcoatTextureInfo: new s.lO(this.graph, "clearcoatTextureInfo"), + clearcoatRoughnessFactor: 0, + clearcoatRoughnessTexture: null, + clearcoatRoughnessTextureInfo: new s.lO(this.graph, "clearcoatRoughnessTextureInfo"), + clearcoatNormalScale: 1, + clearcoatNormalTexture: null, + clearcoatNormalTextureInfo: new s.lO(this.graph, "clearcoatNormalTextureInfo") + }) + } + getClearcoatFactor() { + return this.get("clearcoatFactor") + } + setClearcoatFactor(e) { + return this.set("clearcoatFactor", e) + } + getClearcoatTexture() { + return this.getRef("clearcoatTexture") + } + getClearcoatTextureInfo() { + return this.getRef("clearcoatTexture") ? this.getRef("clearcoatTextureInfo") : null + } + setClearcoatTexture(e) { + return this.setRef("clearcoatTexture", e, { + channels: Me + }) + } + getClearcoatRoughnessFactor() { + return this.get("clearcoatRoughnessFactor") + } + setClearcoatRoughnessFactor(e) { + return this.set("clearcoatRoughnessFactor", e) + } + getClearcoatRoughnessTexture() { + return this.getRef("clearcoatRoughnessTexture") + } + getClearcoatRoughnessTextureInfo() { + return this.getRef("clearcoatRoughnessTexture") ? this.getRef("clearcoatRoughnessTextureInfo") : null + } + setClearcoatRoughnessTexture(e) { + return this.setRef("clearcoatRoughnessTexture", e, { + channels: _e + }) + } + getClearcoatNormalScale() { + return this.get("clearcoatNormalScale") + } + setClearcoatNormalScale(e) { + return this.set("clearcoatNormalScale", e) + } + getClearcoatNormalTexture() { + return this.getRef("clearcoatNormalTexture") + } + getClearcoatNormalTextureInfo() { + return this.getRef("clearcoatNormalTexture") ? this.getRef("clearcoatNormalTextureInfo") : null + } + setClearcoatNormalTexture(e) { + return this.setRef("clearcoatNormalTexture", e, { + channels: Me | _e | Ce + }) + } + } + De.EXTENSION_NAME = g; + const Oe = g; + class Fe extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Oe, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createClearcoat() { + return new De(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[Oe]) { + const r = this.createClearcoat(); + e.materials[a].setExtension(Oe, r); + const n = t.extensions[Oe]; + if (void 0 !== n.clearcoatFactor && r.setClearcoatFactor(n.clearcoatFactor), void 0 !== n.clearcoatRoughnessFactor && r.setClearcoatRoughnessFactor(n.clearcoatRoughnessFactor), void 0 !== n.clearcoatTexture) { + const t = n.clearcoatTexture, + a = e.textures[s[t.index].source]; + r.setClearcoatTexture(a), e.setTextureInfo(r.getClearcoatTextureInfo(), t) + } + if (void 0 !== n.clearcoatRoughnessTexture) { + const t = n.clearcoatRoughnessTexture, + a = e.textures[s[t.index].source]; + r.setClearcoatRoughnessTexture(a), e.setTextureInfo(r.getClearcoatRoughnessTextureInfo(), t) + } + if (void 0 !== n.clearcoatNormalTexture) { + const t = n.clearcoatNormalTexture, + a = e.textures[s[t.index].source]; + r.setClearcoatNormalTexture(a), e.setTextureInfo(r.getClearcoatNormalTextureInfo(), t), void 0 !== t.scale && r.setClearcoatNormalScale(t.scale) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(Oe); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[Oe] = { + clearcoatFactor: s.getClearcoatFactor(), + clearcoatRoughnessFactor: s.getClearcoatRoughnessFactor() + }; + if (s.getClearcoatTexture()) { + const t = s.getClearcoatTexture(), + a = s.getClearcoatTextureInfo(); + i.clearcoatTexture = e.createTextureInfoDef(t, a) + } + if (s.getClearcoatRoughnessTexture()) { + const t = s.getClearcoatRoughnessTexture(), + a = s.getClearcoatRoughnessTextureInfo(); + i.clearcoatRoughnessTexture = e.createTextureInfoDef(t, a) + } + if (s.getClearcoatNormalTexture()) { + const t = s.getClearcoatNormalTexture(), + a = s.getClearcoatNormalTextureInfo(); + i.clearcoatNormalTexture = e.createTextureInfoDef(t, a), 1 !== s.getClearcoatNormalScale() && (i.clearcoatNormalTexture.scale = s.getClearcoatNormalScale()) + } + } + })), this + } + } + Fe.EXTENSION_NAME = Oe; + const { + R: Ue, + G: Pe, + B: Le, + A: Be + } = s.VS; + class Ge extends s.eY { + init() { + this.extensionName = p, this.propertyType = "DiffuseTransmission", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + diffuseTransmissionFactor: 0, + diffuseTransmissionTexture: null, + diffuseTransmissionTextureInfo: new s.lO(this.graph, "diffuseTransmissionTextureInfo"), + diffuseTransmissionColorFactor: [1, 1, 1], + diffuseTransmissionColorTexture: null, + diffuseTransmissionColorTextureInfo: new s.lO(this.graph, "diffuseTransmissionColorTextureInfo") + }) + } + getDiffuseTransmissionFactor() { + return this.get("diffuseTransmissionFactor") + } + setDiffuseTransmissionFactor(e) { + return this.set("diffuseTransmissionFactor", e) + } + getDiffuseTransmissionTexture() { + return this.getRef("diffuseTransmissionTexture") + } + getDiffuseTransmissionTextureInfo() { + return this.getRef("diffuseTransmissionTexture") ? this.getRef("diffuseTransmissionTextureInfo") : null + } + setDiffuseTransmissionTexture(e) { + return this.setRef("diffuseTransmissionTexture", e, { + channels: Be + }) + } + getDiffuseTransmissionColorFactor() { + return this.get("diffuseTransmissionColorFactor") + } + setDiffuseTransmissionColorFactor(e) { + return this.set("diffuseTransmissionColorFactor", e) + } + getDiffuseTransmissionColorTexture() { + return this.getRef("diffuseTransmissionColorTexture") + } + getDiffuseTransmissionColorTextureInfo() { + return this.getRef("diffuseTransmissionColorTexture") ? this.getRef("diffuseTransmissionColorTextureInfo") : null + } + setDiffuseTransmissionColorTexture(e) { + return this.setRef("diffuseTransmissionColorTexture", e, { + channels: Ue | Pe | Le + }) + } + } + Ge.EXTENSION_NAME = p; + const ze = p; + class Ve extends s.hj { + constructor(...e) { + super(...e), this.extensionName = ze + } + createDiffuseTransmission() { + return new Ge(this.document.getGraph()) + } + read(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[ze]) { + const r = this.createDiffuseTransmission(); + e.materials[a].setExtension(ze, r); + const n = t.extensions[ze]; + if (void 0 !== n.diffuseTransmissionFactor && r.setDiffuseTransmissionFactor(n.diffuseTransmissionFactor), void 0 !== n.diffuseTransmissionColorFactor && r.setDiffuseTransmissionColorFactor(n.diffuseTransmissionColorFactor), void 0 !== n.diffuseTransmissionTexture) { + const t = n.diffuseTransmissionTexture, + a = e.textures[s[t.index].source]; + r.setDiffuseTransmissionTexture(a), e.setTextureInfo(r.getDiffuseTransmissionTextureInfo(), t) + } + if (void 0 !== n.diffuseTransmissionColorTexture) { + const t = n.diffuseTransmissionColorTexture, + a = e.textures[s[t.index].source]; + r.setDiffuseTransmissionColorTexture(a), e.setTextureInfo(r.getDiffuseTransmissionColorTextureInfo(), t) + } + } + })), this + } + write(e) { + const t = e.jsonDoc; + for (const a of this.document.getRoot().listMaterials()) { + const s = a.getExtension(ze); + if (!s) continue; + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[ze] = { + diffuseTransmissionFactor: s.getDiffuseTransmissionFactor(), + diffuseTransmissionColorFactor: s.getDiffuseTransmissionColorFactor() + }; + if (s.getDiffuseTransmissionTexture()) { + const t = s.getDiffuseTransmissionTexture(), + a = s.getDiffuseTransmissionTextureInfo(); + i.diffuseTransmissionTexture = e.createTextureInfoDef(t, a) + } + if (s.getDiffuseTransmissionColorTexture()) { + const t = s.getDiffuseTransmissionColorTexture(), + a = s.getDiffuseTransmissionColorTextureInfo(); + i.diffuseTransmissionColorTexture = e.createTextureInfoDef(t, a) + } + } + return this + } + } + Ve.EXTENSION_NAME = ze; + class qe extends s.eY { + init() { + this.extensionName = m, this.propertyType = "Dispersion", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + dispersion: 0 + }) + } + getDispersion() { + return this.get("dispersion") + } + setDispersion(e) { + return this.set("dispersion", e) + } + } + qe.EXTENSION_NAME = m; + const Ke = m; + class He extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Ke, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createDispersion() { + return new qe(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + return (e.jsonDoc.json.materials || []).forEach(((t, a) => { + if (t.extensions && t.extensions[Ke]) { + const s = this.createDispersion(); + e.materials[a].setExtension(Ke, s); + const r = t.extensions[Ke]; + void 0 !== r.dispersion && s.setDispersion(r.dispersion) + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(Ke); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}, n.extensions[Ke] = { + dispersion: s.getDispersion() + } + } + })), this + } + } + He.EXTENSION_NAME = Ke; + class We extends s.eY { + init() { + this.extensionName = y, this.propertyType = "EmissiveStrength", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + emissiveStrength: 1 + }) + } + getEmissiveStrength() { + return this.get("emissiveStrength") + } + setEmissiveStrength(e) { + return this.set("emissiveStrength", e) + } + } + We.EXTENSION_NAME = y; + const Je = y; + class Qe extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Je, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createEmissiveStrength() { + return new We(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + return (e.jsonDoc.json.materials || []).forEach(((t, a) => { + if (t.extensions && t.extensions[Je]) { + const s = this.createEmissiveStrength(); + e.materials[a].setExtension(Je, s); + const r = t.extensions[Je]; + void 0 !== r.emissiveStrength && s.setEmissiveStrength(r.emissiveStrength) + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(Je); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}, n.extensions[Je] = { + emissiveStrength: s.getEmissiveStrength() + } + } + })), this + } + } + Qe.EXTENSION_NAME = Je; + class Ye extends s.eY { + init() { + this.extensionName = x, this.propertyType = "IOR", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + ior: 1.5 + }) + } + getIOR() { + return this.get("ior") + } + setIOR(e) { + return this.set("ior", e) + } + } + Ye.EXTENSION_NAME = x; + const Xe = x; + class Ze extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Xe, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createIOR() { + return new Ye(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + return (e.jsonDoc.json.materials || []).forEach(((t, a) => { + if (t.extensions && t.extensions[Xe]) { + const s = this.createIOR(); + e.materials[a].setExtension(Xe, s); + const r = t.extensions[Xe]; + void 0 !== r.ior && s.setIOR(r.ior) + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(Xe); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}, n.extensions[Xe] = { + ior: s.getIOR() + } + } + })), this + } + } + Ze.EXTENSION_NAME = Xe; + const { + R: $e, + G: et + } = s.VS; + class tt extends s.eY { + init() { + this.extensionName = T, this.propertyType = "Iridescence", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + iridescenceFactor: 0, + iridescenceTexture: null, + iridescenceTextureInfo: new s.lO(this.graph, "iridescenceTextureInfo"), + iridescenceIOR: 1.3, + iridescenceThicknessMinimum: 100, + iridescenceThicknessMaximum: 400, + iridescenceThicknessTexture: null, + iridescenceThicknessTextureInfo: new s.lO(this.graph, "iridescenceThicknessTextureInfo") + }) + } + getIridescenceFactor() { + return this.get("iridescenceFactor") + } + setIridescenceFactor(e) { + return this.set("iridescenceFactor", e) + } + getIridescenceTexture() { + return this.getRef("iridescenceTexture") + } + getIridescenceTextureInfo() { + return this.getRef("iridescenceTexture") ? this.getRef("iridescenceTextureInfo") : null + } + setIridescenceTexture(e) { + return this.setRef("iridescenceTexture", e, { + channels: $e + }) + } + getIridescenceIOR() { + return this.get("iridescenceIOR") + } + setIridescenceIOR(e) { + return this.set("iridescenceIOR", e) + } + getIridescenceThicknessMinimum() { + return this.get("iridescenceThicknessMinimum") + } + setIridescenceThicknessMinimum(e) { + return this.set("iridescenceThicknessMinimum", e) + } + getIridescenceThicknessMaximum() { + return this.get("iridescenceThicknessMaximum") + } + setIridescenceThicknessMaximum(e) { + return this.set("iridescenceThicknessMaximum", e) + } + getIridescenceThicknessTexture() { + return this.getRef("iridescenceThicknessTexture") + } + getIridescenceThicknessTextureInfo() { + return this.getRef("iridescenceThicknessTexture") ? this.getRef("iridescenceThicknessTextureInfo") : null + } + setIridescenceThicknessTexture(e) { + return this.setRef("iridescenceThicknessTexture", e, { + channels: et + }) + } + } + tt.EXTENSION_NAME = T; + const at = T; + class st extends s.hj { + constructor(...e) { + super(...e), this.extensionName = at, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createIridescence() { + return new tt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[at]) { + const r = this.createIridescence(); + e.materials[a].setExtension(at, r); + const n = t.extensions[at]; + if (void 0 !== n.iridescenceFactor && r.setIridescenceFactor(n.iridescenceFactor), void 0 !== n.iridescenceIor && r.setIridescenceIOR(n.iridescenceIor), void 0 !== n.iridescenceThicknessMinimum && r.setIridescenceThicknessMinimum(n.iridescenceThicknessMinimum), void 0 !== n.iridescenceThicknessMaximum && r.setIridescenceThicknessMaximum(n.iridescenceThicknessMaximum), void 0 !== n.iridescenceTexture) { + const t = n.iridescenceTexture, + a = e.textures[s[t.index].source]; + r.setIridescenceTexture(a), e.setTextureInfo(r.getIridescenceTextureInfo(), t) + } + if (void 0 !== n.iridescenceThicknessTexture) { + const t = n.iridescenceThicknessTexture, + a = e.textures[s[t.index].source]; + r.setIridescenceThicknessTexture(a), e.setTextureInfo(r.getIridescenceThicknessTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(at); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[at] = {}; + if (s.getIridescenceFactor() > 0 && (i.iridescenceFactor = s.getIridescenceFactor()), 1.3 !== s.getIridescenceIOR() && (i.iridescenceIor = s.getIridescenceIOR()), 100 !== s.getIridescenceThicknessMinimum() && (i.iridescenceThicknessMinimum = s.getIridescenceThicknessMinimum()), 400 !== s.getIridescenceThicknessMaximum() && (i.iridescenceThicknessMaximum = s.getIridescenceThicknessMaximum()), s.getIridescenceTexture()) { + const t = s.getIridescenceTexture(), + a = s.getIridescenceTextureInfo(); + i.iridescenceTexture = e.createTextureInfoDef(t, a) + } + if (s.getIridescenceThicknessTexture()) { + const t = s.getIridescenceThicknessTexture(), + a = s.getIridescenceThicknessTextureInfo(); + i.iridescenceThicknessTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + st.EXTENSION_NAME = at; + const { + R: rt, + G: nt, + B: it, + A: ot + } = s.VS; + class ct extends s.eY { + init() { + this.extensionName = E, this.propertyType = "PBRSpecularGlossiness", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + diffuseFactor: [1, 1, 1, 1], + diffuseTexture: null, + diffuseTextureInfo: new s.lO(this.graph, "diffuseTextureInfo"), + specularFactor: [1, 1, 1], + glossinessFactor: 1, + specularGlossinessTexture: null, + specularGlossinessTextureInfo: new s.lO(this.graph, "specularGlossinessTextureInfo") + }) + } + getDiffuseFactor() { + return this.get("diffuseFactor") + } + setDiffuseFactor(e) { + return this.set("diffuseFactor", e) + } + getDiffuseTexture() { + return this.getRef("diffuseTexture") + } + getDiffuseTextureInfo() { + return this.getRef("diffuseTexture") ? this.getRef("diffuseTextureInfo") : null + } + setDiffuseTexture(e) { + return this.setRef("diffuseTexture", e, { + channels: rt | nt | it | ot, + isColor: !0 + }) + } + getSpecularFactor() { + return this.get("specularFactor") + } + setSpecularFactor(e) { + return this.set("specularFactor", e) + } + getGlossinessFactor() { + return this.get("glossinessFactor") + } + setGlossinessFactor(e) { + return this.set("glossinessFactor", e) + } + getSpecularGlossinessTexture() { + return this.getRef("specularGlossinessTexture") + } + getSpecularGlossinessTextureInfo() { + return this.getRef("specularGlossinessTexture") ? this.getRef("specularGlossinessTextureInfo") : null + } + setSpecularGlossinessTexture(e) { + return this.setRef("specularGlossinessTexture", e, { + channels: rt | nt | it | ot + }) + } + } + ct.EXTENSION_NAME = E; + const bt = E; + class dt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = bt, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createPBRSpecularGlossiness() { + return new ct(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[bt]) { + const r = this.createPBRSpecularGlossiness(); + e.materials[a].setExtension(bt, r); + const n = t.extensions[bt]; + if (void 0 !== n.diffuseFactor && r.setDiffuseFactor(n.diffuseFactor), void 0 !== n.specularFactor && r.setSpecularFactor(n.specularFactor), void 0 !== n.glossinessFactor && r.setGlossinessFactor(n.glossinessFactor), void 0 !== n.diffuseTexture) { + const t = n.diffuseTexture, + a = e.textures[s[t.index].source]; + r.setDiffuseTexture(a), e.setTextureInfo(r.getDiffuseTextureInfo(), t) + } + if (void 0 !== n.specularGlossinessTexture) { + const t = n.specularGlossinessTexture, + a = e.textures[s[t.index].source]; + r.setSpecularGlossinessTexture(a), e.setTextureInfo(r.getSpecularGlossinessTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(bt); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[bt] = { + diffuseFactor: s.getDiffuseFactor(), + specularFactor: s.getSpecularFactor(), + glossinessFactor: s.getGlossinessFactor() + }; + if (s.getDiffuseTexture()) { + const t = s.getDiffuseTexture(), + a = s.getDiffuseTextureInfo(); + i.diffuseTexture = e.createTextureInfoDef(t, a) + } + if (s.getSpecularGlossinessTexture()) { + const t = s.getSpecularGlossinessTexture(), + a = s.getSpecularGlossinessTextureInfo(); + i.specularGlossinessTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + dt.EXTENSION_NAME = bt; + const { + R: ft, + G: ht, + B: ut, + A: lt + } = s.VS; + class gt extends s.eY { + init() { + this.extensionName = j, this.propertyType = "Sheen", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + sheenColorFactor: [0, 0, 0], + sheenColorTexture: null, + sheenColorTextureInfo: new s.lO(this.graph, "sheenColorTextureInfo"), + sheenRoughnessFactor: 0, + sheenRoughnessTexture: null, + sheenRoughnessTextureInfo: new s.lO(this.graph, "sheenRoughnessTextureInfo") + }) + } + getSheenColorFactor() { + return this.get("sheenColorFactor") + } + setSheenColorFactor(e) { + return this.set("sheenColorFactor", e) + } + getSheenColorTexture() { + return this.getRef("sheenColorTexture") + } + getSheenColorTextureInfo() { + return this.getRef("sheenColorTexture") ? this.getRef("sheenColorTextureInfo") : null + } + setSheenColorTexture(e) { + return this.setRef("sheenColorTexture", e, { + channels: ft | ht | ut, + isColor: !0 + }) + } + getSheenRoughnessFactor() { + return this.get("sheenRoughnessFactor") + } + setSheenRoughnessFactor(e) { + return this.set("sheenRoughnessFactor", e) + } + getSheenRoughnessTexture() { + return this.getRef("sheenRoughnessTexture") + } + getSheenRoughnessTextureInfo() { + return this.getRef("sheenRoughnessTexture") ? this.getRef("sheenRoughnessTextureInfo") : null + } + setSheenRoughnessTexture(e) { + return this.setRef("sheenRoughnessTexture", e, { + channels: lt + }) + } + } + gt.EXTENSION_NAME = j; + const pt = j; + class mt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = pt, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createSheen() { + return new gt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[pt]) { + const r = this.createSheen(); + e.materials[a].setExtension(pt, r); + const n = t.extensions[pt]; + if (void 0 !== n.sheenColorFactor && r.setSheenColorFactor(n.sheenColorFactor), void 0 !== n.sheenRoughnessFactor && r.setSheenRoughnessFactor(n.sheenRoughnessFactor), void 0 !== n.sheenColorTexture) { + const t = n.sheenColorTexture, + a = e.textures[s[t.index].source]; + r.setSheenColorTexture(a), e.setTextureInfo(r.getSheenColorTextureInfo(), t) + } + if (void 0 !== n.sheenRoughnessTexture) { + const t = n.sheenRoughnessTexture, + a = e.textures[s[t.index].source]; + r.setSheenRoughnessTexture(a), e.setTextureInfo(r.getSheenRoughnessTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(pt); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[pt] = { + sheenColorFactor: s.getSheenColorFactor(), + sheenRoughnessFactor: s.getSheenRoughnessFactor() + }; + if (s.getSheenColorTexture()) { + const t = s.getSheenColorTexture(), + a = s.getSheenColorTextureInfo(); + i.sheenColorTexture = e.createTextureInfoDef(t, a) + } + if (s.getSheenRoughnessTexture()) { + const t = s.getSheenRoughnessTexture(), + a = s.getSheenRoughnessTextureInfo(); + i.sheenRoughnessTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + mt.EXTENSION_NAME = pt; + const { + R: yt, + G: xt, + B: Tt, + A: Et + } = s.VS; + class jt extends s.eY { + init() { + this.extensionName = w, this.propertyType = "Specular", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + specularFactor: 1, + specularTexture: null, + specularTextureInfo: new s.lO(this.graph, "specularTextureInfo"), + specularColorFactor: [1, 1, 1], + specularColorTexture: null, + specularColorTextureInfo: new s.lO(this.graph, "specularColorTextureInfo") + }) + } + getSpecularFactor() { + return this.get("specularFactor") + } + setSpecularFactor(e) { + return this.set("specularFactor", e) + } + getSpecularColorFactor() { + return this.get("specularColorFactor") + } + setSpecularColorFactor(e) { + return this.set("specularColorFactor", e) + } + getSpecularTexture() { + return this.getRef("specularTexture") + } + getSpecularTextureInfo() { + return this.getRef("specularTexture") ? this.getRef("specularTextureInfo") : null + } + setSpecularTexture(e) { + return this.setRef("specularTexture", e, { + channels: Et + }) + } + getSpecularColorTexture() { + return this.getRef("specularColorTexture") + } + getSpecularColorTextureInfo() { + return this.getRef("specularColorTexture") ? this.getRef("specularColorTextureInfo") : null + } + setSpecularColorTexture(e) { + return this.setRef("specularColorTexture", e, { + channels: yt | xt | Tt, + isColor: !0 + }) + } + } + jt.EXTENSION_NAME = w; + const wt = w; + class At extends s.hj { + constructor(...e) { + super(...e), this.extensionName = wt, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createSpecular() { + return new jt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[wt]) { + const r = this.createSpecular(); + e.materials[a].setExtension(wt, r); + const n = t.extensions[wt]; + if (void 0 !== n.specularFactor && r.setSpecularFactor(n.specularFactor), void 0 !== n.specularColorFactor && r.setSpecularColorFactor(n.specularColorFactor), void 0 !== n.specularTexture) { + const t = n.specularTexture, + a = e.textures[s[t.index].source]; + r.setSpecularTexture(a), e.setTextureInfo(r.getSpecularTextureInfo(), t) + } + if (void 0 !== n.specularColorTexture) { + const t = n.specularColorTexture, + a = e.textures[s[t.index].source]; + r.setSpecularColorTexture(a), e.setTextureInfo(r.getSpecularColorTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const r = a.getExtension(wt); + if (r) { + const n = e.materialIndexMap.get(a), + i = t.json.materials[n]; + i.extensions = i.extensions || {}; + const o = i.extensions[wt] = {}; + if (1 !== r.getSpecularFactor() && (o.specularFactor = r.getSpecularFactor()), s.M8.eq(r.getSpecularColorFactor(), [1, 1, 1]) || (o.specularColorFactor = r.getSpecularColorFactor()), r.getSpecularTexture()) { + const t = r.getSpecularTexture(), + a = r.getSpecularTextureInfo(); + o.specularTexture = e.createTextureInfoDef(t, a) + } + if (r.getSpecularColorTexture()) { + const t = r.getSpecularColorTexture(), + a = r.getSpecularColorTextureInfo(); + o.specularColorTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + At.EXTENSION_NAME = wt; + const { + R: It + } = s.VS; + class Nt extends s.eY { + init() { + this.extensionName = A, this.propertyType = "Transmission", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + transmissionFactor: 0, + transmissionTexture: null, + transmissionTextureInfo: new s.lO(this.graph, "transmissionTextureInfo") + }) + } + getTransmissionFactor() { + return this.get("transmissionFactor") + } + setTransmissionFactor(e) { + return this.set("transmissionFactor", e) + } + getTransmissionTexture() { + return this.getRef("transmissionTexture") + } + getTransmissionTextureInfo() { + return this.getRef("transmissionTexture") ? this.getRef("transmissionTextureInfo") : null + } + setTransmissionTexture(e) { + return this.setRef("transmissionTexture", e, { + channels: It + }) + } + } + Nt.EXTENSION_NAME = A; + const kt = A; + class vt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = kt, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createTransmission() { + return new Nt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[kt]) { + const r = this.createTransmission(); + e.materials[a].setExtension(kt, r); + const n = t.extensions[kt]; + if (void 0 !== n.transmissionFactor && r.setTransmissionFactor(n.transmissionFactor), void 0 !== n.transmissionTexture) { + const t = n.transmissionTexture, + a = e.textures[s[t.index].source]; + r.setTransmissionTexture(a), e.setTextureInfo(r.getTransmissionTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const s = a.getExtension(kt); + if (s) { + const r = e.materialIndexMap.get(a), + n = t.json.materials[r]; + n.extensions = n.extensions || {}; + const i = n.extensions[kt] = { + transmissionFactor: s.getTransmissionFactor() + }; + if (s.getTransmissionTexture()) { + const t = s.getTransmissionTexture(), + a = s.getTransmissionTextureInfo(); + i.transmissionTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + vt.EXTENSION_NAME = kt; + class Rt extends s.eY { + init() { + this.extensionName = I, this.propertyType = "Unlit", this.parentTypes = [s.uS.MATERIAL] + } + } + Rt.EXTENSION_NAME = I; + const St = I; + class Mt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = St, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createUnlit() { + return new Rt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + return (e.jsonDoc.json.materials || []).forEach(((t, a) => { + t.extensions && t.extensions[St] && e.materials[a].setExtension(St, this.createUnlit()) + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + if (a.getExtension(St)) { + const s = e.materialIndexMap.get(a), + r = t.json.materials[s]; + r.extensions = r.extensions || {}, r.extensions[St] = {} + } + })), this + } + } + Mt.EXTENSION_NAME = St; + class _t extends s.eY { + init() { + this.extensionName = k, this.propertyType = "Mapping", this.parentTypes = ["MappingList"] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + material: null, + variants: new r.BK + }) + } + getMaterial() { + return this.getRef("material") + } + setMaterial(e) { + return this.setRef("material", e) + } + addVariant(e) { + return this.addRef("variants", e) + } + removeVariant(e) { + return this.removeRef("variants", e) + } + listVariants() { + return this.listRefs("variants") + } + } + _t.EXTENSION_NAME = k; + class Ct extends s.eY { + init() { + this.extensionName = k, this.propertyType = "MappingList", this.parentTypes = [s.uS.PRIMITIVE] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + mappings: new r.BK + }) + } + addMapping(e) { + return this.addRef("mappings", e) + } + removeMapping(e) { + return this.removeRef("mappings", e) + } + listMappings() { + return this.listRefs("mappings") + } + } + Ct.EXTENSION_NAME = k; + class Dt extends s.eY { + init() { + this.extensionName = k, this.propertyType = "Variant", this.parentTypes = ["MappingList"] + } + } + Dt.EXTENSION_NAME = k; + const Ot = k; + class Ft extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Ot + } + createMappingList() { + return new Ct(this.document.getGraph()) + } + createVariant(e = "") { + return new Dt(this.document.getGraph(), e) + } + createMapping() { + return new _t(this.document.getGraph()) + } + listVariants() { + return Array.from(this.properties).filter((e => e instanceof Dt)) + } + read(e) { + const t = e.jsonDoc; + if (!t.json.extensions || !t.json.extensions[Ot]) return this; + const a = (t.json.extensions[Ot].variants || []).map((e => this.createVariant().setName(e.name || ""))); + return (t.json.meshes || []).forEach(((t, s) => { + const r = e.meshes[s]; + (t.primitives || []).forEach(((t, s) => { + if (!t.extensions || !t.extensions[Ot]) return; + const n = this.createMappingList(), + i = t.extensions[Ot]; + for (const t of i.mappings) { + const s = this.createMapping(); + void 0 !== t.material && s.setMaterial(e.materials[t.material]); + for (const e of t.variants || []) s.addVariant(a[e]); + n.addMapping(s) + } + r.listPrimitives()[s].setExtension(Ot, n) + })) + })), this + } + write(e) { + const t = e.jsonDoc, + a = this.listVariants(); + if (!a.length) return this; + const s = [], + r = new Map; + for (const t of a) r.set(t, s.length), s.push(e.createPropertyDef(t)); + for (const t of this.document.getRoot().listMeshes()) { + const a = e.meshIndexMap.get(t); + t.listPrimitives().forEach(((t, s) => { + const n = t.getExtension(Ot); + if (!n) return; + const i = e.jsonDoc.json.meshes[a].primitives[s], + o = n.listMappings().map((t => { + const a = e.createPropertyDef(t), + s = t.getMaterial(); + return s && (a.material = e.materialIndexMap.get(s)), a.variants = t.listVariants().map((e => r.get(e))), a + })); + i.extensions = i.extensions || {}, i.extensions[Ot] = { + mappings: o + } + })) + } + return t.json.extensions = t.json.extensions || {}, t.json.extensions[Ot] = { + variants: s + }, this + } + } + Ft.EXTENSION_NAME = Ot; + const { + G: Ut + } = s.VS; + class Pt extends s.eY { + init() { + this.extensionName = N, this.propertyType = "Volume", this.parentTypes = [s.uS.MATERIAL] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + thicknessFactor: 0, + thicknessTexture: null, + thicknessTextureInfo: new s.lO(this.graph, "thicknessTexture"), + attenuationDistance: 1 / 0, + attenuationColor: [1, 1, 1] + }) + } + getThicknessFactor() { + return this.get("thicknessFactor") + } + setThicknessFactor(e) { + return this.set("thicknessFactor", e) + } + getThicknessTexture() { + return this.getRef("thicknessTexture") + } + getThicknessTextureInfo() { + return this.getRef("thicknessTexture") ? this.getRef("thicknessTextureInfo") : null + } + setThicknessTexture(e) { + return this.setRef("thicknessTexture", e, { + channels: Ut + }) + } + getAttenuationDistance() { + return this.get("attenuationDistance") + } + setAttenuationDistance(e) { + return this.set("attenuationDistance", e) + } + getAttenuationColor() { + return this.get("attenuationColor") + } + setAttenuationColor(e) { + return this.set("attenuationColor", e) + } + } + Pt.EXTENSION_NAME = N; + const Lt = N; + class Bt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Lt, this.prereadTypes = [s.uS.MESH], this.prewriteTypes = [s.uS.MESH] + } + createVolume() { + return new Pt(this.document.getGraph()) + } + read(e) { + return this + } + write(e) { + return this + } + preread(e) { + const t = e.jsonDoc, + a = t.json.materials || [], + s = t.json.textures || []; + return a.forEach(((t, a) => { + if (t.extensions && t.extensions[Lt]) { + const r = this.createVolume(); + e.materials[a].setExtension(Lt, r); + const n = t.extensions[Lt]; + if (void 0 !== n.thicknessFactor && r.setThicknessFactor(n.thicknessFactor), void 0 !== n.attenuationDistance && r.setAttenuationDistance(n.attenuationDistance), void 0 !== n.attenuationColor && r.setAttenuationColor(n.attenuationColor), void 0 !== n.thicknessTexture) { + const t = n.thicknessTexture, + a = e.textures[s[t.index].source]; + r.setThicknessTexture(a), e.setTextureInfo(r.getThicknessTextureInfo(), t) + } + } + })), this + } + prewrite(e) { + const t = e.jsonDoc; + return this.document.getRoot().listMaterials().forEach((a => { + const r = a.getExtension(Lt); + if (r) { + const n = e.materialIndexMap.get(a), + i = t.json.materials[n]; + i.extensions = i.extensions || {}; + const o = i.extensions[Lt] = {}; + if (r.getThicknessFactor() > 0 && (o.thicknessFactor = r.getThicknessFactor()), Number.isFinite(r.getAttenuationDistance()) && (o.attenuationDistance = r.getAttenuationDistance()), s.M8.eq(r.getAttenuationColor(), [1, 1, 1]) || (o.attenuationColor = r.getAttenuationColor()), r.getThicknessTexture()) { + const t = r.getThicknessTexture(), + a = r.getThicknessTextureInfo(); + o.thicknessTexture = e.createTextureInfoDef(t, a) + } + } + })), this + } + } + Bt.EXTENSION_NAME = Lt; + const Gt = "KHR_mesh_quantization"; + class zt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Gt + } + read(e) { + return this + } + write(e) { + return this + } + } + zt.EXTENSION_NAME = Gt; + const Vt = "KHR_texture_basisu"; + class qt { + match(e) { + return 171 === e[0] && 75 === e[1] && 84 === e[2] && 88 === e[3] && 32 === e[4] && 50 === e[5] && 48 === e[6] && 187 === e[7] && 13 === e[8] && 10 === e[9] && 26 === e[10] && 10 === e[11] + } + getSize(e) { + const t = d(e); + return [t.pixelWidth, t.pixelHeight] + } + getChannels(e) { + const t = d(e).dataFormatDescriptor[0]; + if (163 === t.colorModel) return 2 === t.samples.length && 15 == (15 & t.samples[1].channelType) ? 4 : 3; + if (166 === t.colorModel) return 3 == (15 & t.samples[0].channelType) ? 4 : 3; + throw new Error(`Unexpected KTX2 colorModel, "${t.colorModel}".`) + } + getVRAMByteLength(e) { + const t = d(e), + a = this.getChannels(e) > 3; + let s = 0; + for (let e = 0; e < t.levels.length; e++) { + const r = t.levels[e]; + r.uncompressedByteLength ? s += r.uncompressedByteLength : s += Math.max(1, Math.floor(t.pixelWidth / Math.pow(2, e))) / 4 * (Math.max(1, Math.floor(t.pixelHeight / Math.pow(2, e))) / 4) * (a ? 16 : 8) + } + return s + } + } + class Kt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Vt, this.prereadTypes = [s.uS.TEXTURE] + } + static register() { + s.Pp.registerFormat("image/ktx2", new qt) + } + preread(e) { + return e.jsonDoc.json.textures.forEach((e => { + if (e.extensions && e.extensions[Vt]) { + const t = e.extensions[Vt]; + e.source = t.source + } + })), this + } + read(e) { + return this + } + write(e) { + const t = e.jsonDoc; + return this.document.getRoot().listTextures().forEach((a => { + if ("image/ktx2" === a.getMimeType()) { + const s = e.imageIndexMap.get(a); + t.json.textures.forEach((e => { + e.source === s && (e.extensions = e.extensions || {}, e.extensions[Vt] = { + source: e.source + }, delete e.source) + })) + } + })), this + } + } + Kt.EXTENSION_NAME = Vt; + class Ht extends s.eY { + init() { + this.extensionName = v, this.propertyType = "Transform", this.parentTypes = [s.uS.TEXTURE_INFO] + } + getDefaults() { + return Object.assign(super.getDefaults(), { + offset: [0, 0], + rotation: 0, + scale: [1, 1], + texCoord: null + }) + } + getOffset() { + return this.get("offset") + } + setOffset(e) { + return this.set("offset", e) + } + getRotation() { + return this.get("rotation") + } + setRotation(e) { + return this.set("rotation", e) + } + getScale() { + return this.get("scale") + } + setScale(e) { + return this.set("scale", e) + } + getTexCoord() { + return this.get("texCoord") + } + setTexCoord(e) { + return this.set("texCoord", e) + } + } + Ht.EXTENSION_NAME = v; + const Wt = v; + class Jt extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Wt + } + createTransform() { + return new Ht(this.document.getGraph()) + } + read(e) { + for (const [t, a] of Array.from(e.textureInfos.entries())) { + if (!a.extensions || !a.extensions[Wt]) continue; + const e = this.createTransform(), + s = a.extensions[Wt]; + void 0 !== s.offset && e.setOffset(s.offset), void 0 !== s.rotation && e.setRotation(s.rotation), void 0 !== s.scale && e.setScale(s.scale), void 0 !== s.texCoord && e.setTexCoord(s.texCoord), t.setExtension(Wt, e) + } + return this + } + write(e) { + const t = Array.from(e.textureInfoDefMap.entries()); + for (const [e, a] of t) { + const t = e.getExtension(Wt); + if (!t) continue; + a.extensions = a.extensions || {}; + const r = {}, + n = s.M8.eq; + n(t.getOffset(), [0, 0]) || (r.offset = t.getOffset()), 0 !== t.getRotation() && (r.rotation = t.getRotation()), n(t.getScale(), [1, 1]) || (r.scale = t.getScale()), null != t.getTexCoord() && (r.texCoord = t.getTexCoord()), a.extensions[Wt] = r + } + return this + } + } + Jt.EXTENSION_NAME = Wt; + const Qt = [s.uS.ROOT, s.uS.SCENE, s.uS.NODE, s.uS.MESH, s.uS.MATERIAL, s.uS.TEXTURE, s.uS.ANIMATION]; + class Yt extends s.eY { + init() { + this.extensionName = R, this.propertyType = "Packet", this.parentTypes = Qt + } + getDefaults() { + return Object.assign(super.getDefaults(), { + context: {}, + properties: {} + }) + } + getContext() { + return this.get("context") + } + setContext(e) { + return this.set("context", D({}, e)) + } + listProperties() { + return Object.keys(this.get("properties")) + } + getProperty(e) { + const t = this.get("properties"); + return e in t ? t[e] : null + } + setProperty(e, t) { + this._assertContext(e); + const a = D({}, this.get("properties")); + return t ? a[e] = t : delete a[e], this.set("properties", a) + } + toJSONLD() { + return D({ + "@context": Xt(this.get("context")) + }, Xt(this.get("properties"))) + } + fromJSONLD(e) { + const t = (e = Xt(e))["@context"]; + return t && this.set("context", t), delete e["@context"], this.set("properties", e) + } + _assertContext(e) { + if (!(e.split(":")[0] in this.get("context"))) throw new Error(`KHR_xmp_json_ld: Missing context for term, "${e}".`) + } + } + + function Xt(e) { + return JSON.parse(JSON.stringify(e)) + } + Yt.EXTENSION_NAME = R; + const Zt = R; + class $t extends s.hj { + constructor(...e) { + super(...e), this.extensionName = Zt + } + createPacket() { + return new Yt(this.document.getGraph()) + } + listPackets() { + return Array.from(this.properties) + } + read(e) { + var t; + const a = null == (t = e.jsonDoc.json.extensions) ? void 0 : t[Zt]; + if (!a || !a.packets) return this; + const s = e.jsonDoc.json, + r = this.document.getRoot(), + n = a.packets.map((e => this.createPacket().fromJSONLD(e))), + i = [ + [s.asset], s.scenes, s.nodes, s.meshes, s.materials, s.images, s.animations + ], + o = [ + [r], r.listScenes(), r.listNodes(), r.listMeshes(), r.listMaterials(), r.listTextures(), r.listAnimations() + ]; + for (let e = 0; e < i.length; e++) { + const t = i[e] || []; + for (let a = 0; a < t.length; a++) { + const s = t[a]; + if (s.extensions && s.extensions[Zt]) { + const t = s.extensions[Zt]; + o[e][a].setExtension(Zt, n[t.packet]) + } + } + } + return this + } + write(e) { + const { + json: t + } = e.jsonDoc, a = []; + for (const r of this.properties) { + a.push(r.toJSONLD()); + for (const n of r.listParents()) { + let r; + switch (n.propertyType) { + case s.uS.ROOT: + r = t.asset; + break; + case s.uS.SCENE: + r = t.scenes[e.sceneIndexMap.get(n)]; + break; + case s.uS.NODE: + r = t.nodes[e.nodeIndexMap.get(n)]; + break; + case s.uS.MESH: + r = t.meshes[e.meshIndexMap.get(n)]; + break; + case s.uS.MATERIAL: + r = t.materials[e.materialIndexMap.get(n)]; + break; + case s.uS.TEXTURE: + r = t.images[e.imageIndexMap.get(n)]; + break; + case s.uS.ANIMATION: + r = t.animations[e.animationIndexMap.get(n)]; + break; + default: + r = null, this.document.getLogger().warn(`[${Zt}]: Unsupported parent property, "${n.propertyType}"`) + } + r && (r.extensions = r.extensions || {}, r.extensions[Zt] = { + packet: a.length - 1 + }) + } + } + return a.length > 0 && (t.extensions = t.extensions || {}, t.extensions[Zt] = { + packets: a + }), this + } + } + $t.EXTENSION_NAME = Zt + }, + 48830: (e, t, a) => { + "use strict"; + a.d(t, { + LV: () => O, + VJ: () => Re, + xH: () => Me, + v_: () => Je, + Qs: () => q, + sr: () => ut, + og: () => At, + uC: () => be + }); + var s = a(69584), + r = a(62861); + a(38897); + var n = a(84362); + + function i() { + return i = Object.assign ? Object.assign.bind() : function(e) { + for (var t = 1; t < arguments.length; t++) { + var a = arguments[t]; + for (var s in a) Object.prototype.hasOwnProperty.call(a, s) && (e[s] = a[s]) + } + return e + }, i.apply(this, arguments) + } + const { + POINTS: o, + LINES: c, + LINE_STRIP: b, + LINE_LOOP: d, + TRIANGLES: f, + TRIANGLE_STRIP: h, + TRIANGLE_FAN: u + } = s.WV.Mode; + + function l(e, t) { + return Object.defineProperty(t, "name", { + value: e + }), t + } + + function g(e, t) { + const a = i({}, e); + for (const e in t) void 0 !== t[e] && (a[e] = t[e]); + return a + } + + function p(e) { + const t = e.getIndices(), + a = e.getAttribute("POSITION"); + switch (e.getMode()) { + case s.WV.Mode.POINTS: + return t ? t.getCount() : a.getCount(); + case s.WV.Mode.LINES: + return t ? t.getCount() / 2 : a.getCount() / 2; + case s.WV.Mode.LINE_LOOP: + return t ? t.getCount() : a.getCount(); + case s.WV.Mode.LINE_STRIP: + return t ? t.getCount() - 1 : a.getCount() - 1; + case s.WV.Mode.TRIANGLES: + return t ? t.getCount() / 3 : a.getCount() / 3; + case s.WV.Mode.TRIANGLE_STRIP: + case s.WV.Mode.TRIANGLE_FAN: + return t ? t.getCount() - 2 : a.getCount() - 2; + default: + throw new Error("Unexpected mode: " + e.getMode()) + } + } + + function m(e) { + return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + } + + function y(e, t) { + return `${m(e)} → ${m(t)} (${function(e,t,a=2){return(e>t?"–":"+")+(Math.abs(e-t)/e*100).toFixed(a)+"%"}(e,t)})` + } + + function x(e) { + const t = []; + for (const a of e.listAttributes()) t.push(a); + for (const a of e.listTargets()) + for (const e of a.listAttributes()) t.push(e); + return Array.from(new Set(t)) + } + + function T(e, t, a) { + e.swap(t, a); + for (const s of e.listTargets()) s.swap(t, a) + } + + function E(e, t) { + if (null == e && null == t) return !0; + if (null == e || null == t) return !1; + if (e.length !== t.length) return !1; + for (let a = 0; a < e.length; a++) + if (e[a] !== t[a]) return !1; + return !0 + } + + function j(e, t) { + return e.createAccessor(t.getName()).setArray(t.getArray()).setType(t.getType()).setBuffer(t.getBuffer()).setNormalized(t.getNormalized()).setSparse(t.getSparse()) + } + + function w(e, t = e) { + const a = A(e, t); + for (let e = 0; e < a.length; e++) a[e] = e; + return a + } + + function A(e, t = e) { + return t <= 65534 ? new Uint16Array(e) : new Uint32Array(e) + } + + function I(e) { + for (const t in e) return !1; + return !0 + } + + function N(e) { + const t = s.BB.fromGraph(e.getGraph()), + a = e.getMaterial(); + return `${t.getRoot().listMaterials().indexOf(a)}|${k[e.getMode()]}|${!!e.getIndices()}|${e.listSemantics().sort().map((t=>{const a=e.getAttribute(t);return`${t}:${a.getElementSize()}:${a.getComponentType()}`})).join("+")}|${e.listTargets().map((t=>t.listSemantics().sort().map((t=>{const a=e.getAttribute(t);return`${t}:${a.getElementSize()}:${a.getComponentType()}`})).join("+"))).join("~")}` + } + const k = { + [o]: o, + [c]: c, + [b]: c, + [d]: c, + [f]: f, + [h]: f, + [u]: f + }; + + function v(e) { + const t = function(e) { + const t = new Set; + let a, r = e; + for (; a = r.getParentNode();) { + if (t.has(a)) throw new Error("Circular dependency in scene graph."); + t.add(a), r = a + } + return r.listParents().filter((e => e instanceof s.xs)) + }(e), + a = e.getParentNode(); + if (!a) return e; + e.setMatrix(e.getWorldMatrix()), a.removeChild(e); + for (const a of t) a.addChild(e); + return e + } + var R = "undefined" != typeof Float32Array ? Float32Array : Array; + + function S(e, t, a) { + var s = t[0], + r = t[1], + n = t[2], + i = t[3], + o = t[4], + c = t[5], + b = t[6], + d = t[7], + f = t[8], + h = t[9], + u = t[10], + l = t[11], + g = t[12], + p = t[13], + m = t[14], + y = t[15], + x = a[0], + T = a[1], + E = a[2], + j = a[3]; + return e[0] = x * s + T * o + E * f + j * g, e[1] = x * r + T * c + E * h + j * p, e[2] = x * n + T * b + E * u + j * m, e[3] = x * i + T * d + E * l + j * y, x = a[4], T = a[5], E = a[6], j = a[7], e[4] = x * s + T * o + E * f + j * g, e[5] = x * r + T * c + E * h + j * p, e[6] = x * n + T * b + E * u + j * m, e[7] = x * i + T * d + E * l + j * y, x = a[8], T = a[9], E = a[10], j = a[11], e[8] = x * s + T * o + E * f + j * g, e[9] = x * r + T * c + E * h + j * p, e[10] = x * n + T * b + E * u + j * m, e[11] = x * i + T * d + E * l + j * y, x = a[12], T = a[13], E = a[14], j = a[15], e[12] = x * s + T * o + E * f + j * g, e[13] = x * r + T * c + E * h + j * p, e[14] = x * n + T * b + E * u + j * m, e[15] = x * i + T * d + E * l + j * y, e + } + + function M() { + var e = new R(3); + return R != Float32Array && (e[0] = 0, e[1] = 0, e[2] = 0), e + } + + function _(e, t) { + var a = t[0], + s = t[1], + r = t[2], + n = a * a + s * s + r * r; + return n > 0 && (n = 1 / Math.sqrt(n)), e[0] = t[0] * n, e[1] = t[1] * n, e[2] = t[2] * n, e + } + + function C(e, t, a) { + var s = t[0], + r = t[1], + n = t[2]; + return e[0] = s * a[0] + r * a[3] + n * a[6], e[1] = s * a[1] + r * a[4] + n * a[7], e[2] = s * a[2] + r * a[5] + n * a[8], e + } + Math.hypot || (Math.hypot = function() { + for (var e = 0, t = arguments.length; t--;) e += arguments[t] * arguments[t]; + return Math.sqrt(e) + }); + M(); + const D = { + keepUniqueNames: !1, + propertyTypes: [s.uS.ACCESSOR, s.uS.MESH, s.uS.TEXTURE, s.uS.MATERIAL, s.uS.SKIN] + }; + + function O(e = D) { + const t = g(D, e), + a = new Set(t.propertyTypes); + for (const e of t.propertyTypes) + if (!D.propertyTypes.includes(e)) throw new Error(`dedup: Unsupported deduplication on type "${e}".`); + return l("dedup", (e => { + const r = e.getLogger(); + a.has(s.uS.ACCESSOR) && function(e) { + const t = e.getLogger(), + a = new Map, + r = new Map, + n = new Map, + i = new Map, + o = e.getRoot().listMeshes(); + o.forEach((e => { + e.listPrimitives().forEach((e => { + e.listAttributes().forEach((e => c(e, r))), c(e.getIndices(), a) + })) + })); + for (const t of e.getRoot().listAnimations()) + for (const e of t.listSamplers()) c(e.getInput(), n), c(e.getOutput(), i); + + function c(e, t) { + if (!e) return; + const a = [e.getCount(), e.getType(), e.getComponentType(), e.getNormalized(), e.getSparse()].join(":"); + let s = t.get(a); + s || t.set(a, s = new Set), s.add(e) + } + + function b(e, t) { + for (let a = 0; a < e.length; a++) { + const r = e[a], + n = s.oY.toView(r.getArray()); + if (!t.has(r)) + for (let i = a + 1; i < e.length; i++) { + const a = e[i]; + t.has(a) || s.oY.equals(n, s.oY.toView(a.getArray())) && t.set(a, r) + } + } + } + let d = 0; + const f = new Map; + for (const e of [r, a, n, i]) + for (const t of e.values()) d += t.size, b(Array.from(t), f); + t.debug(`dedup: Merged ${f.size} of ${d} accessors.`), o.forEach((e => { + e.listPrimitives().forEach((e => { + e.listAttributes().forEach((t => { + f.has(t) && e.swap(t, f.get(t)) + })); + const t = e.getIndices(); + t && f.has(t) && e.swap(t, f.get(t)) + })) + })); + for (const t of e.getRoot().listAnimations()) + for (const e of t.listSamplers()) { + const t = e.getInput(), + a = e.getOutput(); + t && f.has(t) && e.swap(t, f.get(t)), a && f.has(a) && e.swap(a, f.get(a)) + } + Array.from(f.keys()).forEach((e => e.dispose())) + }(e), a.has(s.uS.TEXTURE) && function(e, t) { + const a = e.getLogger(), + r = e.getRoot(), + n = r.listTextures(), + i = new Map; + for (let e = 0; e < n.length; e++) { + const a = n[e], + r = a.getImage(); + if (!i.has(a)) + for (let o = e + 1; o < n.length; o++) { + const e = n[o], + c = e.getImage(); + if (i.has(e)) continue; + if (a.getMimeType() !== e.getMimeType()) continue; + if (t.keepUniqueNames && a.getName() !== e.getName()) continue; + const b = a.getSize(), + d = e.getSize(); + b && d && b[0] === d[0] && b[1] === d[1] && r && c && s.oY.equals(r, c) && i.set(e, a) + } + } + a.debug(`dedup: Merged ${i.size} of ${r.listTextures().length} textures.`), Array.from(i.entries()).forEach((([e, t]) => { + e.listParents().forEach((a => { + a instanceof s.fC || a.swap(e, t) + })), e.dispose() + })) + }(e, t), a.has(s.uS.MATERIAL) && function(e, t) { + const a = e.getLogger(), + r = e.getRoot().listMaterials(), + n = new Map, + i = new Map, + o = new Set; + t.keepUniqueNames || o.add("name"); + for (let e = 0; e < r.length; e++) { + const t = r[e]; + if (!n.has(t) && !U(t, i)) + for (let a = e + 1; a < r.length; a++) { + const e = r[a]; + n.has(e) || U(e, i) || t.equals(e, o) && n.set(e, t) + } + } + a.debug(`dedup: Merged ${n.size} of ${r.length} materials.`), Array.from(n.entries()).forEach((([e, t]) => { + e.listParents().forEach((a => { + a instanceof s.fC || a.swap(e, t) + })), e.dispose() + })) + }(e, t), a.has(s.uS.MESH) && function(e, t) { + const a = e.getLogger(), + r = e.getRoot(), + n = new Map; + r.listAccessors().forEach(((e, t) => n.set(e, t))), r.listMaterials().forEach(((e, t) => n.set(e, t))); + const i = r.listMeshes().length, + o = new Map; + for (const e of r.listMeshes()) { + const a = []; + for (const t of e.listPrimitives()) a.push(F(t, n)); + let r = ""; + if (t.keepUniqueNames && (r += e.getName() + ";"), r += a.join(";"), o.has(r)) { + const t = o.get(r); + e.listParents().forEach((a => { + a.propertyType !== s.uS.ROOT && a.swap(e, t) + })), e.dispose() + } else o.set(r, e) + } + a.debug(`dedup: Merged ${i-o.size} of ${i} meshes.`) + }(e, t), a.has(s.uS.SKIN) && function(e, t) { + const a = e.getLogger(), + r = e.getRoot().listSkins(), + n = new Map, + i = new Set(["joints"]); + t.keepUniqueNames || i.add("name"); + for (let e = 0; e < r.length; e++) { + const t = r[e]; + if (!n.has(t)) + for (let a = e + 1; a < r.length; a++) { + const e = r[a]; + n.has(e) || t.equals(e, i) && E(t.listJoints(), e.listJoints()) && n.set(e, t) + } + } + a.debug(`dedup: Merged ${n.size} of ${r.length} skins.`), Array.from(n.entries()).forEach((([e, t]) => { + e.listParents().forEach((a => { + a instanceof s.fC || a.swap(e, t) + })), e.dispose() + })) + }(e, t), r.debug("dedup: Complete.") + })) + } + + function F(e, t) { + const a = []; + for (const s of e.listSemantics()) { + const r = e.getAttribute(s); + a.push(s + ":" + t.get(r)) + } + if (e instanceof s.WV) { + const s = e.getIndices(); + s && a.push("indices:" + t.get(s)); + const r = e.getMaterial(); + r && a.push("material:" + t.get(r)), a.push("mode:" + e.getMode()); + for (const s of e.listTargets()) a.push("target:" + F(s, t)) + } + return a.join(",") + } + + function U(e, t) { + if (t.has(e)) return t.get(e); + const a = e.getGraph(), + s = new Set, + r = a.listParentEdges(e); + for (; r.length > 0;) { + const n = r.pop(); + if (!0 === n.getAttributes().modifyChild) return t.set(e, !0), !0; + const i = n.getChild(); + if (!s.has(i)) + for (const e of a.listChildEdges(i)) r.push(e) + } + return t.set(e, !1), !1 + } + + function P() { + var e = new R(4); + return R != Float32Array && (e[0] = 0, e[1] = 0, e[2] = 0, e[3] = 0), e + } + var L = function(e, t, a) { + return e[0] = t[0] - a[0], e[1] = t[1] - a[1], e[2] = t[2] - a[2], e[3] = t[3] - a[3], e + }, + B = function(e) { + var t = e[0], + a = e[1], + s = e[2], + r = e[3]; + return Math.hypot(t, a, s, r) + }; + P(); + const G = /color|emissive|diffuse/i; + const z = 3 / 255, + V = { + propertyTypes: [s.uS.NODE, s.uS.SKIN, s.uS.MESH, s.uS.CAMERA, s.uS.PRIMITIVE, s.uS.PRIMITIVE_TARGET, s.uS.ANIMATION, s.uS.MATERIAL, s.uS.TEXTURE, s.uS.ACCESSOR, s.uS.BUFFER], + keepLeaves: !1, + keepAttributes: !1, + keepIndices: !1, + keepSolidTextures: !1, + keepExtras: !1 + }; + + function q(e = V) { + const t = g(V, e), + a = new Set(t.propertyTypes), + n = t.keepExtras; + return l("prune", (async e => { + const i = e.getLogger(), + o = e.getRoot(), + c = e.getGraph(), + b = new K, + d = e => b.dispose(e.target); + if (c.addEventListener("node:dispose", d), a.has(s.uS.MESH)) + for (const e of o.listMeshes()) e.listPrimitives().length > 0 || e.dispose(); + if (a.has(s.uS.NODE)) { + if (!t.keepLeaves) + for (const e of o.listScenes()) J(c, e, n); + for (const e of o.listNodes()) H(e, n) + } + if (a.has(s.uS.SKIN)) + for (const e of o.listSkins()) H(e, n); + if (a.has(s.uS.MESH)) + for (const e of o.listMeshes()) H(e, n); + if (a.has(s.uS.CAMERA)) + for (const e of o.listCameras()) H(e, n); + if (a.has(s.uS.PRIMITIVE) && W(c, s.uS.PRIMITIVE, n), a.has(s.uS.PRIMITIVE_TARGET) && W(c, s.uS.PRIMITIVE_TARGET, n), !t.keepAttributes && a.has(s.uS.ACCESSOR)) { + const t = new Map; + for (const a of o.listMeshes()) + for (const s of a.listPrimitives()) { + const a = s.getMaterial(); + if (!a) continue; + const r = X(s, Z(e, s, a)); + Q(s, r), s.listTargets().forEach((e => Q(e, r))), t.has(a) ? t.get(a).add(s) : t.set(a, new Set([s])) + } + for (const [e, a] of t) $(e, Array.from(a)) + } + if (!t.keepIndices && a.has(s.uS.ACCESSOR)) + for (const e of o.listMeshes()) + for (const t of e.listPrimitives()) Y(t); + if (a.has(s.uS.ANIMATION)) + for (const e of o.listAnimations()) { + for (const t of e.listChannels()) t.getTargetNode() || t.dispose(); + if (e.listChannels().length) e.listSamplers().forEach((e => H(e, n))); + else { + const t = e.listSamplers(); + H(e, n), t.forEach((e => H(e, n))) + } + } + if (a.has(s.uS.MATERIAL) && o.listMaterials().forEach((e => H(e, n))), a.has(s.uS.TEXTURE) && (o.listTextures().forEach((e => H(e, n))), t.keepSolidTextures || await async function(e) { + const t = e.getRoot(), + a = e.getGraph(), + n = e.getLogger(), + i = t.listTextures().map((async e => { + var i; + const o = await async function(e) { + const t = await async function(e) { + try { + return await async function(e, t) { + return function(e, t) { + if (!(e instanceof Uint8Array)) throw new Error("[ndarray-pixels] Input must be Uint8Array or Buffer."); + const a = new Blob([e], { + type: t + }), + s = URL.createObjectURL(a); + return new Promise(((e, t) => { + const a = new Image; + a.crossOrigin = "anonymous", a.onload = function() { + URL.revokeObjectURL(s); + const t = new OffscreenCanvas(a.width, a.height).getContext("2d"); + t.drawImage(a, 0, 0); + const n = t.getImageData(0, 0, a.width, a.height); + e(r(new Uint8Array(n.data), [a.width, a.height, 4], [4, 4 * a.width, 1], 0)) + }, a.onerror = e => { + URL.revokeObjectURL(s), t(e) + }, a.src = s + })) + }(e, t) + }(e.getImage(), e.getMimeType()) + } catch (e) { + return null + } + }(e); + if (!t) return null; + const a = [1 / 0, 1 / 0, 1 / 0, 1 / 0], + s = [-1 / 0, -1 / 0, -1 / 0, -1 / 0], + n = [0, 0, 0, 0], + [i, o] = t.shape; + for (let e = 0; e < i; e++) { + for (let r = 0; r < o; r++) + for (let n = 0; n < 4; n++) a[n] = Math.min(a[n], t.get(e, r, n)), s[n] = Math.max(s[n], t.get(e, r, n)); + if (B(L(n, s, a)) / 255 > z) return null + } + return function(e, t, a) { + return e[0] = t[0] * a, e[1] = t[1] * a, e[2] = t[2] * a, e[3] = t[3] * a, e + }(n, (d = a, (c = n)[0] = (b = s)[0] + d[0], c[1] = b[1] + d[1], c[2] = b[2] + d[2], c[3] = b[3] + d[3], c), .5 / 255); + var c, b, d + }(e); + if (!o) return; + "srgb" === function(e) { + return e.getGraph().listParentEdges(e).some((e => e.getAttributes().isColor || G.test(e.getName()))) ? "srgb" : null + }(e) && s.i5.convertSRGBToLinear(o, o); + const c = e.getName() || e.getURI(), + b = null == (i = e.getSize()) ? void 0 : i.join("x"), + d = function(e) { + const t = s.BB.fromGraph(e.getGraph()).getRoot(), + a = e.getGraph().listParentEdges(e).filter((e => e.getParent() !== t)).map((e => e.getName())); + return Array.from(new Set(a)) + }(e); + for (const s of a.listParentEdges(e)) { + const e = s.getParent(); + e !== t && ee(e, o, s.getName(), n) && s.dispose() + } + 1 === e.listParents().length && (e.dispose(), n.debug(`prune: Removed solid-color texture "${c}" (${b}px ${d.join(", ")})`)) + })); + await Promise.all(i) + }(e)), a.has(s.uS.ACCESSOR) && o.listAccessors().forEach((e => H(e, n))), a.has(s.uS.BUFFER) && o.listBuffers().forEach((e => H(e, n))), c.removeEventListener("node:dispose", d), b.empty()) i.info("prune: No unused properties found."); + else { + const e = b.entries().map((([e, t]) => `${e} (${t})`)).join(", "); + i.info(`prune: Removed types... ${e}`) + } + i.debug("prune: Complete.") + })) + } + class K { + constructor() { + this.disposed = {} + } + empty() { + for (const e in this.disposed) return !1; + return !0 + } + entries() { + return Object.entries(this.disposed) + } + dispose(e) { + this.disposed[e.propertyType] = this.disposed[e.propertyType] || 0, this.disposed[e.propertyType]++ + } + } + + function H(e, t) { + const a = e.listParents().filter((e => !(e instanceof s.fC || e instanceof s.Zt))), + r = t && !I(e.getExtras()); + a.length || r || e.dispose() + } + + function W(e, t, a) { + for (const s of e.listEdges()) { + const e = s.getParent(); + e.propertyType === t && H(e, a) + } + } + + function J(e, t, a) { + if (t.listChildren().forEach((t => J(e, t, a))), t instanceof s.xs) return; + const r = e.listParentEdges(t).some((e => { + const t = e.getParent().propertyType; + return t !== s.uS.ROOT && t !== s.uS.SCENE && t !== s.uS.NODE + })), + n = 0 === e.listChildren(t).length, + i = a && !I(t.getExtras()); + !n || r || i || t.dispose() + } + + function Q(e, t) { + for (const a of t) e.setAttribute(a, null) + } + + function Y(e) { + const t = e.getIndices(), + a = t && t.getArray(), + s = e.listAttributes()[0]; + if (a && s && t.getCount() === s.getCount()) { + for (let e = 0, t = a.length; e < t; e++) + if (e !== a[e]) return; + e.setIndices(null) + } + } + + function X(e, t) { + const a = []; + for (const s of e.listSemantics())("NORMAL" === s && !t.has(s) || "TANGENT" === s && !t.has(s) || s.startsWith("TEXCOORD_") && !t.has(s) || s.startsWith("COLOR_") && "COLOR_0" !== s) && a.push(s); + return a + } + + function Z(e, t, a, r = new Set) { + const n = e.getGraph().listChildEdges(a), + i = new Set; + for (const e of n) e.getChild() instanceof s.xE && i.add(e.getName()); + for (const a of n) { + const n = a.getName(), + o = a.getChild(); + o instanceof s.lO && i.has(n.replace(/Info$/, "")) && r.add(`TEXCOORD_${o.getTexCoord()}`), o instanceof s.xE && n.match(/normalTexture/i) && r.add("TANGENT"), o instanceof s.eY && Z(e, t, o, r) + } + const o = a instanceof s.F5 && !a.getExtension("KHR_materials_unlit"), + c = t.getMode() === s.WV.Mode.POINTS; + return o && !c && r.add("NORMAL"), r + } + + function $(e, t) { + const a = function(e) { + const t = e.getGraph(), + a = new Set, + r = new Set; + return function e(n) { + const i = new Set; + for (const e of t.listChildEdges(n)) e.getChild() instanceof s.xE && i.add(e.getName() + "Info"); + for (const o of t.listChildEdges(n)) { + const t = o.getChild(); + a.has(t) || (a.add(t), t instanceof s.lO && i.has(o.getName()) ? r.add(t) : t instanceof s.eY && e(t)) + } + }(e), Array.from(r) + }(e), + r = new Set(a.map((e => e.getTexCoord()))), + n = Array.from(r).sort(), + i = new Map(n.map(((e, t) => [e, t]))), + o = new Map(n.map(((e, t) => [`TEXCOORD_${e}`, `TEXCOORD_${t}`]))); + for (const e of a) { + const t = e.getTexCoord(); + e.setTexCoord(i.get(t)) + } + for (const e of t) { + const t = e.listSemantics().filter((e => e.startsWith("TEXCOORD_"))).sort(); + c(e, t), e.listTargets().forEach((e => c(e, t))) + } + + function c(e, t) { + for (const a of t) { + const t = e.getAttribute(a); + if (!t) continue; + const s = o.get(a); + s !== a && (e.setAttribute(s, t), e.setAttribute(a, null)) + } + } + } + + function ee(e, t, a, r) { + if (e instanceof s.F5) switch (a) { + case "baseColorTexture": + return e.setBaseColorFactor((n = t, i = t, o = e.getBaseColorFactor(), n[0] = i[0] * o[0], n[1] = i[1] * o[1], n[2] = i[2] * o[2], n[3] = i[3] * o[3], n)), !0; + case "emissiveTexture": + return e.setEmissiveFactor(function(e, t, a) { + return e[0] = t[0] * a[0], e[1] = t[1] * a[1], e[2] = t[2] * a[2], e + }([0, 0, 0], t.slice(0, 3), e.getEmissiveFactor())), !0; + case "occlusionTexture": + return Math.abs(t[0] - 1) <= z; + case "metallicRoughnessTexture": + return e.setRoughnessFactor(t[1] * e.getRoughnessFactor()), e.setMetallicFactor(t[2] * e.getMetallicFactor()), !0; + case "normalTexture": + return B(L(P(), t, [.5, .5, 1, 1])) <= z + } + var n, i, o; + return r.warn(`prune: Detected single-color ${a} texture. Pruning ${a} not yet supported.`), !1 + } + const te = 2 ** 32 - 1; + class ae { + constructor(e) { + this.attributes = [], this.u8 = void 0, this.u32 = void 0; + let t = 0; + for (const a of x(e)) t += this._initAttribute(a); + this.u8 = new Uint8Array(t), this.u32 = new Uint32Array(this.u8.buffer) + } + _initAttribute(e) { + const t = e.getArray(), + a = new Uint8Array(t.buffer, t.byteOffset, t.byteLength), + r = e.getElementSize() * e.getComponentSize(), + n = s.oY.padNumber(r); + return this.attributes.push({ + u8: a, + byteStride: r, + paddedByteStride: n + }), n + } + hash(e) { + let t = 0; + for (const { + u8: a, + byteStride: s, + paddedByteStride: r + } + of this.attributes) { + for (let n = 0; n < r; n++) this.u8[t + n] = n < s ? a[e * s + n] : 0; + t += r + } + return function(e, t) { + const a = 1540483477; + for (let s = 0, r = t.length; s < r; s++) { + let r = t[s]; + r = Math.imul(r, a) >>> 0, r = (r ^ r >> 24) >>> 0, r = Math.imul(r, a) >>> 0, e = ((e = Math.imul(e, a) >>> 0) ^ r) >>> 0 + } + return e + }(0, this.u32) + } + equal(e, t) { + for (const { + u8: a, + byteStride: s + } + of this.attributes) + for (let r = 0; r < s; r++) + if (a[e * s + r] !== a[t * s + r]) return !1; + return !0 + } + } + + function se(e, t, a, s, r = 4294967295) { + const n = t - 1; + let i = a.hash(s) & n; + for (let t = 0; t <= n; t++) { + const o = e[i]; + if (o === r || a.equal(o, s)) return i; + i = i + t + 1 & n + } + throw new Error("Hash table full.") + } + var re; + + function ne(e, t) { + const a = e.getAttribute("POSITION"), + s = e.getIndices(); + switch (t) { + case re.RENDER: + return s ? s.getCount() : a.getCount(); + case re.RENDER_CACHED: + return s ? new Set(s.getArray()).size : a.getCount(); + case re.UPLOAD_NAIVE: + case re.UPLOAD: + return a.getCount(); + case re.DISTINCT: + case re.DISTINCT_POSITION: + return function(e) { + throw new Error(`Not implemented: ${e}`) + }(t); + case re.UNUSED: + return s ? a.getCount() - new Set(s.getArray()).size : 0; + default: + return function(e) { + throw new Error(`Unexpected value: ${e}`) + }(t) + } + } + + function ie(e, t, a) { + const r = s.BB.fromGraph(e.getGraph()); + t && a || ([t, a] = function(e) { + const t = ne(e, re.UPLOAD), + a = e.getIndices(), + s = a ? a.getArray() : null; + if (!a || !s) return [w(t, 1e6), t]; + const r = new Uint32Array(t).fill(te); + let n = 0; + for (let e = 0; e < s.length; e++) { + const t = s[e]; + r[t] === te && (r[t] = n++) + } + return [r, n] + }(e)); + const n = e.getIndices(), + i = n ? n.getArray() : null, + o = ne(e, re.RENDER), + c = r.createAccessor(), + b = o, + d = A(b, a); + for (let e = 0; e < b; e++) d[e] = t[i ? i[e] : e]; + e.setIndices(c.setArray(d)); + const f = x(e); + for (const s of e.listAttributes()) { + const i = j(r, s); + oe(s, n, t, i, a), e.swap(s, i) + } + for (const s of e.listTargets()) + for (const e of s.listAttributes()) { + const i = j(r, e); + oe(e, n, t, i, a), s.swap(e, i) + } + n && 1 === n.listParents().length && n.dispose(); + for (const e of f) 1 === e.listParents().length && e.dispose(); + return e + } + + function oe(e, t, a, s, r) { + const n = e.getElementSize(), + i = e.getArray(), + o = t ? t.getArray() : null, + c = t ? t.getCount() : e.getCount(), + b = new i.constructor(r * n), + d = new Uint8Array(r); + for (let e = 0; e < c; e++) { + const t = o ? o[e] : e, + s = a[t]; + if (!d[s]) { + for (let e = 0; e < n; e++) b[s * n + e] = i[t * n + e]; + d[s] = 1 + } + } + return s.setArray(b) + }! function(e) { + e.RENDER = "render", e.RENDER_CACHED = "render-cached", e.UPLOAD = "upload", e.UPLOAD_NAIVE = "upload-naive", e.DISTINCT = "distinct", e.DISTINCT_POSITION = "distinct-position", e.UNUSED = "unused" + }(re || (re = {})); + const ce = { + overwrite: !0, + cleanup: !0 + }; + + function be(e = ce) { + const t = g(ce, e); + return l("weld", (async e => { + const a = e.getLogger(); + for (const a of e.getRoot().listMeshes()) { + for (const e of a.listPrimitives()) de(e, t), 0 === ne(e, re.RENDER) && e.dispose(); + 0 === a.listPrimitives().length && a.dispose() + } + t.cleanup && await e.transform(q({ + propertyTypes: [s.uS.ACCESSOR, s.uS.NODE], + keepAttributes: !0, + keepIndices: !0, + keepLeaves: !1 + }), O({ + propertyTypes: [s.uS.ACCESSOR] + })), a.debug("weld: Complete.") + })) + } + + function de(e, t = ce) { + const a = e.getGraph(), + r = s.BB.fromGraph(a).getLogger(), + n = i({}, ce, t); + if (e.getIndices() && !n.overwrite) return; + if (e.getMode() === s.WV.Mode.POINTS) return; + const o = e.getAttribute("POSITION").getCount(), + c = e.getIndices(), + b = null == c ? void 0 : c.getArray(), + d = c ? c.getCount() : o, + f = new ae(e), + h = (g = o + o / 4, Math.pow(2, Math.ceil(Math.log(g) / Math.LN2))), + u = new Uint32Array(h).fill(te), + l = new Uint32Array(o).fill(te); + var g; + let p = 0; + for (let e = 0; e < d; e++) { + const t = b ? b[e] : e; + if (l[t] !== te) continue; + const a = se(u, h, f, t, te), + s = u[a]; + s === te ? (u[a] = t, l[t] = p++) : l[t] = l[s] + } + r.debug(`weld: ${y(o,p)} vertices.`), ie(e, l, p) + } + const { + FLOAT: fe + } = s.U_.ComponentType; + + function he(e, t) { + const a = e.getAttribute("POSITION"); + a && ue(t, a); + const r = e.getAttribute("NORMAL"); + r && le(t, r); + const n = e.getAttribute("TANGENT"); + n && ge(t, n); + for (const a of e.listTargets()) { + const e = a.getAttribute("POSITION"); + e && ue(t, e); + const s = a.getAttribute("NORMAL"); + s && le(t, s); + const r = a.getAttribute("TANGENT"); + r && ge(t, r) + } + var i, o, c, b, d, f, h, u, l, g, p, m, y, x, T, E, j; + o = (i = t)[0], c = i[1], b = i[2], d = i[3], f = i[4], h = i[5], u = i[6], l = i[7], g = i[8], p = i[9], m = i[10], y = i[11], x = i[12], T = i[13], E = i[14], (o * h - c * f) * (m * (j = i[15]) - y * E) - (o * u - b * f) * (p * j - y * T) + (o * l - d * f) * (p * E - m * T) + (c * u - b * h) * (g * j - y * x) - (c * l - d * h) * (g * E - m * x) + (b * l - d * u) * (g * T - p * x) < 0 && function(e) { + if (e.getMode() !== s.WV.Mode.TRIANGLES) return; + e.getIndices() || de(e); + const t = e.getIndices(); + for (let e = 0, a = t.getCount(); e < a; e += 3) { + const a = t.getScalar(e), + s = t.getScalar(e + 2); + t.setScalar(e, s), t.setScalar(e + 2, a) + } + }(e) + } + + function ue(e, t) { + const a = t.getComponentType(), + r = t.getNormalized(), + n = t.getArray(), + i = a === fe ? n : new Float32Array(n.length), + o = M(); + for (let g = 0, p = t.getCount(); g < p; g++) r ? (o[0] = s.M8.decodeNormalizedInt(n[3 * g], a), o[1] = s.M8.decodeNormalizedInt(n[3 * g + 1], a), o[2] = s.M8.decodeNormalizedInt(n[3 * g + 2], a)) : (o[0] = n[3 * g], o[1] = n[3 * g + 1], o[2] = n[3 * g + 2]), c = o, d = e, f = void 0, h = void 0, u = void 0, l = void 0, f = (b = o)[0], h = b[1], u = b[2], l = (l = d[3] * f + d[7] * h + d[11] * u + d[15]) || 1, c[0] = (d[0] * f + d[4] * h + d[8] * u + d[12]) / l, c[1] = (d[1] * f + d[5] * h + d[9] * u + d[13]) / l, c[2] = (d[2] * f + d[6] * h + d[10] * u + d[14]) / l, i[3 * g] = o[0], i[3 * g + 1] = o[1], i[3 * g + 2] = o[2]; + var c, b, d, f, h, u, l; + t.setArray(i).setNormalized(!1) + } + + function le(e, t) { + const a = t.getArray(), + r = t.getNormalized(), + n = t.getComponentType(), + i = (o = new R(9), R != Float32Array && (o[1] = 0, o[2] = 0, o[3] = 0, o[5] = 0, o[6] = 0, o[7] = 0), o[0] = 1, o[4] = 1, o[8] = 1, o); + var o; + ! function(e, t) { + e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[4], e[4] = t[5], e[5] = t[6], e[6] = t[8], e[7] = t[9], e[8] = t[10] + }(i, e), + function(e, t) { + var a = t[0], + s = t[1], + r = t[2], + n = t[3], + i = t[4], + o = t[5], + c = t[6], + b = t[7], + d = t[8], + f = d * i - o * b, + h = -d * n + o * c, + u = b * n - i * c, + l = a * f + s * h + r * u; + l && (l = 1 / l, e[0] = f * l, e[1] = (-d * s + r * b) * l, e[2] = (o * s - r * i) * l, e[3] = h * l, e[4] = (d * a - r * c) * l, e[5] = (-o * a + r * n) * l, e[6] = u * l, e[7] = (-b * a + s * c) * l, e[8] = (i * a - s * n) * l) + }(i, i), + function(e, t) { + if (e === t) { + var a = t[1], + s = t[2], + r = t[5]; + e[1] = t[3], e[2] = t[6], e[3] = a, e[5] = t[7], e[6] = s, e[7] = r + } else e[0] = t[0], e[1] = t[3], e[2] = t[6], e[3] = t[1], e[4] = t[4], e[5] = t[7], e[6] = t[2], e[7] = t[5], e[8] = t[8] + }(i, i); + const c = M(); + for (let e = 0, o = t.getCount(); e < o; e++) r ? (c[0] = s.M8.decodeNormalizedInt(a[3 * e], n), c[1] = s.M8.decodeNormalizedInt(a[3 * e + 1], n), c[2] = s.M8.decodeNormalizedInt(a[3 * e + 2], n)) : (c[0] = a[3 * e], c[1] = a[3 * e + 1], c[2] = a[3 * e + 2]), C(c, c, i), _(c, c), r ? (a[3 * e] = s.M8.decodeNormalizedInt(c[0], n), a[3 * e + 1] = s.M8.decodeNormalizedInt(c[1], n), a[3 * e + 2] = s.M8.decodeNormalizedInt(c[2], n)) : (a[3 * e] = c[0], a[3 * e + 1] = c[1], a[3 * e + 2] = c[2]) + } + + function ge(e, t) { + const a = t.getArray(), + r = t.getNormalized(), + n = t.getComponentType(), + i = M(); + for (let o = 0, c = t.getCount(); o < c; o++) r ? (i[0] = s.M8.decodeNormalizedInt(a[4 * o], n), i[1] = s.M8.decodeNormalizedInt(a[4 * o + 1], n), i[2] = s.M8.decodeNormalizedInt(a[4 * o + 2], n)) : (i[0] = a[4 * o], i[1] = a[4 * o + 1], i[2] = a[4 * o + 2]), i[0] = e[0] * i[0] + e[4] * i[1] + e[8] * i[2], i[1] = e[1] * i[0] + e[5] * i[1] + e[9] * i[2], i[2] = e[2] * i[0] + e[6] * i[1] + e[10] * i[2], _(i, i), r ? (a[4 * o] = s.M8.decodeNormalizedInt(i[0], n), a[4 * o + 1] = s.M8.decodeNormalizedInt(i[1], n), a[4 * o + 2] = s.M8.decodeNormalizedInt(i[2], n)) : (a[4 * o] = i[0], a[4 * o + 1] = i[1], a[4 * o + 2] = i[2]) + } + const { + LINES: pe, + LINE_STRIP: me, + LINE_LOOP: ye, + TRIANGLES: xe, + TRIANGLE_STRIP: Te, + TRIANGLE_FAN: Ee + } = s.WV.Mode; + + function je(e) { + const t = e.getGraph(), + a = s.BB.fromGraph(t); + e.getIndices() || de(e); + const r = e.getIndices(), + n = r.getArray(), + i = p(e), + o = new(0, s.tn[r.getComponentType()])(2 * i), + c = e.getMode(); + if (c === me) + for (let e = 0; e < i; e++) o[2 * e] = n[e], o[2 * e + 1] = n[e + 1]; + else { + if (c !== ye) throw new Error("Only LINE_STRIP and LINE_LOOP may be converted to LINES."); + for (let e = 0; e < i; e++) e < i - 1 ? (o[2 * e] = n[e], o[2 * e + 1] = n[e + 1]) : (o[2 * e] = n[e], o[2 * e + 1] = n[0]) + } + e.setMode(pe); + const b = a.getRoot(); + r.listParents().some((t => t !== b && t !== e)) ? e.setIndices(j(a, r).setArray(o)) : r.setArray(o) + } + + function we(e) { + const t = e.getGraph(), + a = s.BB.fromGraph(t); + e.getIndices() || de(e); + const r = e.getIndices(), + n = r.getArray(), + i = p(e), + o = new(0, s.tn[r.getComponentType()])(3 * i), + c = e.getMode(); + if (c === Te) + for (let e = 0, t = n.length; e < t - 2; e++) e % 2 ? (o[3 * e] = n[e + 1], o[3 * e + 1] = n[e], o[3 * e + 2] = n[e + 2]) : (o[3 * e] = n[e], o[3 * e + 1] = n[e + 1], o[3 * e + 2] = n[e + 2]); + else { + if (c !== Ee) throw new Error("Only TRIANGLE_STRIP and TRIANGLE_FAN may be converted to TRIANGLES."); + for (let e = 0; e < i; e++) o[3 * e] = n[0], o[3 * e + 1] = n[e + 1], o[3 * e + 2] = n[e + 2] + } + e.setMode(xe); + const b = a.getRoot(); + r.listParents().some((t => t !== b && t !== e)) ? e.setIndices(j(a, r).setArray(o)) : r.setArray(o) + } + + function Ae(e) { + const t = e.getArray(); + if (!t) return; + const a = Ie(t, e.getComponentType(), e.getNormalized()); + e.setArray(a).setNormalized(!1) + } + + function Ie(e, t, a) { + const r = new Float32Array(e.length); + for (let n = 0, i = e.length; n < i; n++) r[n] = a ? s.M8.decodeNormalizedInt(e[n], t) : e[n]; + return r + } + const { + TEXTURE_INFO: Ne, + ROOT: ke + } = s.uS; + new Set([Ne, ke]); + const ve = { + method: "edgebreaker", + encodeSpeed: 5, + decodeSpeed: 5, + quantizePosition: 14, + quantizeNormal: 10, + quantizeColor: 8, + quantizeTexcoord: 12, + quantizeGeneric: 12, + quantizationVolume: "mesh" + }; + + function Re(e = ve) { + const t = g(ve, e); + return l("draco", (async e => { + await e.transform(be()), e.createExtension(n.r7).setRequired(!0).setEncoderOptions({ + method: "edgebreaker" === t.method ? n.r7.EncoderMethod.EDGEBREAKER : n.r7.EncoderMethod.SEQUENTIAL, + encodeSpeed: t.encodeSpeed, + decodeSpeed: t.decodeSpeed, + quantizationBits: { + POSITION: t.quantizePosition, + NORMAL: t.quantizeNormal, + COLOR: t.quantizeColor, + TEX_COORD: t.quantizeTexcoord, + GENERIC: t.quantizeGeneric + }, + quantizationVolume: t.quantizationVolume + }) + })) + } + const Se = { + cleanup: !0 + }; + + function Me(e = Se) { + const t = g(Se, e); + return l("flatten", (async e => { + const a = e.getRoot(), + r = e.getLogger(), + n = new Set; + for (const e of a.listSkins()) + for (const t of e.listJoints()) n.add(t); + const i = new Set; + for (const e of a.listAnimations()) + for (const t of e.listChannels()) { + const e = t.getTargetNode(); + e && "weights" !== t.getTargetPath() && i.add(e) + } + const o = new Set, + c = new Set; + for (const e of a.listScenes()) e.traverse((e => { + const t = e.getParentNode(); + t && ((n.has(t) || o.has(t)) && o.add(e), (i.has(t) || c.has(t)) && c.add(e)) + })); + for (const e of a.listScenes()) e.traverse((e => { + i.has(e) || o.has(e) || c.has(e) || v(e) + })); + i.size && r.debug("flatten: Flattening node hierarchies with TRS animation not yet supported."), t.cleanup && await e.transform(q({ + propertyTypes: [s.uS.NODE], + keepLeaves: !1 + })), r.debug("flatten: Complete.") + })) + } + const _e = { + skipValidation: !1 + }, + Ce = 2 ** 32 - 1, + { + LINE_STRIP: De, + LINE_LOOP: Oe, + TRIANGLE_STRIP: Fe, + TRIANGLE_FAN: Ue + } = s.WV.Mode; + + function Pe(e, t = {}) { + const a = g(_e, t), + r = e[0], + n = s.BB.fromGraph(r.getGraph()); + if (!a.skipValidation && new Set(e.map(N)).size > 1) throw new Error("Requires >=2 Primitives, sharing the same Material and Mode, with compatible vertex attributes and indices."); + for (const t of e) switch (t.getMode()) { + case De: + case Oe: + je(t); + break; + case Fe: + case Ue: + we(t) + } + const i = [], + o = new Uint32Array(e.length); + let c = 0, + b = 0; + for (let t = 0; t < e.length; t++) { + const a = e[t], + s = a.getIndices(), + r = a.getAttribute("POSITION").getCount(), + n = s ? s.getArray() : null, + d = s ? s.getCount() : r, + f = new Uint32Array(r).fill(Ce); + for (let e = 0; e < d; e++) { + const a = n ? n[e] : e; + f[a] === Ce && (f[a] = c++, o[t]++) + } + i.push(f), b += d + } + const d = n.createPrimitive().setMode(r.getMode()).setMaterial(r.getMaterial()); + for (const e of r.listSemantics()) { + const t = r.getAttribute(e), + a = s.tn[t.getComponentType()], + i = j(n, t).setArray(new a(c * t.getElementSize())); + d.setAttribute(e, i) + } + const f = r.getIndices(), + h = f ? j(n, f).setArray(A(b, c)) : null; + d.setIndices(h); + let u = 0; + for (let t = 0; t < i.length; t++) { + const a = e[t], + s = a.getIndices(), + r = s ? s.getCount() : -1, + n = i[t]; + s && h && (Be(s, n, h, u), u += r); + for (const e of d.listSemantics()) Le(a.getAttribute(e), s, n, d.getAttribute(e)) + } + return d + } + + function Le(e, t, a, s) { + const r = e.getElementSize(), + n = t ? t.getArray() : null, + i = e.getCount(), + o = e.getArray(), + c = s.getArray(), + b = new Uint8Array(e.getCount()); + for (let e = 0, s = t ? t.getCount() : i; e < s; e++) { + const t = n ? n[e] : e, + s = a[t]; + if (!b[s]) { + for (let e = 0; e < r; e++) c[s * r + e] = o[t * r + e]; + b[s] = 1 + } + } + } + + function Be(e, t, a, s) { + const r = e.getCount(), + n = e.getArray(), + i = a.getArray(); + for (let e = 0; e < r; e++) { + const a = t[n[e]]; + i[s + e] = a + } + } + const { + ROOT: Ge, + NODE: ze, + MESH: Ve, + PRIMITIVE: qe, + ACCESSOR: Ke + } = s.uS, He = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], We = { + keepMeshes: !1, + keepNamed: !1, + cleanup: !0 + }; + + function Je(e = We) { + const t = g(We, e); + return l("join", (async e => { + const a = e.getRoot(), + s = e.getLogger(); + for (const s of a.listScenes()) Qe(e, s, t), s.traverse((a => Qe(e, a, t))); + t.cleanup && await e.transform(q({ + propertyTypes: [ze, Ve, qe, Ke], + keepAttributes: !0, + keepIndices: !0, + keepLeaves: !1 + })), s.debug("join: Complete.") + })) + } + + function Qe(e, t, a) { + const r = e.getLogger(), + n = {}, + i = t.listChildren(); + for (let e = 0; e < i.length; e++) { + const t = i[e]; + if (t.listParents().some((e => e instanceof s.Zt))) continue; + const r = t.getMesh(); + if (r && !t.getExtension("EXT_mesh_gpu_instancing") && !t.getSkin()) + for (const s of r.listPrimitives()) { + if (s.listTargets().length > 0) continue; + const i = s.getMaterial(); + if (i && i.getExtension("KHR_materials_volume")) continue; + ie(s), Xe(s); + let o = N(s); + const c = r.getName() || t.getName(); + (a.keepMeshes || a.keepNamed && c) && (o += `|${e}`), o in n || (n[o] = { + prims: [], + primMeshes: [], + primNodes: [], + dstNode: t, + dstMesh: void 0 + }); + const b = n[o]; + b.prims.push(s), b.primNodes.push(t) + } + } + const o = Object.values(n).filter((({ + prims: e + }) => e.length > 1)), + c = new Set(o.flatMap((e => e.primNodes))); + for (const e of c) { + const t = e.getMesh(), + a = t.listParents().some((t => t.propertyType !== Ge && e !== t)); + a && e.setMesh(t.clone()) + } + for (const e of o) { + const { + dstNode: t, + primNodes: a + } = e; + e.dstMesh = t.getMesh(), e.primMeshes = a.map((e => e.getMesh())) + } + for (const e of o) { + const { + prims: t, + primNodes: a, + primMeshes: n, + dstNode: i, + dstMesh: o + } = e, c = i.getMatrix(); + for (let e = 0; e < t.length; e++) { + const r = a[e], + o = n[e]; + let m = t[e]; + o.removePrimitive(m), m.listParents().some((e => e.propertyType !== s.uS.ROOT)) && (m = t[e] = Ye(t[e])), r !== i && (S(He, (b = He, f = void 0, h = void 0, u = void 0, l = void 0, g = void 0, p = void 0, y = void 0, x = void 0, T = void 0, E = void 0, j = void 0, w = void 0, A = void 0, I = void 0, k = void 0, v = void 0, R = void 0, M = void 0, _ = void 0, C = void 0, D = void 0, O = void 0, F = void 0, U = void 0, P = void 0, L = void 0, B = void 0, G = void 0, z = void 0, f = (d = c)[0], h = d[1], u = d[2], l = d[3], g = d[4], p = d[5], y = d[6], x = d[7], T = d[8], E = d[9], j = d[10], w = d[11], A = d[12], I = d[13], k = d[14], v = d[15], (z = (R = f * p - h * g) * (G = j * v - w * k) - (M = f * y - u * g) * (B = E * v - w * I) + (_ = f * x - l * g) * (L = E * k - j * I) + (C = h * y - u * p) * (P = T * v - w * A) - (D = h * x - l * p) * (U = T * k - j * A) + (O = u * x - l * y) * (F = T * I - E * A)) ? (z = 1 / z, b[0] = (p * G - y * B + x * L) * z, b[1] = (u * B - h * G - l * L) * z, b[2] = (I * O - k * D + v * C) * z, b[3] = (j * D - E * O - w * C) * z, b[4] = (y * P - g * G - x * U) * z, b[5] = (f * G - u * P + l * U) * z, b[6] = (k * _ - A * O - v * M) * z, b[7] = (T * O - j * _ + w * M) * z, b[8] = (g * B - p * P + x * F) * z, b[9] = (h * P - f * B - l * F) * z, b[10] = (A * D - I * _ + v * R) * z, b[11] = (E * _ - T * D - w * R) * z, b[12] = (p * U - g * L - y * F) * z, b[13] = (f * L - h * U + u * F) * z, b[14] = (I * M - A * C - k * R) * z, b[15] = (T * C - E * M + j * R) * z, b) : null), r.getMatrix()), he(m, He)) + } + const N = Pe(t), + V = N.listAttributes()[0].getCount(); + o.addPrimitive(N), r.debug(`join: Joined Primitives (${t.length}) containing ${m(V)} vertices under Node "${i.getName()}".`) + } + var b, d, f, h, u, l, g, p, y, x, T, E, j, w, A, I, k, v, R, M, _, C, D, O, F, U, P, L, B, G, z + } + + function Ye(e) { + const t = e.clone(); + for (const e of t.listSemantics()) t.setAttribute(e, t.getAttribute(e).clone()); + const a = t.getIndices(); + return a && t.setIndices(a.clone()), t + } + + function Xe(e) { + for (const t of ["POSITION", "NORMAL", "TANGENT"]) { + const a = e.getAttribute(t); + a && Ae(a) + } + } + Int8Array, Int16Array, Int32Array; + const { + TRANSLATION: Ze, + ROTATION: $e, + SCALE: et, + WEIGHTS: tt + } = s.Zt.TargetPath; + + function at(e, t, a, s) { + if (s.has(t) && s.get(t).has(a)) return s.get(t).get(a); + const r = t.getArray(), + n = new(0, r.constructor)(a.getCount() * t.getElementSize()), + i = a.getArray(), + o = t.getElementSize(); + for (let e = 0, t = a.getCount(); e < t; e++) + for (let t = 0; t < o; t++) n[e * o + t] = r[i[e] * o + t]; + s.has(t) || s.set(t, new Map); + const c = j(e, t).setArray(n); + return s.get(t).set(a, c), c + } + var st; + + function rt(e, t, a) { + for (let s = 0, r = a.length; s < r; s++) a[s] = e[t * r + s]; + return a + } + + function nt(e, t, a) { + for (let s = 0, r = a.length; s < r; s++) e[t * r + s] = a[s] + } + + function it(e, t, a = 0) { + if (e.length !== t.length) return !1; + for (let s = 0; s < e.length; s++) + if (Math.abs(e[s] - t[s]) > a) return !1; + return !0 + } + + function ot(e, t, a) { + return e * (1 - a) + t * a + } + + function ct(e, t, a, s) { + for (let r = 0; r < t.length; r++) e[r] = ot(t[r], a[r], s); + return e + } + + function bt(e, t, a, s) { + let r, n, i, o, c, b = t[0], + d = t[1], + f = t[2], + h = t[3], + u = a[0], + l = a[1], + g = a[2], + p = a[3]; + return n = b * u + d * l + f * g + h * p, n < 0 && (n = -n, u = -u, l = -l, g = -g, p = -p), 1 - n > 1e-6 ? (r = Math.acos(n), i = Math.sin(r), o = Math.sin((1 - s) * r) / i, c = Math.sin(s * r) / i) : (o = 1 - s, c = s), e[0] = o * b + c * u, e[1] = o * d + c * l, e[2] = o * f + c * g, e[3] = o * h + c * p, e + } + + function dt(e, t) { + const a = function(e, t) { + return e[0] * t[0] + e[1] * t[1] + e[2] * t[2] + e[3] * t[3] + }(e, t); + return Math.acos(2 * a * a - 1) + } + i({ + level: "high" + }, { + pattern: /.*/, + quantizationVolume: "mesh", + quantizePosition: 14, + quantizeNormal: 10, + quantizeTexcoord: 12, + quantizeColor: 8, + quantizeWeight: 8, + quantizeGeneric: 12, + normalizeWeights: !0, + cleanup: !0 + }), + function(e) { + e[e.STEP = 0] = "STEP", e[e.LERP = 1] = "LERP", e[e.SLERP = 2] = "SLERP" + }(st || (st = {})); + const ft = new Float32Array(0), + ht = { + ready: Promise.resolve(), + resample: function(e, t, a, s = 1e-4) { + const r = t.length / e.length, + n = new Array(r).fill(0), + i = new Array(r).fill(0), + o = new Array(r).fill(0), + c = new Array(r).fill(0), + b = e.length - 1; + let d = 1; + for (let r = 1; r < b; ++r) { + const b = e[d - 1], + f = e[r], + h = e[r + 1], + u = (f - b) / (h - b); + let l = !1; + if (f !== h && (1 !== r || f !== e[0])) + if (rt(t, d - 1, c), rt(t, r, i), rt(t, r + 1, o), "slerp" === a) { + const e = bt(n, c, o, u), + t = dt(c, i) + dt(i, o); + l = !it(i, e, s) || t + Number.EPSILON >= Math.PI + } else "lerp" === a ? l = !it(i, ct(n, c, o, u), s) : "step" === a && (l = !it(i, c) || !it(i, o)); + l && (r !== d && (e[d] = e[r], nt(t, d, rt(t, r, n))), d++) + } + return b > 0 && (e[d] = e[b], nt(t, d, rt(t, b, n)), d++), d + }, + tolerance: 1e-4, + cleanup: !0 + }; + + function ut(e = ht) { + const t = g(ht, e); + return l("resample", (async e => { + const a = new Set, + r = e.getRoot().listAccessors().length, + n = e.getLogger(), + i = t.ready, + o = t.resample; + await i; + for (const s of e.getRoot().listAnimations()) { + const e = new Map; + for (const t of s.listChannels()) e.set(t.getSampler(), t.getTargetPath()); + for (const r of s.listSamplers()) { + const s = r.getInterpolation(); + if ("STEP" === s || "LINEAR" === s) { + const n = r.getInput(), + i = r.getOutput(); + a.add(n), a.add(i); + const c = lt(n.getArray(), n.getComponentType(), n.getNormalized()), + b = lt(i.getArray(), i.getComponentType(), i.getNormalized()), + d = b.length / c.length, + f = c.length; + let h; + if (h = "STEP" === s ? o(c, b, "step", t.tolerance) : "rotation" === e.get(r) ? o(c, b, "slerp", t.tolerance) : o(c, b, "lerp", t.tolerance), h < f) { + const e = n.getArray(), + t = i.getArray(), + a = gt(new Float32Array(c.buffer, c.byteOffset, h), n.getComponentType(), n.getNormalized()), + s = gt(new Float32Array(b.buffer, b.byteOffset, h * d), i.getComponentType(), i.getNormalized()); + n.setArray(ft), i.setArray(ft), r.setInput(n.clone().setArray(a)), r.setOutput(i.clone().setArray(s)), n.setArray(e), i.setArray(t) + } + } + } + } + for (const e of Array.from(a.values())) e.listParents().some((e => !(e instanceof s.fC))) || e.dispose(); + e.getRoot().listAccessors().length > r && t.cleanup && await e.transform(O({ + propertyTypes: [s.uS.ACCESSOR] + })), n.debug("resample: Complete.") + })) + } + + function lt(e, t, a) { + if (e instanceof Float32Array) return e.slice(); + const r = new Float32Array(e); + if (!a) return r; + for (let e = 0; e < r.length; e++) r[e] = s.M8.decodeNormalizedInt(r[e], t); + return r + } + + function gt(e, t, a) { + if (t === s.U_.ComponentType.FLOAT) return e.slice(); + const r = new(0, s.tn[t])(e.length); + for (let n = 0; n < r.length; n++) r[n] = a ? s.M8.encodeNormalizedInt(e[n], t) : e[n]; + return r + } + const { + POINTS: pt, + LINES: mt, + LINE_STRIP: yt, + LINE_LOOP: xt, + TRIANGLES: Tt, + TRIANGLE_STRIP: Et, + TRIANGLE_FAN: jt + } = s.WV.Mode, wt = { + ratio: 0, + error: 1e-4, + lockBorder: !1, + cleanup: !0 + }; + + function At(e) { + const t = g(wt, e), + a = t.simplifier; + if (!a) throw new Error('simplify: simplifier dependency required — install "meshoptimizer".'); + return l("simplify", (async e => { + const r = e.getLogger(); + await a.ready, await e.transform(be({ + overwrite: !1, + cleanup: t.cleanup + })); + let n = 0; + for (const s of e.getRoot().listMeshes()) { + for (const e of s.listPrimitives()) { + const s = e.getMode(); + s === Tt || s === Et || s === jt || e.getMode() === pt && a.simplifyPoints ? (It(e, t), 0 === ne(e, re.RENDER) && e.dispose()) : n++ + } + 0 === s.listPrimitives().length && s.dispose() + } + n > 0 && r.warn(`simplify: Skipping simplification of ${n} primitives: Unsupported draw mode.`), t.cleanup && await e.transform(q({ + propertyTypes: [s.uS.ACCESSOR, s.uS.NODE], + keepAttributes: !0, + keepIndices: !0, + keepLeaves: !1 + }), O({ + propertyTypes: [s.uS.ACCESSOR] + })), r.debug("simplify: Complete.") + })) + } + + function It(e, t) { + const a = i({}, wt, t), + r = a.simplifier, + n = e.getGraph(), + o = s.BB.fromGraph(n), + c = o.getLogger(); + switch (e.getMode()) { + case pt: + return function(e, t, a) { + const r = a.simplifier, + n = e.getLogger(); + t.getIndices() && function(e, t = new Map) { + const a = e.getIndices(); + if (!a) return; + const r = e.getGraph(), + n = s.BB.fromGraph(r), + i = n.getLogger(), + o = e.getAttribute("POSITION").getCount(); + for (const s of e.listAttributes()) e.swap(s, at(n, s, a, t)), 1 === s.listParents().length && s.dispose(); + for (const s of e.listTargets()) + for (const e of s.listAttributes()) s.swap(e, at(n, e, a, t)), 1 === e.listParents().length && e.dispose(); + const c = e.getAttribute("POSITION").getCount(); + i.debug(`unweld: ${y(o,c)} vertices.`), e.setIndices(null), 1 === a.listParents().length && a.dispose() + }(t); + const i = t.getAttribute("POSITION"), + o = t.getAttribute("COLOR_0"), + c = i.getCount(); + let b = i.getArray(), + d = o ? o.getArray() : void 0; + const f = o ? o.getComponentSize() : void 0; + b instanceof Float32Array || (b = Ie(b, i.getComponentType(), i.getNormalized())), !d || d instanceof Float32Array || (d = Ie(d, i.getComponentType(), i.getNormalized())), r.useExperimentalFeatures = !0; + const h = Math.floor(a.ratio * c), + u = r.simplifyPoints(b, 3, h, d, f); + r.useExperimentalFeatures = !1; + const [l, g] = r.compactMesh(u); + n.debug(`simplify: ${y(i.getCount(),g)} vertices.`); + for (const a of x(t)) { + const s = j(e, a); + oe(a, null, l, s, g), T(t, a, s), 1 === a.listParents().length && a.dispose() + } + return t + }(o, e, a); + case mt: + case yt: + case xt: + return c.warn("simplify: Skipping primitive simplification: Unsupported draw mode."), e; + case Et: + case jt: + we(e) + } + const b = ne(e, re.UPLOAD), + d = ne(e, re.RENDER); + d < b / 2 && ie(e); + const f = e.getAttribute("POSITION"), + h = e.getIndices(); + let u = f.getArray(), + l = h.getArray(); + u instanceof Float32Array || (u = Ie(u, f.getComponentType(), f.getNormalized())), l instanceof Uint32Array || (l = new Uint32Array(l)); + const g = 3 * Math.floor(a.ratio * d / 3), + p = a.lockBorder ? ["LockBorder"] : [], + [m, E] = r.simplify(l, u, 3, g, a.error, p); + e.setIndices(j(o, h).setArray(m)), 1 === h.listParents().length && h.dispose(), ie(e); + const w = ne(e, re.UPLOAD); + return w <= 65534 && e.getIndices().setArray(new Uint16Array(e.getIndices().getArray())), c.debug(`simplify: ${y(b,w)} vertices, error: ${E.toFixed(4)}.`), e + } + var Nt; + ! function(e) { + e.LANCZOS3 = "lanczos3", e.LANCZOS2 = "lanczos2" + }(Nt || (Nt = {})), Nt.LANCZOS3 + }, + 24987: (e, t, a) => { + "use strict"; + a.d(t, { + Ao: () => h, + BK: () => c, + Rl: () => o, + Wb: () => f, + kE: () => d, + kJ: () => n, + lA: () => b, + w3: () => r + }); + class s { + constructor() { + this._listeners = {} + } + addEventListener(e, t) { + const a = this._listeners; + return void 0 === a[e] && (a[e] = []), -1 === a[e].indexOf(t) && a[e].push(t), this + } + removeEventListener(e, t) { + if (void 0 === this._listeners) return this; + const a = this._listeners[e]; + if (void 0 !== a) { + const e = a.indexOf(t); - 1 !== e && a.splice(e, 1) + } + return this + } + dispatchEvent(e) { + if (void 0 === this._listeners) return this; + const t = this._listeners[e.type]; + if (void 0 !== t) { + const a = t.slice(0); + for (let t = 0, s = a.length; t < s; t++) a[t].call(this, e) + } + return this + } + dispose() { + for (const e in this._listeners) delete this._listeners[e] + } + } + class r extends s { + constructor(e, t, a, s = {}) { + if (super(), this._name = void 0, this._parent = void 0, this._child = void 0, this._attributes = void 0, this._disposed = !1, this._name = e, this._parent = t, this._child = a, this._attributes = s, !t.isOnGraph(a)) throw new Error("Cannot connect disconnected graphs.") + } + getName() { + return this._name + } + getParent() { + return this._parent + } + getChild() { + return this._child + } + setChild(e) { + return this._child = e, this + } + getAttributes() { + return this._attributes + } + dispose() { + this._disposed || (this._disposed = !0, this.dispatchEvent({ + type: "dispose", + target: this + }), super.dispose()) + } + isDisposed() { + return this._disposed + } + } + class n extends s { + constructor(...e) { + super(...e), this._emptySet = new Set, this._edges = new Set, this._parentEdges = new Map, this._childEdges = new Map + } + listEdges() { + return Array.from(this._edges) + } + listParentEdges(e) { + return Array.from(this._childEdges.get(e) || this._emptySet) + } + listParents(e) { + return this.listParentEdges(e).map((e => e.getParent())) + } + listChildEdges(e) { + return Array.from(this._parentEdges.get(e) || this._emptySet) + } + listChildren(e) { + return this.listChildEdges(e).map((e => e.getChild())) + } + disconnectParents(e, t) { + let a = this.listParentEdges(e); + return t && (a = a.filter((e => t(e.getParent())))), a.forEach((e => e.dispose())), this + } + createEdge(e, t, a, s) { + return this._registerEdge(new r(e, t, a, s)) + } + _registerEdge(e) { + this._edges.add(e); + const t = e.getParent(); + this._parentEdges.has(t) || this._parentEdges.set(t, new Set), this._parentEdges.get(t).add(e); + const a = e.getChild(); + return this._childEdges.has(a) || this._childEdges.set(a, new Set), this._childEdges.get(a).add(e), e.addEventListener("dispose", (() => this._removeEdge(e))), e + } + _removeEdge(e) { + return this._edges.delete(e), this._parentEdges.get(e.getParent()).delete(e), this._childEdges.get(e.getChild()).delete(e), this + } + } + + function i() { + return i = Object.assign || function(e) { + for (var t = 1; t < arguments.length; t++) { + var a = arguments[t]; + for (var s in a) Object.prototype.hasOwnProperty.call(a, s) && (e[s] = a[s]) + } + return e + }, i.apply(this, arguments) + } + class o { + constructor(e) { + if (this.list = [], e) + for (const t of e) this.list.push(t) + } + add(e) { + this.list.push(e) + } + remove(e) { + const t = this.list.indexOf(e); + t >= 0 && this.list.splice(t, 1) + } + removeChild(e) { + const t = []; + for (const a of this.list) a.getChild() === e && t.push(a); + for (const e of t) this.remove(e); + return t + } + listRefsByChild(e) { + const t = []; + for (const a of this.list) a.getChild() === e && t.push(a); + return t + } + values() { + return this.list + } + } + class c { + constructor(e) { + if (this.set = new Set, this.map = new Map, e) + for (const t of e) this.add(t) + } + add(e) { + const t = e.getChild(); + this.removeChild(t), this.set.add(e), this.map.set(t, e) + } + remove(e) { + this.set.delete(e), this.map.delete(e.getChild()) + } + removeChild(e) { + const t = this.map.get(e) || null; + return t && this.remove(t), t + } + getRefByChild(e) { + return this.map.get(e) || null + } + values() { + return Array.from(this.set) + } + } + class b { + constructor(e) { + this.map = {}, e && Object.assign(this.map, e) + } + set(e, t) { + this.map[e] = t + } + delete(e) { + delete this.map[e] + } + get(e) { + return this.map[e] || null + } + keys() { + return Object.keys(this.map) + } + values() { + return Object.values(this.map) + } + } + const d = Symbol("attributes"), + f = Symbol("immutableKeys"); + class h extends s { + constructor(e) { + super(), this._disposed = !1, this.graph = void 0, this[d] = void 0, this[f] = void 0, this.graph = e, this[f] = new Set, this[d] = this._createAttributes() + } + getDefaults() { + return {} + } + _createAttributes() { + const e = this.getDefaults(), + t = {}; + for (const a in e) { + const s = e[a]; + if (s instanceof h) { + const e = this.graph.createEdge(a, this, s); + e.addEventListener("dispose", (() => s.dispose())), this[f].add(a), t[a] = e + } else t[a] = s + } + return t + } + isOnGraph(e) { + return this.graph === e.graph + } + isDisposed() { + return this._disposed + } + dispose() { + this._disposed || (this.graph.listChildEdges(this).forEach((e => e.dispose())), this.graph.disconnectParents(this), this._disposed = !0, this.dispatchEvent({ + type: "dispose" + })) + } + detach() { + return this.graph.disconnectParents(this), this + } + swap(e, t) { + for (const a in this[d]) { + const s = this[d][a]; + if (s instanceof r) { + const r = s; + r.getChild() === e && this.setRef(a, t, r.getAttributes()) + } else if (s instanceof o) + for (const r of s.listRefsByChild(e)) { + const s = r.getAttributes(); + this.removeRef(a, e), this.addRef(a, t, s) + } else if (s instanceof c) { + const r = s.getRefByChild(e); + if (r) { + const s = r.getAttributes(); + this.removeRef(a, e), this.addRef(a, t, s) + } + } else if (s instanceof b) + for (const r of s.keys()) { + const n = s.get(r); + n.getChild() === e && this.setRefMap(a, r, t, n.getAttributes()) + } + } + return this + } + get(e) { + return this[d][e] + } + set(e, t) { + return this[d][e] = t, this.dispatchEvent({ + type: "change", + attribute: e + }) + } + getRef(e) { + const t = this[d][e]; + return t ? t.getChild() : null + } + setRef(e, t, a) { + if (this[f].has(e)) throw new Error(`Cannot overwrite immutable attribute, "${e}".`); + const s = this[d][e]; + if (s && s.dispose(), !t) return this; + const r = this.graph.createEdge(e, this, t, a); + return r.addEventListener("dispose", (() => { + delete this[d][e], this.dispatchEvent({ + type: "change", + attribute: e + }) + })), this[d][e] = r, this.dispatchEvent({ + type: "change", + attribute: e + }) + } + listRefs(e) { + return this.assertRefList(e).values().map((e => e.getChild())) + } + addRef(e, t, a) { + const s = this.graph.createEdge(e, this, t, a), + r = this.assertRefList(e); + return r.add(s), s.addEventListener("dispose", (() => { + r.remove(s), this.dispatchEvent({ + type: "change", + attribute: e + }) + })), this.dispatchEvent({ + type: "change", + attribute: e + }) + } + removeRef(e, t) { + const a = this.assertRefList(e); + if (a instanceof o) + for (const e of a.removeChild(t)) e.dispose(); + else { + const e = a.removeChild(t); + e && e.dispose() + } + return this + } + assertRefList(e) { + const t = this[d][e]; + if (t instanceof o || t instanceof c) return t; + throw new Error(`Expected RefList or RefSet for attribute "${e}"`) + } + listRefMapKeys(e) { + return this.assertRefMap(e).keys() + } + listRefMapValues(e) { + return this.assertRefMap(e).values().map((e => e.getChild())) + } + getRefMap(e, t) { + const a = this.assertRefMap(e).get(t); + return a ? a.getChild() : null + } + setRefMap(e, t, a, s) { + const r = this.assertRefMap(e), + n = r.get(t); + if (n && n.dispose(), !a) return this; + s = Object.assign(s || {}, { + key: t + }); + const o = this.graph.createEdge(e, this, a, i({}, s, { + key: t + })); + return o.addEventListener("dispose", (() => { + r.delete(t), this.dispatchEvent({ + type: "change", + attribute: e, + key: t + }) + })), r.set(t, o), this.dispatchEvent({ + type: "change", + attribute: e, + key: t + }) + } + assertRefMap(e) { + const t = this[d][e]; + if (t instanceof b) return t; + throw new Error(`Expected RefMap for attribute "${e}"`) + } + dispatchEvent(e) { + return super.dispatchEvent(i({}, e, { + target: this + })), this.graph.dispatchEvent(i({}, e, { + target: this, + type: `node:${e.type}` + })), this + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js.LICENSE.txt b/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js.LICENSE.txt new file mode 100644 index 0000000..e9c920e --- /dev/null +++ b/mp-core/5319.2091f5edc8f40c2e7d2d.bundle.js.LICENSE.txt @@ -0,0 +1,6 @@ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ diff --git a/mp-core/5380.f23079b41e4ca095de5f.bundle.js b/mp-core/5380.f23079b41e4ca095de5f.bundle.js new file mode 100644 index 0000000..20326d2 --- /dev/null +++ b/mp-core/5380.f23079b41e4ca095de5f.bundle.js @@ -0,0 +1,43 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5380], { + 55380: (e, a, t) => { + t.r(a), t.d(a, { + default: () => r + }); + class r { + id = "core.avatars.default"; + name = "Simple Avatar"; + description = "Creates a simple avatar that lets the user put their profile image inside."; + version = "1.0.0"; + requires = ["backend"]; + provides = ["avatar:default"]; + $getAvatarConfigurations() { + const e = ["#eb4034", "#fcba03", "#32a852", "#4287f5", "#9234eb", "#34b1eb", "#343aeb", "#eb34b1"]; + let a = metapress.profile?.currentProfile?.fields?.profile_image_src || metapress.backend.getAsset("avatars/images/DefaultAvatar.png"); + return [{ + avatar_id: "default", + avatar_name: "Simple", + avatar_description: "", + avatar_height: 1.8, + type: "mesh", + order: -1, + url: metapress.backend.getAsset("avatars/DefaultAvatar.glb"), + "modifier:avatar-controller": !0, + "modifier:physics": !0, + physics_enabled: !0, + physics_shape: "capsule", + physics_lockRotation: !0, + physics_anchorBottom: !0, + physics_kinematicVelocity: !0, + "modifier:transform-smoothing": !0, + "modifier:face-movement-direction": !0, + "modifier:materials": !0, + "replaceMaterial:Body": `color: ${e[Math.floor(Math.random()*e.length)]}`, + "replaceMaterial:Head": `image: ${a}` + }] + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/5414.4031eef599a696f81f7c.bundle.js b/mp-core/5414.4031eef599a696f81f7c.bundle.js new file mode 100644 index 0000000..44d8070 --- /dev/null +++ b/mp-core/5414.4031eef599a696f81f7c.bundle.js @@ -0,0 +1,636 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5414], { + 47660: (e, t, i) => { + i.d(t, { + Z: () => r + }); + var n = i(6147); + class r extends n.Z { + get settings() { + return [...super.settings, { + type: "file", + id: "url", + name: "Source", + help: "The model to render." + }] + } + modelInfo = {};animationClips = [];async onLoad() { + let e = await metapress.assets.load("mesh", this.entity.url, !0); + this.object = e.scene, this.animationClips = e.animations || [], this.modelInfo = e.userData || {} + } + } + }, + 6147: (e, t, i) => { + i.d(t, { + Z: () => r + }); + var n = i(4028); + class r { + get settings() { + return [{ + type: "checkbox", + id: "hidden", + name: "Hidden", + help: "If enabled, the object will not be visible." + }] + } + static showBoundingBoxes = !1; + static wireframeMode = !1; + _lastEntityWireframe = void 0; + container = new THREE.Object3D; + object = null; + entity = {}; + hideLock = new n.Z; + hasLoaded = !1; + wireframeState = {}; + async onLoad() {} + afterLoad() { + if (!this.object?.isObject3D) throw new Error("The renderer must create an Object3D instance when subclassing Object3DRenderer."); + this.container.entityRenderer = this, this.container.add(this.object), metapress.renderer.scene.add(this.container), this.applyTransforms(), this._lastUrl = this.entity.url, this._lastEntityWireframe = this.entity.wireframe + } + onUnload() {} + afterUnload() { + this.container?.removeFromParent(), this.container = null, this.applyParent() + } + onEntityUpdated() { + this._lastUrl != this.entity.url && metapress.entities.reload(this.entity.id); + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + this.entity.wireframe != this._lastEntityWireframe && (this._lastEntityWireframe = this.entity.wireframe, this.container.traverse((e => { + e.isMesh && e.material && (e.material.wireframe = this.entity.wireframe ?? !1, this.wireframeState[e.uuid] = e.material.wireframe) + }))), this.onRender() + } + onRender() { + this._lastTransformUpdate != this.entity.lastModified && (this._lastTransformUpdate = this.entity.lastModified, this.applyTransforms()), this.applyHideLock(), this.applyBoundingBox(), this.applyWireframe() + } + applyTransforms() { + this.object && (this.entity.x = parseFloat(this.entity.x) || 0, this.entity.y = parseFloat(this.entity.y) || 0, this.entity.z = parseFloat(this.entity.z) || 0, this.entity.scaleX = parseFloat(this.entity.scaleX) || 1, this.entity.scaleY = parseFloat(this.entity.scaleY) || 1, this.entity.scaleZ = parseFloat(this.entity.scaleZ) || 1, this.entity.quatX = parseFloat(this.entity.quatX) || 0, this.entity.quatY = parseFloat(this.entity.quatY) || 0, this.entity.quatZ = parseFloat(this.entity.quatZ) || 0, this.entity.quatW = parseFloat(this.entity.quatW) || 0, this.entity.extra_offset_x = parseFloat(this.entity.extra_offset_x) || 0, this.entity.extra_offset_y = parseFloat(this.entity.extra_offset_y) || 0, this.entity.extra_offset_z = parseFloat(this.entity.extra_offset_z) || 0, this.entity.extra_scale_x = parseFloat(this.entity.extra_scale_x) || 1, this.entity.extra_scale_y = parseFloat(this.entity.extra_scale_y) || 1, this.entity.extra_scale_z = parseFloat(this.entity.extra_scale_z) || 1, this.entity.extra_rotation_x = parseFloat(this.entity.extra_rotation_x) || 0, this.entity.extra_rotation_y = parseFloat(this.entity.extra_rotation_y) || 0, this.entity.extra_rotation_z = parseFloat(this.entity.extra_rotation_z) || 0, this.container.position.set(this.entity.x, this.entity.y, this.entity.z), this.container.scale.set(this.entity.scaleX, this.entity.scaleY, this.entity.scaleZ), this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW ? this.container.quaternion.set(this.entity.quatX, this.entity.quatY, this.entity.quatZ, this.entity.quatW) : this.container.quaternion.set(0, 0, 0, 1), this.object.position.set(this.entity.extra_offset_x, this.entity.extra_offset_y, this.entity.extra_offset_z), this.object.scale.set(this.entity.extra_scale_x, this.entity.extra_scale_y, this.entity.extra_scale_z), this.object.rotation.set(this.entity.extra_rotation_x, this.entity.extra_rotation_y, this.entity.extra_rotation_z)) + } + applyHideLock() { + let e = !this.entity.hidden && !this.hideLock.isAcquired; + this.container.visible && !e ? this.container.visible = !1 : !this.container.visible && e && (this.container.visible = !0) + } + applyBoundingBox() { + this.boundingBoxHelper?.update(); + let e = r.showBoundingBoxes && this.container.visible; + !e && this.boundingBoxHelper ? (this.boundingBoxHelper.removeFromParent(), this.boundingBoxHelper.dispose(), this.boundingBoxHelper = null) : e && !this.boundingBoxHelper && (this.boundingBoxHelper = new THREE.BoxHelper(this.container, 16777215), metapress.renderer.scene.add(this.boundingBoxHelper)) + } + applyWireframe() { + this._lastWireframeMode != r.wireframeMode && (this._lastWireframeMode = r.wireframeMode, this.container.traverse((e => { + e.isMesh && e.material && (this.hasLoaded || (this.wireframeState[e.uuid] = !!e.material.wireframe), e.material.wireframe = !!r.wireframeMode || (this.wireframeState[e.uuid] ?? !1)) + })), this.hasLoaded = !0) + } + applyParent(e) { + if (!e && !this.parentHideLock && void 0 !== this._lastParent && this._lastParent != this.entity.parent) return; + if (this._lastParent = this.entity.parent || "", !e) + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + if (!this.entity.parent) return this.parentHideLock?.(), this.parentHideLock = null, void(this.container && this.container.parent != metapress.renderer.scene && (this.container.removeFromParent(), metapress.renderer.scene.add(this.container))); + let t = metapress.entities.getRenderer(this.entity.parent); + t?.object?.isObject3D ? (this.parentHideLock?.(), this.parentHideLock = null, this.container.parent != t.container && (this.container.removeFromParent(), t.container.add(this.container))) : this.parentHideLock || (this.parentHideLock = this.hideLock.acquire()) + } + } + }, + 65414: (e, t, i) => { + i.r(t), i.d(t, { + default: () => f + }); + class n { + name = "Face movement direction"; + hidden = !0; + entity = null; + renderer = null; + isOwner = !1; + onLoad() { + if (!this.renderer.object?.isObject3D) throw new Error(`Not supported on entity of type '${this.entity.type}'`); + this.currentAngle = this.renderer.container.rotation.y, this.targetAngle = this.currentAngle, this.oldPosition.copy(this.renderer.container.position), this.isOwner = !this.entity.owner || this.entity.owner == metapress.instanceID + } + oldPosition = new THREE.Vector3; + direction = new THREE.Vector3; + v3a = new THREE.Vector3; + v3b = new THREE.Vector3; + quatA = new THREE.Quaternion; + beforeRender() { + if (this.isOwner) { + if (Math.abs(this.oldPosition.x - this.renderer.container.position.x) > .001 || Math.abs(this.oldPosition.z - this.renderer.container.position.z) > .001) { + this.v3a.copy(this.renderer.container.position).sub(this.oldPosition).normalize(), this.targetAngle = -Math.atan2(this.v3a.z, this.v3a.x) + Math.PI / 2; + let e = 2 * Math.PI; + for (; Math.abs(this.targetAngle - this.currentAngle) > e / 2;) this.targetAngle += this.targetAngle > this.currentAngle ? -e : e; + this.oldPosition.copy(this.renderer.container.position) + } + Math.abs(this.currentAngle - this.targetAngle) > 1e-4 && (this.currentAngle = THREE.MathUtils.damp(this.currentAngle, this.targetAngle, 5, metapress.renderer.delta), this.quatA.setFromAxisAngle(THREE.Object3D.DEFAULT_UP, this.currentAngle), this.entity.quatX = this.quatA.x, this.entity.quatY = this.quatA.y, this.entity.quatZ = this.quatA.z, this.entity.quatW = this.quatA.w, this.entity.lastModified = Date.now()) + } + } + } + var r = i(25108); + class a { + name = "Material"; + description = "Modifies object material."; + icon = i(5143); + provides = ["material"]; + get settings() { + let e = [{ + type: "file", + id: "url", + name: "Image", + allowClear: !0, + help: "The image to render.", + onRemove: () => this.removeImage(!0) + }, { + type: "select", + id: "transparencyMode", + name: "Transparency", + values: ["", "alpha", "clip"], + labels: ["None", "Alpha Blend", "Alpha Clip"], + help: "In Alpha Blend mode, full transparency is supported but the render order is changed, which may cause visual glitches. In Alpha Clip mode, only on/off transparency is supported but the render order is unchanged." + }, { + type: "select", + id: "shaderMode", + name: "Shading Type", + values: ["standard", "basic"], + labels: ["Standard (Default)", "Basic"], + help: "Shading type to be used on this object." + }]; + return this.entity?.url && "" !== this.entity?.url && (e = e.concat([{ + type: "number", + id: "tileX", + name: "Repeat X", + help: "Amount of times to repeat the image on the X axis." + }, { + type: "number", + id: "tileY", + name: "Repeat Y", + help: "Amount of times to repeat the image on the Y axis." + }, { + type: "checkbox", + id: "mirrorX", + name: "Mirrored Repeat X", + help: "Mirror the repeats of the image on the X axis." + }, { + type: "checkbox", + id: "mirrorY", + name: "Mirrored Repeat Y", + help: "Mirror the repeats of the image on the Y axis" + }])), e + } + entity = null; + renderer = null; + onLoad() { + if (!this.renderer.object?.isObject3D) throw new Error(`Not supported on entity of type '${this.entity.type}'`); + this.applyChanges(), this.updateMaterial() + } + onEntityEdited() { + this.applyChanges() + } + applyChanges() { + for (let e in this.entity) + if (e.startsWith("replaceMaterial:")) try { + this.applyChangesFor(e) + } catch (e) { + r.warn("[MetaPress > MaterialModifier] Error: ", e) + } + } + applyChangesFor(e) { + let t = e.substring(16), + i = this.renderer.object.getObjectByName(t); + if (!i) throw new Error(`Mesh not found: ${t}`); + let n = this.entity[e]; + if (i._materialReplacerLastValue == n) return; + i._materialReplacerLastValue = n; + let r = n, + a = "", + s = r.indexOf(":"); + if (-1 != s && (a = n.substring(s + 1).trim(), r = n.substring(0, s).trim()), "color" == r) "basic" == this.entity.shaderMode ? i.material = new THREE.MeshBasicMaterial({ + color: a + }) : i.material = new THREE.MeshStandardMaterial({ + color: a + }); + else { + if ("image" != r) throw new Error(`Unknown material type '${r}'`); + { + let e = (new THREE.TextureLoader).load(a); + e.flipY = !1, e.colorSpace = THREE.SRGBColorSpace, "basic" == this.entity.shaderMode ? i.material = new THREE.MeshBasicMaterial({ + map: e + }) : i.material = new THREE.MeshStandardMaterial({ + map: e + }) + } + } + } + onEntityUpdated() { + this._lastTransparencyMode == this.entity.transparencyMode && this._lastColor == this.entity.color && this._lastOpacity == this.entity.opacity && this._lastAlphaClip == this.entity.alphaClip && this._lastEntityUrl == this.entity.url && this._lastShaderMode == this.entity.shaderMode && this._lastMirrorX == this.entity.mirrorX && this._lastMirrorY == this.entity.mirrorY && this._lastTileX == this.entity.tileX && this._lastTileY == this.entity.tileY || this.updateMaterial() + } + removeImage(e) { + e && metapress.entities.update(this.entity.id, { + url: null + }), this.renderer.object.material.map = null, this.renderer.object.material.color = new THREE.Color(16777215) + } + updateMaterial() { + if (!this.renderer.object) return; + let e = "basic" === this.entity.shaderMode ? THREE.MeshBasicMaterial : THREE.MeshStandardMaterial, + t = this.renderer.object.material.type !== e.name, + i = this.renderer.object.material.map; + this.entity.url && this.entity.url !== this._lastTextureUrl && (i = (new THREE.TextureLoader).load(this.entity.url), i.colorSpace = THREE.SRGBColorSpace, this._lastTextureUrl = this.entity.url), i && (i.wrapS = this.entity.mirrorX ? THREE.MirroredRepeatWrapping : THREE.RepeatWrapping, i.wrapT = this.entity.mirrorY ? THREE.MirroredRepeatWrapping : THREE.RepeatWrapping, i.repeat.set(this.entity.tileX || 1, this.entity.tileY || 1), i.needsUpdate = !0), t || !this.renderer.object.material.map ? this.renderer.object.material = new e({ + color: this.entity.color ? new THREE.Color(this.entity.color) : "#FFFFFF", + side: THREE.DoubleSide, + map: i, + transparent: "alpha" === this.entity.transparencyMode, + opacity: this.entity.opacity || 1, + alphaTest: "clip" === this.entity.transparencyMode ? this.entity.alphaClip || .5 : .01 + }) : (this.renderer.object.material.map = i, this.renderer.object.material.color.set(this.entity.color ? new THREE.Color(this.entity.color) : "#FFFFFF"), this.renderer.object.material.transparent = "alpha" === this.entity.transparencyMode, this.renderer.object.material.opacity = this.entity.opacity || 1, this.renderer.object.material.alphaTest = "clip" === this.entity.transparencyMode ? this.entity.alphaClip || .5 : .01), this._lastTransparencyMode = this.entity.transparencyMode, this._lastColor = this.entity.color, this._lastOpacity = this.entity.opacity, this._lastAlphaClip = this.entity.alphaClip, this._lastEntityUrl = this.entity.url, this._lastShaderMode = this.entity.shaderMode, this._lastMirrorX = this.entity.mirrorX, this._lastMirrorY = this.entity.mirrorY, this._lastTileX = this.entity.tileX, this._lastTileY = this.entity.tileY + } + } + var s = i(47660), + o = i(6147), + h = i(99477); + class l extends o.Z { + get settings() { + return [...super.settings] + } + async onLoad() { + let e = null; + if ("cube" == this.entity.type) e = new h.BoxGeometry(1, 1, 1); + else if ("plane" == this.entity.type) e = new h.PlaneGeometry(1, 1); + else if ("circle" == this.entity.type) e = new h.CircleGeometry(.5, 32); + else if ("cylinder" == this.entity.type) e = new h.CylinderGeometry(.5, .5, 1, 32); + else { + if ("sphere" != this.entity.type) throw new Error("Unknown shape type: " + this.entity.type); + e = new h.SphereGeometry(.5) + } + let t = null; + t = "basic" == this.entity.shaderMode ? new h.MeshBasicMaterial({ + side: h.DoubleSide + }) : new h.MeshStandardMaterial({ + side: h.DoubleSide + }), this.object = new h.Mesh(e, t) + } + } + class d { + name = "Transform smoothing"; + hidden = !0; + entity = null; + renderer = null; + onLoad() { + if (!this.renderer.object?.isObject3D) throw new Error(`Not supported on entity of type '${this.entity.type}'`); + this.currentPosition = this.renderer.container.position.clone(), this.targetPosition = this.renderer.container.position.clone(), this.currentQuaternion = this.renderer.container.quaternion.clone(), this.targetQuaternion = this.renderer.container.quaternion.clone(), this.isOwner = this.entity.owner == metapress.instanceID + } + beforeRender() { + this.isOwner || (this.preparePosition(), this.prepareOrientation()) + } + onRender() { + this.isOwner || (this.smoothPosition(), this.smoothOrientation()) + } + preparePosition() { + let e = Date.now(); + this.entity.x == this._x && this.entity.y == this._y && this.entity.z == this._z || (this._x = this.entity.x || 0, this._y = this.entity.y || 0, this._z = this.entity.z || 0, this.positionUpdatedAt = e, this.currentPosition.copy(this.renderer.container.position), this.targetPosition.set(this.entity.x || 0, this.entity.y || 0, this.entity.z || 0)) + } + smoothPosition() { + let e = Date.now() - this.positionUpdatedAt, + t = THREE.MathUtils.clamp(e / 250, 0, 1); + t >= 1 ? this.renderer.container.position.copy(this.targetPosition) : (this._v3a || (this._v3a = new THREE.Vector3), this._v3a.lerpVectors(this.currentPosition, this.targetPosition, t), this.renderer.container.position.copy(this._v3a)) + } + prepareOrientation() { + if (!(this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW)) return; + let e = Date.now(); + this.entity.quatX == this._quatX && this.entity.quatY == this._quatY && this.entity.quatZ == this._quatZ && this.entity.quatW == this._quatW || (this._quatX = this.entity.quatX, this._quatY = this.entity.quatY, this._quatZ = this.entity.quatZ, this._quatW = this.entity.quatW, this.quaternionUpdatedAt = e, this.currentQuaternion.copy(this.renderer.container.quaternion), this.targetQuaternion.set(this.entity.quatX || 0, this.entity.quatY || 0, this.entity.quatZ || 0, this.entity.quatW || 0)) + } + smoothOrientation() { + if (!(this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW)) return; + let e = Date.now() - this.quaternionUpdatedAt, + t = THREE.MathUtils.clamp(e / 250, 0, 1); + t >= 1 ? this.renderer.container.quaternion.copy(this.targetQuaternion) : (this._quatA || (this._quatA = new THREE.Quaternion), this._quatA.slerpQuaternions(this.currentQuaternion, this.targetQuaternion, t), this.renderer.container.quaternion.copy(this._quatA)) + } + } + var c = i(1217), + p = i(20452); + class y extends o.Z { + async onLoad() { + this.object = new h.Group + } + } + class u { + name = "ShaderToy Material"; + description = "Modifies object material."; + icon = i(5143); + provides = ["material"]; + get settings() { + return [{ + type: "description", + name: "Renders a ShaderToy compatible shader as this object's material." + }, { + type: "select", + id: "shadertoy_transparencyMode", + name: "Transparency Mode", + help: "The transparency mode to use.", + values: ["none", "alpha-channel", "brightness"], + labels: ["None", "Alpha Channel", "Color Brightness"] + }, { + type: "textarea", + id: "shadertoy_code", + name: "Shader Code", + help: "Specify the ShaderToy shader code." + }, ...[0, 1, 2, 3].map((e => [{ + type: "header", + name: `iChannel${e}` + }, { + type: "select", + id: `shadertoy_iChannel${e}_type`, + name: "Type", + values: ["none", "texture", "framebuffer"], + labels: ["None", "Texture", "Frame Buffer"] + }, "texture" == this.entity?.[`shadertoy_iChannel${e}_type`] ? [{ + type: "file", + id: `shadertoy_iChannel${e}_texture`, + name: "Texture File", + help: "The texture file to use." + }] : []])).flat(2)] + } + entity = null; + renderer = null; + async onLoad() { + if (!this.renderer.object?.geometry) throw new Error("Not supported on solid shape entities, eg. cube, sphere, plane etc."); + await this.onEntityUpdated() + } + async onEntityUpdated() { + metapress.entities.didSettingsChange(this) && await this.updateMaterial() + } + async updateMaterial() { + let e = {}, + t = []; + for (let i = 0; i < 4; i++) { + let n = this.createChannel(i, t); + n && (e[`iChannel${i}`] = { + value: n + }) + } + this.renderer.object.material = new m({ + shader: this.entity.shadertoy_code, + transparencyMode: this.entity.shadertoy_transparencyMode, + uniforms: e, + onBeforeRender: (e, i, n, r, a, s) => { + t.forEach((t => t(e, i, n, r, a, s))) + } + }) + } + createChannel(e, t) { + return "texture" == this.entity[`shadertoy_iChannel${e}_type`] ? this.createChannelTexture(e) : "framebuffer" == this.entity[`shadertoy_iChannel${e}_type`] ? this.createChannelFramebuffer(e, t) : void 0 + } + createChannelTexture(e) { + let t = this.entity[`shadertoy_iChannel${e}_texture`]; + if (t) return (new h.TextureLoader).load(t) + } + createChannelFramebuffer(e, t) { + let i = new h.Vector2; + metapress.renderer.glrenderer.getSize(i); + let n = new h.FramebufferTexture(i.x, i.y); + n.type = h.HalfFloatType; + let r = new h.Vector2(0, 0); + return t.push(((e, t, i, a, s, o) => { + e.copyFramebufferToTexture(r, n, 0) + })), n + } + $renderer_onResize() { + this.updateMaterial() + } + } + class m extends h.ShaderMaterial { + constructor(e) { + let t = { + ...e + }; + delete t.shader, delete t.transparencyMode, delete t.onBeforeRender, /#define\s+METAPRESS_DEPTH_WRITE_DISABLED/.test(e.shader) && (e.depthWrite = !1), super({ + side: h.DoubleSide, + ...t, + transparent: "alpha-channel" == e.transparencyMode || "brightness" == e.transparencyMode, + defines: { + ...e.defines, + TRANSPARENCY_MODE_ALPHA_CHANNEL: "alpha-channel" == e.transparencyMode ? 1 : 0, + TRANSPARENCY_MODE_BRIGHTNESS: "brightness" == e.transparencyMode ? 1 : 0 + }, + uniforms: { + ...e.uniforms, + iTime: { + value: 0 + }, + iTimeDelta: { + value: 0 + }, + iTimeGlobal: { + value: 0 + }, + iFrame: { + value: 0 + }, + iResolution: { + value: new h.Vector2(1024, 1024) + }, + iScreenResolution: { + value: new h.Vector2(1024, 1024) + }, + iMouse: { + value: new h.Vector4 + }, + iDiffuse: { + value: null + }, + iDepth: { + value: null + } + }, + vertexShader: `\n \n // THREE.js's shader code\n #include \n #include \n \n // Uniforms we add automatically\n uniform vec2 iResolution;\n uniform vec2 iScreenResolution;\n uniform float iTime;\n uniform float iTimeDelta;\n uniform float iTimeGlobal;\n uniform int iFrame;\n uniform vec4 iMouse;\n ${e.uniforms?.iChannel0?"uniform sampler2D iChannel0;":""}\n ${e.uniforms?.iChannel1?"uniform sampler2D iChannel1;":""}\n ${e.uniforms?.iChannel2?"uniform sampler2D iChannel2;":""}\n ${e.uniforms?.iChannel3?"uniform sampler2D iChannel3;":""}\n \n // Stuff to pass to the fragment shader\n varying vec3 vNormal;\n varying vec2 vUv;\n varying vec3 vPosition;\n varying vec4 vWorldPosition;\n varying vec3 vCameraPosition;\n\n // Main code\n void main() {\n\n // Pass values to fragment shader\n vNormal = normal;\n vUv = uv;\n vPosition = position;\n vWorldPosition = modelMatrix * vec4(position, 1.0);\n vCameraPosition = cameraPosition;\n\n // THREE.js code\n #include \n #include \n #include \n\n }\n\n `, + fragmentShader: `\n\n // THREE.js's shader code\n #include \n #include \n #include \n \n // Uniforms we add automatically\n uniform vec2 iResolution;\n uniform vec2 iScreenResolution;\n uniform float iTime;\n uniform float iTimeDelta;\n uniform float iTimeGlobal;\n uniform int iFrame;\n uniform vec4 iMouse;\n ${e.uniforms?.iChannel0?"uniform sampler2D iChannel0;":""}\n ${e.uniforms?.iChannel1?"uniform sampler2D iChannel1;":""}\n ${e.uniforms?.iChannel2?"uniform sampler2D iChannel2;":""}\n ${e.uniforms?.iChannel3?"uniform sampler2D iChannel3;":""}\n \n // Stuff we received from the vertex shader\n varying vec3 vNormal;\n varying vec2 vUv;\n varying vec3 vPosition;\n varying vec4 vWorldPosition;\n varying vec3 vCameraPosition;\n\n // ShaderToy code provides the mainImage() function\n ${e.shader}\n\n // Main entry point\n void main() {\n\n // Call mainImage() in the provided shader\n mainImage(gl_FragColor, vUv * 1024.0);\n\n // Safety check on the returned values from the shader. Without this it can cause the entire scene to flicker.\n gl_FragColor = clamp(gl_FragColor, 0.0, 999.0);\n\n // Check transparency mode\n #if TRANSPARENCY_MODE_ALPHA_CHANNEL\n\n // In alpha channel mode, use the alpha channel as transparency and discard colors too close to 0 opacity, to help\n // prevent issues with z-fighting in certain situations\n if (gl_FragColor.a < 0.01) \n discard;\n\n #elif TRANSPARENCY_MODE_BRIGHTNESS\n\n // In brightness mode, use the brightness of the color as transparency. Reduce it a bit as well to hide cutoff parts.\n gl_FragColor.a = clamp((gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0, 0.0, 1.0);\n if (gl_FragColor.a < 0.01) \n discard;\n\n #else\n\n // In no transparency mode, set to fully opaque. This should already be the case, but just in case the\n // shader messed with the alpha value we set it back.\n gl_FragColor.a = 1.0;\n\n #endif\n\n // Done, do THREE.js shader code now\n #include \n\n }\n \n ` + }), this._params = e, this.clock = new h.Clock + } + onBeforeRender(e, t, i, n, r, a) { + this._params.onBeforeRender?.(e, t, i, n, r, a), this.uniforms.iTimeDelta.value = this.clock.getDelta(), this.uniforms.iTime.value = this.clock.elapsedTime, this.uniforms.iTimeGlobal.value = this.clock.elapsedTime, e.getDrawingBufferSize(this.uniforms.iScreenResolution.value), this.uniforms.iDiffuse.value = metapress.renderer.diffuseCopyPass?.texture, this.uniforms.iDepth.value = metapress.renderer.depthCopyPass?.texture, super.onBeforeRender(e, t, i, n, r, a) + } + } + class f extends EventTarget { + id = "core.render.builtin-objects"; + name = "Built-in Objects"; + description = "Provides a set of built-in objects and modifiers."; + version = "1.0.0"; + requires = ["assets", "renderer"]; + provides = ["builtinObjects", "render:group", "render:mesh", "render:cube", "render:circle", "render:cylinder", "render:plane", "render:sphere", "modifier:transform-smoothing", "modifier:materials", "modifier:face-movement-direction", "modifier:shadertoy"]; + Object3DRenderer = o.Z; + createRenderer(e) { + return "mesh" == e ? new s.Z : "group" == e ? new y : new l + } + createModifier(e) { + return "transform-smoothing" == e ? new d : "materials" == e ? new a : "face-movement-direction" == e ? new n : "shadertoy" == e ? new u : void 0 + } + async $prepareEntityForFile(e) { + if ([".glb", ".fbx"].find((t => e.name.toLowerCase().endsWith(t)))) return { + type: "mesh", + url: "$URL" + }; + if ([".png", ".jpg", ".jpeg", ".gif", ".webp"].find((t => e.name.toLowerCase().endsWith(t)))) { + let t = await new Promise(((t, i) => { + let n = new Image; + n.src = URL.createObjectURL(e), n.onload = () => t(n), n.onerror = () => i(new Error("unable to load image.")) + })), + i = document.createElement("canvas"); + i.width = 32, i.height = 32; + let n = i.getContext("2d"); + n.drawImage(t, 0, 0, 32, 32); + let r = n.getImageData(0, 0, 32, 32), + a = !1; + for (let e = 0; e < r.data.length; e += 4) + if (255 != r.data[e + 3]) { + a = !0; + break + } return { + type: "plane", + scaleX: t.width / t.height, + "modifier:materials": !0, + shaderMode: "basic", + transparencyMode: a ? "alpha" : "", + url: "$URL" + } + } + } + $loadAsset(e) { + return "mesh" == e.type && ".glb" == e.extension ? this.loadGLB(e) : "mesh" == e.type && ".fbx" == e.extension ? this.loadFBX(e) : void 0 + } + async loadGLB(e) { + let t = new c.E, + i = await t.loadAsync(e.url); + return i.scene.traverse((e => { + e.isMesh && e.geometry?.attributes?.uv1 && (e.material.emissiveMap?.name.toLowerCase().includes("use_as_lightmap") && (e.material.lightMap = e.material.emissiveMap, e.material.lightMapIntensity = e.material.emissiveIntensity, e.material.emissiveMap = null, e.material.emissiveIntensity = 0), e.material.aoMap && (e.material.aoMap.channel = 1), e.material.lightMap && (e.material.lightMap.channel = 1)) + })), i.userData = { + ...i.userData, + isGLTF: !0, + isGLB: !0 + }, i + } + async loadFBX(e) { + let t = await (new p.y).loadAsync(e.url); + return { + animations: t.animations || [], + cameras: [], + scene: t, + scenes: [t], + userData: { + ...t.userData, + isFBX: !0 + } + } + } + $getDebugMenuOptions = () => [{ + id: "core.objects.boundingBoxes", + section: "Rendering", + name: "Bounding boxes: " + (o.Z.showBoundingBoxes ? "On" : "Off"), + action: () => o.Z.showBoundingBoxes = !o.Z.showBoundingBoxes + }, { + id: "core.objects.wireframe", + section: "Rendering", + name: "Wireframe: " + (o.Z.wireframeMode ? "On" : "Off"), + action: () => o.Z.wireframeMode = !o.Z.wireframeMode + }]; + $editor_getAddableEntities = () => [{ + id: "metapress.shape.circle", + name: "Add Circle", + icon: i(41598), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "circle", + "modifier:materials": !0 + }) + }, { + id: "metapress.shape.cylinder", + name: "Add Cylinder", + icon: i(5461), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "cylinder", + "modifier:materials": !0 + }) + }, { + id: "metapress.shape.cube", + name: "Add Cube", + icon: i(90371), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "cube", + "modifier:materials": !0 + }) + }, { + id: "metapress.shape.plane", + name: "Add Plane", + icon: i(26192), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "plane", + "modifier:materials": !0 + }) + }, { + id: "metapress.shape.region", + name: "Add Region", + description: "Regions are 3D volumes that can be used for adjusting the skybox, lighting etc when a user is inside the volume.", + icon: i(26247), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "region", + "modifier:materials": !0 + }) + }, { + id: "metapress.shape.sphere", + name: "Add Sphere", + icon: i(34949), + section: "builtin", + action: e => metapress.editor.createEntityNearby({ + type: "sphere", + "modifier:materials": !0 + }) + }] + } + }, + 4028: (e, t, i) => { + i.d(t, { + Z: () => n + }); + class n { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let e = !1; + return () => { + e || (e = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + }, + 5143: (e, t, i) => { + e.exports = i.p + "mp-core/texture.5890236f46b2b8ebaca6.svg" + }, + 41598: (e, t, i) => { + e.exports = i.p + "mp-core/object-circle.f7abe3405d346872969c.svg" + }, + 90371: (e, t, i) => { + e.exports = i.p + "mp-core/object-cube.28f5b6d5b3236e38a354.svg" + }, + 5461: (e, t, i) => { + e.exports = i.p + "mp-core/object-cylinder.8ba97d22a2f697c6e15f.svg" + }, + 26192: (e, t, i) => { + e.exports = i.p + "mp-core/object-plane.12f4b034648a5127c7b9.svg" + }, + 26247: (e, t, i) => { + e.exports = i.p + "mp-core/object-region.9d3d97740123301db48b.svg" + }, + 34949: (e, t, i) => { + e.exports = i.p + "mp-core/object-sphere.76ed3af0e9e4df404a93.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/5651.50e5a936656bbfd0c680.bundle.js b/mp-core/5651.50e5a936656bbfd0c680.bundle.js new file mode 100644 index 0000000..b9e88b4 --- /dev/null +++ b/mp-core/5651.50e5a936656bbfd0c680.bundle.js @@ -0,0 +1,744 @@ +/*! For license information please see 5651.50e5a936656bbfd0c680.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5651], { + 72408: (e, t) => { + var r = Symbol.for("react.element"), + n = Symbol.for("react.portal"), + o = Symbol.for("react.fragment"), + u = Symbol.for("react.strict_mode"), + a = Symbol.for("react.profiler"), + c = Symbol.for("react.provider"), + l = Symbol.for("react.context"), + i = Symbol.for("react.forward_ref"), + f = Symbol.for("react.suspense"), + s = Symbol.for("react.memo"), + p = Symbol.for("react.lazy"), + d = Symbol.iterator, + v = { + isMounted: function() { + return !1 + }, + enqueueForceUpdate: function() {}, + enqueueReplaceState: function() {}, + enqueueSetState: function() {} + }, + h = Object.assign, + m = {}; + + function y(e, t, r) { + this.props = e, this.context = t, this.refs = m, this.updater = r || v + } + + function _() {} + + function b(e, t, r) { + this.props = e, this.context = t, this.refs = m, this.updater = r || v + } + y.prototype.isReactComponent = {}, y.prototype.setState = function(e, t) { + if ("object" != typeof e && "function" != typeof e && null != e) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); + this.updater.enqueueSetState(this, e, t, "setState") + }, y.prototype.forceUpdate = function(e) { + this.updater.enqueueForceUpdate(this, e, "forceUpdate") + }, _.prototype = y.prototype; + var g = b.prototype = new _; + g.constructor = b, h(g, y.prototype), g.isPureReactComponent = !0; + var w = Array.isArray, + E = Object.prototype.hasOwnProperty, + x = { + current: null + }, + C = { + key: !0, + ref: !0, + __self: !0, + __source: !0 + }; + + function k(e, t, n) { + var o, u = {}, + a = null, + c = null; + if (null != t) + for (o in void 0 !== t.ref && (c = t.ref), void 0 !== t.key && (a = "" + t.key), t) E.call(t, o) && !C.hasOwnProperty(o) && (u[o] = t[o]); + var l = arguments.length - 2; + if (1 === l) u.children = n; + else if (1 < l) { + for (var i = Array(l), f = 0; f < l; f++) i[f] = arguments[f + 2]; + u.children = i + } + if (e && e.defaultProps) + for (o in l = e.defaultProps) void 0 === u[o] && (u[o] = l[o]); + return { + $$typeof: r, + type: e, + key: a, + ref: c, + props: u, + _owner: x.current + } + } + + function S(e) { + return "object" == typeof e && null !== e && e.$$typeof === r + } + var R = /\/+/g; + + function $(e, t) { + return "object" == typeof e && null !== e && null != e.key ? function(e) { + var t = { + "=": "=0", + ":": "=2" + }; + return "$" + e.replace(/[=:]/g, (function(e) { + return t[e] + })) + }("" + e.key) : t.toString(36) + } + + function M(e, t, o, u, a) { + var c = typeof e; + "undefined" !== c && "boolean" !== c || (e = null); + var l = !1; + if (null === e) l = !0; + else switch (c) { + case "string": + case "number": + l = !0; + break; + case "object": + switch (e.$$typeof) { + case r: + case n: + l = !0 + } + } + if (l) return a = a(l = e), e = "" === u ? "." + $(l, 0) : u, w(a) ? (o = "", null != e && (o = e.replace(R, "$&/") + "/"), M(a, t, o, "", (function(e) { + return e + }))) : null != a && (S(a) && (a = function(e, t) { + return { + $$typeof: r, + type: e.type, + key: t, + ref: e.ref, + props: e.props, + _owner: e._owner + } + }(a, o + (!a.key || l && l.key === a.key ? "" : ("" + a.key).replace(R, "$&/") + "/") + e)), t.push(a)), 1; + if (l = 0, u = "" === u ? "." : u + ":", w(e)) + for (var i = 0; i < e.length; i++) { + var f = u + $(c = e[i], i); + l += M(c, t, o, f, a) + } else if (f = function(e) { + return null === e || "object" != typeof e ? null : "function" == typeof(e = d && e[d] || e["@@iterator"]) ? e : null + }(e), "function" == typeof f) + for (e = f.call(e), i = 0; !(c = e.next()).done;) l += M(c = c.value, t, o, f = u + $(c, i++), a); + else if ("object" === c) throw t = String(e), Error("Objects are not valid as a React child (found: " + ("[object Object]" === t ? "object with keys {" + Object.keys(e).join(", ") + "}" : t) + "). If you meant to render a collection of children, use an array instead."); + return l + } + + function j(e, t, r) { + if (null == e) return e; + var n = [], + o = 0; + return M(e, n, "", "", (function(e) { + return t.call(r, e, o++) + })), n + } + + function O(e) { + if (-1 === e._status) { + var t = e._result; + (t = t()).then((function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 1, e._result = t) + }), (function(t) { + 0 !== e._status && -1 !== e._status || (e._status = 2, e._result = t) + })), -1 === e._status && (e._status = 0, e._result = t) + } + if (1 === e._status) return e._result.default; + throw e._result + } + var I = { + current: null + }, + N = { + transition: null + }, + P = { + ReactCurrentDispatcher: I, + ReactCurrentBatchConfig: N, + ReactCurrentOwner: x + }; + t.Children = { + map: j, + forEach: function(e, t, r) { + j(e, (function() { + t.apply(this, arguments) + }), r) + }, + count: function(e) { + var t = 0; + return j(e, (function() { + t++ + })), t + }, + toArray: function(e) { + return j(e, (function(e) { + return e + })) || [] + }, + only: function(e) { + if (!S(e)) throw Error("React.Children.only expected to receive a single React element child."); + return e + } + }, t.Component = y, t.Fragment = o, t.Profiler = a, t.PureComponent = b, t.StrictMode = u, t.Suspense = f, t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = P, t.cloneElement = function(e, t, n) { + if (null == e) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + e + "."); + var o = h({}, e.props), + u = e.key, + a = e.ref, + c = e._owner; + if (null != t) { + if (void 0 !== t.ref && (a = t.ref, c = x.current), void 0 !== t.key && (u = "" + t.key), e.type && e.type.defaultProps) var l = e.type.defaultProps; + for (i in t) E.call(t, i) && !C.hasOwnProperty(i) && (o[i] = void 0 === t[i] && void 0 !== l ? l[i] : t[i]) + } + var i = arguments.length - 2; + if (1 === i) o.children = n; + else if (1 < i) { + l = Array(i); + for (var f = 0; f < i; f++) l[f] = arguments[f + 2]; + o.children = l + } + return { + $$typeof: r, + type: e.type, + key: u, + ref: a, + props: o, + _owner: c + } + }, t.createContext = function(e) { + return (e = { + $$typeof: l, + _currentValue: e, + _currentValue2: e, + _threadCount: 0, + Provider: null, + Consumer: null, + _defaultValue: null, + _globalName: null + }).Provider = { + $$typeof: c, + _context: e + }, e.Consumer = e + }, t.createElement = k, t.createFactory = function(e) { + var t = k.bind(null, e); + return t.type = e, t + }, t.createRef = function() { + return { + current: null + } + }, t.forwardRef = function(e) { + return { + $$typeof: i, + render: e + } + }, t.isValidElement = S, t.lazy = function(e) { + return { + $$typeof: p, + _payload: { + _status: -1, + _result: e + }, + _init: O + } + }, t.memo = function(e, t) { + return { + $$typeof: s, + type: e, + compare: void 0 === t ? null : t + } + }, t.startTransition = function(e) { + var t = N.transition; + N.transition = {}; + try { + e() + } finally { + N.transition = t + } + }, t.unstable_act = function() { + throw Error("act(...) is not supported in production builds of React.") + }, t.useCallback = function(e, t) { + return I.current.useCallback(e, t) + }, t.useContext = function(e) { + return I.current.useContext(e) + }, t.useDebugValue = function() {}, t.useDeferredValue = function(e) { + return I.current.useDeferredValue(e) + }, t.useEffect = function(e, t) { + return I.current.useEffect(e, t) + }, t.useId = function() { + return I.current.useId() + }, t.useImperativeHandle = function(e, t, r) { + return I.current.useImperativeHandle(e, t, r) + }, t.useInsertionEffect = function(e, t) { + return I.current.useInsertionEffect(e, t) + }, t.useLayoutEffect = function(e, t) { + return I.current.useLayoutEffect(e, t) + }, t.useMemo = function(e, t) { + return I.current.useMemo(e, t) + }, t.useReducer = function(e, t, r) { + return I.current.useReducer(e, t, r) + }, t.useRef = function(e) { + return I.current.useRef(e) + }, t.useState = function(e) { + return I.current.useState(e) + }, t.useSyncExternalStore = function(e, t, r) { + return I.current.useSyncExternalStore(e, t, r) + }, t.useTransition = function() { + return I.current.useTransition() + }, t.version = "18.2.0" + }, + 67294: (e, t, r) => { + e.exports = r(72408) + }, + 55651: (e, t, r) => { + r.d(t, { + ZE: () => D, + gW: () => O + }); + var n = r(67294); + + function o() { + return (o = Object.assign || function(e) { + for (var t = 1; t < arguments.length; t++) { + var r = arguments[t]; + for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (e[n] = r[n]) + } + return e + }).apply(this, arguments) + } + + function u(e, t) { + if (null == e) return {}; + var r, n, o = {}, + u = Object.keys(e); + for (n = 0; n < u.length; n++) t.indexOf(r = u[n]) >= 0 || (o[r] = e[r]); + return o + } + + function a(e) { + var t = (0, n.useRef)(e), + r = (0, n.useRef)((function(e) { + t.current && t.current(e) + })); + return t.current = e, r.current + } + var c = function(e, t, r) { + return void 0 === t && (t = 0), void 0 === r && (r = 1), e > r ? r : e < t ? t : e + }, + l = function(e) { + return "touches" in e + }, + i = function(e) { + return e && e.ownerDocument.defaultView || self + }, + f = function(e, t, r) { + var n = e.getBoundingClientRect(), + o = l(t) ? function(e, t) { + for (var r = 0; r < e.length; r++) + if (e[r].identifier === t) return e[r]; + return e[0] + }(t.touches, r) : t; + return { + left: c((o.pageX - (n.left + i(e).pageXOffset)) / n.width), + top: c((o.pageY - (n.top + i(e).pageYOffset)) / n.height) + } + }, + s = function(e) { + !l(e) && e.preventDefault() + }, + p = n.memo((function(e) { + var t = e.onMove, + r = e.onKey, + c = u(e, ["onMove", "onKey"]), + p = (0, n.useRef)(null), + d = a(t), + v = a(r), + h = (0, n.useRef)(null), + m = (0, n.useRef)(!1), + y = (0, n.useMemo)((function() { + var e = function(e) { + s(e), (l(e) ? e.touches.length > 0 : e.buttons > 0) && p.current ? d(f(p.current, e, h.current)) : r(!1) + }, + t = function() { + return r(!1) + }; + + function r(r) { + var n = m.current, + o = i(p.current), + u = r ? o.addEventListener : o.removeEventListener; + u(n ? "touchmove" : "mousemove", e), u(n ? "touchend" : "mouseup", t) + } + return [function(e) { + var t = e.nativeEvent, + n = p.current; + if (n && (s(t), ! function(e, t) { + return t && !l(e) + }(t, m.current) && n)) { + if (l(t)) { + m.current = !0; + var o = t.changedTouches || []; + o.length && (h.current = o[0].identifier) + } + n.focus(), d(f(n, t, h.current)), r(!0) + } + }, function(e) { + var t = e.which || e.keyCode; + t < 37 || t > 40 || (e.preventDefault(), v({ + left: 39 === t ? .05 : 37 === t ? -.05 : 0, + top: 40 === t ? .05 : 38 === t ? -.05 : 0 + })) + }, r] + }), [v, d]), + _ = y[0], + b = y[1], + g = y[2]; + return (0, n.useEffect)((function() { + return g + }), [g]), n.createElement("div", o({}, c, { + onTouchStart: _, + onMouseDown: _, + className: "react-colorful__interactive", + ref: p, + onKeyDown: b, + tabIndex: 0, + role: "slider" + })) + })), + d = function(e) { + return e.filter(Boolean).join(" ") + }, + v = function(e) { + var t = e.color, + r = e.left, + o = e.top, + u = void 0 === o ? .5 : o, + a = d(["react-colorful__pointer", e.className]); + return n.createElement("div", { + className: a, + style: { + top: 100 * u + "%", + left: 100 * r + "%" + } + }, n.createElement("div", { + className: "react-colorful__pointer-fill", + style: { + backgroundColor: t + } + })) + }, + h = function(e, t, r) { + return void 0 === t && (t = 0), void 0 === r && (r = Math.pow(10, t)), Math.round(r * e) / r + }, + m = (Math.PI, function(e) { + return E(y(e)) + }), + y = function(e) { + return "#" === e[0] && (e = e.substring(1)), e.length < 6 ? { + r: parseInt(e[0] + e[0], 16), + g: parseInt(e[1] + e[1], 16), + b: parseInt(e[2] + e[2], 16), + a: 4 === e.length ? h(parseInt(e[3] + e[3], 16) / 255, 2) : 1 + } : { + r: parseInt(e.substring(0, 2), 16), + g: parseInt(e.substring(2, 4), 16), + b: parseInt(e.substring(4, 6), 16), + a: 8 === e.length ? h(parseInt(e.substring(6, 8), 16) / 255, 2) : 1 + } + }, + _ = function(e) { + var t = function(e) { + var t = e.s, + r = e.v, + n = e.a, + o = (200 - t) * r / 100; + return { + h: h(e.h), + s: h(o > 0 && o < 200 ? t * r / 100 / (o <= 100 ? o : 200 - o) * 100 : 0), + l: h(o / 2), + a: h(n, 2) + } + }(e); + return "hsl(" + t.h + ", " + t.s + "%, " + t.l + "%)" + }, + b = function(e) { + var t = e.h, + r = e.s, + n = e.v, + o = e.a; + t = t / 360 * 6, r /= 100, n /= 100; + var u = Math.floor(t), + a = n * (1 - r), + c = n * (1 - (t - u) * r), + l = n * (1 - (1 - t + u) * r), + i = u % 6; + return { + r: h(255 * [n, c, a, a, l, n][i]), + g: h(255 * [l, n, n, c, a, a][i]), + b: h(255 * [a, a, l, n, n, c][i]), + a: h(o, 2) + } + }, + g = function(e) { + var t = e.toString(16); + return t.length < 2 ? "0" + t : t + }, + w = function(e) { + var t = e.r, + r = e.g, + n = e.b, + o = e.a, + u = o < 1 ? g(h(255 * o)) : ""; + return "#" + g(t) + g(r) + g(n) + u + }, + E = function(e) { + var t = e.r, + r = e.g, + n = e.b, + o = e.a, + u = Math.max(t, r, n), + a = u - Math.min(t, r, n), + c = a ? u === t ? (r - n) / a : u === r ? 2 + (n - t) / a : 4 + (t - r) / a : 0; + return { + h: h(60 * (c < 0 ? c + 6 : c)), + s: h(u ? a / u * 100 : 0), + v: h(u / 255 * 100), + a: o + } + }, + x = n.memo((function(e) { + var t = e.hue, + r = e.onChange, + o = d(["react-colorful__hue", e.className]); + return n.createElement("div", { + className: o + }, n.createElement(p, { + onMove: function(e) { + r({ + h: 360 * e.left + }) + }, + onKey: function(e) { + r({ + h: c(t + 360 * e.left, 0, 360) + }) + }, + "aria-label": "Hue", + "aria-valuenow": h(t), + "aria-valuemax": "360", + "aria-valuemin": "0" + }, n.createElement(v, { + className: "react-colorful__hue-pointer", + left: t / 360, + color: _({ + h: t, + s: 100, + v: 100, + a: 1 + }) + }))) + })), + C = n.memo((function(e) { + var t = e.hsva, + r = e.onChange, + o = { + backgroundColor: _({ + h: t.h, + s: 100, + v: 100, + a: 1 + }) + }; + return n.createElement("div", { + className: "react-colorful__saturation", + style: o + }, n.createElement(p, { + onMove: function(e) { + r({ + s: 100 * e.left, + v: 100 - 100 * e.top + }) + }, + onKey: function(e) { + r({ + s: c(t.s + 100 * e.left, 0, 100), + v: c(t.v - 100 * e.top, 0, 100) + }) + }, + "aria-label": "Color", + "aria-valuetext": "Saturation " + h(t.s) + "%, Brightness " + h(t.v) + "%" + }, n.createElement(v, { + className: "react-colorful__saturation-pointer", + top: 1 - t.v / 100, + left: t.s / 100, + color: _(t) + }))) + })), + k = function(e, t) { + if (e === t) return !0; + for (var r in e) + if (e[r] !== t[r]) return !1; + return !0 + }; + + function S(e, t, r) { + var o = a(r), + u = (0, n.useState)((function() { + return e.toHsva(t) + })), + c = u[0], + l = u[1], + i = (0, n.useRef)({ + color: t, + hsva: c + }); + (0, n.useEffect)((function() { + if (!e.equal(t, i.current.color)) { + var r = e.toHsva(t); + i.current = { + hsva: r, + color: t + }, l(r) + } + }), [t, e]), (0, n.useEffect)((function() { + var t; + k(c, i.current.hsva) || e.equal(t = e.fromHsva(c), i.current.color) || (i.current = { + hsva: c, + color: t + }, o(t)) + }), [c, e, o]); + var f = (0, n.useCallback)((function(e) { + l((function(t) { + return Object.assign({}, t, e) + })) + }), []); + return [c, f] + } + var R = "undefined" != typeof window ? n.useLayoutEffect : n.useEffect, + $ = new Map, + M = function(e) { + var t, a = e.className, + c = e.colorModel, + l = e.color, + i = void 0 === l ? c.defaultColor : l, + f = e.onChange, + s = u(e, ["className", "colorModel", "color", "onChange"]), + p = (0, n.useRef)(null); + t = p, R((function() { + var e = t.current ? t.current.ownerDocument : document; + if (void 0 !== e && !$.has(e)) { + var n = e.createElement("style"); + n.innerHTML = '.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8,\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}', $.set(e, n); + var o = r.nc; + o && n.setAttribute("nonce", o), e.head.appendChild(n) + } + }), []); + var v = S(c, i, f), + h = v[0], + m = v[1], + y = d(["react-colorful", a]); + return n.createElement("div", o({}, s, { + ref: p, + className: y + }), n.createElement(C, { + hsva: h, + onChange: m + }), n.createElement(x, { + hue: h.h, + onChange: m, + className: "react-colorful__last-control" + })) + }, + j = { + defaultColor: "000", + toHsva: m, + fromHsva: function(e) { + return function(e) { + return w(b(e)) + }({ + h: e.h, + s: e.s, + v: e.v, + a: 1 + }) + }, + equal: function(e, t) { + return e.toLowerCase() === t.toLowerCase() || k(y(e), y(t)) + } + }, + O = function(e) { + return n.createElement(M, o({}, e, { + colorModel: j + })) + }, + I = /^#?([0-9A-F]{3,8})$/i, + N = function(e) { + var t = e.color, + r = void 0 === t ? "" : t, + c = e.onChange, + l = e.onBlur, + i = e.escape, + f = e.validate, + s = e.format, + p = e.process, + d = u(e, ["color", "onChange", "onBlur", "escape", "validate", "format", "process"]), + v = (0, n.useState)((function() { + return i(r) + })), + h = v[0], + m = v[1], + y = a(c), + _ = a(l), + b = (0, n.useCallback)((function(e) { + var t = i(e.target.value); + m(t), f(t) && y(p ? p(t) : t) + }), [i, p, f, y]), + g = (0, n.useCallback)((function(e) { + f(e.target.value) || m(i(r)), _(e) + }), [r, i, f, _]); + return (0, n.useEffect)((function() { + m(i(r)) + }), [r, i]), n.createElement("input", o({}, d, { + value: s ? s(h) : h, + spellCheck: "false", + onChange: b, + onBlur: g + })) + }, + P = function(e) { + return "#" + e + }, + D = function(e) { + var t = e.prefixed, + r = e.alpha, + a = u(e, ["prefixed", "alpha"]), + c = (0, n.useCallback)((function(e) { + return e.replace(/([^0-9A-F]+)/gi, "").substring(0, r ? 8 : 6) + }), [r]), + l = (0, n.useCallback)((function(e) { + return function(e, t) { + var r = I.exec(e), + n = r ? r[1].length : 0; + return 3 === n || 6 === n || !!t && 4 === n || !!t && 8 === n + }(e, r) + }), [r]); + return n.createElement(N, o({}, a, { + escape: c, + format: t ? P : void 0, + process: P, + validate: l + })) + } + } + } +]); \ No newline at end of file diff --git a/mp-core/5651.50e5a936656bbfd0c680.bundle.js.LICENSE.txt b/mp-core/5651.50e5a936656bbfd0c680.bundle.js.LICENSE.txt new file mode 100644 index 0000000..e932783 --- /dev/null +++ b/mp-core/5651.50e5a936656bbfd0c680.bundle.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/mp-core/5733.a988a3a53aa19d43d41e.bundle.js b/mp-core/5733.a988a3a53aa19d43d41e.bundle.js new file mode 100644 index 0000000..3be94e4 --- /dev/null +++ b/mp-core/5733.a988a3a53aa19d43d41e.bundle.js @@ -0,0 +1,3237 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5733], { + 55733: (t, e, r) => { + var n = r(48764).Buffer, + i = r(34155); + t.exports = function t(e, r, n) { + function i(a, o) { + if (!r[a]) { + if (!e[a]) { + if (s) return s(a, !0); + var h = new Error("Cannot find module '" + a + "'"); + throw h.code = "MODULE_NOT_FOUND", h + } + var u = r[a] = { + exports: {} + }; + e[a][0].call(u.exports, (function(t) { + return i(e[a][1][t] || t) + }), u, u.exports, t, e, r, n) + } + return r[a].exports + } + for (var s = void 0, a = 0; a < n.length; a++) i(n[a]); + return i + }({ + 1: [function(t, e, r) { + "use strict"; + var n = t("./utils"), + i = t("./support"), + s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + r.encode = function(t) { + for (var e, r, i, a, o, h, u, l = [], c = 0, f = t.length, d = f, p = "string" !== n.getTypeOf(t); c < t.length;) d = f - c, i = p ? (e = t[c++], r = c < f ? t[c++] : 0, c < f ? t[c++] : 0) : (e = t.charCodeAt(c++), r = c < f ? t.charCodeAt(c++) : 0, c < f ? t.charCodeAt(c++) : 0), a = e >> 2, o = (3 & e) << 4 | r >> 4, h = 1 < d ? (15 & r) << 2 | i >> 6 : 64, u = 2 < d ? 63 & i : 64, l.push(s.charAt(a) + s.charAt(o) + s.charAt(h) + s.charAt(u)); + return l.join("") + }, r.decode = function(t) { + var e, r, n, a, o, h, u = 0, + l = 0, + c = "data:"; + if (t.substr(0, c.length) === c) throw new Error("Invalid base64 input, it looks like a data url."); + var f, d = 3 * (t = t.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4; + if (t.charAt(t.length - 1) === s.charAt(64) && d--, t.charAt(t.length - 2) === s.charAt(64) && d--, d % 1 != 0) throw new Error("Invalid base64 input, bad content length."); + for (f = i.uint8array ? new Uint8Array(0 | d) : new Array(0 | d); u < t.length;) e = s.indexOf(t.charAt(u++)) << 2 | (a = s.indexOf(t.charAt(u++))) >> 4, r = (15 & a) << 4 | (o = s.indexOf(t.charAt(u++))) >> 2, n = (3 & o) << 6 | (h = s.indexOf(t.charAt(u++))), f[l++] = e, 64 !== o && (f[l++] = r), 64 !== h && (f[l++] = n); + return f + } + }, { + "./support": 30, + "./utils": 32 + }], + 2: [function(t, e, r) { + "use strict"; + var n = t("./external"), + i = t("./stream/DataWorker"), + s = t("./stream/Crc32Probe"), + a = t("./stream/DataLengthProbe"); + + function o(t, e, r, n, i) { + this.compressedSize = t, this.uncompressedSize = e, this.crc32 = r, this.compression = n, this.compressedContent = i + } + o.prototype = { + getContentWorker: function() { + var t = new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")), + e = this; + return t.on("end", (function() { + if (this.streamInfo.data_length !== e.uncompressedSize) throw new Error("Bug : uncompressed data size mismatch") + })), t + }, + getCompressedWorker: function() { + return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression) + } + }, o.createWorkerFrom = function(t, e, r) { + return t.pipe(new s).pipe(new a("uncompressedSize")).pipe(e.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression", e) + }, e.exports = o + }, { + "./external": 6, + "./stream/Crc32Probe": 25, + "./stream/DataLengthProbe": 26, + "./stream/DataWorker": 27 + }], + 3: [function(t, e, r) { + "use strict"; + var n = t("./stream/GenericWorker"); + r.STORE = { + magic: "\0\0", + compressWorker: function() { + return new n("STORE compression") + }, + uncompressWorker: function() { + return new n("STORE decompression") + } + }, r.DEFLATE = t("./flate") + }, { + "./flate": 7, + "./stream/GenericWorker": 28 + }], + 4: [function(t, e, r) { + "use strict"; + var n = t("./utils"), + i = function() { + for (var t, e = [], r = 0; r < 256; r++) { + t = r; + for (var n = 0; n < 8; n++) t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1; + e[r] = t + } + return e + }(); + e.exports = function(t, e) { + return void 0 !== t && t.length ? "string" !== n.getTypeOf(t) ? function(t, e, r, n) { + var s = i, + a = 0 + r; + t ^= -1; + for (var o = 0; o < a; o++) t = t >>> 8 ^ s[255 & (t ^ e[o])]; + return -1 ^ t + }(0 | e, t, t.length) : function(t, e, r, n) { + var s = i, + a = 0 + r; + t ^= -1; + for (var o = 0; o < a; o++) t = t >>> 8 ^ s[255 & (t ^ e.charCodeAt(o))]; + return -1 ^ t + }(0 | e, t, t.length) : 0 + } + }, { + "./utils": 32 + }], + 5: [function(t, e, r) { + "use strict"; + r.base64 = !1, r.binary = !1, r.dir = !1, r.createFolders = !0, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null + }, {}], + 6: [function(t, e, r) { + "use strict"; + var n; + n = "undefined" != typeof Promise ? Promise : t("lie"), e.exports = { + Promise: n + } + }, { + lie: 37 + }], + 7: [function(t, e, r) { + "use strict"; + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, + i = t("pako"), + s = t("./utils"), + a = t("./stream/GenericWorker"), + o = n ? "uint8array" : "array"; + + function h(t, e) { + a.call(this, "FlateWorker/" + t), this._pako = null, this._pakoAction = t, this._pakoOptions = e, this.meta = {} + } + r.magic = "\b\0", s.inherits(h, a), h.prototype.processChunk = function(t) { + this.meta = t.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, t.data), !1) + }, h.prototype.flush = function() { + a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], !0) + }, h.prototype.cleanUp = function() { + a.prototype.cleanUp.call(this), this._pako = null + }, h.prototype._createPako = function() { + this._pako = new i[this._pakoAction]({ + raw: !0, + level: this._pakoOptions.level || -1 + }); + var t = this; + this._pako.onData = function(e) { + t.push({ + data: e, + meta: t.meta + }) + } + }, r.compressWorker = function(t) { + return new h("Deflate", t) + }, r.uncompressWorker = function() { + return new h("Inflate", {}) + } + }, { + "./stream/GenericWorker": 28, + "./utils": 32, + pako: 38 + }], + 8: [function(t, e, r) { + "use strict"; + + function n(t, e) { + var r, n = ""; + for (r = 0; r < e; r++) n += String.fromCharCode(255 & t), t >>>= 8; + return n + } + + function i(t, e, r, i, a, l) { + var c, f, d = t.file, + p = t.compression, + m = l !== o.utf8encode, + _ = s.transformTo("string", l(d.name)), + g = s.transformTo("string", o.utf8encode(d.name)), + b = d.comment, + v = s.transformTo("string", l(b)), + y = s.transformTo("string", o.utf8encode(b)), + w = g.length !== d.name.length, + k = y.length !== b.length, + x = "", + S = "", + z = "", + C = d.dir, + E = d.date, + A = { + crc32: 0, + compressedSize: 0, + uncompressedSize: 0 + }; + e && !r || (A.crc32 = t.crc32, A.compressedSize = t.compressedSize, A.uncompressedSize = t.uncompressedSize); + var I = 0; + e && (I |= 8), m || !w && !k || (I |= 2048); + var O = 0, + B = 0; + C && (O |= 16), "UNIX" === a ? (B = 798, O |= function(t, e) { + var r = t; + return t || (r = e ? 16893 : 33204), (65535 & r) << 16 + }(d.unixPermissions, C)) : (B = 20, O |= function(t) { + return 63 & (t || 0) + }(d.dosPermissions)), c = E.getUTCHours(), c <<= 6, c |= E.getUTCMinutes(), c <<= 5, c |= E.getUTCSeconds() / 2, f = E.getUTCFullYear() - 1980, f <<= 4, f |= E.getUTCMonth() + 1, f <<= 5, f |= E.getUTCDate(), w && (S = n(1, 1) + n(h(_), 4) + g, x += "up" + n(S.length, 2) + S), k && (z = n(1, 1) + n(h(v), 4) + y, x += "uc" + n(z.length, 2) + z); + var R = ""; + return R += "\n\0", R += n(I, 2), R += p.magic, R += n(c, 2), R += n(f, 2), R += n(A.crc32, 4), R += n(A.compressedSize, 4), R += n(A.uncompressedSize, 4), R += n(_.length, 2), R += n(x.length, 2), { + fileRecord: u.LOCAL_FILE_HEADER + R + _ + x, + dirRecord: u.CENTRAL_FILE_HEADER + n(B, 2) + R + n(v.length, 2) + "\0\0\0\0" + n(O, 4) + n(i, 4) + _ + x + v + } + } + var s = t("../utils"), + a = t("../stream/GenericWorker"), + o = t("../utf8"), + h = t("../crc32"), + u = t("../signature"); + + function l(t, e, r, n) { + a.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = e, this.zipPlatform = r, this.encodeFileName = n, this.streamFiles = t, this.accumulate = !1, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = [] + } + s.inherits(l, a), l.prototype.push = function(t) { + var e = t.meta.percent || 0, + r = this.entriesCount, + n = this._sources.length; + this.accumulate ? this.contentBuffer.push(t) : (this.bytesWritten += t.data.length, a.prototype.push.call(this, { + data: t.data, + meta: { + currentFile: this.currentFile, + percent: r ? (e + 100 * (r - n - 1)) / r : 100 + } + })) + }, l.prototype.openedSource = function(t) { + this.currentSourceOffset = this.bytesWritten, this.currentFile = t.file.name; + var e = this.streamFiles && !t.file.dir; + if (e) { + var r = i(t, e, !1, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }) + } else this.accumulate = !0 + }, l.prototype.closedSource = function(t) { + this.accumulate = !1; + var e = this.streamFiles && !t.file.dir, + r = i(t, e, !0, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + if (this.dirRecords.push(r.dirRecord), e) this.push({ + data: function(t) { + return u.DATA_DESCRIPTOR + n(t.crc32, 4) + n(t.compressedSize, 4) + n(t.uncompressedSize, 4) + }(t), + meta: { + percent: 100 + } + }); + else + for (this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }); this.contentBuffer.length;) this.push(this.contentBuffer.shift()); + this.currentFile = null + }, l.prototype.flush = function() { + for (var t = this.bytesWritten, e = 0; e < this.dirRecords.length; e++) this.push({ + data: this.dirRecords[e], + meta: { + percent: 100 + } + }); + var r = this.bytesWritten - t, + i = function(t, e, r, i, a) { + var o = s.transformTo("string", a(i)); + return u.CENTRAL_DIRECTORY_END + "\0\0\0\0" + n(t, 2) + n(t, 2) + n(e, 4) + n(r, 4) + n(o.length, 2) + o + }(this.dirRecords.length, r, t, this.zipComment, this.encodeFileName); + this.push({ + data: i, + meta: { + percent: 100 + } + }) + }, l.prototype.prepareNextSource = function() { + this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume() + }, l.prototype.registerPrevious = function(t) { + this._sources.push(t); + var e = this; + return t.on("data", (function(t) { + e.processChunk(t) + })), t.on("end", (function() { + e.closedSource(e.previous.streamInfo), e._sources.length ? e.prepareNextSource() : e.end() + })), t.on("error", (function(t) { + e.error(t) + })), this + }, l.prototype.resume = function() { + return !!a.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), !0) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), !0)) + }, l.prototype.error = function(t) { + var e = this._sources; + if (!a.prototype.error.call(this, t)) return !1; + for (var r = 0; r < e.length; r++) try { + e[r].error(t) + } catch (t) {} + return !0 + }, l.prototype.lock = function() { + a.prototype.lock.call(this); + for (var t = this._sources, e = 0; e < t.length; e++) t[e].lock() + }, e.exports = l + }, { + "../crc32": 4, + "../signature": 23, + "../stream/GenericWorker": 28, + "../utf8": 31, + "../utils": 32 + }], + 9: [function(t, e, r) { + "use strict"; + var n = t("../compressions"), + i = t("./ZipFileWorker"); + r.generateWorker = function(t, e, r) { + var s = new i(e.streamFiles, r, e.platform, e.encodeFileName), + a = 0; + try { + t.forEach((function(t, r) { + a++; + var i = function(t, e) { + var r = t || e, + i = n[r]; + if (!i) throw new Error(r + " is not a valid compression method !"); + return i + }(r.options.compression, e.compression), + o = r.options.compressionOptions || e.compressionOptions || {}, + h = r.dir, + u = r.date; + r._compressWorker(i, o).withStreamInfo("file", { + name: t, + dir: h, + date: u, + comment: r.comment || "", + unixPermissions: r.unixPermissions, + dosPermissions: r.dosPermissions + }).pipe(s) + })), s.entriesCount = a + } catch (t) { + s.error(t) + } + return s + } + }, { + "../compressions": 3, + "./ZipFileWorker": 8 + }], + 10: [function(t, e, r) { + "use strict"; + + function n() { + if (!(this instanceof n)) return new n; + if (arguments.length) throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + this.files = Object.create(null), this.comment = null, this.root = "", this.clone = function() { + var t = new n; + for (var e in this) "function" != typeof this[e] && (t[e] = this[e]); + return t + } + }(n.prototype = t("./object")).loadAsync = t("./load"), n.support = t("./support"), n.defaults = t("./defaults"), n.version = "3.10.1", n.loadAsync = function(t, e) { + return (new n).loadAsync(t, e) + }, n.external = t("./external"), e.exports = n + }, { + "./defaults": 5, + "./external": 6, + "./load": 11, + "./object": 15, + "./support": 30 + }], + 11: [function(t, e, r) { + "use strict"; + var n = t("./utils"), + i = t("./external"), + s = t("./utf8"), + a = t("./zipEntries"), + o = t("./stream/Crc32Probe"), + h = t("./nodejsUtils"); + + function u(t) { + return new i.Promise((function(e, r) { + var n = t.decompressed.getContentWorker().pipe(new o); + n.on("error", (function(t) { + r(t) + })).on("end", (function() { + n.streamInfo.crc32 !== t.decompressed.crc32 ? r(new Error("Corrupted zip : CRC32 mismatch")) : e() + })).resume() + })) + } + e.exports = function(t, e) { + var r = this; + return e = n.extend(e || {}, { + base64: !1, + checkCRC32: !1, + optimizedBinaryString: !1, + createFolders: !1, + decodeFileName: s.utf8decode + }), h.isNode && h.isStream(t) ? i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : n.prepareContent("the loaded zip file", t, !0, e.optimizedBinaryString, e.base64).then((function(t) { + var r = new a(e); + return r.load(t), r + })).then((function(t) { + var r = [i.Promise.resolve(t)], + n = t.files; + if (e.checkCRC32) + for (var s = 0; s < n.length; s++) r.push(u(n[s])); + return i.Promise.all(r) + })).then((function(t) { + for (var i = t.shift(), s = i.files, a = 0; a < s.length; a++) { + var o = s[a], + h = o.fileNameStr, + u = n.resolve(o.fileNameStr); + r.file(u, o.decompressed, { + binary: !0, + optimizedBinaryString: !0, + date: o.date, + dir: o.dir, + comment: o.fileCommentStr.length ? o.fileCommentStr : null, + unixPermissions: o.unixPermissions, + dosPermissions: o.dosPermissions, + createFolders: e.createFolders + }), o.dir || (r.file(u).unsafeOriginalName = h) + } + return i.zipComment.length && (r.comment = i.zipComment), r + })) + } + }, { + "./external": 6, + "./nodejsUtils": 14, + "./stream/Crc32Probe": 25, + "./utf8": 31, + "./utils": 32, + "./zipEntries": 33 + }], + 12: [function(t, e, r) { + "use strict"; + var n = t("../utils"), + i = t("../stream/GenericWorker"); + + function s(t, e) { + i.call(this, "Nodejs stream input adapter for " + t), this._upstreamEnded = !1, this._bindStream(e) + } + n.inherits(s, i), s.prototype._bindStream = function(t) { + var e = this; + (this._stream = t).pause(), t.on("data", (function(t) { + e.push({ + data: t, + meta: { + percent: 0 + } + }) + })).on("error", (function(t) { + e.isPaused ? this.generatedError = t : e.error(t) + })).on("end", (function() { + e.isPaused ? e._upstreamEnded = !0 : e.end() + })) + }, s.prototype.pause = function() { + return !!i.prototype.pause.call(this) && (this._stream.pause(), !0) + }, s.prototype.resume = function() { + return !!i.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), !0) + }, e.exports = s + }, { + "../stream/GenericWorker": 28, + "../utils": 32 + }], + 13: [function(t, e, r) { + "use strict"; + var n = t("readable-stream").Readable; + + function i(t, e, r) { + n.call(this, e), this._helper = t; + var i = this; + t.on("data", (function(t, e) { + i.push(t) || i._helper.pause(), r && r(e) + })).on("error", (function(t) { + i.emit("error", t) + })).on("end", (function() { + i.push(null) + })) + } + t("../utils").inherits(i, n), i.prototype._read = function() { + this._helper.resume() + }, e.exports = i + }, { + "../utils": 32, + "readable-stream": 16 + }], + 14: [function(t, e, r) { + "use strict"; + e.exports = { + isNode: void 0 !== n, + newBufferFrom: function(t, e) { + if (n.from && n.from !== Uint8Array.from) return n.from(t, e); + if ("number" == typeof t) throw new Error('The "data" argument must not be a number'); + return new n(t, e) + }, + allocBuffer: function(t) { + if (n.alloc) return n.alloc(t); + var e = new n(t); + return e.fill(0), e + }, + isBuffer: function(t) { + return n.isBuffer(t) + }, + isStream: function(t) { + return t && "function" == typeof t.on && "function" == typeof t.pause && "function" == typeof t.resume + } + } + }, {}], + 15: [function(t, e, r) { + "use strict"; + + function n(t, e, r) { + var n, i = s.getTypeOf(e), + o = s.extend(r || {}, h); + o.date = o.date || new Date, null !== o.compression && (o.compression = o.compression.toUpperCase()), "string" == typeof o.unixPermissions && (o.unixPermissions = parseInt(o.unixPermissions, 8)), o.unixPermissions && 16384 & o.unixPermissions && (o.dir = !0), o.dosPermissions && 16 & o.dosPermissions && (o.dir = !0), o.dir && (t = m(t)), o.createFolders && (n = p(t)) && _.call(this, n, !0); + var c = "string" === i && !1 === o.binary && !1 === o.base64; + r && void 0 !== r.binary || (o.binary = !c), (e instanceof u && 0 === e.uncompressedSize || o.dir || !e || 0 === e.length) && (o.base64 = !1, o.binary = !0, e = "", o.compression = "STORE", i = "string"); + var g; + g = e instanceof u || e instanceof a ? e : f.isNode && f.isStream(e) ? new d(t, e) : s.prepareContent(t, e, o.binary, o.optimizedBinaryString, o.base64); + var b = new l(t, g, o); + this.files[t] = b + } + var i = t("./utf8"), + s = t("./utils"), + a = t("./stream/GenericWorker"), + o = t("./stream/StreamHelper"), + h = t("./defaults"), + u = t("./compressedObject"), + l = t("./zipObject"), + c = t("./generate"), + f = t("./nodejsUtils"), + d = t("./nodejs/NodejsStreamInputAdapter"), + p = function(t) { + "/" === t.slice(-1) && (t = t.substring(0, t.length - 1)); + var e = t.lastIndexOf("/"); + return 0 < e ? t.substring(0, e) : "" + }, + m = function(t) { + return "/" !== t.slice(-1) && (t += "/"), t + }, + _ = function(t, e) { + return e = void 0 !== e ? e : h.createFolders, t = m(t), this.files[t] || n.call(this, t, null, { + dir: !0, + createFolders: e + }), this.files[t] + }; + + function g(t) { + return "[object RegExp]" === Object.prototype.toString.call(t) + } + var b = { + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.") + }, + forEach: function(t) { + var e, r, n; + for (e in this.files) n = this.files[e], (r = e.slice(this.root.length, e.length)) && e.slice(0, this.root.length) === this.root && t(r, n) + }, + filter: function(t) { + var e = []; + return this.forEach((function(r, n) { + t(r, n) && e.push(n) + })), e + }, + file: function(t, e, r) { + if (1 !== arguments.length) return t = this.root + t, n.call(this, t, e, r), this; + if (g(t)) { + var i = t; + return this.filter((function(t, e) { + return !e.dir && i.test(t) + })) + } + var s = this.files[this.root + t]; + return s && !s.dir ? s : null + }, + folder: function(t) { + if (!t) return this; + if (g(t)) return this.filter((function(e, r) { + return r.dir && t.test(e) + })); + var e = this.root + t, + r = _.call(this, e), + n = this.clone(); + return n.root = r.name, n + }, + remove: function(t) { + t = this.root + t; + var e = this.files[t]; + if (e || ("/" !== t.slice(-1) && (t += "/"), e = this.files[t]), e && !e.dir) delete this.files[t]; + else + for (var r = this.filter((function(e, r) { + return r.name.slice(0, t.length) === t + })), n = 0; n < r.length; n++) delete this.files[r[n].name]; + return this + }, + generate: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.") + }, + generateInternalStream: function(t) { + var e, r = {}; + try { + if ((r = s.extend(t || {}, { + streamFiles: !1, + compression: "STORE", + compressionOptions: null, + type: "", + platform: "DOS", + comment: null, + mimeType: "application/zip", + encodeFileName: i.utf8encode + })).type = r.type.toLowerCase(), r.compression = r.compression.toUpperCase(), "binarystring" === r.type && (r.type = "string"), !r.type) throw new Error("No output type specified."); + s.checkSupport(r.type), "darwin" !== r.platform && "freebsd" !== r.platform && "linux" !== r.platform && "sunos" !== r.platform || (r.platform = "UNIX"), "win32" === r.platform && (r.platform = "DOS"); + var n = r.comment || this.comment || ""; + e = c.generateWorker(this, r, n) + } catch (t) { + (e = new a("error")).error(t) + } + return new o(e, r.type || "string", r.mimeType) + }, + generateAsync: function(t, e) { + return this.generateInternalStream(t).accumulate(e) + }, + generateNodeStream: function(t, e) { + return (t = t || {}).type || (t.type = "nodebuffer"), this.generateInternalStream(t).toNodejsStream(e) + } + }; + e.exports = b + }, { + "./compressedObject": 2, + "./defaults": 5, + "./generate": 9, + "./nodejs/NodejsStreamInputAdapter": 12, + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31, + "./utils": 32, + "./zipObject": 35 + }], + 16: [function(t, e, r) { + "use strict"; + e.exports = t("stream") + }, { + stream: void 0 + }], + 17: [function(t, e, r) { + "use strict"; + var n = t("./DataReader"); + + function i(t) { + n.call(this, t); + for (var e = 0; e < this.data.length; e++) t[e] = 255 & t[e] + } + t("../utils").inherits(i, n), i.prototype.byteAt = function(t) { + return this.data[this.zero + t] + }, i.prototype.lastIndexOfSignature = function(t) { + for (var e = t.charCodeAt(0), r = t.charCodeAt(1), n = t.charCodeAt(2), i = t.charCodeAt(3), s = this.length - 4; 0 <= s; --s) + if (this.data[s] === e && this.data[s + 1] === r && this.data[s + 2] === n && this.data[s + 3] === i) return s - this.zero; + return -1 + }, i.prototype.readAndCheckSignature = function(t) { + var e = t.charCodeAt(0), + r = t.charCodeAt(1), + n = t.charCodeAt(2), + i = t.charCodeAt(3), + s = this.readData(4); + return e === s[0] && r === s[1] && n === s[2] && i === s[3] + }, i.prototype.readData = function(t) { + if (this.checkOffset(t), 0 === t) return []; + var e = this.data.slice(this.zero + this.index, this.zero + this.index + t); + return this.index += t, e + }, e.exports = i + }, { + "../utils": 32, + "./DataReader": 18 + }], + 18: [function(t, e, r) { + "use strict"; + var n = t("../utils"); + + function i(t) { + this.data = t, this.length = t.length, this.index = 0, this.zero = 0 + } + i.prototype = { + checkOffset: function(t) { + this.checkIndex(this.index + t) + }, + checkIndex: function(t) { + if (this.length < this.zero + t || t < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + t + "). Corrupted zip ?") + }, + setIndex: function(t) { + this.checkIndex(t), this.index = t + }, + skip: function(t) { + this.setIndex(this.index + t) + }, + byteAt: function() {}, + readInt: function(t) { + var e, r = 0; + for (this.checkOffset(t), e = this.index + t - 1; e >= this.index; e--) r = (r << 8) + this.byteAt(e); + return this.index += t, r + }, + readString: function(t) { + return n.transformTo("string", this.readData(t)) + }, + readData: function() {}, + lastIndexOfSignature: function() {}, + readAndCheckSignature: function() {}, + readDate: function() { + var t = this.readInt(4); + return new Date(Date.UTC(1980 + (t >> 25 & 127), (t >> 21 & 15) - 1, t >> 16 & 31, t >> 11 & 31, t >> 5 & 63, (31 & t) << 1)) + } + }, e.exports = i + }, { + "../utils": 32 + }], + 19: [function(t, e, r) { + "use strict"; + var n = t("./Uint8ArrayReader"); + + function i(t) { + n.call(this, t) + } + t("../utils").inherits(i, n), i.prototype.readData = function(t) { + this.checkOffset(t); + var e = this.data.slice(this.zero + this.index, this.zero + this.index + t); + return this.index += t, e + }, e.exports = i + }, { + "../utils": 32, + "./Uint8ArrayReader": 21 + }], + 20: [function(t, e, r) { + "use strict"; + var n = t("./DataReader"); + + function i(t) { + n.call(this, t) + } + t("../utils").inherits(i, n), i.prototype.byteAt = function(t) { + return this.data.charCodeAt(this.zero + t) + }, i.prototype.lastIndexOfSignature = function(t) { + return this.data.lastIndexOf(t) - this.zero + }, i.prototype.readAndCheckSignature = function(t) { + return t === this.readData(4) + }, i.prototype.readData = function(t) { + this.checkOffset(t); + var e = this.data.slice(this.zero + this.index, this.zero + this.index + t); + return this.index += t, e + }, e.exports = i + }, { + "../utils": 32, + "./DataReader": 18 + }], + 21: [function(t, e, r) { + "use strict"; + var n = t("./ArrayReader"); + + function i(t) { + n.call(this, t) + } + t("../utils").inherits(i, n), i.prototype.readData = function(t) { + if (this.checkOffset(t), 0 === t) return new Uint8Array(0); + var e = this.data.subarray(this.zero + this.index, this.zero + this.index + t); + return this.index += t, e + }, e.exports = i + }, { + "../utils": 32, + "./ArrayReader": 17 + }], + 22: [function(t, e, r) { + "use strict"; + var n = t("../utils"), + i = t("../support"), + s = t("./ArrayReader"), + a = t("./StringReader"), + o = t("./NodeBufferReader"), + h = t("./Uint8ArrayReader"); + e.exports = function(t) { + var e = n.getTypeOf(t); + return n.checkSupport(e), "string" !== e || i.uint8array ? "nodebuffer" === e ? new o(t) : i.uint8array ? new h(n.transformTo("uint8array", t)) : new s(n.transformTo("array", t)) : new a(t) + } + }, { + "../support": 30, + "../utils": 32, + "./ArrayReader": 17, + "./NodeBufferReader": 19, + "./StringReader": 20, + "./Uint8ArrayReader": 21 + }], + 23: [function(t, e, r) { + "use strict"; + r.LOCAL_FILE_HEADER = "PK", r.CENTRAL_FILE_HEADER = "PK", r.CENTRAL_DIRECTORY_END = "PK", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK", r.ZIP64_CENTRAL_DIRECTORY_END = "PK", r.DATA_DESCRIPTOR = "PK\b" + }, {}], + 24: [function(t, e, r) { + "use strict"; + var n = t("./GenericWorker"), + i = t("../utils"); + + function s(t) { + n.call(this, "ConvertWorker to " + t), this.destType = t + } + i.inherits(s, n), s.prototype.processChunk = function(t) { + this.push({ + data: i.transformTo(this.destType, t.data), + meta: t.meta + }) + }, e.exports = s + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 25: [function(t, e, r) { + "use strict"; + var n = t("./GenericWorker"), + i = t("../crc32"); + + function s() { + n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0) + } + t("../utils").inherits(s, n), s.prototype.processChunk = function(t) { + this.streamInfo.crc32 = i(t.data, this.streamInfo.crc32 || 0), this.push(t) + }, e.exports = s + }, { + "../crc32": 4, + "../utils": 32, + "./GenericWorker": 28 + }], + 26: [function(t, e, r) { + "use strict"; + var n = t("../utils"), + i = t("./GenericWorker"); + + function s(t) { + i.call(this, "DataLengthProbe for " + t), this.propName = t, this.withStreamInfo(t, 0) + } + n.inherits(s, i), s.prototype.processChunk = function(t) { + if (t) { + var e = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = e + t.data.length + } + i.prototype.processChunk.call(this, t) + }, e.exports = s + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 27: [function(t, e, r) { + "use strict"; + var n = t("../utils"), + i = t("./GenericWorker"); + + function s(t) { + i.call(this, "DataWorker"); + var e = this; + this.dataIsReady = !1, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = !1, t.then((function(t) { + e.dataIsReady = !0, e.data = t, e.max = t && t.length || 0, e.type = n.getTypeOf(t), e.isPaused || e._tickAndRepeat() + }), (function(t) { + e.error(t) + })) + } + n.inherits(s, i), s.prototype.cleanUp = function() { + i.prototype.cleanUp.call(this), this.data = null + }, s.prototype.resume = function() { + return !!i.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = !0, n.delay(this._tickAndRepeat, [], this)), !0) + }, s.prototype._tickAndRepeat = function() { + this._tickScheduled = !1, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n.delay(this._tickAndRepeat, [], this), this._tickScheduled = !0)) + }, s.prototype._tick = function() { + if (this.isPaused || this.isFinished) return !1; + var t = null, + e = Math.min(this.max, this.index + 16384); + if (this.index >= this.max) return this.end(); + switch (this.type) { + case "string": + t = this.data.substring(this.index, e); + break; + case "uint8array": + t = this.data.subarray(this.index, e); + break; + case "array": + case "nodebuffer": + t = this.data.slice(this.index, e) + } + return this.index = e, this.push({ + data: t, + meta: { + percent: this.max ? this.index / this.max * 100 : 0 + } + }) + }, e.exports = s + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 28: [function(t, e, r) { + "use strict"; + + function n(t) { + this.name = t || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = !0, this.isFinished = !1, this.isLocked = !1, this._listeners = { + data: [], + end: [], + error: [] + }, this.previous = null + } + n.prototype = { + push: function(t) { + this.emit("data", t) + }, + end: function() { + if (this.isFinished) return !1; + this.flush(); + try { + this.emit("end"), this.cleanUp(), this.isFinished = !0 + } catch (t) { + this.emit("error", t) + } + return !0 + }, + error: function(t) { + return !this.isFinished && (this.isPaused ? this.generatedError = t : (this.isFinished = !0, this.emit("error", t), this.previous && this.previous.error(t), this.cleanUp()), !0) + }, + on: function(t, e) { + return this._listeners[t].push(e), this + }, + cleanUp: function() { + this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = [] + }, + emit: function(t, e) { + if (this._listeners[t]) + for (var r = 0; r < this._listeners[t].length; r++) this._listeners[t][r].call(this, e) + }, + pipe: function(t) { + return t.registerPrevious(this) + }, + registerPrevious: function(t) { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.streamInfo = t.streamInfo, this.mergeStreamInfo(), this.previous = t; + var e = this; + return t.on("data", (function(t) { + e.processChunk(t) + })), t.on("end", (function() { + e.end() + })), t.on("error", (function(t) { + e.error(t) + })), this + }, + pause: function() { + return !this.isPaused && !this.isFinished && (this.isPaused = !0, this.previous && this.previous.pause(), !0) + }, + resume: function() { + if (!this.isPaused || this.isFinished) return !1; + var t = this.isPaused = !1; + return this.generatedError && (this.error(this.generatedError), t = !0), this.previous && this.previous.resume(), !t + }, + flush: function() {}, + processChunk: function(t) { + this.push(t) + }, + withStreamInfo: function(t, e) { + return this.extraStreamInfo[t] = e, this.mergeStreamInfo(), this + }, + mergeStreamInfo: function() { + for (var t in this.extraStreamInfo) Object.prototype.hasOwnProperty.call(this.extraStreamInfo, t) && (this.streamInfo[t] = this.extraStreamInfo[t]) + }, + lock: function() { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.isLocked = !0, this.previous && this.previous.lock() + }, + toString: function() { + var t = "Worker " + this.name; + return this.previous ? this.previous + " -> " + t : t + } + }, e.exports = n + }, {}], + 29: [function(t, e, r) { + "use strict"; + var i = t("../utils"), + s = t("./ConvertWorker"), + a = t("./GenericWorker"), + o = t("../base64"), + h = t("../support"), + u = t("../external"), + l = null; + if (h.nodestream) try { + l = t("../nodejs/NodejsStreamOutputAdapter") + } catch (t) {} + + function c(t, e, r) { + var n = e; + switch (e) { + case "blob": + case "arraybuffer": + n = "uint8array"; + break; + case "base64": + n = "string" + } + try { + this._internalType = n, this._outputType = e, this._mimeType = r, i.checkSupport(n), this._worker = t.pipe(new s(n)), t.lock() + } catch (t) { + this._worker = new a("error"), this._worker.error(t) + } + } + c.prototype = { + accumulate: function(t) { + return function(t, e) { + return new u.Promise((function(r, s) { + var a = [], + h = t._internalType, + u = t._outputType, + l = t._mimeType; + t.on("data", (function(t, r) { + a.push(t), e && e(r) + })).on("error", (function(t) { + a = [], s(t) + })).on("end", (function() { + try { + var t = function(t, e, r) { + switch (t) { + case "blob": + return i.newBlob(i.transformTo("arraybuffer", e), r); + case "base64": + return o.encode(e); + default: + return i.transformTo(t, e) + } + }(u, function(t, e) { + var r, i = 0, + s = null, + a = 0; + for (r = 0; r < e.length; r++) a += e[r].length; + switch (t) { + case "string": + return e.join(""); + case "array": + return Array.prototype.concat.apply([], e); + case "uint8array": + for (s = new Uint8Array(a), r = 0; r < e.length; r++) s.set(e[r], i), i += e[r].length; + return s; + case "nodebuffer": + return n.concat(e); + default: + throw new Error("concat : unsupported type '" + t + "'") + } + }(h, a), l); + r(t) + } catch (t) { + s(t) + } + a = [] + })).resume() + })) + }(this, t) + }, + on: function(t, e) { + var r = this; + return "data" === t ? this._worker.on(t, (function(t) { + e.call(r, t.data, t.meta) + })) : this._worker.on(t, (function() { + i.delay(e, arguments, r) + })), this + }, + resume: function() { + return i.delay(this._worker.resume, [], this._worker), this + }, + pause: function() { + return this._worker.pause(), this + }, + toNodejsStream: function(t) { + if (i.checkSupport("nodestream"), "nodebuffer" !== this._outputType) throw new Error(this._outputType + " is not supported by this method"); + return new l(this, { + objectMode: "nodebuffer" !== this._outputType + }, t) + } + }, e.exports = c + }, { + "../base64": 1, + "../external": 6, + "../nodejs/NodejsStreamOutputAdapter": 13, + "../support": 30, + "../utils": 32, + "./ConvertWorker": 24, + "./GenericWorker": 28 + }], + 30: [function(t, e, r) { + "use strict"; + if (r.base64 = !0, r.array = !0, r.string = !0, r.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r.nodebuffer = void 0 !== n, r.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer) r.blob = !1; + else { + var i = new ArrayBuffer(0); + try { + r.blob = 0 === new Blob([i], { + type: "application/zip" + }).size + } catch (t) { + try { + var s = new(self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder); + s.append(i), r.blob = 0 === s.getBlob("application/zip").size + } catch (t) { + r.blob = !1 + } + } + } + try { + r.nodestream = !!t("readable-stream").Readable + } catch (t) { + r.nodestream = !1 + } + }, { + "readable-stream": 16 + }], + 31: [function(t, e, r) { + "use strict"; + for (var n = t("./utils"), i = t("./support"), s = t("./nodejsUtils"), a = t("./stream/GenericWorker"), o = new Array(256), h = 0; h < 256; h++) o[h] = 252 <= h ? 6 : 248 <= h ? 5 : 240 <= h ? 4 : 224 <= h ? 3 : 192 <= h ? 2 : 1; + + function u() { + a.call(this, "utf-8 decode"), this.leftOver = null + } + + function l() { + a.call(this, "utf-8 encode") + } + o[254] = o[254] = 1, r.utf8encode = function(t) { + return i.nodebuffer ? s.newBufferFrom(t, "utf-8") : function(t) { + var e, r, n, s, a, o = t.length, + h = 0; + for (s = 0; s < o; s++) 55296 == (64512 & (r = t.charCodeAt(s))) && s + 1 < o && 56320 == (64512 & (n = t.charCodeAt(s + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), s++), h += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (e = i.uint8array ? new Uint8Array(h) : new Array(h), s = a = 0; a < h; s++) 55296 == (64512 & (r = t.charCodeAt(s))) && s + 1 < o && 56320 == (64512 & (n = t.charCodeAt(s + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), s++), r < 128 ? e[a++] = r : (r < 2048 ? e[a++] = 192 | r >>> 6 : (r < 65536 ? e[a++] = 224 | r >>> 12 : (e[a++] = 240 | r >>> 18, e[a++] = 128 | r >>> 12 & 63), e[a++] = 128 | r >>> 6 & 63), e[a++] = 128 | 63 & r); + return e + }(t) + }, r.utf8decode = function(t) { + return i.nodebuffer ? n.transformTo("nodebuffer", t).toString("utf-8") : function(t) { + var e, r, i, s, a = t.length, + h = new Array(2 * a); + for (e = r = 0; e < a;) + if ((i = t[e++]) < 128) h[r++] = i; + else if (4 < (s = o[i])) h[r++] = 65533, e += s - 1; + else { + for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && e < a;) i = i << 6 | 63 & t[e++], s--; + 1 < s ? h[r++] = 65533 : i < 65536 ? h[r++] = i : (i -= 65536, h[r++] = 55296 | i >> 10 & 1023, h[r++] = 56320 | 1023 & i) + } + return h.length !== r && (h.subarray ? h = h.subarray(0, r) : h.length = r), n.applyFromCharCode(h) + }(t = n.transformTo(i.uint8array ? "uint8array" : "array", t)) + }, n.inherits(u, a), u.prototype.processChunk = function(t) { + var e = n.transformTo(i.uint8array ? "uint8array" : "array", t.data); + if (this.leftOver && this.leftOver.length) { + if (i.uint8array) { + var s = e; + (e = new Uint8Array(s.length + this.leftOver.length)).set(this.leftOver, 0), e.set(s, this.leftOver.length) + } else e = this.leftOver.concat(e); + this.leftOver = null + } + var a = function(t, e) { + var r; + for ((e = e || t.length) > t.length && (e = t.length), r = e - 1; 0 <= r && 128 == (192 & t[r]);) r--; + return r < 0 || 0 === r ? e : r + o[t[r]] > e ? r : e + }(e), + h = e; + a !== e.length && (i.uint8array ? (h = e.subarray(0, a), this.leftOver = e.subarray(a, e.length)) : (h = e.slice(0, a), this.leftOver = e.slice(a, e.length))), this.push({ + data: r.utf8decode(h), + meta: t.meta + }) + }, u.prototype.flush = function() { + this.leftOver && this.leftOver.length && (this.push({ + data: r.utf8decode(this.leftOver), + meta: {} + }), this.leftOver = null) + }, r.Utf8DecodeWorker = u, n.inherits(l, a), l.prototype.processChunk = function(t) { + this.push({ + data: r.utf8encode(t.data), + meta: t.meta + }) + }, r.Utf8EncodeWorker = l + }, { + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./support": 30, + "./utils": 32 + }], + 32: [function(t, e, r) { + "use strict"; + var n = t("./support"), + i = t("./base64"), + s = t("./nodejsUtils"), + a = t("./external"); + + function o(t) { + return t + } + + function h(t, e) { + for (var r = 0; r < t.length; ++r) e[r] = 255 & t.charCodeAt(r); + return e + } + t("setimmediate"), r.newBlob = function(t, e) { + r.checkSupport("blob"); + try { + return new Blob([t], { + type: e + }) + } catch (r) { + try { + var n = new(self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder); + return n.append(t), n.getBlob(e) + } catch (t) { + throw new Error("Bug : can't construct the Blob.") + } + } + }; + var u = { + stringifyByChunk: function(t, e, r) { + var n = [], + i = 0, + s = t.length; + if (s <= r) return String.fromCharCode.apply(null, t); + for (; i < s;) "array" === e || "nodebuffer" === e ? n.push(String.fromCharCode.apply(null, t.slice(i, Math.min(i + r, s)))) : n.push(String.fromCharCode.apply(null, t.subarray(i, Math.min(i + r, s)))), i += r; + return n.join("") + }, + stringifyByChar: function(t) { + for (var e = "", r = 0; r < t.length; r++) e += String.fromCharCode(t[r]); + return e + }, + applyCanBeUsed: { + uint8array: function() { + try { + return n.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length + } catch (t) { + return !1 + } + }(), + nodebuffer: function() { + try { + return n.nodebuffer && 1 === String.fromCharCode.apply(null, s.allocBuffer(1)).length + } catch (t) { + return !1 + } + }() + } + }; + + function l(t) { + var e = 65536, + n = r.getTypeOf(t), + i = !0; + if ("uint8array" === n ? i = u.applyCanBeUsed.uint8array : "nodebuffer" === n && (i = u.applyCanBeUsed.nodebuffer), i) + for (; 1 < e;) try { + return u.stringifyByChunk(t, n, e) + } catch (t) { + e = Math.floor(e / 2) + } + return u.stringifyByChar(t) + } + + function c(t, e) { + for (var r = 0; r < t.length; r++) e[r] = t[r]; + return e + } + r.applyFromCharCode = l; + var f = {}; + f.string = { + string: o, + array: function(t) { + return h(t, new Array(t.length)) + }, + arraybuffer: function(t) { + return f.string.uint8array(t).buffer + }, + uint8array: function(t) { + return h(t, new Uint8Array(t.length)) + }, + nodebuffer: function(t) { + return h(t, s.allocBuffer(t.length)) + } + }, f.array = { + string: l, + array: o, + arraybuffer: function(t) { + return new Uint8Array(t).buffer + }, + uint8array: function(t) { + return new Uint8Array(t) + }, + nodebuffer: function(t) { + return s.newBufferFrom(t) + } + }, f.arraybuffer = { + string: function(t) { + return l(new Uint8Array(t)) + }, + array: function(t) { + return c(new Uint8Array(t), new Array(t.byteLength)) + }, + arraybuffer: o, + uint8array: function(t) { + return new Uint8Array(t) + }, + nodebuffer: function(t) { + return s.newBufferFrom(new Uint8Array(t)) + } + }, f.uint8array = { + string: l, + array: function(t) { + return c(t, new Array(t.length)) + }, + arraybuffer: function(t) { + return t.buffer + }, + uint8array: o, + nodebuffer: function(t) { + return s.newBufferFrom(t) + } + }, f.nodebuffer = { + string: l, + array: function(t) { + return c(t, new Array(t.length)) + }, + arraybuffer: function(t) { + return f.nodebuffer.uint8array(t).buffer + }, + uint8array: function(t) { + return c(t, new Uint8Array(t.length)) + }, + nodebuffer: o + }, r.transformTo = function(t, e) { + if (e = e || "", !t) return e; + r.checkSupport(t); + var n = r.getTypeOf(e); + return f[n][t](e) + }, r.resolve = function(t) { + for (var e = t.split("/"), r = [], n = 0; n < e.length; n++) { + var i = e[n]; + "." === i || "" === i && 0 !== n && n !== e.length - 1 || (".." === i ? r.pop() : r.push(i)) + } + return r.join("/") + }, r.getTypeOf = function(t) { + return "string" == typeof t ? "string" : "[object Array]" === Object.prototype.toString.call(t) ? "array" : n.nodebuffer && s.isBuffer(t) ? "nodebuffer" : n.uint8array && t instanceof Uint8Array ? "uint8array" : n.arraybuffer && t instanceof ArrayBuffer ? "arraybuffer" : void 0 + }, r.checkSupport = function(t) { + if (!n[t.toLowerCase()]) throw new Error(t + " is not supported by this platform") + }, r.MAX_VALUE_16BITS = 65535, r.MAX_VALUE_32BITS = -1, r.pretty = function(t) { + var e, r, n = ""; + for (r = 0; r < (t || "").length; r++) n += "\\x" + ((e = t.charCodeAt(r)) < 16 ? "0" : "") + e.toString(16).toUpperCase(); + return n + }, r.delay = function(t, e, r) { + setImmediate((function() { + t.apply(r || null, e || []) + })) + }, r.inherits = function(t, e) { + function r() {} + r.prototype = e.prototype, t.prototype = new r + }, r.extend = function() { + var t, e, r = {}; + for (t = 0; t < arguments.length; t++) + for (e in arguments[t]) Object.prototype.hasOwnProperty.call(arguments[t], e) && void 0 === r[e] && (r[e] = arguments[t][e]); + return r + }, r.prepareContent = function(t, e, s, o, u) { + return a.Promise.resolve(e).then((function(t) { + return n.blob && (t instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(t))) && "undefined" != typeof FileReader ? new a.Promise((function(e, r) { + var n = new FileReader; + n.onload = function(t) { + e(t.target.result) + }, n.onerror = function(t) { + r(t.target.error) + }, n.readAsArrayBuffer(t) + })) : t + })).then((function(e) { + var l = r.getTypeOf(e); + return l ? ("arraybuffer" === l ? e = r.transformTo("uint8array", e) : "string" === l && (u ? e = i.decode(e) : s && !0 !== o && (e = function(t) { + return h(t, n.uint8array ? new Uint8Array(t.length) : new Array(t.length)) + }(e))), e) : a.Promise.reject(new Error("Can't read the data of '" + t + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?")) + })) + } + }, { + "./base64": 1, + "./external": 6, + "./nodejsUtils": 14, + "./support": 30, + setimmediate: 54 + }], + 33: [function(t, e, r) { + "use strict"; + var n = t("./reader/readerFor"), + i = t("./utils"), + s = t("./signature"), + a = t("./zipEntry"), + o = t("./support"); + + function h(t) { + this.files = [], this.loadOptions = t + } + h.prototype = { + checkSignature: function(t) { + if (!this.reader.readAndCheckSignature(t)) { + this.reader.index -= 4; + var e = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature (" + i.pretty(e) + ", expected " + i.pretty(t) + ")") + } + }, + isSignature: function(t, e) { + var r = this.reader.index; + this.reader.setIndex(t); + var n = this.reader.readString(4) === e; + return this.reader.setIndex(r), n + }, + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2); + var t = this.reader.readData(this.zipCommentLength), + e = o.uint8array ? "uint8array" : "array", + r = i.transformTo(e, t); + this.zipComment = this.loadOptions.decodeFileName(r) + }, + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {}; + for (var t, e, r, n = this.zip64EndOfCentralSize - 44; 0 < n;) t = this.reader.readInt(2), e = this.reader.readInt(4), r = this.reader.readData(e), this.zip64ExtensibleData[t] = { + id: t, + length: e, + value: r + } + }, + readBlockZip64EndOfCentralLocator: function() { + if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error("Multi-volumes zip are not supported") + }, + readLocalFiles: function() { + var t, e; + for (t = 0; t < this.files.length; t++) e = this.files[t], this.reader.setIndex(e.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), e.readLocalPart(this.reader), e.handleUTF8(), e.processAttributes() + }, + readCentralDir: function() { + var t; + for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(t = new a({ + zip64: this.zip64 + }, this.loadOptions)).readCentralPart(this.reader), this.files.push(t); + if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length) + }, + readEndOfCentral: function() { + var t = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END); + if (t < 0) throw this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error("Corrupted zip: can't find end of central directory") : new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + this.reader.setIndex(t); + var e = t; + if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || this.centralDirRecords === i.MAX_VALUE_16BITS || this.centralDirSize === i.MAX_VALUE_32BITS || this.centralDirOffset === i.MAX_VALUE_32BITS) { + if (this.zip64 = !0, (t = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + if (this.reader.setIndex(t), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral() + } + var r = this.centralDirOffset + this.centralDirSize; + this.zip64 && (r += 20, r += 12 + this.zip64EndOfCentralSize); + var n = e - r; + if (0 < n) this.isSignature(e, s.CENTRAL_FILE_HEADER) || (this.reader.zero = n); + else if (n < 0) throw new Error("Corrupted zip: missing " + Math.abs(n) + " bytes.") + }, + prepareReader: function(t) { + this.reader = n(t) + }, + load: function(t) { + this.prepareReader(t), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles() + } + }, e.exports = h + }, { + "./reader/readerFor": 22, + "./signature": 23, + "./support": 30, + "./utils": 32, + "./zipEntry": 34 + }], + 34: [function(t, e, r) { + "use strict"; + var n = t("./reader/readerFor"), + i = t("./utils"), + s = t("./compressedObject"), + a = t("./crc32"), + o = t("./utf8"), + h = t("./compressions"), + u = t("./support"); + + function l(t, e) { + this.options = t, this.loadOptions = e + } + l.prototype = { + isEncrypted: function() { + return 1 == (1 & this.bitFlag) + }, + useUTF8: function() { + return 2048 == (2048 & this.bitFlag) + }, + readLocalPart: function(t) { + var e, r; + if (t.skip(22), this.fileNameLength = t.readInt(2), r = t.readInt(2), this.fileName = t.readData(this.fileNameLength), t.skip(r), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)"); + if (null === (e = function(t) { + for (var e in h) + if (Object.prototype.hasOwnProperty.call(h, e) && h[e].magic === t) return h[e]; + return null + }(this.compressionMethod))) throw new Error("Corrupted zip : compression " + i.pretty(this.compressionMethod) + " unknown (inner file : " + i.transformTo("string", this.fileName) + ")"); + this.decompressed = new s(this.compressedSize, this.uncompressedSize, this.crc32, e, t.readData(this.compressedSize)) + }, + readCentralPart: function(t) { + this.versionMadeBy = t.readInt(2), t.skip(2), this.bitFlag = t.readInt(2), this.compressionMethod = t.readString(2), this.date = t.readDate(), this.crc32 = t.readInt(4), this.compressedSize = t.readInt(4), this.uncompressedSize = t.readInt(4); + var e = t.readInt(2); + if (this.extraFieldsLength = t.readInt(2), this.fileCommentLength = t.readInt(2), this.diskNumberStart = t.readInt(2), this.internalFileAttributes = t.readInt(2), this.externalFileAttributes = t.readInt(4), this.localHeaderOffset = t.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported"); + t.skip(e), this.readExtraFields(t), this.parseZIP64ExtraField(t), this.fileComment = t.readData(this.fileCommentLength) + }, + processAttributes: function() { + this.unixPermissions = null, this.dosPermissions = null; + var t = this.versionMadeBy >> 8; + this.dir = !!(16 & this.externalFileAttributes), 0 == t && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == t && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = !0) + }, + parseZIP64ExtraField: function() { + if (this.extraFields[1]) { + var t = n(this.extraFields[1].value); + this.uncompressedSize === i.MAX_VALUE_32BITS && (this.uncompressedSize = t.readInt(8)), this.compressedSize === i.MAX_VALUE_32BITS && (this.compressedSize = t.readInt(8)), this.localHeaderOffset === i.MAX_VALUE_32BITS && (this.localHeaderOffset = t.readInt(8)), this.diskNumberStart === i.MAX_VALUE_32BITS && (this.diskNumberStart = t.readInt(4)) + } + }, + readExtraFields: function(t) { + var e, r, n, i = t.index + this.extraFieldsLength; + for (this.extraFields || (this.extraFields = {}); t.index + 4 < i;) e = t.readInt(2), r = t.readInt(2), n = t.readData(r), this.extraFields[e] = { + id: e, + length: r, + value: n + }; + t.setIndex(i) + }, + handleUTF8: function() { + var t = u.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment); + else { + var e = this.findExtraFieldUnicodePath(); + if (null !== e) this.fileNameStr = e; + else { + var r = i.transformTo(t, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(r) + } + var n = this.findExtraFieldUnicodeComment(); + if (null !== n) this.fileCommentStr = n; + else { + var s = i.transformTo(t, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(s) + } + } + }, + findExtraFieldUnicodePath: function() { + var t = this.extraFields[28789]; + if (t) { + var e = n(t.value); + return 1 !== e.readInt(1) || a(this.fileName) !== e.readInt(4) ? null : o.utf8decode(e.readData(t.length - 5)) + } + return null + }, + findExtraFieldUnicodeComment: function() { + var t = this.extraFields[25461]; + if (t) { + var e = n(t.value); + return 1 !== e.readInt(1) || a(this.fileComment) !== e.readInt(4) ? null : o.utf8decode(e.readData(t.length - 5)) + } + return null + } + }, e.exports = l + }, { + "./compressedObject": 2, + "./compressions": 3, + "./crc32": 4, + "./reader/readerFor": 22, + "./support": 30, + "./utf8": 31, + "./utils": 32 + }], + 35: [function(t, e, r) { + "use strict"; + + function n(t, e, r) { + this.name = t, this.dir = r.dir, this.date = r.date, this.comment = r.comment, this.unixPermissions = r.unixPermissions, this.dosPermissions = r.dosPermissions, this._data = e, this._dataBinary = r.binary, this.options = { + compression: r.compression, + compressionOptions: r.compressionOptions + } + } + var i = t("./stream/StreamHelper"), + s = t("./stream/DataWorker"), + a = t("./utf8"), + o = t("./compressedObject"), + h = t("./stream/GenericWorker"); + n.prototype = { + internalStream: function(t) { + var e = null, + r = "string"; + try { + if (!t) throw new Error("No output type specified."); + var n = "string" === (r = t.toLowerCase()) || "text" === r; + "binarystring" !== r && "text" !== r || (r = "string"), e = this._decompressWorker(); + var s = !this._dataBinary; + s && !n && (e = e.pipe(new a.Utf8EncodeWorker)), !s && n && (e = e.pipe(new a.Utf8DecodeWorker)) + } catch (t) { + (e = new h("error")).error(t) + } + return new i(e, r, "") + }, + async: function(t, e) { + return this.internalStream(t).accumulate(e) + }, + nodeStream: function(t, e) { + return this.internalStream(t || "nodebuffer").toNodejsStream(e) + }, + _compressWorker: function(t, e) { + if (this._data instanceof o && this._data.compression.magic === t.magic) return this._data.getCompressedWorker(); + var r = this._decompressWorker(); + return this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker)), o.createWorkerFrom(r, t, e) + }, + _decompressWorker: function() { + return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new s(this._data) + } + }; + for (var u = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l = function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.") + }, c = 0; c < u.length; c++) n.prototype[u[c]] = l; + e.exports = n + }, { + "./compressedObject": 2, + "./stream/DataWorker": 27, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31 + }], + 36: [function(t, e, n) { + (function(t) { + "use strict"; + var r, n, i = t.MutationObserver || t.WebKitMutationObserver; + if (i) { + var s = 0, + a = new i(l), + o = t.document.createTextNode(""); + a.observe(o, { + characterData: !0 + }), r = function() { + o.data = s = ++s % 2 + } + } else if (t.setImmediate || void 0 === t.MessageChannel) r = "document" in t && "onreadystatechange" in t.document.createElement("script") ? function() { + var e = t.document.createElement("script"); + e.onreadystatechange = function() { + l(), e.onreadystatechange = null, e.parentNode.removeChild(e), e = null + }, t.document.documentElement.appendChild(e) + } : function() { + setTimeout(l, 0) + }; + else { + var h = new t.MessageChannel; + h.port1.onmessage = l, r = function() { + h.port2.postMessage(0) + } + } + var u = []; + + function l() { + var t, e; + n = !0; + for (var r = u.length; r;) { + for (e = u, u = [], t = -1; ++t < r;) e[t](); + r = u.length + } + n = !1 + } + e.exports = function(t) { + 1 !== u.push(t) || n || r() + } + }).call(this, void 0 !== r.g ? r.g : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) + }, {}], + 37: [function(t, e, r) { + "use strict"; + var n = t("immediate"); + + function i() {} + var s = {}, + a = ["REJECTED"], + o = ["FULFILLED"], + h = ["PENDING"]; + + function u(t) { + if ("function" != typeof t) throw new TypeError("resolver must be a function"); + this.state = h, this.queue = [], this.outcome = void 0, t !== i && d(this, t) + } + + function l(t, e, r) { + this.promise = t, "function" == typeof e && (this.onFulfilled = e, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r && (this.onRejected = r, this.callRejected = this.otherCallRejected) + } + + function c(t, e, r) { + n((function() { + var n; + try { + n = e(r) + } catch (n) { + return s.reject(t, n) + } + n === t ? s.reject(t, new TypeError("Cannot resolve promise with itself")) : s.resolve(t, n) + })) + } + + function f(t) { + var e = t && t.then; + if (t && ("object" == typeof t || "function" == typeof t) && "function" == typeof e) return function() { + e.apply(t, arguments) + } + } + + function d(t, e) { + var r = !1; + + function n(e) { + r || (r = !0, s.reject(t, e)) + } + + function i(e) { + r || (r = !0, s.resolve(t, e)) + } + var a = p((function() { + e(i, n) + })); + "error" === a.status && n(a.value) + } + + function p(t, e) { + var r = {}; + try { + r.value = t(e), r.status = "success" + } catch (t) { + r.status = "error", r.value = t + } + return r + }(e.exports = u).prototype.finally = function(t) { + if ("function" != typeof t) return this; + var e = this.constructor; + return this.then((function(r) { + return e.resolve(t()).then((function() { + return r + })) + }), (function(r) { + return e.resolve(t()).then((function() { + throw r + })) + })) + }, u.prototype.catch = function(t) { + return this.then(null, t) + }, u.prototype.then = function(t, e) { + if ("function" != typeof t && this.state === o || "function" != typeof e && this.state === a) return this; + var r = new this.constructor(i); + return this.state !== h ? c(r, this.state === o ? t : e, this.outcome) : this.queue.push(new l(r, t, e)), r + }, l.prototype.callFulfilled = function(t) { + s.resolve(this.promise, t) + }, l.prototype.otherCallFulfilled = function(t) { + c(this.promise, this.onFulfilled, t) + }, l.prototype.callRejected = function(t) { + s.reject(this.promise, t) + }, l.prototype.otherCallRejected = function(t) { + c(this.promise, this.onRejected, t) + }, s.resolve = function(t, e) { + var r = p(f, e); + if ("error" === r.status) return s.reject(t, r.value); + var n = r.value; + if (n) d(t, n); + else { + t.state = o, t.outcome = e; + for (var i = -1, a = t.queue.length; ++i < a;) t.queue[i].callFulfilled(e) + } + return t + }, s.reject = function(t, e) { + t.state = a, t.outcome = e; + for (var r = -1, n = t.queue.length; ++r < n;) t.queue[r].callRejected(e); + return t + }, u.resolve = function(t) { + return t instanceof this ? t : s.resolve(new this(i), t) + }, u.reject = function(t) { + var e = new this(i); + return s.reject(e, t) + }, u.all = function(t) { + var e = this; + if ("[object Array]" !== Object.prototype.toString.call(t)) return this.reject(new TypeError("must be an array")); + var r = t.length, + n = !1; + if (!r) return this.resolve([]); + for (var a = new Array(r), o = 0, h = -1, u = new this(i); ++h < r;) l(t[h], h); + return u; + + function l(t, i) { + e.resolve(t).then((function(t) { + a[i] = t, ++o !== r || n || (n = !0, s.resolve(u, a)) + }), (function(t) { + n || (n = !0, s.reject(u, t)) + })) + } + }, u.race = function(t) { + if ("[object Array]" !== Object.prototype.toString.call(t)) return this.reject(new TypeError("must be an array")); + var e = t.length, + r = !1; + if (!e) return this.resolve([]); + for (var n, a = -1, o = new this(i); ++a < e;) n = t[a], this.resolve(n).then((function(t) { + r || (r = !0, s.resolve(o, t)) + }), (function(t) { + r || (r = !0, s.reject(o, t)) + })); + return o + } + }, { + immediate: 36 + }], + 38: [function(t, e, r) { + "use strict"; + var n = {}; + (0, t("./lib/utils/common").assign)(n, t("./lib/deflate"), t("./lib/inflate"), t("./lib/zlib/constants")), e.exports = n + }, { + "./lib/deflate": 39, + "./lib/inflate": 40, + "./lib/utils/common": 41, + "./lib/zlib/constants": 44 + }], + 39: [function(t, e, r) { + "use strict"; + var n = t("./zlib/deflate"), + i = t("./utils/common"), + s = t("./utils/strings"), + a = t("./zlib/messages"), + o = t("./zlib/zstream"), + h = Object.prototype.toString; + + function u(t) { + if (!(this instanceof u)) return new u(t); + this.options = i.assign({ + level: -1, + method: 8, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: 0, + to: "" + }, t || {}); + var e = this.options; + e.raw && 0 < e.windowBits ? e.windowBits = -e.windowBits : e.gzip && 0 < e.windowBits && e.windowBits < 16 && (e.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new o, this.strm.avail_out = 0; + var r = n.deflateInit2(this.strm, e.level, e.method, e.windowBits, e.memLevel, e.strategy); + if (0 !== r) throw new Error(a[r]); + if (e.header && n.deflateSetHeader(this.strm, e.header), e.dictionary) { + var l; + if (l = "string" == typeof e.dictionary ? s.string2buf(e.dictionary) : "[object ArrayBuffer]" === h.call(e.dictionary) ? new Uint8Array(e.dictionary) : e.dictionary, 0 !== (r = n.deflateSetDictionary(this.strm, l))) throw new Error(a[r]); + this._dict_set = !0 + } + } + + function l(t, e) { + var r = new u(e); + if (r.push(t, !0), r.err) throw r.msg || a[r.err]; + return r.result + } + u.prototype.push = function(t, e) { + var r, a, o = this.strm, + u = this.options.chunkSize; + if (this.ended) return !1; + a = e === ~~e ? e : !0 === e ? 4 : 0, "string" == typeof t ? o.input = s.string2buf(t) : "[object ArrayBuffer]" === h.call(t) ? o.input = new Uint8Array(t) : o.input = t, o.next_in = 0, o.avail_in = o.input.length; + do { + if (0 === o.avail_out && (o.output = new i.Buf8(u), o.next_out = 0, o.avail_out = u), 1 !== (r = n.deflate(o, a)) && 0 !== r) return this.onEnd(r), !(this.ended = !0); + 0 !== o.avail_out && (0 !== o.avail_in || 4 !== a && 2 !== a) || ("string" === this.options.to ? this.onData(s.buf2binstring(i.shrinkBuf(o.output, o.next_out))) : this.onData(i.shrinkBuf(o.output, o.next_out))) + } while ((0 < o.avail_in || 0 === o.avail_out) && 1 !== r); + return 4 === a ? (r = n.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, 0 === r) : 2 !== a || (this.onEnd(0), !(o.avail_out = 0)) + }, u.prototype.onData = function(t) { + this.chunks.push(t) + }, u.prototype.onEnd = function(t) { + 0 === t && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = i.flattenChunks(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg + }, r.Deflate = u, r.deflate = l, r.deflateRaw = function(t, e) { + return (e = e || {}).raw = !0, l(t, e) + }, r.gzip = function(t, e) { + return (e = e || {}).gzip = !0, l(t, e) + } + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/deflate": 46, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 40: [function(t, e, r) { + "use strict"; + var n = t("./zlib/inflate"), + i = t("./utils/common"), + s = t("./utils/strings"), + a = t("./zlib/constants"), + o = t("./zlib/messages"), + h = t("./zlib/zstream"), + u = t("./zlib/gzheader"), + l = Object.prototype.toString; + + function c(t) { + if (!(this instanceof c)) return new c(t); + this.options = i.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, t || {}); + var e = this.options; + e.raw && 0 <= e.windowBits && e.windowBits < 16 && (e.windowBits = -e.windowBits, 0 === e.windowBits && (e.windowBits = -15)), !(0 <= e.windowBits && e.windowBits < 16) || t && t.windowBits || (e.windowBits += 32), 15 < e.windowBits && e.windowBits < 48 && 0 == (15 & e.windowBits) && (e.windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new h, this.strm.avail_out = 0; + var r = n.inflateInit2(this.strm, e.windowBits); + if (r !== a.Z_OK) throw new Error(o[r]); + this.header = new u, n.inflateGetHeader(this.strm, this.header) + } + + function f(t, e) { + var r = new c(e); + if (r.push(t, !0), r.err) throw r.msg || o[r.err]; + return r.result + } + c.prototype.push = function(t, e) { + var r, o, h, u, c, f, d = this.strm, + p = this.options.chunkSize, + m = this.options.dictionary, + _ = !1; + if (this.ended) return !1; + o = e === ~~e ? e : !0 === e ? a.Z_FINISH : a.Z_NO_FLUSH, "string" == typeof t ? d.input = s.binstring2buf(t) : "[object ArrayBuffer]" === l.call(t) ? d.input = new Uint8Array(t) : d.input = t, d.next_in = 0, d.avail_in = d.input.length; + do { + if (0 === d.avail_out && (d.output = new i.Buf8(p), d.next_out = 0, d.avail_out = p), (r = n.inflate(d, a.Z_NO_FLUSH)) === a.Z_NEED_DICT && m && (f = "string" == typeof m ? s.string2buf(m) : "[object ArrayBuffer]" === l.call(m) ? new Uint8Array(m) : m, r = n.inflateSetDictionary(this.strm, f)), r === a.Z_BUF_ERROR && !0 === _ && (r = a.Z_OK, _ = !1), r !== a.Z_STREAM_END && r !== a.Z_OK) return this.onEnd(r), !(this.ended = !0); + d.next_out && (0 !== d.avail_out && r !== a.Z_STREAM_END && (0 !== d.avail_in || o !== a.Z_FINISH && o !== a.Z_SYNC_FLUSH) || ("string" === this.options.to ? (h = s.utf8border(d.output, d.next_out), u = d.next_out - h, c = s.buf2string(d.output, h), d.next_out = u, d.avail_out = p - u, u && i.arraySet(d.output, d.output, h, u, 0), this.onData(c)) : this.onData(i.shrinkBuf(d.output, d.next_out)))), 0 === d.avail_in && 0 === d.avail_out && (_ = !0) + } while ((0 < d.avail_in || 0 === d.avail_out) && r !== a.Z_STREAM_END); + return r === a.Z_STREAM_END && (o = a.Z_FINISH), o === a.Z_FINISH ? (r = n.inflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === a.Z_OK) : o !== a.Z_SYNC_FLUSH || (this.onEnd(a.Z_OK), !(d.avail_out = 0)) + }, c.prototype.onData = function(t) { + this.chunks.push(t) + }, c.prototype.onEnd = function(t) { + t === a.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = i.flattenChunks(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg + }, r.Inflate = c, r.inflate = f, r.inflateRaw = function(t, e) { + return (e = e || {}).raw = !0, f(t, e) + }, r.ungzip = f + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/constants": 44, + "./zlib/gzheader": 47, + "./zlib/inflate": 49, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 41: [function(t, e, r) { + "use strict"; + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; + r.assign = function(t) { + for (var e = Array.prototype.slice.call(arguments, 1); e.length;) { + var r = e.shift(); + if (r) { + if ("object" != typeof r) throw new TypeError(r + "must be non-object"); + for (var n in r) r.hasOwnProperty(n) && (t[n] = r[n]) + } + } + return t + }, r.shrinkBuf = function(t, e) { + return t.length === e ? t : t.subarray ? t.subarray(0, e) : (t.length = e, t) + }; + var i = { + arraySet: function(t, e, r, n, i) { + if (e.subarray && t.subarray) t.set(e.subarray(r, r + n), i); + else + for (var s = 0; s < n; s++) t[i + s] = e[r + s] + }, + flattenChunks: function(t) { + var e, r, n, i, s, a; + for (e = n = 0, r = t.length; e < r; e++) n += t[e].length; + for (a = new Uint8Array(n), e = i = 0, r = t.length; e < r; e++) s = t[e], a.set(s, i), i += s.length; + return a + } + }, + s = { + arraySet: function(t, e, r, n, i) { + for (var s = 0; s < n; s++) t[i + s] = e[r + s] + }, + flattenChunks: function(t) { + return [].concat.apply([], t) + } + }; + r.setTyped = function(t) { + t ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, i)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s)) + }, r.setTyped(n) + }, {}], + 42: [function(t, e, r) { + "use strict"; + var n = t("./common"), + i = !0, + s = !0; + try { + String.fromCharCode.apply(null, [0]) + } catch (t) { + i = !1 + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (t) { + s = !1 + } + for (var a = new n.Buf8(256), o = 0; o < 256; o++) a[o] = 252 <= o ? 6 : 248 <= o ? 5 : 240 <= o ? 4 : 224 <= o ? 3 : 192 <= o ? 2 : 1; + + function h(t, e) { + if (e < 65537 && (t.subarray && s || !t.subarray && i)) return String.fromCharCode.apply(null, n.shrinkBuf(t, e)); + for (var r = "", a = 0; a < e; a++) r += String.fromCharCode(t[a]); + return r + } + a[254] = a[254] = 1, r.string2buf = function(t) { + var e, r, i, s, a, o = t.length, + h = 0; + for (s = 0; s < o; s++) 55296 == (64512 & (r = t.charCodeAt(s))) && s + 1 < o && 56320 == (64512 & (i = t.charCodeAt(s + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), s++), h += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (e = new n.Buf8(h), s = a = 0; a < h; s++) 55296 == (64512 & (r = t.charCodeAt(s))) && s + 1 < o && 56320 == (64512 & (i = t.charCodeAt(s + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), s++), r < 128 ? e[a++] = r : (r < 2048 ? e[a++] = 192 | r >>> 6 : (r < 65536 ? e[a++] = 224 | r >>> 12 : (e[a++] = 240 | r >>> 18, e[a++] = 128 | r >>> 12 & 63), e[a++] = 128 | r >>> 6 & 63), e[a++] = 128 | 63 & r); + return e + }, r.buf2binstring = function(t) { + return h(t, t.length) + }, r.binstring2buf = function(t) { + for (var e = new n.Buf8(t.length), r = 0, i = e.length; r < i; r++) e[r] = t.charCodeAt(r); + return e + }, r.buf2string = function(t, e) { + var r, n, i, s, o = e || t.length, + u = new Array(2 * o); + for (r = n = 0; r < o;) + if ((i = t[r++]) < 128) u[n++] = i; + else if (4 < (s = a[i])) u[n++] = 65533, r += s - 1; + else { + for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < o;) i = i << 6 | 63 & t[r++], s--; + 1 < s ? u[n++] = 65533 : i < 65536 ? u[n++] = i : (i -= 65536, u[n++] = 55296 | i >> 10 & 1023, u[n++] = 56320 | 1023 & i) + } + return h(u, n) + }, r.utf8border = function(t, e) { + var r; + for ((e = e || t.length) > t.length && (e = t.length), r = e - 1; 0 <= r && 128 == (192 & t[r]);) r--; + return r < 0 || 0 === r ? e : r + a[t[r]] > e ? r : e + } + }, { + "./common": 41 + }], + 43: [function(t, e, r) { + "use strict"; + e.exports = function(t, e, r, n) { + for (var i = 65535 & t | 0, s = t >>> 16 & 65535 | 0, a = 0; 0 !== r;) { + for (r -= a = 2e3 < r ? 2e3 : r; s = s + (i = i + e[n++] | 0) | 0, --a;); + i %= 65521, s %= 65521 + } + return i | s << 16 | 0 + } + }, {}], + 44: [function(t, e, r) { + "use strict"; + e.exports = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + } + }, {}], + 45: [function(t, e, r) { + "use strict"; + var n = function() { + for (var t, e = [], r = 0; r < 256; r++) { + t = r; + for (var n = 0; n < 8; n++) t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1; + e[r] = t + } + return e + }(); + e.exports = function(t, e, r, i) { + var s = n, + a = i + r; + t ^= -1; + for (var o = i; o < a; o++) t = t >>> 8 ^ s[255 & (t ^ e[o])]; + return -1 ^ t + } + }, {}], + 46: [function(t, e, r) { + "use strict"; + var n, i = t("../utils/common"), + s = t("./trees"), + a = t("./adler32"), + o = t("./crc32"), + h = t("./messages"), + u = -2, + l = 258, + c = 262, + f = 113; + + function d(t, e) { + return t.msg = h[e], e + } + + function p(t) { + return (t << 1) - (4 < t ? 9 : 0) + } + + function m(t) { + for (var e = t.length; 0 <= --e;) t[e] = 0 + } + + function _(t) { + var e = t.state, + r = e.pending; + r > t.avail_out && (r = t.avail_out), 0 !== r && (i.arraySet(t.output, e.pending_buf, e.pending_out, r, t.next_out), t.next_out += r, e.pending_out += r, t.total_out += r, t.avail_out -= r, e.pending -= r, 0 === e.pending && (e.pending_out = 0)) + } + + function g(t, e) { + s._tr_flush_block(t, 0 <= t.block_start ? t.block_start : -1, t.strstart - t.block_start, e), t.block_start = t.strstart, _(t.strm) + } + + function b(t, e) { + t.pending_buf[t.pending++] = e + } + + function v(t, e) { + t.pending_buf[t.pending++] = e >>> 8 & 255, t.pending_buf[t.pending++] = 255 & e + } + + function y(t, e) { + var r, n, i = t.max_chain_length, + s = t.strstart, + a = t.prev_length, + o = t.nice_match, + h = t.strstart > t.w_size - c ? t.strstart - (t.w_size - c) : 0, + u = t.window, + f = t.w_mask, + d = t.prev, + p = t.strstart + l, + m = u[s + a - 1], + _ = u[s + a]; + t.prev_length >= t.good_match && (i >>= 2), o > t.lookahead && (o = t.lookahead); + do { + if (u[(r = e) + a] === _ && u[r + a - 1] === m && u[r] === u[s] && u[++r] === u[s + 1]) { + s += 2, r++; + do {} while (u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && s < p); + if (n = l - (p - s), s = p - l, a < n) { + if (t.match_start = e, o <= (a = n)) break; + m = u[s + a - 1], _ = u[s + a] + } + } + } while ((e = d[e & f]) > h && 0 != --i); + return a <= t.lookahead ? a : t.lookahead + } + + function w(t) { + var e, r, n, s, h, u, l, f, d, p, m = t.w_size; + do { + if (s = t.window_size - t.lookahead - t.strstart, t.strstart >= m + (m - c)) { + for (i.arraySet(t.window, t.window, m, m, 0), t.match_start -= m, t.strstart -= m, t.block_start -= m, e = r = t.hash_size; n = t.head[--e], t.head[e] = m <= n ? n - m : 0, --r;); + for (e = r = m; n = t.prev[--e], t.prev[e] = m <= n ? n - m : 0, --r;); + s += m + } + if (0 === t.strm.avail_in) break; + if (u = t.strm, l = t.window, f = t.strstart + t.lookahead, p = void 0, (d = s) < (p = u.avail_in) && (p = d), r = 0 === p ? 0 : (u.avail_in -= p, i.arraySet(l, u.input, u.next_in, p, f), 1 === u.state.wrap ? u.adler = a(u.adler, l, p, f) : 2 === u.state.wrap && (u.adler = o(u.adler, l, p, f)), u.next_in += p, u.total_in += p, p), t.lookahead += r, t.lookahead + t.insert >= 3) + for (h = t.strstart - t.insert, t.ins_h = t.window[h], t.ins_h = (t.ins_h << t.hash_shift ^ t.window[h + 1]) & t.hash_mask; t.insert && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[h + 3 - 1]) & t.hash_mask, t.prev[h & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = h, h++, t.insert--, !(t.lookahead + t.insert < 3));); + } while (t.lookahead < c && 0 !== t.strm.avail_in) + } + + function k(t, e) { + for (var r, n;;) { + if (t.lookahead < c) { + if (w(t), t.lookahead < c && 0 === e) return 1; + if (0 === t.lookahead) break + } + if (r = 0, t.lookahead >= 3 && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 3 - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 !== r && t.strstart - r <= t.w_size - c && (t.match_length = y(t, r)), t.match_length >= 3) + if (n = s._tr_tally(t, t.strstart - t.match_start, t.match_length - 3), t.lookahead -= t.match_length, t.match_length <= t.max_lazy_match && t.lookahead >= 3) { + for (t.match_length--; t.strstart++, t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 3 - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart, 0 != --t.match_length;); + t.strstart++ + } else t.strstart += t.match_length, t.match_length = 0, t.ins_h = t.window[t.strstart], t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 1]) & t.hash_mask; + else n = s._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++; + if (n && (g(t, !1), 0 === t.strm.avail_out)) return 1 + } + return t.insert = t.strstart < 2 ? t.strstart : 2, 4 === e ? (g(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.last_lit && (g(t, !1), 0 === t.strm.avail_out) ? 1 : 2 + } + + function x(t, e) { + for (var r, n, i;;) { + if (t.lookahead < c) { + if (w(t), t.lookahead < c && 0 === e) return 1; + if (0 === t.lookahead) break + } + if (r = 0, t.lookahead >= 3 && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 3 - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), t.prev_length = t.match_length, t.prev_match = t.match_start, t.match_length = 2, 0 !== r && t.prev_length < t.max_lazy_match && t.strstart - r <= t.w_size - c && (t.match_length = y(t, r), t.match_length <= 5 && (1 === t.strategy || 3 === t.match_length && 4096 < t.strstart - t.match_start) && (t.match_length = 2)), t.prev_length >= 3 && t.match_length <= t.prev_length) { + for (i = t.strstart + t.lookahead - 3, n = s._tr_tally(t, t.strstart - 1 - t.prev_match, t.prev_length - 3), t.lookahead -= t.prev_length - 1, t.prev_length -= 2; ++t.strstart <= i && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 3 - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 != --t.prev_length;); + if (t.match_available = 0, t.match_length = 2, t.strstart++, n && (g(t, !1), 0 === t.strm.avail_out)) return 1 + } else if (t.match_available) { + if ((n = s._tr_tally(t, 0, t.window[t.strstart - 1])) && g(t, !1), t.strstart++, t.lookahead--, 0 === t.strm.avail_out) return 1 + } else t.match_available = 1, t.strstart++, t.lookahead-- + } + return t.match_available && (n = s._tr_tally(t, 0, t.window[t.strstart - 1]), t.match_available = 0), t.insert = t.strstart < 2 ? t.strstart : 2, 4 === e ? (g(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.last_lit && (g(t, !1), 0 === t.strm.avail_out) ? 1 : 2 + } + + function S(t, e, r, n, i) { + this.good_length = t, this.max_lazy = e, this.nice_length = r, this.max_chain = n, this.func = i + } + + function z() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = 8, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new i.Buf16(1146), this.dyn_dtree = new i.Buf16(122), this.bl_tree = new i.Buf16(78), m(this.dyn_ltree), m(this.dyn_dtree), m(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new i.Buf16(16), this.heap = new i.Buf16(573), m(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new i.Buf16(573), m(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0 + } + + function C(t) { + var e; + return t && t.state ? (t.total_in = t.total_out = 0, t.data_type = 2, (e = t.state).pending = 0, e.pending_out = 0, e.wrap < 0 && (e.wrap = -e.wrap), e.status = e.wrap ? 42 : f, t.adler = 2 === e.wrap ? 0 : 1, e.last_flush = 0, s._tr_init(e), 0) : d(t, u) + } + + function E(t) { + var e = C(t); + return 0 === e && function(t) { + t.window_size = 2 * t.w_size, m(t.head), t.max_lazy_match = n[t.level].max_lazy, t.good_match = n[t.level].good_length, t.nice_match = n[t.level].nice_length, t.max_chain_length = n[t.level].max_chain, t.strstart = 0, t.block_start = 0, t.lookahead = 0, t.insert = 0, t.match_length = t.prev_length = 2, t.match_available = 0, t.ins_h = 0 + }(t.state), e + } + + function A(t, e, r, n, s, a) { + if (!t) return u; + var o = 1; + if (-1 === e && (e = 6), n < 0 ? (o = 0, n = -n) : 15 < n && (o = 2, n -= 16), s < 1 || 9 < s || 8 !== r || n < 8 || 15 < n || e < 0 || 9 < e || a < 0 || 4 < a) return d(t, u); + 8 === n && (n = 9); + var h = new z; + return (t.state = h).strm = t, h.wrap = o, h.gzhead = null, h.w_bits = n, h.w_size = 1 << h.w_bits, h.w_mask = h.w_size - 1, h.hash_bits = s + 7, h.hash_size = 1 << h.hash_bits, h.hash_mask = h.hash_size - 1, h.hash_shift = ~~((h.hash_bits + 3 - 1) / 3), h.window = new i.Buf8(2 * h.w_size), h.head = new i.Buf16(h.hash_size), h.prev = new i.Buf16(h.w_size), h.lit_bufsize = 1 << s + 6, h.pending_buf_size = 4 * h.lit_bufsize, h.pending_buf = new i.Buf8(h.pending_buf_size), h.d_buf = 1 * h.lit_bufsize, h.l_buf = 3 * h.lit_bufsize, h.level = e, h.strategy = a, h.method = r, E(t) + } + n = [new S(0, 0, 0, 0, (function(t, e) { + var r = 65535; + for (r > t.pending_buf_size - 5 && (r = t.pending_buf_size - 5);;) { + if (t.lookahead <= 1) { + if (w(t), 0 === t.lookahead && 0 === e) return 1; + if (0 === t.lookahead) break + } + t.strstart += t.lookahead, t.lookahead = 0; + var n = t.block_start + r; + if ((0 === t.strstart || t.strstart >= n) && (t.lookahead = t.strstart - n, t.strstart = n, g(t, !1), 0 === t.strm.avail_out)) return 1; + if (t.strstart - t.block_start >= t.w_size - c && (g(t, !1), 0 === t.strm.avail_out)) return 1 + } + return t.insert = 0, 4 === e ? (g(t, !0), 0 === t.strm.avail_out ? 3 : 4) : (t.strstart > t.block_start && (g(t, !1), t.strm.avail_out), 1) + })), new S(4, 4, 8, 4, k), new S(4, 5, 16, 8, k), new S(4, 6, 32, 32, k), new S(4, 4, 16, 16, x), new S(8, 16, 32, 32, x), new S(8, 16, 128, 128, x), new S(8, 32, 128, 256, x), new S(32, 128, 258, 1024, x), new S(32, 258, 258, 4096, x)], r.deflateInit = function(t, e) { + return A(t, e, 8, 15, 8, 0) + }, r.deflateInit2 = A, r.deflateReset = E, r.deflateResetKeep = C, r.deflateSetHeader = function(t, e) { + return t && t.state ? 2 !== t.state.wrap ? u : (t.state.gzhead = e, 0) : u + }, r.deflate = function(t, e) { + var r, i, a, h; + if (!t || !t.state || 5 < e || e < 0) return t ? d(t, u) : u; + if (i = t.state, !t.output || !t.input && 0 !== t.avail_in || 666 === i.status && 4 !== e) return d(t, 0 === t.avail_out ? -5 : u); + if (i.strm = t, r = i.last_flush, i.last_flush = e, 42 === i.status) + if (2 === i.wrap) t.adler = 0, b(i, 31), b(i, 139), b(i, 8), i.gzhead ? (b(i, (i.gzhead.text ? 1 : 0) + (i.gzhead.hcrc ? 2 : 0) + (i.gzhead.extra ? 4 : 0) + (i.gzhead.name ? 8 : 0) + (i.gzhead.comment ? 16 : 0)), b(i, 255 & i.gzhead.time), b(i, i.gzhead.time >> 8 & 255), b(i, i.gzhead.time >> 16 & 255), b(i, i.gzhead.time >> 24 & 255), b(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), b(i, 255 & i.gzhead.os), i.gzhead.extra && i.gzhead.extra.length && (b(i, 255 & i.gzhead.extra.length), b(i, i.gzhead.extra.length >> 8 & 255)), i.gzhead.hcrc && (t.adler = o(t.adler, i.pending_buf, i.pending, 0)), i.gzindex = 0, i.status = 69) : (b(i, 0), b(i, 0), b(i, 0), b(i, 0), b(i, 0), b(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), b(i, 3), i.status = f); + else { + var c = 8 + (i.w_bits - 8 << 4) << 8; + c |= (2 <= i.strategy || i.level < 2 ? 0 : i.level < 6 ? 1 : 6 === i.level ? 2 : 3) << 6, 0 !== i.strstart && (c |= 32), c += 31 - c % 31, i.status = f, v(i, c), 0 !== i.strstart && (v(i, t.adler >>> 16), v(i, 65535 & t.adler)), t.adler = 1 + } if (69 === i.status) + if (i.gzhead.extra) { + for (a = i.pending; i.gzindex < (65535 & i.gzhead.extra.length) && (i.pending !== i.pending_buf_size || (i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), _(t), a = i.pending, i.pending !== i.pending_buf_size));) b(i, 255 & i.gzhead.extra[i.gzindex]), i.gzindex++; + i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), i.gzindex === i.gzhead.extra.length && (i.gzindex = 0, i.status = 73) + } else i.status = 73; + if (73 === i.status) + if (i.gzhead.name) { + a = i.pending; + do { + if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), _(t), a = i.pending, i.pending === i.pending_buf_size)) { + h = 1; + break + } + h = i.gzindex < i.gzhead.name.length ? 255 & i.gzhead.name.charCodeAt(i.gzindex++) : 0, b(i, h) + } while (0 !== h); + i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), 0 === h && (i.gzindex = 0, i.status = 91) + } else i.status = 91; + if (91 === i.status) + if (i.gzhead.comment) { + a = i.pending; + do { + if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), _(t), a = i.pending, i.pending === i.pending_buf_size)) { + h = 1; + break + } + h = i.gzindex < i.gzhead.comment.length ? 255 & i.gzhead.comment.charCodeAt(i.gzindex++) : 0, b(i, h) + } while (0 !== h); + i.gzhead.hcrc && i.pending > a && (t.adler = o(t.adler, i.pending_buf, i.pending - a, a)), 0 === h && (i.status = 103) + } else i.status = 103; + if (103 === i.status && (i.gzhead.hcrc ? (i.pending + 2 > i.pending_buf_size && _(t), i.pending + 2 <= i.pending_buf_size && (b(i, 255 & t.adler), b(i, t.adler >> 8 & 255), t.adler = 0, i.status = f)) : i.status = f), 0 !== i.pending) { + if (_(t), 0 === t.avail_out) return i.last_flush = -1, 0 + } else if (0 === t.avail_in && p(e) <= p(r) && 4 !== e) return d(t, -5); + if (666 === i.status && 0 !== t.avail_in) return d(t, -5); + if (0 !== t.avail_in || 0 !== i.lookahead || 0 !== e && 666 !== i.status) { + var y = 2 === i.strategy ? function(t, e) { + for (var r;;) { + if (0 === t.lookahead && (w(t), 0 === t.lookahead)) { + if (0 === e) return 1; + break + } + if (t.match_length = 0, r = s._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++, r && (g(t, !1), 0 === t.strm.avail_out)) return 1 + } + return t.insert = 0, 4 === e ? (g(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.last_lit && (g(t, !1), 0 === t.strm.avail_out) ? 1 : 2 + }(i, e) : 3 === i.strategy ? function(t, e) { + for (var r, n, i, a, o = t.window;;) { + if (t.lookahead <= l) { + if (w(t), t.lookahead <= l && 0 === e) return 1; + if (0 === t.lookahead) break + } + if (t.match_length = 0, t.lookahead >= 3 && 0 < t.strstart && (n = o[i = t.strstart - 1]) === o[++i] && n === o[++i] && n === o[++i]) { + a = t.strstart + l; + do {} while (n === o[++i] && n === o[++i] && n === o[++i] && n === o[++i] && n === o[++i] && n === o[++i] && n === o[++i] && n === o[++i] && i < a); + t.match_length = l - (a - i), t.match_length > t.lookahead && (t.match_length = t.lookahead) + } + if (t.match_length >= 3 ? (r = s._tr_tally(t, 1, t.match_length - 3), t.lookahead -= t.match_length, t.strstart += t.match_length, t.match_length = 0) : (r = s._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++), r && (g(t, !1), 0 === t.strm.avail_out)) return 1 + } + return t.insert = 0, 4 === e ? (g(t, !0), 0 === t.strm.avail_out ? 3 : 4) : t.last_lit && (g(t, !1), 0 === t.strm.avail_out) ? 1 : 2 + }(i, e) : n[i.level].func(i, e); + if (3 !== y && 4 !== y || (i.status = 666), 1 === y || 3 === y) return 0 === t.avail_out && (i.last_flush = -1), 0; + if (2 === y && (1 === e ? s._tr_align(i) : 5 !== e && (s._tr_stored_block(i, 0, 0, !1), 3 === e && (m(i.head), 0 === i.lookahead && (i.strstart = 0, i.block_start = 0, i.insert = 0))), _(t), 0 === t.avail_out)) return i.last_flush = -1, 0 + } + return 4 !== e ? 0 : i.wrap <= 0 ? 1 : (2 === i.wrap ? (b(i, 255 & t.adler), b(i, t.adler >> 8 & 255), b(i, t.adler >> 16 & 255), b(i, t.adler >> 24 & 255), b(i, 255 & t.total_in), b(i, t.total_in >> 8 & 255), b(i, t.total_in >> 16 & 255), b(i, t.total_in >> 24 & 255)) : (v(i, t.adler >>> 16), v(i, 65535 & t.adler)), _(t), 0 < i.wrap && (i.wrap = -i.wrap), 0 !== i.pending ? 0 : 1) + }, r.deflateEnd = function(t) { + var e; + return t && t.state ? 42 !== (e = t.state.status) && 69 !== e && 73 !== e && 91 !== e && 103 !== e && e !== f && 666 !== e ? d(t, u) : (t.state = null, e === f ? d(t, -3) : 0) : u + }, r.deflateSetDictionary = function(t, e) { + var r, n, s, o, h, l, c, f, d = e.length; + if (!t || !t.state) return u; + if (2 === (o = (r = t.state).wrap) || 1 === o && 42 !== r.status || r.lookahead) return u; + for (1 === o && (t.adler = a(t.adler, e, d, 0)), r.wrap = 0, d >= r.w_size && (0 === o && (m(r.head), r.strstart = 0, r.block_start = 0, r.insert = 0), f = new i.Buf8(r.w_size), i.arraySet(f, e, d - r.w_size, r.w_size, 0), e = f, d = r.w_size), h = t.avail_in, l = t.next_in, c = t.input, t.avail_in = d, t.next_in = 0, t.input = e, w(r); r.lookahead >= 3;) { + for (n = r.strstart, s = r.lookahead - 2; r.ins_h = (r.ins_h << r.hash_shift ^ r.window[n + 3 - 1]) & r.hash_mask, r.prev[n & r.w_mask] = r.head[r.ins_h], r.head[r.ins_h] = n, n++, --s;); + r.strstart = n, r.lookahead = 2, w(r) + } + return r.strstart += r.lookahead, r.block_start = r.strstart, r.insert = r.lookahead, r.lookahead = 0, r.match_length = r.prev_length = 2, r.match_available = 0, t.next_in = l, t.input = c, t.avail_in = h, r.wrap = o, 0 + }, r.deflateInfo = "pako deflate (from Nodeca project)" + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./messages": 51, + "./trees": 52 + }], + 47: [function(t, e, r) { + "use strict"; + e.exports = function() { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1 + } + }, {}], + 48: [function(t, e, r) { + "use strict"; + e.exports = function(t, e) { + var r, n, i, s, a, o, h, u, l, c, f, d, p, m, _, g, b, v, y, w, k, x, S, z, C; + r = t.state, n = t.next_in, z = t.input, i = n + (t.avail_in - 5), s = t.next_out, C = t.output, a = s - (e - t.avail_out), o = s + (t.avail_out - 257), h = r.dmax, u = r.wsize, l = r.whave, c = r.wnext, f = r.window, d = r.hold, p = r.bits, m = r.lencode, _ = r.distcode, g = (1 << r.lenbits) - 1, b = (1 << r.distbits) - 1; + t: do { + p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = m[d & g]; + e: for (;;) { + if (d >>>= y = v >>> 24, p -= y, 0 == (y = v >>> 16 & 255)) C[s++] = 65535 & v; + else { + if (!(16 & y)) { + if (0 == (64 & y)) { + v = m[(65535 & v) + (d & (1 << y) - 1)]; + continue e + } + if (32 & y) { + r.mode = 12; + break t + } + t.msg = "invalid literal/length code", r.mode = 30; + break t + } + w = 65535 & v, (y &= 15) && (p < y && (d += z[n++] << p, p += 8), w += d & (1 << y) - 1, d >>>= y, p -= y), p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = _[d & b]; + r: for (;;) { + if (d >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) { + if (0 == (64 & y)) { + v = _[(65535 & v) + (d & (1 << y) - 1)]; + continue r + } + t.msg = "invalid distance code", r.mode = 30; + break t + } + if (k = 65535 & v, p < (y &= 15) && (d += z[n++] << p, (p += 8) < y && (d += z[n++] << p, p += 8)), h < (k += d & (1 << y) - 1)) { + t.msg = "invalid distance too far back", r.mode = 30; + break t + } + if (d >>>= y, p -= y, (y = s - a) < k) { + if (l < (y = k - y) && r.sane) { + t.msg = "invalid distance too far back", r.mode = 30; + break t + } + if (S = f, (x = 0) === c) { + if (x += u - y, y < w) { + for (w -= y; C[s++] = f[x++], --y;); + x = s - k, S = C + } + } else if (c < y) { + if (x += u + c - y, (y -= c) < w) { + for (w -= y; C[s++] = f[x++], --y;); + if (x = 0, c < w) { + for (w -= y = c; C[s++] = f[x++], --y;); + x = s - k, S = C + } + } + } else if (x += c - y, y < w) { + for (w -= y; C[s++] = f[x++], --y;); + x = s - k, S = C + } + for (; 2 < w;) C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3; + w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++])) + } else { + for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3);); + w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++])) + } + break + } + } + break + } + } while (n < i && s < o); + n -= w = p >> 3, d &= (1 << (p -= w << 3)) - 1, t.next_in = n, t.next_out = s, t.avail_in = n < i ? i - n + 5 : 5 - (n - i), t.avail_out = s < o ? o - s + 257 : 257 - (s - o), r.hold = d, r.bits = p + } + }, {}], + 49: [function(t, e, r) { + "use strict"; + var n = t("../utils/common"), + i = t("./adler32"), + s = t("./crc32"), + a = t("./inffast"), + o = t("./inftrees"), + h = -2; + + function u(t) { + return (t >>> 24 & 255) + (t >>> 8 & 65280) + ((65280 & t) << 8) + ((255 & t) << 24) + } + + function l() { + this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new n.Buf16(320), this.work = new n.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0 + } + + function c(t) { + var e; + return t && t.state ? (e = t.state, t.total_in = t.total_out = e.total = 0, t.msg = "", e.wrap && (t.adler = 1 & e.wrap), e.mode = 1, e.last = 0, e.havedict = 0, e.dmax = 32768, e.head = null, e.hold = 0, e.bits = 0, e.lencode = e.lendyn = new n.Buf32(852), e.distcode = e.distdyn = new n.Buf32(592), e.sane = 1, e.back = -1, 0) : h + } + + function f(t) { + var e; + return t && t.state ? ((e = t.state).wsize = 0, e.whave = 0, e.wnext = 0, c(t)) : h + } + + function d(t, e) { + var r, n; + return t && t.state ? (n = t.state, e < 0 ? (r = 0, e = -e) : (r = 1 + (e >> 4), e < 48 && (e &= 15)), e && (e < 8 || 15 < e) ? h : (null !== n.window && n.wbits !== e && (n.window = null), n.wrap = r, n.wbits = e, f(t))) : h + } + + function p(t, e) { + var r, n; + return t ? (n = new l, (t.state = n).window = null, 0 !== (r = d(t, e)) && (t.state = null), r) : h + } + var m, _, g = !0; + + function b(t) { + if (g) { + var e; + for (m = new n.Buf32(512), _ = new n.Buf32(32), e = 0; e < 144;) t.lens[e++] = 8; + for (; e < 256;) t.lens[e++] = 9; + for (; e < 280;) t.lens[e++] = 7; + for (; e < 288;) t.lens[e++] = 8; + for (o(1, t.lens, 0, 288, m, 0, t.work, { + bits: 9 + }), e = 0; e < 32;) t.lens[e++] = 5; + o(2, t.lens, 0, 32, _, 0, t.work, { + bits: 5 + }), g = !1 + } + t.lencode = m, t.lenbits = 9, t.distcode = _, t.distbits = 5 + } + + function v(t, e, r, i) { + var s, a = t.state; + return null === a.window && (a.wsize = 1 << a.wbits, a.wnext = 0, a.whave = 0, a.window = new n.Buf8(a.wsize)), i >= a.wsize ? (n.arraySet(a.window, e, r - a.wsize, a.wsize, 0), a.wnext = 0, a.whave = a.wsize) : (i < (s = a.wsize - a.wnext) && (s = i), n.arraySet(a.window, e, r - i, s, a.wnext), (i -= s) ? (n.arraySet(a.window, e, r - i, i, 0), a.wnext = i, a.whave = a.wsize) : (a.wnext += s, a.wnext === a.wsize && (a.wnext = 0), a.whave < a.wsize && (a.whave += s))), 0 + } + r.inflateReset = f, r.inflateReset2 = d, r.inflateResetKeep = c, r.inflateInit = function(t) { + return p(t, 15) + }, r.inflateInit2 = p, r.inflate = function(t, e) { + var r, l, c, f, d, p, m, _, g, y, w, k, x, S, z, C, E, A, I, O, B, R, T, D, F = 0, + N = new n.Buf8(4), + U = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + if (!t || !t.state || !t.output || !t.input && 0 !== t.avail_in) return h; + 12 === (r = t.state).mode && (r.mode = 13), d = t.next_out, c = t.output, m = t.avail_out, f = t.next_in, l = t.input, p = t.avail_in, _ = r.hold, g = r.bits, y = p, w = m, R = 0; + t: for (;;) switch (r.mode) { + case 1: + if (0 === r.wrap) { + r.mode = 13; + break + } + for (; g < 16;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (2 & r.wrap && 35615 === _) { + N[r.check = 0] = 255 & _, N[1] = _ >>> 8 & 255, r.check = s(r.check, N, 2, 0), g = _ = 0, r.mode = 2; + break + } + if (r.flags = 0, r.head && (r.head.done = !1), !(1 & r.wrap) || (((255 & _) << 8) + (_ >> 8)) % 31) { + t.msg = "incorrect header check", r.mode = 30; + break + } + if (8 != (15 & _)) { + t.msg = "unknown compression method", r.mode = 30; + break + } + if (g -= 4, B = 8 + (15 & (_ >>>= 4)), 0 === r.wbits) r.wbits = B; + else if (B > r.wbits) { + t.msg = "invalid window size", r.mode = 30; + break + } + r.dmax = 1 << B, t.adler = r.check = 1, r.mode = 512 & _ ? 10 : 12, g = _ = 0; + break; + case 2: + for (; g < 16;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (r.flags = _, 8 != (255 & r.flags)) { + t.msg = "unknown compression method", r.mode = 30; + break + } + if (57344 & r.flags) { + t.msg = "unknown header flags set", r.mode = 30; + break + } + r.head && (r.head.text = _ >> 8 & 1), 512 & r.flags && (N[0] = 255 & _, N[1] = _ >>> 8 & 255, r.check = s(r.check, N, 2, 0)), g = _ = 0, r.mode = 3; + case 3: + for (; g < 32;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.head && (r.head.time = _), 512 & r.flags && (N[0] = 255 & _, N[1] = _ >>> 8 & 255, N[2] = _ >>> 16 & 255, N[3] = _ >>> 24 & 255, r.check = s(r.check, N, 4, 0)), g = _ = 0, r.mode = 4; + case 4: + for (; g < 16;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.head && (r.head.xflags = 255 & _, r.head.os = _ >> 8), 512 & r.flags && (N[0] = 255 & _, N[1] = _ >>> 8 & 255, r.check = s(r.check, N, 2, 0)), g = _ = 0, r.mode = 5; + case 5: + if (1024 & r.flags) { + for (; g < 16;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.length = _, r.head && (r.head.extra_len = _), 512 & r.flags && (N[0] = 255 & _, N[1] = _ >>> 8 & 255, r.check = s(r.check, N, 2, 0)), g = _ = 0 + } else r.head && (r.head.extra = null); + r.mode = 6; + case 6: + if (1024 & r.flags && (p < (k = r.length) && (k = p), k && (r.head && (B = r.head.extra_len - r.length, r.head.extra || (r.head.extra = new Array(r.head.extra_len)), n.arraySet(r.head.extra, l, f, k, B)), 512 & r.flags && (r.check = s(r.check, l, k, f)), p -= k, f += k, r.length -= k), r.length)) break t; + r.length = 0, r.mode = 7; + case 7: + if (2048 & r.flags) { + if (0 === p) break t; + for (k = 0; B = l[f + k++], r.head && B && r.length < 65536 && (r.head.name += String.fromCharCode(B)), B && k < p;); + if (512 & r.flags && (r.check = s(r.check, l, k, f)), p -= k, f += k, B) break t + } else r.head && (r.head.name = null); + r.length = 0, r.mode = 8; + case 8: + if (4096 & r.flags) { + if (0 === p) break t; + for (k = 0; B = l[f + k++], r.head && B && r.length < 65536 && (r.head.comment += String.fromCharCode(B)), B && k < p;); + if (512 & r.flags && (r.check = s(r.check, l, k, f)), p -= k, f += k, B) break t + } else r.head && (r.head.comment = null); + r.mode = 9; + case 9: + if (512 & r.flags) { + for (; g < 16;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (_ !== (65535 & r.check)) { + t.msg = "header crc mismatch", r.mode = 30; + break + } + g = _ = 0 + } + r.head && (r.head.hcrc = r.flags >> 9 & 1, r.head.done = !0), t.adler = r.check = 0, r.mode = 12; + break; + case 10: + for (; g < 32;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + t.adler = r.check = u(_), g = _ = 0, r.mode = 11; + case 11: + if (0 === r.havedict) return t.next_out = d, t.avail_out = m, t.next_in = f, t.avail_in = p, r.hold = _, r.bits = g, 2; + t.adler = r.check = 1, r.mode = 12; + case 12: + if (5 === e || 6 === e) break t; + case 13: + if (r.last) { + _ >>>= 7 & g, g -= 7 & g, r.mode = 27; + break + } + for (; g < 3;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + switch (r.last = 1 & _, g -= 1, 3 & (_ >>>= 1)) { + case 0: + r.mode = 14; + break; + case 1: + if (b(r), r.mode = 20, 6 !== e) break; + _ >>>= 2, g -= 2; + break t; + case 2: + r.mode = 17; + break; + case 3: + t.msg = "invalid block type", r.mode = 30 + } + _ >>>= 2, g -= 2; + break; + case 14: + for (_ >>>= 7 & g, g -= 7 & g; g < 32;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if ((65535 & _) != (_ >>> 16 ^ 65535)) { + t.msg = "invalid stored block lengths", r.mode = 30; + break + } + if (r.length = 65535 & _, g = _ = 0, r.mode = 15, 6 === e) break t; + case 15: + r.mode = 16; + case 16: + if (k = r.length) { + if (p < k && (k = p), m < k && (k = m), 0 === k) break t; + n.arraySet(c, l, f, k, d), p -= k, f += k, m -= k, d += k, r.length -= k; + break + } + r.mode = 12; + break; + case 17: + for (; g < 14;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (r.nlen = 257 + (31 & _), _ >>>= 5, g -= 5, r.ndist = 1 + (31 & _), _ >>>= 5, g -= 5, r.ncode = 4 + (15 & _), _ >>>= 4, g -= 4, 286 < r.nlen || 30 < r.ndist) { + t.msg = "too many length or distance symbols", r.mode = 30; + break + } + r.have = 0, r.mode = 18; + case 18: + for (; r.have < r.ncode;) { + for (; g < 3;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.lens[U[r.have++]] = 7 & _, _ >>>= 3, g -= 3 + } + for (; r.have < 19;) r.lens[U[r.have++]] = 0; + if (r.lencode = r.lendyn, r.lenbits = 7, T = { + bits: r.lenbits + }, R = o(0, r.lens, 0, 19, r.lencode, 0, r.work, T), r.lenbits = T.bits, R) { + t.msg = "invalid code lengths set", r.mode = 30; + break + } + r.have = 0, r.mode = 19; + case 19: + for (; r.have < r.nlen + r.ndist;) { + for (; C = (F = r.lencode[_ & (1 << r.lenbits) - 1]) >>> 16 & 255, E = 65535 & F, !((z = F >>> 24) <= g);) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (E < 16) _ >>>= z, g -= z, r.lens[r.have++] = E; + else { + if (16 === E) { + for (D = z + 2; g < D;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (_ >>>= z, g -= z, 0 === r.have) { + t.msg = "invalid bit length repeat", r.mode = 30; + break + } + B = r.lens[r.have - 1], k = 3 + (3 & _), _ >>>= 2, g -= 2 + } else if (17 === E) { + for (D = z + 3; g < D;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + g -= z, B = 0, k = 3 + (7 & (_ >>>= z)), _ >>>= 3, g -= 3 + } else { + for (D = z + 7; g < D;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + g -= z, B = 0, k = 11 + (127 & (_ >>>= z)), _ >>>= 7, g -= 7 + } + if (r.have + k > r.nlen + r.ndist) { + t.msg = "invalid bit length repeat", r.mode = 30; + break + } + for (; k--;) r.lens[r.have++] = B + } + } + if (30 === r.mode) break; + if (0 === r.lens[256]) { + t.msg = "invalid code -- missing end-of-block", r.mode = 30; + break + } + if (r.lenbits = 9, T = { + bits: r.lenbits + }, R = o(1, r.lens, 0, r.nlen, r.lencode, 0, r.work, T), r.lenbits = T.bits, R) { + t.msg = "invalid literal/lengths set", r.mode = 30; + break + } + if (r.distbits = 6, r.distcode = r.distdyn, T = { + bits: r.distbits + }, R = o(2, r.lens, r.nlen, r.ndist, r.distcode, 0, r.work, T), r.distbits = T.bits, R) { + t.msg = "invalid distances set", r.mode = 30; + break + } + if (r.mode = 20, 6 === e) break t; + case 20: + r.mode = 21; + case 21: + if (6 <= p && 258 <= m) { + t.next_out = d, t.avail_out = m, t.next_in = f, t.avail_in = p, r.hold = _, r.bits = g, a(t, w), d = t.next_out, c = t.output, m = t.avail_out, f = t.next_in, l = t.input, p = t.avail_in, _ = r.hold, g = r.bits, 12 === r.mode && (r.back = -1); + break + } + for (r.back = 0; C = (F = r.lencode[_ & (1 << r.lenbits) - 1]) >>> 16 & 255, E = 65535 & F, !((z = F >>> 24) <= g);) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (C && 0 == (240 & C)) { + for (A = z, I = C, O = E; C = (F = r.lencode[O + ((_ & (1 << A + I) - 1) >> A)]) >>> 16 & 255, E = 65535 & F, !(A + (z = F >>> 24) <= g);) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + _ >>>= A, g -= A, r.back += A + } + if (_ >>>= z, g -= z, r.back += z, r.length = E, 0 === C) { + r.mode = 26; + break + } + if (32 & C) { + r.back = -1, r.mode = 12; + break + } + if (64 & C) { + t.msg = "invalid literal/length code", r.mode = 30; + break + } + r.extra = 15 & C, r.mode = 22; + case 22: + if (r.extra) { + for (D = r.extra; g < D;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.length += _ & (1 << r.extra) - 1, _ >>>= r.extra, g -= r.extra, r.back += r.extra + } + r.was = r.length, r.mode = 23; + case 23: + for (; C = (F = r.distcode[_ & (1 << r.distbits) - 1]) >>> 16 & 255, E = 65535 & F, !((z = F >>> 24) <= g);) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (0 == (240 & C)) { + for (A = z, I = C, O = E; C = (F = r.distcode[O + ((_ & (1 << A + I) - 1) >> A)]) >>> 16 & 255, E = 65535 & F, !(A + (z = F >>> 24) <= g);) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + _ >>>= A, g -= A, r.back += A + } + if (_ >>>= z, g -= z, r.back += z, 64 & C) { + t.msg = "invalid distance code", r.mode = 30; + break + } + r.offset = E, r.extra = 15 & C, r.mode = 24; + case 24: + if (r.extra) { + for (D = r.extra; g < D;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + r.offset += _ & (1 << r.extra) - 1, _ >>>= r.extra, g -= r.extra, r.back += r.extra + } + if (r.offset > r.dmax) { + t.msg = "invalid distance too far back", r.mode = 30; + break + } + r.mode = 25; + case 25: + if (0 === m) break t; + if (k = w - m, r.offset > k) { + if ((k = r.offset - k) > r.whave && r.sane) { + t.msg = "invalid distance too far back", r.mode = 30; + break + } + x = k > r.wnext ? (k -= r.wnext, r.wsize - k) : r.wnext - k, k > r.length && (k = r.length), S = r.window + } else S = c, x = d - r.offset, k = r.length; + for (m < k && (k = m), m -= k, r.length -= k; c[d++] = S[x++], --k;); + 0 === r.length && (r.mode = 21); + break; + case 26: + if (0 === m) break t; + c[d++] = r.length, m--, r.mode = 21; + break; + case 27: + if (r.wrap) { + for (; g < 32;) { + if (0 === p) break t; + p--, _ |= l[f++] << g, g += 8 + } + if (w -= m, t.total_out += w, r.total += w, w && (t.adler = r.check = r.flags ? s(r.check, c, w, d - w) : i(r.check, c, w, d - w)), w = m, (r.flags ? _ : u(_)) !== r.check) { + t.msg = "incorrect data check", r.mode = 30; + break + } + g = _ = 0 + } + r.mode = 28; + case 28: + if (r.wrap && r.flags) { + for (; g < 32;) { + if (0 === p) break t; + p--, _ += l[f++] << g, g += 8 + } + if (_ !== (4294967295 & r.total)) { + t.msg = "incorrect length check", r.mode = 30; + break + } + g = _ = 0 + } + r.mode = 29; + case 29: + R = 1; + break t; + case 30: + R = -3; + break t; + case 31: + return -4; + default: + return h + } + return t.next_out = d, t.avail_out = m, t.next_in = f, t.avail_in = p, r.hold = _, r.bits = g, (r.wsize || w !== t.avail_out && r.mode < 30 && (r.mode < 27 || 4 !== e)) && v(t, t.output, t.next_out, w - t.avail_out) ? (r.mode = 31, -4) : (y -= t.avail_in, w -= t.avail_out, t.total_in += y, t.total_out += w, r.total += w, r.wrap && w && (t.adler = r.check = r.flags ? s(r.check, c, w, t.next_out - w) : i(r.check, c, w, t.next_out - w)), t.data_type = r.bits + (r.last ? 64 : 0) + (12 === r.mode ? 128 : 0) + (20 === r.mode || 15 === r.mode ? 256 : 0), (0 == y && 0 === w || 4 === e) && 0 === R && (R = -5), R) + }, r.inflateEnd = function(t) { + if (!t || !t.state) return h; + var e = t.state; + return e.window && (e.window = null), t.state = null, 0 + }, r.inflateGetHeader = function(t, e) { + var r; + return t && t.state ? 0 == (2 & (r = t.state).wrap) ? h : ((r.head = e).done = !1, 0) : h + }, r.inflateSetDictionary = function(t, e) { + var r, n = e.length; + return t && t.state ? 0 !== (r = t.state).wrap && 11 !== r.mode ? h : 11 === r.mode && i(1, e, n, 0) !== r.check ? -3 : v(t, e, n, n) ? (r.mode = 31, -4) : (r.havedict = 1, 0) : h + }, r.inflateInfo = "pako inflate (from Nodeca project)" + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./inffast": 48, + "./inftrees": 50 + }], + 50: [function(t, e, r) { + "use strict"; + var n = t("../utils/common"), + i = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + s = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], + a = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], + o = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]; + e.exports = function(t, e, r, h, u, l, c, f) { + var d, p, m, _, g, b, v, y, w, k = f.bits, + x = 0, + S = 0, + z = 0, + C = 0, + E = 0, + A = 0, + I = 0, + O = 0, + B = 0, + R = 0, + T = null, + D = 0, + F = new n.Buf16(16), + N = new n.Buf16(16), + U = null, + P = 0; + for (x = 0; x <= 15; x++) F[x] = 0; + for (S = 0; S < h; S++) F[e[r + S]]++; + for (E = k, C = 15; 1 <= C && 0 === F[C]; C--); + if (C < E && (E = C), 0 === C) return u[l++] = 20971520, u[l++] = 20971520, f.bits = 1, 0; + for (z = 1; z < C && 0 === F[z]; z++); + for (E < z && (E = z), x = O = 1; x <= 15; x++) + if (O <<= 1, (O -= F[x]) < 0) return -1; + if (0 < O && (0 === t || 1 !== C)) return -1; + for (N[1] = 0, x = 1; x < 15; x++) N[x + 1] = N[x] + F[x]; + for (S = 0; S < h; S++) 0 !== e[r + S] && (c[N[e[r + S]]++] = S); + if (b = 0 === t ? (T = U = c, 19) : 1 === t ? (T = i, D -= 257, U = s, P -= 257, 256) : (T = a, U = o, -1), x = z, g = l, I = S = R = 0, m = -1, _ = (B = 1 << (A = E)) - 1, 1 === t && 852 < B || 2 === t && 592 < B) return 1; + for (;;) { + for (v = x - I, w = c[S] < b ? (y = 0, c[S]) : c[S] > b ? (y = U[P + c[S]], T[D + c[S]]) : (y = 96, 0), d = 1 << x - I, z = p = 1 << A; u[g + (R >> I) + (p -= d)] = v << 24 | y << 16 | w | 0, 0 !== p;); + for (d = 1 << x - 1; R & d;) d >>= 1; + if (0 !== d ? (R &= d - 1, R += d) : R = 0, S++, 0 == --F[x]) { + if (x === C) break; + x = e[r + c[S]] + } + if (E < x && (R & _) !== m) { + for (0 === I && (I = E), g += z, O = 1 << (A = x - I); A + I < C && !((O -= F[A + I]) <= 0);) A++, O <<= 1; + if (B += 1 << A, 1 === t && 852 < B || 2 === t && 592 < B) return 1; + u[m = R & _] = E << 24 | A << 16 | g - l | 0 + } + } + return 0 !== R && (u[g + R] = x - I << 24 | 64 << 16 | 0), f.bits = E, 0 + } + }, { + "../utils/common": 41 + }], + 51: [function(t, e, r) { + "use strict"; + e.exports = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + } + }, {}], + 52: [function(t, e, r) { + "use strict"; + var n = t("../utils/common"); + + function i(t) { + for (var e = t.length; 0 <= --e;) t[e] = 0 + } + var s = 256, + a = 286, + o = 30, + h = 15, + u = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], + l = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + c = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], + f = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], + d = new Array(576); + i(d); + var p = new Array(60); + i(p); + var m = new Array(512); + i(m); + var _ = new Array(256); + i(_); + var g = new Array(29); + i(g); + var b, v, y, w = new Array(o); + + function k(t, e, r, n, i) { + this.static_tree = t, this.extra_bits = e, this.extra_base = r, this.elems = n, this.max_length = i, this.has_stree = t && t.length + } + + function x(t, e) { + this.dyn_tree = t, this.max_code = 0, this.stat_desc = e + } + + function S(t) { + return t < 256 ? m[t] : m[256 + (t >>> 7)] + } + + function z(t, e) { + t.pending_buf[t.pending++] = 255 & e, t.pending_buf[t.pending++] = e >>> 8 & 255 + } + + function C(t, e, r) { + t.bi_valid > 16 - r ? (t.bi_buf |= e << t.bi_valid & 65535, z(t, t.bi_buf), t.bi_buf = e >> 16 - t.bi_valid, t.bi_valid += r - 16) : (t.bi_buf |= e << t.bi_valid & 65535, t.bi_valid += r) + } + + function E(t, e, r) { + C(t, r[2 * e], r[2 * e + 1]) + } + + function A(t, e) { + for (var r = 0; r |= 1 & t, t >>>= 1, r <<= 1, 0 < --e;); + return r >>> 1 + } + + function I(t, e, r) { + var n, i, s = new Array(16), + a = 0; + for (n = 1; n <= h; n++) s[n] = a = a + r[n - 1] << 1; + for (i = 0; i <= e; i++) { + var o = t[2 * i + 1]; + 0 !== o && (t[2 * i] = A(s[o]++, o)) + } + } + + function O(t) { + var e; + for (e = 0; e < a; e++) t.dyn_ltree[2 * e] = 0; + for (e = 0; e < o; e++) t.dyn_dtree[2 * e] = 0; + for (e = 0; e < 19; e++) t.bl_tree[2 * e] = 0; + t.dyn_ltree[512] = 1, t.opt_len = t.static_len = 0, t.last_lit = t.matches = 0 + } + + function B(t) { + 8 < t.bi_valid ? z(t, t.bi_buf) : 0 < t.bi_valid && (t.pending_buf[t.pending++] = t.bi_buf), t.bi_buf = 0, t.bi_valid = 0 + } + + function R(t, e, r, n) { + var i = 2 * e, + s = 2 * r; + return t[i] < t[s] || t[i] === t[s] && n[e] <= n[r] + } + + function T(t, e, r) { + for (var n = t.heap[r], i = r << 1; i <= t.heap_len && (i < t.heap_len && R(e, t.heap[i + 1], t.heap[i], t.depth) && i++, !R(e, n, t.heap[i], t.depth));) t.heap[r] = t.heap[i], r = i, i <<= 1; + t.heap[r] = n + } + + function D(t, e, r) { + var n, i, a, o, h = 0; + if (0 !== t.last_lit) + for (; n = t.pending_buf[t.d_buf + 2 * h] << 8 | t.pending_buf[t.d_buf + 2 * h + 1], i = t.pending_buf[t.l_buf + h], h++, 0 === n ? E(t, i, e) : (E(t, (a = _[i]) + s + 1, e), 0 !== (o = u[a]) && C(t, i -= g[a], o), E(t, a = S(--n), r), 0 !== (o = l[a]) && C(t, n -= w[a], o)), h < t.last_lit;); + E(t, 256, e) + } + + function F(t, e) { + var r, n, i, s = e.dyn_tree, + a = e.stat_desc.static_tree, + o = e.stat_desc.has_stree, + u = e.stat_desc.elems, + l = -1; + for (t.heap_len = 0, t.heap_max = 573, r = 0; r < u; r++) 0 !== s[2 * r] ? (t.heap[++t.heap_len] = l = r, t.depth[r] = 0) : s[2 * r + 1] = 0; + for (; t.heap_len < 2;) s[2 * (i = t.heap[++t.heap_len] = l < 2 ? ++l : 0)] = 1, t.depth[i] = 0, t.opt_len--, o && (t.static_len -= a[2 * i + 1]); + for (e.max_code = l, r = t.heap_len >> 1; 1 <= r; r--) T(t, s, r); + for (i = u; r = t.heap[1], t.heap[1] = t.heap[t.heap_len--], T(t, s, 1), n = t.heap[1], t.heap[--t.heap_max] = r, t.heap[--t.heap_max] = n, s[2 * i] = s[2 * r] + s[2 * n], t.depth[i] = (t.depth[r] >= t.depth[n] ? t.depth[r] : t.depth[n]) + 1, s[2 * r + 1] = s[2 * n + 1] = i, t.heap[1] = i++, T(t, s, 1), 2 <= t.heap_len;); + t.heap[--t.heap_max] = t.heap[1], + function(t, e) { + var r, n, i, s, a, o, u = e.dyn_tree, + l = e.max_code, + c = e.stat_desc.static_tree, + f = e.stat_desc.has_stree, + d = e.stat_desc.extra_bits, + p = e.stat_desc.extra_base, + m = e.stat_desc.max_length, + _ = 0; + for (s = 0; s <= h; s++) t.bl_count[s] = 0; + for (u[2 * t.heap[t.heap_max] + 1] = 0, r = t.heap_max + 1; r < 573; r++) m < (s = u[2 * u[2 * (n = t.heap[r]) + 1] + 1] + 1) && (s = m, _++), u[2 * n + 1] = s, l < n || (t.bl_count[s]++, a = 0, p <= n && (a = d[n - p]), o = u[2 * n], t.opt_len += o * (s + a), f && (t.static_len += o * (c[2 * n + 1] + a))); + if (0 !== _) { + do { + for (s = m - 1; 0 === t.bl_count[s];) s--; + t.bl_count[s]--, t.bl_count[s + 1] += 2, t.bl_count[m]--, _ -= 2 + } while (0 < _); + for (s = m; 0 !== s; s--) + for (n = t.bl_count[s]; 0 !== n;) l < (i = t.heap[--r]) || (u[2 * i + 1] !== s && (t.opt_len += (s - u[2 * i + 1]) * u[2 * i], u[2 * i + 1] = s), n--) + } + }(t, e), I(s, l, t.bl_count) + } + + function N(t, e, r) { + var n, i, s = -1, + a = e[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), e[2 * (r + 1) + 1] = 65535, n = 0; n <= r; n++) i = a, a = e[2 * (n + 1) + 1], ++o < h && i === a || (o < u ? t.bl_tree[2 * i] += o : 0 !== i ? (i !== s && t.bl_tree[2 * i]++, t.bl_tree[32]++) : o <= 10 ? t.bl_tree[34]++ : t.bl_tree[36]++, s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4)) + } + + function U(t, e, r) { + var n, i, s = -1, + a = e[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), n = 0; n <= r; n++) + if (i = a, a = e[2 * (n + 1) + 1], !(++o < h && i === a)) { + if (o < u) + for (; E(t, i, t.bl_tree), 0 != --o;); + else 0 !== i ? (i !== s && (E(t, i, t.bl_tree), o--), E(t, 16, t.bl_tree), C(t, o - 3, 2)) : o <= 10 ? (E(t, 17, t.bl_tree), C(t, o - 3, 3)) : (E(t, 18, t.bl_tree), C(t, o - 11, 7)); + s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4) + } + } + i(w); + var P = !1; + + function L(t, e, r, i) { + C(t, 0 + (i ? 1 : 0), 3), + function(t, e, r, i) { + B(t), z(t, r), z(t, ~r), n.arraySet(t.pending_buf, t.window, e, r, t.pending), t.pending += r + }(t, e, r) + } + r._tr_init = function(t) { + P || (function() { + var t, e, r, n, i, s = new Array(16); + for (n = r = 0; n < 28; n++) + for (g[n] = r, t = 0; t < 1 << u[n]; t++) _[r++] = n; + for (_[r - 1] = n, n = i = 0; n < 16; n++) + for (w[n] = i, t = 0; t < 1 << l[n]; t++) m[i++] = n; + for (i >>= 7; n < o; n++) + for (w[n] = i << 7, t = 0; t < 1 << l[n] - 7; t++) m[256 + i++] = n; + for (e = 0; e <= h; e++) s[e] = 0; + for (t = 0; t <= 143;) d[2 * t + 1] = 8, t++, s[8]++; + for (; t <= 255;) d[2 * t + 1] = 9, t++, s[9]++; + for (; t <= 279;) d[2 * t + 1] = 7, t++, s[7]++; + for (; t <= 287;) d[2 * t + 1] = 8, t++, s[8]++; + for (I(d, 287, s), t = 0; t < o; t++) p[2 * t + 1] = 5, p[2 * t] = A(t, 5); + b = new k(d, u, 257, a, h), v = new k(p, l, 0, o, h), y = new k(new Array(0), c, 0, 19, 7) + }(), P = !0), t.l_desc = new x(t.dyn_ltree, b), t.d_desc = new x(t.dyn_dtree, v), t.bl_desc = new x(t.bl_tree, y), t.bi_buf = 0, t.bi_valid = 0, O(t) + }, r._tr_stored_block = L, r._tr_flush_block = function(t, e, r, n) { + var i, a, o = 0; + 0 < t.level ? (2 === t.strm.data_type && (t.strm.data_type = function(t) { + var e, r = 4093624447; + for (e = 0; e <= 31; e++, r >>>= 1) + if (1 & r && 0 !== t.dyn_ltree[2 * e]) return 0; + if (0 !== t.dyn_ltree[18] || 0 !== t.dyn_ltree[20] || 0 !== t.dyn_ltree[26]) return 1; + for (e = 32; e < s; e++) + if (0 !== t.dyn_ltree[2 * e]) return 1; + return 0 + }(t)), F(t, t.l_desc), F(t, t.d_desc), o = function(t) { + var e; + for (N(t, t.dyn_ltree, t.l_desc.max_code), N(t, t.dyn_dtree, t.d_desc.max_code), F(t, t.bl_desc), e = 18; 3 <= e && 0 === t.bl_tree[2 * f[e] + 1]; e--); + return t.opt_len += 3 * (e + 1) + 5 + 5 + 4, e + }(t), i = t.opt_len + 3 + 7 >>> 3, (a = t.static_len + 3 + 7 >>> 3) <= i && (i = a)) : i = a = r + 5, r + 4 <= i && -1 !== e ? L(t, e, r, n) : 4 === t.strategy || a === i ? (C(t, 2 + (n ? 1 : 0), 3), D(t, d, p)) : (C(t, 4 + (n ? 1 : 0), 3), function(t, e, r, n) { + var i; + for (C(t, e - 257, 5), C(t, r - 1, 5), C(t, n - 4, 4), i = 0; i < n; i++) C(t, t.bl_tree[2 * f[i] + 1], 3); + U(t, t.dyn_ltree, e - 1), U(t, t.dyn_dtree, r - 1) + }(t, t.l_desc.max_code + 1, t.d_desc.max_code + 1, o + 1), D(t, t.dyn_ltree, t.dyn_dtree)), O(t), n && B(t) + }, r._tr_tally = function(t, e, r) { + return t.pending_buf[t.d_buf + 2 * t.last_lit] = e >>> 8 & 255, t.pending_buf[t.d_buf + 2 * t.last_lit + 1] = 255 & e, t.pending_buf[t.l_buf + t.last_lit] = 255 & r, t.last_lit++, 0 === e ? t.dyn_ltree[2 * r]++ : (t.matches++, e--, t.dyn_ltree[2 * (_[r] + s + 1)]++, t.dyn_dtree[2 * S(e)]++), t.last_lit === t.lit_bufsize - 1 + }, r._tr_align = function(t) { + C(t, 2, 3), E(t, 256, d), + function(t) { + 16 === t.bi_valid ? (z(t, t.bi_buf), t.bi_buf = 0, t.bi_valid = 0) : 8 <= t.bi_valid && (t.pending_buf[t.pending++] = 255 & t.bi_buf, t.bi_buf >>= 8, t.bi_valid -= 8) + }(t) + } + }, { + "../utils/common": 41 + }], + 53: [function(t, e, r) { + "use strict"; + e.exports = function() { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0 + } + }, {}], + 54: [function(t, e, n) { + (function(t) { + ! function(t, e) { + "use strict"; + if (!t.setImmediate) { + var r, n, s, a, o = 1, + h = {}, + u = !1, + l = t.document, + c = Object.getPrototypeOf && Object.getPrototypeOf(t); + c = c && c.setTimeout ? c : t, r = "[object process]" === {}.toString.call(t.process) ? function(t) { + i.nextTick((function() { + d(t) + })) + } : function() { + if (t.postMessage && !t.importScripts) { + var e = !0, + r = t.onmessage; + return t.onmessage = function() { + e = !1 + }, t.postMessage("", "*"), t.onmessage = r, e + } + }() ? (a = "setImmediate$" + Math.random() + "$", t.addEventListener ? t.addEventListener("message", p, !1) : t.attachEvent("onmessage", p), function(e) { + t.postMessage(a + e, "*") + }) : t.MessageChannel ? ((s = new MessageChannel).port1.onmessage = function(t) { + d(t.data) + }, function(t) { + s.port2.postMessage(t) + }) : l && "onreadystatechange" in l.createElement("script") ? (n = l.documentElement, function(t) { + var e = l.createElement("script"); + e.onreadystatechange = function() { + d(t), e.onreadystatechange = null, n.removeChild(e), e = null + }, n.appendChild(e) + }) : function(t) { + setTimeout(d, 0, t) + }, c.setImmediate = function(t) { + "function" != typeof t && (t = new Function("" + t)); + for (var e = new Array(arguments.length - 1), n = 0; n < e.length; n++) e[n] = arguments[n + 1]; + var i = { + callback: t, + args: e + }; + return h[o] = i, r(o), o++ + }, c.clearImmediate = f + } + + function f(t) { + delete h[t] + } + + function d(t) { + if (u) setTimeout(d, 0, t); + else { + var e = h[t]; + if (e) { + u = !0; + try { + ! function(t) { + var e = t.callback, + r = t.args; + switch (r.length) { + case 0: + e(); + break; + case 1: + e(r[0]); + break; + case 2: + e(r[0], r[1]); + break; + case 3: + e(r[0], r[1], r[2]); + break; + default: + e.apply(undefined, r) + } + }(e) + } finally { + f(t), u = !1 + } + } + } + } + + function p(e) { + e.source === t && "string" == typeof e.data && 0 === e.data.indexOf(a) && d(+e.data.slice(a.length)) + } + }("undefined" == typeof self ? void 0 === t ? this : t : self) + }).call(this, void 0 !== r.g ? r.g : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) + }, {}] + }, {}, [10])(10) + } + } +]); \ No newline at end of file diff --git a/mp-core/5948.89bc32cf626c7557b89d.bundle.js b/mp-core/5948.89bc32cf626c7557b89d.bundle.js new file mode 100644 index 0000000..cecc641 --- /dev/null +++ b/mp-core/5948.89bc32cf626c7557b89d.bundle.js @@ -0,0 +1,102 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5948], { + 25948: (e, s, n) => { + n.r(s), n.d(s, { + default: () => a + }), n(8838); + var t = n(25108); + class a { + id = "core.messaging"; + name = "Messaging"; + description = "Handles sending and receiving global messages in the space."; + version = "1.0.0"; + provides = ["messaging"]; + async send(e, s, n) { + if (!e) throw new Error("Missing target in metapress.messaging.send()"); + if (!s) throw new Error("Missing name in metapress.messaging.send()"); + metapress.plugins.sendEvent("onOutgoingMessage", { + from: metapress.instanceID, + target: e, + name: s, + data: n + }) + } + handleIncomingMessage(e) { + "global" != e.target && e.target != metapress.instanceID || e.from != metapress.instanceID && metapress.plugins.sendEvent("onIncomingMessage", e) + } + pendingRequests = {}; + lastRequestID = 0; + async request(e, s, n, t = 5e3) { + let a = this.lastRequestID++; + this.send(e, "messagingInternal_request", { + requestID: a, + name: s, + data: n + }); + let r = null, + i = null, + u = new Promise(((e, s) => { + i = e, r = s + })); + return this.pendingRequests[a] = { + promiseResolve: i, + promiseReject: r, + promise: u + }, this.pendingRequests[a].timer = setTimeout((() => { + r(new Error("Request timed out")), delete this.pendingRequests[a] + }), t), u + } + async $onIncomingMessage(e) { + if ("messagingInternal_request" == e.name) try { + let s = await metapress.plugins.callAsync(`messaging_request_${e.data.name}`, e.data.data); + if (void 0 === s) return; + this.send(e.from, "messagingInternal_response", { + requestID: e.data.requestID, + result: s + }) + } catch (s) { + t.warn(`[MetaPress] Error in remote request ${e.data?.name}:`, s), this.send(e.from, "messagingInternal_response", { + requestID: e.data.requestID, + error: s.message + }) + } else if ("messagingInternal_response" == e.name) { + let s = this.pendingRequests[e.data.requestID]; + if (!s) return; + clearTimeout(s.timer), delete this.pendingRequests[e.data.requestID], e.data.error ? s.promiseReject(new Error(e.data.error)) : s.promiseResolve(e.data.result) + } + } + } + }, + 8838: (e, s, n) => { + n.d(s, { + dI: () => r, + j8: () => a + }); + var t = n(25108); + + function a(e) { + let s = null; + return function(...n) { + let t = this, + a = s; + return s = async function() { + return await (a?.catch((() => null))), await e.apply(t, n) + }(), s + } + } + + function r(e) { + return function(s) { + return async function(...n) { + try { + return await s.apply(this, n) + } catch (s) { + return e ? t.warn(e, s) : t.warn(s), null + } + } + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js b/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js new file mode 100644 index 0000000..0e107ed --- /dev/null +++ b/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js @@ -0,0 +1,1845 @@ +/*! For license information please see 5972.3a4ce7cbebe3ef574f60.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [5972], { + 74444: (e, t, n) => { + n.d(t, { + $s: () => I, + BH: () => u, + L: () => c, + LL: () => b, + ZR: () => m, + aH: () => d, + eu: () => p, + hl: () => f, + m9: () => E, + ru: () => h, + vZ: () => v, + zI: () => g + }); + var r = n(25108), + a = n(34155); + const i = function(e) { + const t = []; + let n = 0; + for (let r = 0; r < e.length; r++) { + let a = e.charCodeAt(r); + a < 128 ? t[n++] = a : a < 2048 ? (t[n++] = a >> 6 | 192, t[n++] = 63 & a | 128) : 55296 == (64512 & a) && r + 1 < e.length && 56320 == (64512 & e.charCodeAt(r + 1)) ? (a = 65536 + ((1023 & a) << 10) + (1023 & e.charCodeAt(++r)), t[n++] = a >> 18 | 240, t[n++] = a >> 12 & 63 | 128, t[n++] = a >> 6 & 63 | 128, t[n++] = 63 & a | 128) : (t[n++] = a >> 12 | 224, t[n++] = a >> 6 & 63 | 128, t[n++] = 63 & a | 128) + } + return t + }, + s = { + byteToCharMap_: null, + charToByteMap_: null, + byteToCharMapWebSafe_: null, + charToByteMapWebSafe_: null, + ENCODED_VALS_BASE: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + get ENCODED_VALS() { + return this.ENCODED_VALS_BASE + "+/=" + }, + get ENCODED_VALS_WEBSAFE() { + return this.ENCODED_VALS_BASE + "-_." + }, + HAS_NATIVE_SUPPORT: "function" == typeof atob, + encodeByteArray(e, t) { + if (!Array.isArray(e)) throw Error("encodeByteArray takes an array as a parameter"); + this.init_(); + const n = t ? this.byteToCharMapWebSafe_ : this.byteToCharMap_, + r = []; + for (let t = 0; t < e.length; t += 3) { + const a = e[t], + i = t + 1 < e.length, + s = i ? e[t + 1] : 0, + o = t + 2 < e.length, + c = o ? e[t + 2] : 0, + l = a >> 2, + d = (3 & a) << 4 | s >> 4; + let u = (15 & s) << 2 | c >> 6, + h = 63 & c; + o || (h = 64, i || (u = 64)), r.push(n[l], n[d], n[u], n[h]) + } + return r.join("") + }, + encodeString(e, t) { + return this.HAS_NATIVE_SUPPORT && !t ? btoa(e) : this.encodeByteArray(i(e), t) + }, + decodeString(e, t) { + return this.HAS_NATIVE_SUPPORT && !t ? atob(e) : function(e) { + const t = []; + let n = 0, + r = 0; + for (; n < e.length;) { + const a = e[n++]; + if (a < 128) t[r++] = String.fromCharCode(a); + else if (a > 191 && a < 224) { + const i = e[n++]; + t[r++] = String.fromCharCode((31 & a) << 6 | 63 & i) + } else if (a > 239 && a < 365) { + const i = ((7 & a) << 18 | (63 & e[n++]) << 12 | (63 & e[n++]) << 6 | 63 & e[n++]) - 65536; + t[r++] = String.fromCharCode(55296 + (i >> 10)), t[r++] = String.fromCharCode(56320 + (1023 & i)) + } else { + const i = e[n++], + s = e[n++]; + t[r++] = String.fromCharCode((15 & a) << 12 | (63 & i) << 6 | 63 & s) + } + } + return t.join("") + }(this.decodeStringToByteArray(e, t)) + }, + decodeStringToByteArray(e, t) { + this.init_(); + const n = t ? this.charToByteMapWebSafe_ : this.charToByteMap_, + r = []; + for (let t = 0; t < e.length;) { + const a = n[e.charAt(t++)], + i = t < e.length ? n[e.charAt(t)] : 0; + ++t; + const s = t < e.length ? n[e.charAt(t)] : 64; + ++t; + const c = t < e.length ? n[e.charAt(t)] : 64; + if (++t, null == a || null == i || null == s || null == c) throw new o; + const l = a << 2 | i >> 4; + if (r.push(l), 64 !== s) { + const e = i << 4 & 240 | s >> 2; + if (r.push(e), 64 !== c) { + const e = s << 6 & 192 | c; + r.push(e) + } + } + } + return r + }, + init_() { + if (!this.byteToCharMap_) { + this.byteToCharMap_ = {}, this.charToByteMap_ = {}, this.byteToCharMapWebSafe_ = {}, this.charToByteMapWebSafe_ = {}; + for (let e = 0; e < this.ENCODED_VALS.length; e++) this.byteToCharMap_[e] = this.ENCODED_VALS.charAt(e), this.charToByteMap_[this.byteToCharMap_[e]] = e, this.byteToCharMapWebSafe_[e] = this.ENCODED_VALS_WEBSAFE.charAt(e), this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[e]] = e, e >= this.ENCODED_VALS_BASE.length && (this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)] = e, this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)] = e) + } + } + }; + class o extends Error { + constructor() { + super(...arguments), this.name = "DecodeBase64StringError" + } + } + const c = function(e) { + return function(e) { + const t = i(e); + return s.encodeByteArray(t, !0) + }(e).replace(/\./g, "") + }, + l = () => { + try { + return function() { + if ("undefined" != typeof self) return self; + if ("undefined" != typeof window) return window; + if (void 0 !== n.g) return n.g; + throw new Error("Unable to locate global object.") + }().__FIREBASE_DEFAULTS__ || (() => { + if (void 0 === a || void 0 === a.env) return; + const e = a.env.__FIREBASE_DEFAULTS__; + return e ? JSON.parse(e) : void 0 + })() || (() => { + if ("undefined" == typeof document) return; + let e; + try { + e = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/) + } catch (e) { + return + } + const t = e && function(e) { + try { + return s.decodeString(e, !0) + } catch (e) { + r.error("base64Decode failed: ", e) + } + return null + }(e[1]); + return t && JSON.parse(t) + })() + } catch (e) { + return void r.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`) + } + }, + d = () => { + var e; + return null === (e = l()) || void 0 === e ? void 0 : e.config + }; + class u { + constructor() { + this.reject = () => {}, this.resolve = () => {}, this.promise = new Promise(((e, t) => { + this.resolve = e, this.reject = t + })) + } + wrapCallback(e) { + return (t, n) => { + t ? this.reject(t) : this.resolve(n), "function" == typeof e && (this.promise.catch((() => {})), 1 === e.length ? e(t) : e(t, n)) + } + } + } + + function h() { + const e = "object" == typeof chrome ? chrome.runtime : "object" == typeof browser ? browser.runtime : void 0; + return "object" == typeof e && void 0 !== e.id + } + + function f() { + try { + return "object" == typeof indexedDB + } catch (e) { + return !1 + } + } + + function p() { + return new Promise(((e, t) => { + try { + let n = !0; + const r = "validate-browser-context-for-indexeddb-analytics-module", + a = self.indexedDB.open(r); + a.onsuccess = () => { + a.result.close(), n || self.indexedDB.deleteDatabase(r), e(!0) + }, a.onupgradeneeded = () => { + n = !1 + }, a.onerror = () => { + var e; + t((null === (e = a.error) || void 0 === e ? void 0 : e.message) || "") + } + } catch (e) { + t(e) + } + })) + } + + function g() { + return !("undefined" == typeof navigator || !navigator.cookieEnabled) + } + class m extends Error { + constructor(e, t, n) { + super(t), this.code = e, this.customData = n, this.name = "FirebaseError", Object.setPrototypeOf(this, m.prototype), Error.captureStackTrace && Error.captureStackTrace(this, b.prototype.create) + } + } + class b { + constructor(e, t, n) { + this.service = e, this.serviceName = t, this.errors = n + } + create(e, ...t) { + const n = t[0] || {}, + r = `${this.service}/${e}`, + a = this.errors[e], + i = a ? function(e, t) { + return e.replace(w, ((e, n) => { + const r = t[n]; + return null != r ? String(r) : `<${n}?>` + })) + }(a, n) : "Error", + s = `${this.serviceName}: ${i} (${r}).`; + return new m(r, s, n) + } + } + const w = /\{\$([^}]+)}/g; + + function v(e, t) { + if (e === t) return !0; + const n = Object.keys(e), + r = Object.keys(t); + for (const a of n) { + if (!r.includes(a)) return !1; + const n = e[a], + i = t[a]; + if (y(n) && y(i)) { + if (!v(n, i)) return !1 + } else if (n !== i) return !1 + } + for (const e of r) + if (!n.includes(e)) return !1; + return !0 + } + + function y(e) { + return null !== e && "object" == typeof e + } + + function I(e, t = 1e3, n = 2) { + const r = t * Math.pow(n, e), + a = Math.round(.5 * r * (Math.random() - .5) * 2); + return Math.min(144e5, r + a) + } + + function E(e) { + return e && e._delegate ? e._delegate : e + } + }, + 10389: (e, t, n) => { + n.d(t, { + qX: () => O, + Xd: () => k, + Mq: () => j, + ZF: () => $, + KN: () => P + }); + var r = n(8463), + a = n(53333), + i = n(74444); + let s, o; + const c = new WeakMap, + l = new WeakMap, + d = new WeakMap, + u = new WeakMap, + h = new WeakMap; + let f = { + get(e, t, n) { + if (e instanceof IDBTransaction) { + if ("done" === t) return l.get(e); + if ("objectStoreNames" === t) return e.objectStoreNames || d.get(e); + if ("store" === t) return n.objectStoreNames[1] ? void 0 : n.objectStore(n.objectStoreNames[0]) + } + return g(e[t]) + }, + set: (e, t, n) => (e[t] = n, !0), + has: (e, t) => e instanceof IDBTransaction && ("done" === t || "store" === t) || t in e + }; + + function p(e) { + return "function" == typeof e ? (t = e) !== IDBDatabase.prototype.transaction || "objectStoreNames" in IDBTransaction.prototype ? (o || (o = [IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey])).includes(t) ? function(...e) { + return t.apply(m(this), e), g(c.get(this)) + } : function(...e) { + return g(t.apply(m(this), e)) + } : function(e, ...n) { + const r = t.call(m(this), e, ...n); + return d.set(r, e.sort ? e.sort() : [e]), g(r) + } : (e instanceof IDBTransaction && function(e) { + if (l.has(e)) return; + const t = new Promise(((t, n) => { + const r = () => { + e.removeEventListener("complete", a), e.removeEventListener("error", i), e.removeEventListener("abort", i) + }, + a = () => { + t(), r() + }, + i = () => { + n(e.error || new DOMException("AbortError", "AbortError")), r() + }; + e.addEventListener("complete", a), e.addEventListener("error", i), e.addEventListener("abort", i) + })); + l.set(e, t) + }(e), n = e, (s || (s = [IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction])).some((e => n instanceof e)) ? new Proxy(e, f) : e); + var t, n + } + + function g(e) { + if (e instanceof IDBRequest) return function(e) { + const t = new Promise(((t, n) => { + const r = () => { + e.removeEventListener("success", a), e.removeEventListener("error", i) + }, + a = () => { + t(g(e.result)), r() + }, + i = () => { + n(e.error), r() + }; + e.addEventListener("success", a), e.addEventListener("error", i) + })); + return t.then((t => { + t instanceof IDBCursor && c.set(t, e) + })).catch((() => {})), h.set(t, e), t + }(e); + if (u.has(e)) return u.get(e); + const t = p(e); + return t !== e && (u.set(e, t), h.set(t, e)), t + } + const m = e => h.get(e), + b = ["get", "getKey", "getAll", "getAllKeys", "count"], + w = ["put", "add", "delete", "clear"], + v = new Map; + + function y(e, t) { + if (!(e instanceof IDBDatabase) || t in e || "string" != typeof t) return; + if (v.get(t)) return v.get(t); + const n = t.replace(/FromIndex$/, ""), + r = t !== n, + a = w.includes(n); + if (!(n in (r ? IDBIndex : IDBObjectStore).prototype) || !a && !b.includes(n)) return; + const i = async function(e, ...t) { + const i = this.transaction(e, a ? "readwrite" : "readonly"); + let s = i.store; + return r && (s = s.index(t.shift())), (await Promise.all([s[n](...t), a && i.done]))[0] + }; + return v.set(t, i), i + } + var I; + I = f, f = { + ...I, + get: (e, t, n) => y(e, t) || I.get(e, t, n), + has: (e, t) => !!y(e, t) || I.has(e, t) + }; + class E { + constructor(e) { + this.container = e + } + getPlatformInfoString() { + return this.container.getProviders().map((e => { + if (function(e) { + const t = e.getComponent(); + return "VERSION" === (null == t ? void 0 : t.type) + }(e)) { + const t = e.getImmediate(); + return `${t.library}/${t.version}` + } + return null + })).filter((e => e)).join(" ") + } + } + const D = "@firebase/app", + S = "0.9.23", + C = new a.Yd("@firebase/app"), + _ = "[DEFAULT]", + A = { + [D]: "fire-core", + "@firebase/app-compat": "fire-core-compat", + "@firebase/analytics": "fire-analytics", + "@firebase/analytics-compat": "fire-analytics-compat", + "@firebase/app-check": "fire-app-check", + "@firebase/app-check-compat": "fire-app-check-compat", + "@firebase/auth": "fire-auth", + "@firebase/auth-compat": "fire-auth-compat", + "@firebase/database": "fire-rtdb", + "@firebase/database-compat": "fire-rtdb-compat", + "@firebase/functions": "fire-fn", + "@firebase/functions-compat": "fire-fn-compat", + "@firebase/installations": "fire-iid", + "@firebase/installations-compat": "fire-iid-compat", + "@firebase/messaging": "fire-fcm", + "@firebase/messaging-compat": "fire-fcm-compat", + "@firebase/performance": "fire-perf", + "@firebase/performance-compat": "fire-perf-compat", + "@firebase/remote-config": "fire-rc", + "@firebase/remote-config-compat": "fire-rc-compat", + "@firebase/storage": "fire-gcs", + "@firebase/storage-compat": "fire-gcs-compat", + "@firebase/firestore": "fire-fst", + "@firebase/firestore-compat": "fire-fst-compat", + "fire-js": "fire-js", + firebase: "fire-js-all" + }, + T = new Map, + L = new Map; + + function B(e, t) { + try { + e.container.addComponent(t) + } catch (n) { + C.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`, n) + } + } + + function k(e) { + const t = e.name; + if (L.has(t)) return C.debug(`There were multiple attempts to register component ${t}.`), !1; + L.set(t, e); + for (const t of T.values()) B(t, e); + return !0 + } + + function O(e, t) { + const n = e.container.getProvider("heartbeat").getImmediate({ + optional: !0 + }); + return n && n.triggerHeartbeat(), e.container.getProvider(t) + } + const M = new i.LL("app", "Firebase", { + "no-app": "No Firebase App '{$appName}' has been created - call initializeApp() first", + "bad-app-name": "Illegal App name: '{$appName}", + "duplicate-app": "Firebase App named '{$appName}' already exists with different options or config", + "app-deleted": "Firebase App named '{$appName}' already deleted", + "no-options": "Need to provide options, when not being deployed to hosting via source.", + "invalid-app-argument": "firebase.{$appName}() takes either no argument or a Firebase App instance.", + "invalid-log-argument": "First argument to `onLog` must be null or a function.", + "idb-open": "Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.", + "idb-get": "Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.", + "idb-set": "Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.", + "idb-delete": "Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}." + }); + class N { + constructor(e, t, n) { + this._isDeleted = !1, this._options = Object.assign({}, e), this._config = Object.assign({}, t), this._name = t.name, this._automaticDataCollectionEnabled = t.automaticDataCollectionEnabled, this._container = n, this.container.addComponent(new r.wA("app", (() => this), "PUBLIC")) + } + get automaticDataCollectionEnabled() { + return this.checkDestroyed(), this._automaticDataCollectionEnabled + } + set automaticDataCollectionEnabled(e) { + this.checkDestroyed(), this._automaticDataCollectionEnabled = e + } + get name() { + return this.checkDestroyed(), this._name + } + get options() { + return this.checkDestroyed(), this._options + } + get config() { + return this.checkDestroyed(), this._config + } + get container() { + return this._container + } + get isDeleted() { + return this._isDeleted + } + set isDeleted(e) { + this._isDeleted = e + } + checkDestroyed() { + if (this.isDeleted) throw M.create("app-deleted", { + appName: this._name + }) + } + } + + function $(e, t = {}) { + let n = e; + "object" != typeof t && (t = { + name: t + }); + const a = Object.assign({ + name: _, + automaticDataCollectionEnabled: !1 + }, t), + s = a.name; + if ("string" != typeof s || !s) throw M.create("bad-app-name", { + appName: String(s) + }); + if (n || (n = (0, i.aH)()), !n) throw M.create("no-options"); + const o = T.get(s); + if (o) { + if ((0, i.vZ)(n, o.options) && (0, i.vZ)(a, o.config)) return o; + throw M.create("duplicate-app", { + appName: s + }) + } + const c = new r.H0(s); + for (const e of L.values()) c.addComponent(e); + const l = new N(n, a, c); + return T.set(s, l), l + } + + function j(e = "[DEFAULT]") { + const t = T.get(e); + if (!t && e === _ && (0, i.aH)()) return $(); + if (!t) throw M.create("no-app", { + appName: e + }); + return t + } + + function P(e, t, n) { + var a; + let i = null !== (a = A[e]) && void 0 !== a ? a : e; + n && (i += `-${n}`); + const s = i.match(/\s|\//), + o = t.match(/\s|\//); + if (s || o) { + const e = [`Unable to register library "${i}" with version "${t}":`]; + return s && e.push(`library name "${i}" contains illegal characters (whitespace or "/")`), s && o && e.push("and"), o && e.push(`version name "${t}" contains illegal characters (whitespace or "/")`), void C.warn(e.join(" ")) + } + k(new r.wA(`${i}-version`, (() => ({ + library: i, + version: t + })), "VERSION")) + } + const F = "firebase-heartbeat-store"; + let R = null; + + function H() { + return R || (R = function(e, t, { + blocked: n, + upgrade: r, + blocking: a, + terminated: i + } = {}) { + const s = indexedDB.open(e, t), + o = g(s); + return r && s.addEventListener("upgradeneeded", (e => { + r(g(s.result), e.oldVersion, e.newVersion, g(s.transaction), e) + })), n && s.addEventListener("blocked", (e => n(e.oldVersion, e.newVersion, e))), o.then((e => { + i && e.addEventListener("close", (() => i())), a && e.addEventListener("versionchange", (e => a(e.oldVersion, e.newVersion, e))) + })).catch((() => {})), o + }("firebase-heartbeat-database", 1, { + upgrade: (e, t) => { + 0 === t && e.createObjectStore(F) + } + }).catch((e => { + throw M.create("idb-open", { + originalErrorMessage: e.message + }) + }))), R + } + async function x(e, t) { + try { + const n = (await H()).transaction(F, "readwrite"), + r = n.objectStore(F); + await r.put(t, z(e)), await n.done + } catch (e) { + if (e instanceof i.ZR) C.warn(e.message); + else { + const t = M.create("idb-set", { + originalErrorMessage: null == e ? void 0 : e.message + }); + C.warn(t.message) + } + } + } + + function z(e) { + return `${e.name}!${e.options.appId}` + } + class V { + constructor(e) { + this.container = e, this._heartbeatsCache = null; + const t = this.container.getProvider("app").getImmediate(); + this._storage = new q(t), this._heartbeatsCachePromise = this._storage.read().then((e => (this._heartbeatsCache = e, e))) + } + async triggerHeartbeat() { + var e; + const t = this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(), + n = U(); + if (null == (null === (e = this._heartbeatsCache) || void 0 === e ? void 0 : e.heartbeats) && (this._heartbeatsCache = await this._heartbeatsCachePromise), this._heartbeatsCache.lastSentHeartbeatDate !== n && !this._heartbeatsCache.heartbeats.some((e => e.date === n))) return this._heartbeatsCache.heartbeats.push({ + date: n, + agent: t + }), this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter((e => { + const t = new Date(e.date).valueOf(); + return Date.now() - t <= 2592e6 + })), this._storage.overwrite(this._heartbeatsCache) + } + async getHeartbeatsHeader() { + var e; + if (null === this._heartbeatsCache && await this._heartbeatsCachePromise, null == (null === (e = this._heartbeatsCache) || void 0 === e ? void 0 : e.heartbeats) || 0 === this._heartbeatsCache.heartbeats.length) return ""; + const t = U(), + { + heartbeatsToSend: n, + unsentEntries: r + } = function(e, t = 1024) { + const n = []; + let r = e.slice(); + for (const a of e) { + const e = n.find((e => e.agent === a.agent)); + if (e) { + if (e.dates.push(a.date), W(n) > t) { + e.dates.pop(); + break + } + } else if (n.push({ + agent: a.agent, + dates: [a.date] + }), W(n) > t) { + n.pop(); + break + } + r = r.slice(1) + } + return { + heartbeatsToSend: n, + unsentEntries: r + } + }(this._heartbeatsCache.heartbeats), + a = (0, i.L)(JSON.stringify({ + version: 2, + heartbeats: n + })); + return this._heartbeatsCache.lastSentHeartbeatDate = t, r.length > 0 ? (this._heartbeatsCache.heartbeats = r, await this._storage.overwrite(this._heartbeatsCache)) : (this._heartbeatsCache.heartbeats = [], this._storage.overwrite(this._heartbeatsCache)), a + } + } + + function U() { + return (new Date).toISOString().substring(0, 10) + } + class q { + constructor(e) { + this.app = e, this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck() + } + async runIndexedDBEnvironmentCheck() { + return !!(0, i.hl)() && (0, i.eu)().then((() => !0)).catch((() => !1)) + } + async read() { + return await this._canUseIndexedDBPromise && await async function(e) { + try { + const t = await H(); + return await t.transaction(F).objectStore(F).get(z(e)) + } catch (e) { + if (e instanceof i.ZR) C.warn(e.message); + else { + const t = M.create("idb-get", { + originalErrorMessage: null == e ? void 0 : e.message + }); + C.warn(t.message) + } + } + }(this.app) || { + heartbeats: [] + } + } + async overwrite(e) { + var t; + if (await this._canUseIndexedDBPromise) { + const n = await this.read(); + return x(this.app, { + lastSentHeartbeatDate: null !== (t = e.lastSentHeartbeatDate) && void 0 !== t ? t : n.lastSentHeartbeatDate, + heartbeats: e.heartbeats + }) + } + } + async add(e) { + var t; + if (await this._canUseIndexedDBPromise) { + const n = await this.read(); + return x(this.app, { + lastSentHeartbeatDate: null !== (t = e.lastSentHeartbeatDate) && void 0 !== t ? t : n.lastSentHeartbeatDate, + heartbeats: [...n.heartbeats, ...e.heartbeats] + }) + } + } + } + + function W(e) { + return (0, i.L)(JSON.stringify({ + version: 2, + heartbeats: e + })).length + } + k(new r.wA("platform-logger", (e => new E(e)), "PRIVATE")), k(new r.wA("heartbeat", (e => new V(e)), "PRIVATE")), P(D, S, ""), P(D, S, "esm2017"), P("fire-js", "") + }, + 8463: (e, t, n) => { + n.d(t, { + H0: () => o, + wA: () => a + }); + var r = n(74444); + class a { + constructor(e, t, n) { + this.name = e, this.instanceFactory = t, this.type = n, this.multipleInstances = !1, this.serviceProps = {}, this.instantiationMode = "LAZY", this.onInstanceCreated = null + } + setInstantiationMode(e) { + return this.instantiationMode = e, this + } + setMultipleInstances(e) { + return this.multipleInstances = e, this + } + setServiceProps(e) { + return this.serviceProps = e, this + } + setInstanceCreatedCallback(e) { + return this.onInstanceCreated = e, this + } + } + const i = "[DEFAULT]"; + class s { + constructor(e, t) { + this.name = e, this.container = t, this.component = null, this.instances = new Map, this.instancesDeferred = new Map, this.instancesOptions = new Map, this.onInitCallbacks = new Map + } + get(e) { + const t = this.normalizeInstanceIdentifier(e); + if (!this.instancesDeferred.has(t)) { + const e = new r.BH; + if (this.instancesDeferred.set(t, e), this.isInitialized(t) || this.shouldAutoInitialize()) try { + const n = this.getOrInitializeService({ + instanceIdentifier: t + }); + n && e.resolve(n) + } catch (e) {} + } + return this.instancesDeferred.get(t).promise + } + getImmediate(e) { + var t; + const n = this.normalizeInstanceIdentifier(null == e ? void 0 : e.identifier), + r = null !== (t = null == e ? void 0 : e.optional) && void 0 !== t && t; + if (!this.isInitialized(n) && !this.shouldAutoInitialize()) { + if (r) return null; + throw Error(`Service ${this.name} is not available`) + } + try { + return this.getOrInitializeService({ + instanceIdentifier: n + }) + } catch (e) { + if (r) return null; + throw e + } + } + getComponent() { + return this.component + } + setComponent(e) { + if (e.name !== this.name) throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`); + if (this.component) throw Error(`Component for ${this.name} has already been provided`); + if (this.component = e, this.shouldAutoInitialize()) { + if (function(e) { + return "EAGER" === e.instantiationMode + }(e)) try { + this.getOrInitializeService({ + instanceIdentifier: i + }) + } catch (e) {} + for (const [e, t] of this.instancesDeferred.entries()) { + const n = this.normalizeInstanceIdentifier(e); + try { + const e = this.getOrInitializeService({ + instanceIdentifier: n + }); + t.resolve(e) + } catch (e) {} + } + } + } + clearInstance(e = "[DEFAULT]") { + this.instancesDeferred.delete(e), this.instancesOptions.delete(e), this.instances.delete(e) + } + async delete() { + const e = Array.from(this.instances.values()); + await Promise.all([...e.filter((e => "INTERNAL" in e)).map((e => e.INTERNAL.delete())), ...e.filter((e => "_delete" in e)).map((e => e._delete()))]) + } + isComponentSet() { + return null != this.component + } + isInitialized(e = "[DEFAULT]") { + return this.instances.has(e) + } + getOptions(e = "[DEFAULT]") { + return this.instancesOptions.get(e) || {} + } + initialize(e = {}) { + const { + options: t = {} + } = e, n = this.normalizeInstanceIdentifier(e.instanceIdentifier); + if (this.isInitialized(n)) throw Error(`${this.name}(${n}) has already been initialized`); + if (!this.isComponentSet()) throw Error(`Component ${this.name} has not been registered yet`); + const r = this.getOrInitializeService({ + instanceIdentifier: n, + options: t + }); + for (const [e, t] of this.instancesDeferred.entries()) n === this.normalizeInstanceIdentifier(e) && t.resolve(r); + return r + } + onInit(e, t) { + var n; + const r = this.normalizeInstanceIdentifier(t), + a = null !== (n = this.onInitCallbacks.get(r)) && void 0 !== n ? n : new Set; + a.add(e), this.onInitCallbacks.set(r, a); + const i = this.instances.get(r); + return i && e(i, r), () => { + a.delete(e) + } + } + invokeOnInitCallbacks(e, t) { + const n = this.onInitCallbacks.get(t); + if (n) + for (const r of n) try { + r(e, t) + } catch (e) {} + } + getOrInitializeService({ + instanceIdentifier: e, + options: t = {} + }) { + let n = this.instances.get(e); + if (!n && this.component && (n = this.component.instanceFactory(this.container, { + instanceIdentifier: (r = e, r === i ? void 0 : r), + options: t + }), this.instances.set(e, n), this.instancesOptions.set(e, t), this.invokeOnInitCallbacks(n, e), this.component.onInstanceCreated)) try { + this.component.onInstanceCreated(this.container, e, n) + } catch (e) {} + var r; + return n || null + } + normalizeInstanceIdentifier(e = "[DEFAULT]") { + return this.component ? this.component.multipleInstances ? e : i : e + } + shouldAutoInitialize() { + return !!this.component && "EXPLICIT" !== this.component.instantiationMode + } + } + class o { + constructor(e) { + this.name = e, this.providers = new Map + } + addComponent(e) { + const t = this.getProvider(e.name); + if (t.isComponentSet()) throw new Error(`Component ${e.name} has already been registered with ${this.name}`); + t.setComponent(e) + } + addOrOverwriteComponent(e) { + this.getProvider(e.name).isComponentSet() && this.providers.delete(e.name), this.addComponent(e) + } + getProvider(e) { + if (this.providers.has(e)) return this.providers.get(e); + const t = new s(e, this); + return this.providers.set(e, t), t + } + getProviders() { + return Array.from(this.providers.values()) + } + } + }, + 53333: (e, t, n) => { + n.d(t, { + Yd: () => d + }); + var r = n(25108); + const a = []; + var i; + ! function(e) { + e[e.DEBUG = 0] = "DEBUG", e[e.VERBOSE = 1] = "VERBOSE", e[e.INFO = 2] = "INFO", e[e.WARN = 3] = "WARN", e[e.ERROR = 4] = "ERROR", e[e.SILENT = 5] = "SILENT" + }(i || (i = {})); + const s = { + debug: i.DEBUG, + verbose: i.VERBOSE, + info: i.INFO, + warn: i.WARN, + error: i.ERROR, + silent: i.SILENT + }, + o = i.INFO, + c = { + [i.DEBUG]: "log", + [i.VERBOSE]: "log", + [i.INFO]: "info", + [i.WARN]: "warn", + [i.ERROR]: "error" + }, + l = (e, t, ...n) => { + if (t < e.logLevel) return; + const a = (new Date).toISOString(), + i = c[t]; + if (!i) throw new Error(`Attempted to log a message with an invalid logType (value: ${t})`); + r[i](`[${a}] ${e.name}:`, ...n) + }; + class d { + constructor(e) { + this.name = e, this._logLevel = o, this._logHandler = l, this._userLogHandler = null, a.push(this) + } + get logLevel() { + return this._logLevel + } + set logLevel(e) { + if (!(e in i)) throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``); + this._logLevel = e + } + setLogLevel(e) { + this._logLevel = "string" == typeof e ? s[e] : e + } + get logHandler() { + return this._logHandler + } + set logHandler(e) { + if ("function" != typeof e) throw new TypeError("Value assigned to `logHandler` must be a function"); + this._logHandler = e + } + get userLogHandler() { + return this._userLogHandler + } + set userLogHandler(e) { + this._userLogHandler = e + } + debug(...e) { + this._userLogHandler && this._userLogHandler(this, i.DEBUG, ...e), this._logHandler(this, i.DEBUG, ...e) + } + log(...e) { + this._userLogHandler && this._userLogHandler(this, i.VERBOSE, ...e), this._logHandler(this, i.VERBOSE, ...e) + } + info(...e) { + this._userLogHandler && this._userLogHandler(this, i.INFO, ...e), this._logHandler(this, i.INFO, ...e) + } + warn(...e) { + this._userLogHandler && this._userLogHandler(this, i.WARN, ...e), this._logHandler(this, i.WARN, ...e) + } + error(...e) { + this._userLogHandler && this._userLogHandler(this, i.ERROR, ...e), this._logHandler(this, i.ERROR, ...e) + } + } + }, + 43897: (e, t, n) => { + n.d(t, { + IH: () => Ae, + Kz: () => Te + }); + var r = n(10389), + a = n(53333), + i = n(74444), + s = n(8463); + let o, c; + const l = new WeakMap, + d = new WeakMap, + u = new WeakMap, + h = new WeakMap, + f = new WeakMap; + let p = { + get(e, t, n) { + if (e instanceof IDBTransaction) { + if ("done" === t) return d.get(e); + if ("objectStoreNames" === t) return e.objectStoreNames || u.get(e); + if ("store" === t) return n.objectStoreNames[1] ? void 0 : n.objectStore(n.objectStoreNames[0]) + } + return m(e[t]) + }, + set: (e, t, n) => (e[t] = n, !0), + has: (e, t) => e instanceof IDBTransaction && ("done" === t || "store" === t) || t in e + }; + + function g(e) { + return "function" == typeof e ? (t = e) !== IDBDatabase.prototype.transaction || "objectStoreNames" in IDBTransaction.prototype ? (c || (c = [IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey])).includes(t) ? function(...e) { + return t.apply(b(this), e), m(l.get(this)) + } : function(...e) { + return m(t.apply(b(this), e)) + } : function(e, ...n) { + const r = t.call(b(this), e, ...n); + return u.set(r, e.sort ? e.sort() : [e]), m(r) + } : (e instanceof IDBTransaction && function(e) { + if (d.has(e)) return; + const t = new Promise(((t, n) => { + const r = () => { + e.removeEventListener("complete", a), e.removeEventListener("error", i), e.removeEventListener("abort", i) + }, + a = () => { + t(), r() + }, + i = () => { + n(e.error || new DOMException("AbortError", "AbortError")), r() + }; + e.addEventListener("complete", a), e.addEventListener("error", i), e.addEventListener("abort", i) + })); + d.set(e, t) + }(e), n = e, (o || (o = [IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction])).some((e => n instanceof e)) ? new Proxy(e, p) : e); + var t, n + } + + function m(e) { + if (e instanceof IDBRequest) return function(e) { + const t = new Promise(((t, n) => { + const r = () => { + e.removeEventListener("success", a), e.removeEventListener("error", i) + }, + a = () => { + t(m(e.result)), r() + }, + i = () => { + n(e.error), r() + }; + e.addEventListener("success", a), e.addEventListener("error", i) + })); + return t.then((t => { + t instanceof IDBCursor && l.set(t, e) + })).catch((() => {})), f.set(t, e), t + }(e); + if (h.has(e)) return h.get(e); + const t = g(e); + return t !== e && (h.set(e, t), f.set(t, e)), t + } + const b = e => f.get(e), + w = ["get", "getKey", "getAll", "getAllKeys", "count"], + v = ["put", "add", "delete", "clear"], + y = new Map; + + function I(e, t) { + if (!(e instanceof IDBDatabase) || t in e || "string" != typeof t) return; + if (y.get(t)) return y.get(t); + const n = t.replace(/FromIndex$/, ""), + r = t !== n, + a = v.includes(n); + if (!(n in (r ? IDBIndex : IDBObjectStore).prototype) || !a && !w.includes(n)) return; + const i = async function(e, ...t) { + const i = this.transaction(e, a ? "readwrite" : "readonly"); + let s = i.store; + return r && (s = s.index(t.shift())), (await Promise.all([s[n](...t), a && i.done]))[0] + }; + return y.set(t, i), i + } + var E; + E = p, p = { + ...E, + get: (e, t, n) => I(e, t) || E.get(e, t, n), + has: (e, t) => !!I(e, t) || E.has(e, t) + }; + var D = n(25108); + const S = "@firebase/installations", + C = "0.6.4", + _ = "w:0.6.4", + A = new i.LL("installations", "Installations", { + "missing-app-config-values": 'Missing App configuration value: "{$valueName}"', + "not-registered": "Firebase Installation is not registered.", + "installation-not-found": "Firebase Installation not found.", + "request-failed": '{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"', + "app-offline": "Could not process request. Application offline.", + "delete-pending-registration": "Can't delete installation while there is a pending registration request." + }); + + function T(e) { + return e instanceof i.ZR && e.code.includes("request-failed") + } + + function L({ + projectId: e + }) { + return `https://firebaseinstallations.googleapis.com/v1/projects/${e}/installations` + } + + function B(e) { + return { + token: e.token, + requestStatus: 2, + expiresIn: (t = e.expiresIn, Number(t.replace("s", "000"))), + creationTime: Date.now() + }; + var t + } + async function k(e, t) { + const n = (await t.json()).error; + return A.create("request-failed", { + requestName: e, + serverCode: n.code, + serverMessage: n.message, + serverStatus: n.status + }) + } + + function O({ + apiKey: e + }) { + return new Headers({ + "Content-Type": "application/json", + Accept: "application/json", + "x-goog-api-key": e + }) + } + async function M(e) { + const t = await e(); + return t.status >= 500 && t.status < 600 ? e() : t + } + + function N(e) { + return new Promise((t => { + setTimeout(t, e) + })) + } + const $ = /^[cdef][\w-]{21}$/; + + function j() { + try { + const e = new Uint8Array(17); + (self.crypto || self.msCrypto).getRandomValues(e), e[0] = 112 + e[0] % 16; + const t = function(e) { + return (t = e, btoa(String.fromCharCode(...t)).replace(/\+/g, "-").replace(/\//g, "_")).substr(0, 22); + var t + }(e); + return $.test(t) ? t : "" + } catch (e) { + return "" + } + } + + function P(e) { + return `${e.appName}!${e.appId}` + } + const F = new Map; + + function R(e, t) { + const n = P(e); + H(n, t), + function(e, t) { + const n = (!x && "BroadcastChannel" in self && (x = new BroadcastChannel("[Firebase] FID Change"), x.onmessage = e => { + H(e.data.key, e.data.fid) + }), x); + n && n.postMessage({ + key: e, + fid: t + }), 0 === F.size && x && (x.close(), x = null) + }(n, t) + } + + function H(e, t) { + const n = F.get(e); + if (n) + for (const e of n) e(t) + } + let x = null; + const z = "firebase-installations-store"; + let V = null; + + function U() { + return V || (V = function(e, t, { + blocked: n, + upgrade: r, + blocking: a, + terminated: i + } = {}) { + const s = indexedDB.open(e, t), + o = m(s); + return r && s.addEventListener("upgradeneeded", (e => { + r(m(s.result), e.oldVersion, e.newVersion, m(s.transaction)) + })), n && s.addEventListener("blocked", (() => n())), o.then((e => { + i && e.addEventListener("close", (() => i())), a && e.addEventListener("versionchange", (() => a())) + })).catch((() => {})), o + }("firebase-installations-database", 1, { + upgrade: (e, t) => { + 0 === t && e.createObjectStore(z) + } + })), V + } + async function q(e, t) { + const n = P(e), + r = (await U()).transaction(z, "readwrite"), + a = r.objectStore(z), + i = await a.get(n); + return await a.put(t, n), await r.done, i && i.fid === t.fid || R(e, t.fid), t + } + async function W(e) { + const t = P(e), + n = (await U()).transaction(z, "readwrite"); + await n.objectStore(z).delete(t), await n.done + } + async function K(e, t) { + const n = P(e), + r = (await U()).transaction(z, "readwrite"), + a = r.objectStore(z), + i = await a.get(n), + s = t(i); + return void 0 === s ? await a.delete(n) : await a.put(s, n), await r.done, !s || i && i.fid === s.fid || R(e, s.fid), s + } + async function Z(e) { + let t; + const n = await K(e.appConfig, (n => { + const r = function(e) { + return J(e || { + fid: j(), + registrationStatus: 0 + }) + }(n), + a = function(e, t) { + if (0 === t.registrationStatus) { + if (!navigator.onLine) return { + installationEntry: t, + registrationPromise: Promise.reject(A.create("app-offline")) + }; + const n = { + fid: t.fid, + registrationStatus: 1, + registrationTime: Date.now() + }, + r = async function(e, t) { + try { + const n = await async function({ + appConfig: e, + heartbeatServiceProvider: t + }, { + fid: n + }) { + const r = L(e), + a = O(e), + i = t.getImmediate({ + optional: !0 + }); + if (i) { + const e = await i.getHeartbeatsHeader(); + e && a.append("x-firebase-client", e) + } + const s = { + fid: n, + authVersion: "FIS_v2", + appId: e.appId, + sdkVersion: _ + }, + o = { + method: "POST", + headers: a, + body: JSON.stringify(s) + }, + c = await M((() => fetch(r, o))); + if (c.ok) { + const e = await c.json(); + return { + fid: e.fid || n, + registrationStatus: 2, + refreshToken: e.refreshToken, + authToken: B(e.authToken) + } + } + throw await k("Create Installation", c) + }(e, t); + return q(e.appConfig, n) + } catch (n) { + throw T(n) && 409 === n.customData.serverCode ? await W(e.appConfig) : await q(e.appConfig, { + fid: t.fid, + registrationStatus: 0 + }), n + } + }(e, n); + return { + installationEntry: n, + registrationPromise: r + } + } + return 1 === t.registrationStatus ? { + installationEntry: t, + registrationPromise: G(e) + } : { + installationEntry: t + } + }(e, r); + return t = a.registrationPromise, a.installationEntry + })); + return "" === n.fid ? { + installationEntry: await t + } : { + installationEntry: n, + registrationPromise: t + } + } + async function G(e) { + let t = await X(e.appConfig); + for (; 1 === t.registrationStatus;) await N(100), t = await X(e.appConfig); + if (0 === t.registrationStatus) { + const { + installationEntry: t, + registrationPromise: n + } = await Z(e); + return n || t + } + return t + } + + function X(e) { + return K(e, (e => { + if (!e) throw A.create("installation-not-found"); + return J(e) + })) + } + + function J(e) { + return 1 === (t = e).registrationStatus && t.registrationTime + 1e4 < Date.now() ? { + fid: e.fid, + registrationStatus: 0 + } : e; + var t + } + async function Y({ + appConfig: e, + heartbeatServiceProvider: t + }, n) { + const r = function(e, { + fid: t + }) { + return `${L(e)}/${t}/authTokens:generate` + }(e, n), + a = function(e, { + refreshToken: t + }) { + const n = O(e); + return n.append("Authorization", function(e) { + return `FIS_v2 ${e}` + }(t)), n + }(e, n), + i = t.getImmediate({ + optional: !0 + }); + if (i) { + const e = await i.getHeartbeatsHeader(); + e && a.append("x-firebase-client", e) + } + const s = { + installation: { + sdkVersion: _, + appId: e.appId + } + }, + o = { + method: "POST", + headers: a, + body: JSON.stringify(s) + }, + c = await M((() => fetch(r, o))); + if (c.ok) return B(await c.json()); + throw await k("Generate Auth Token", c) + } + async function Q(e, t = !1) { + let n; + const r = await K(e.appConfig, (r => { + if (!te(r)) throw A.create("not-registered"); + const a = r.authToken; + if (!t && (2 === (i = a).requestStatus && ! function(e) { + const t = Date.now(); + return t < e.creationTime || e.creationTime + e.expiresIn < t + 36e5 + }(i))) return r; + var i; + if (1 === a.requestStatus) return n = async function(e, t) { + let n = await ee(e.appConfig); + for (; 1 === n.authToken.requestStatus;) await N(100), n = await ee(e.appConfig); + const r = n.authToken; + return 0 === r.requestStatus ? Q(e, t) : r + }(e, t), r; + { + if (!navigator.onLine) throw A.create("app-offline"); + const t = function(e) { + const t = { + requestStatus: 1, + requestTime: Date.now() + }; + return Object.assign(Object.assign({}, e), { + authToken: t + }) + }(r); + return n = async function(e, t) { + try { + const n = await Y(e, t), + r = Object.assign(Object.assign({}, t), { + authToken: n + }); + return await q(e.appConfig, r), n + } catch (n) { + if (!T(n) || 401 !== n.customData.serverCode && 404 !== n.customData.serverCode) { + const n = Object.assign(Object.assign({}, t), { + authToken: { + requestStatus: 0 + } + }); + await q(e.appConfig, n) + } else await W(e.appConfig); + throw n + } + }(e, t), t + } + })); + return n ? await n : r.authToken + } + + function ee(e) { + return K(e, (e => { + if (!te(e)) throw A.create("not-registered"); + return 1 === (t = e.authToken).requestStatus && t.requestTime + 1e4 < Date.now() ? Object.assign(Object.assign({}, e), { + authToken: { + requestStatus: 0 + } + }) : e; + var t + })) + } + + function te(e) { + return void 0 !== e && 2 === e.registrationStatus + } + + function ne(e) { + return A.create("missing-app-config-values", { + valueName: e + }) + } + const re = "installations"; + (0, r.Xd)(new s.wA(re, (e => { + const t = e.getProvider("app").getImmediate(), + n = function(e) { + if (!e || !e.options) throw ne("App Configuration"); + if (!e.name) throw ne("App Name"); + const t = ["projectId", "apiKey", "appId"]; + for (const n of t) + if (!e.options[n]) throw ne(n); + return { + appName: e.name, + projectId: e.options.projectId, + apiKey: e.options.apiKey, + appId: e.options.appId + } + }(t); + return { + app: t, + appConfig: n, + heartbeatServiceProvider: (0, r.qX)(t, "heartbeat"), + _delete: () => Promise.resolve() + } + }), "PUBLIC")), (0, r.Xd)(new s.wA("installations-internal", (e => { + const t = e.getProvider("app").getImmediate(), + n = (0, r.qX)(t, re).getImmediate(); + return { + getId: () => async function(e) { + const t = e, + { + installationEntry: n, + registrationPromise: r + } = await Z(t); + return r ? r.catch(D.error) : Q(t).catch(D.error), n.fid + }(n), + getToken: e => async function(e, t = !1) { + const n = e; + return await async function(e) { + const { + registrationPromise: t + } = await Z(e); + t && await t + }(n), (await Q(n, t)).token + }(n, e) + } + }), "PRIVATE")), (0, r.KN)(S, C), (0, r.KN)(S, C, "esm2017"); + const ae = "analytics", + ie = "https://www.googletagmanager.com/gtag/js", + se = new a.Yd("@firebase/analytics"), + oe = new i.LL("analytics", "Analytics", { + "already-exists": "A Firebase Analytics instance with the appId {$id} already exists. Only one Firebase Analytics instance can be created for each appId.", + "already-initialized": "initializeAnalytics() cannot be called again with different options than those it was initially called with. It can be called again with the same options to return the existing instance, or getAnalytics() can be used to get a reference to the already-intialized instance.", + "already-initialized-settings": "Firebase Analytics has already been initialized.settings() must be called before initializing any Analytics instanceor it will have no effect.", + "interop-component-reg-failed": "Firebase Analytics Interop Component failed to instantiate: {$reason}", + "invalid-analytics-context": "Firebase Analytics is not supported in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}", + "indexeddb-unavailable": "IndexedDB unavailable or restricted in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}", + "fetch-throttle": "The config fetch request timed out while in an exponential backoff state. Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.", + "config-fetch-failed": "Dynamic config fetch failed: [{$httpStatus}] {$responseMessage}", + "no-api-key": 'The "apiKey" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid API key.', + "no-app-id": 'The "appId" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid app ID.', + "no-client-id": 'The "client_id" field is empty.', + "invalid-gtag-resource": "Trusted Types detected an invalid gtag resource: {$gtagURL}." + }); + + function ce(e) { + if (!e.startsWith(ie)) { + const t = oe.create("invalid-gtag-resource", { + gtagURL: e + }); + return se.warn(t.message), "" + } + return e + } + + function le(e) { + return Promise.all(e.map((e => e.catch((e => e))))) + } + const de = new class { + constructor(e = {}, t = 1e3) { + this.throttleMetadata = e, this.intervalMillis = t + } + getThrottleMetadata(e) { + return this.throttleMetadata[e] + } + setThrottleMetadata(e, t) { + this.throttleMetadata[e] = t + } + deleteThrottleMetadata(e) { + delete this.throttleMetadata[e] + } + }; + + function ue(e) { + return new Headers({ + Accept: "application/json", + "x-goog-api-key": e + }) + } + async function he(e, t = de, n) { + const { + appId: r, + apiKey: a, + measurementId: i + } = e.options; + if (!r) throw oe.create("no-app-id"); + if (!a) { + if (i) return { + measurementId: i, + appId: r + }; + throw oe.create("no-api-key") + } + const s = t.getThrottleMetadata(r) || { + backoffCount: 0, + throttleEndTimeMillis: Date.now() + }, + o = new pe; + return setTimeout((async () => { + o.abort() + }), void 0 !== n ? n : 6e4), fe({ + appId: r, + apiKey: a, + measurementId: i + }, s, o, t) + } + async function fe(e, { + throttleEndTimeMillis: t, + backoffCount: n + }, r, a = de) { + var s; + const { + appId: o, + measurementId: c + } = e; + try { + await + function(e, t) { + return new Promise(((n, r) => { + const a = Math.max(t - Date.now(), 0), + i = setTimeout(n, a); + e.addEventListener((() => { + clearTimeout(i), r(oe.create("fetch-throttle", { + throttleEndTimeMillis: t + })) + })) + })) + }(r, t) + } catch (e) { + if (c) return se.warn(`Timed out fetching this Firebase app's measurement ID from the server. Falling back to the measurement ID ${c} provided in the "measurementId" field in the local Firebase config. [${null==e?void 0:e.message}]`), { + appId: o, + measurementId: c + }; + throw e + } + try { + const t = await async function(e) { + var t; + const { + appId: n, + apiKey: r + } = e, a = { + method: "GET", + headers: ue(r) + }, i = "https://firebase.googleapis.com/v1alpha/projects/-/apps/{app-id}/webConfig".replace("{app-id}", n), s = await fetch(i, a); + if (200 !== s.status && 304 !== s.status) { + let e = ""; + try { + const n = await s.json(); + (null === (t = n.error) || void 0 === t ? void 0 : t.message) && (e = n.error.message) + } catch (e) {} + throw oe.create("config-fetch-failed", { + httpStatus: s.status, + responseMessage: e + }) + } + return s.json() + }(e); + return a.deleteThrottleMetadata(o), t + } catch (t) { + const l = t; + if (! function(e) { + if (!(e instanceof i.ZR && e.customData)) return !1; + const t = Number(e.customData.httpStatus); + return 429 === t || 500 === t || 503 === t || 504 === t + }(l)) { + if (a.deleteThrottleMetadata(o), c) return se.warn(`Failed to fetch this Firebase app's measurement ID from the server. Falling back to the measurement ID ${c} provided in the "measurementId" field in the local Firebase config. [${null==l?void 0:l.message}]`), { + appId: o, + measurementId: c + }; + throw t + } + const d = 503 === Number(null === (s = null == l ? void 0 : l.customData) || void 0 === s ? void 0 : s.httpStatus) ? (0, i.$s)(n, a.intervalMillis, 30) : (0, i.$s)(n, a.intervalMillis), + u = { + throttleEndTimeMillis: Date.now() + d, + backoffCount: n + 1 + }; + return a.setThrottleMetadata(o, u), se.debug(`Calling attemptFetch again in ${d} millis`), fe(e, u, r, a) + } + } + class pe { + constructor() { + this.listeners = [] + } + addEventListener(e) { + this.listeners.push(e) + } + abort() { + this.listeners.forEach((e => e())) + } + } + let ge, me; + async function be(e, t, n, r, a, s, o) { + var c; + const l = he(e); + l.then((t => { + n[t.measurementId] = t.appId, e.options.measurementId && t.measurementId !== e.options.measurementId && se.warn(`The measurement ID in the local Firebase config (${e.options.measurementId}) does not match the measurement ID fetched from the server (${t.measurementId}). To ensure analytics events are always sent to the correct Analytics property, update the measurement ID field in the local config or remove it from the local config.`) + })).catch((e => se.error(e))), t.push(l); + const d = async function() { + if (!(0, i.hl)()) return se.warn(oe.create("indexeddb-unavailable", { + errorInfo: "IndexedDB is not available in this environment." + }).message), !1; + try { + await (0, i.eu)() + } catch (e) { + return se.warn(oe.create("indexeddb-unavailable", { + errorInfo: null == e ? void 0 : e.toString() + }).message), !1 + } + return !0 + }().then((e => e ? r.getId() : void 0)), [u, h] = await Promise.all([l, d]); + (function(e) { + const t = window.document.getElementsByTagName("script"); + for (const n of Object.values(t)) + if (n.src && n.src.includes(ie) && n.src.includes(e)) return n; + return null + })(s) || function(e, t) { + const n = function(e, t) { + let n; + return window.trustedTypes && (n = window.trustedTypes.createPolicy("firebase-js-sdk-policy", t)), n + }(0, { + createScriptURL: ce + }), + r = document.createElement("script"), + a = `${ie}?l=${e}&id=${t}`; + r.src = n ? null == n ? void 0 : n.createScriptURL(a) : a, r.async = !0, document.head.appendChild(r) + }(s, u.measurementId), me && (a("consent", "default", me), me = void 0), a("js", new Date); + const f = null !== (c = null == o ? void 0 : o.config) && void 0 !== c ? c : {}; + return f.origin = "firebase", f.update = !0, null != h && (f.firebase_id = h), a("config", u.measurementId, f), ge && (a("set", ge), ge = void 0), u.measurementId + } + class we { + constructor(e) { + this.app = e + } + _delete() { + return delete ve[this.app.options.appId], Promise.resolve() + } + } + let ve = {}, + ye = []; + const Ie = {}; + let Ee, De, Se = "dataLayer", + Ce = !1; + + function _e(e, t, n) { + ! function() { + const e = []; + if ((0, i.ru)() && e.push("This is a browser extension environment."), (0, i.zI)() || e.push("Cookies are not available."), e.length > 0) { + const t = e.map(((e, t) => `(${t+1}) ${e}`)).join(" "), + n = oe.create("invalid-analytics-context", { + errorInfo: t + }); + se.warn(n.message) + } + }(); + const r = e.options.appId; + if (!r) throw oe.create("no-app-id"); + if (!e.options.apiKey) { + if (!e.options.measurementId) throw oe.create("no-api-key"); + se.warn(`The "apiKey" field is empty in the local Firebase config. This is needed to fetch the latest measurement ID for this Firebase app. Falling back to the measurement ID ${e.options.measurementId} provided in the "measurementId" field in the local Firebase config.`) + } + if (null != ve[r]) throw oe.create("already-exists", { + id: r + }); + if (!Ce) { + ! function(e) { + let t = []; + Array.isArray(window.dataLayer) ? t = window.dataLayer : window.dataLayer = t + }(); + const { + wrappedGtag: e, + gtagCore: t + } = function(e, t, n, r, a) { + let i = function(...e) { + window.dataLayer.push(arguments) + }; + return window.gtag && "function" == typeof window.gtag && (i = window.gtag), window.gtag = function(e, t, n, r) { + return async function(a, ...i) { + try { + if ("event" === a) { + const [r, a] = i; + await async function(e, t, n, r, a) { + try { + let i = []; + if (a && a.send_to) { + let e = a.send_to; + Array.isArray(e) || (e = [e]); + const r = await le(n); + for (const n of e) { + const e = r.find((e => e.measurementId === n)), + a = e && t[e.appId]; + if (!a) { + i = []; + break + } + i.push(a) + } + } + 0 === i.length && (i = Object.values(t)), await Promise.all(i), e("event", r, a || {}) + } catch (e) { + se.error(e) + } + }(e, t, n, r, a) + } else if ("config" === a) { + const [a, s] = i; + await async function(e, t, n, r, a, i) { + const s = r[a]; + try { + if (s) await t[s]; + else { + const e = (await le(n)).find((e => e.measurementId === a)); + e && await t[e.appId] + } + } catch (e) { + se.error(e) + } + e("config", a, i) + }(e, t, n, r, a, s) + } else if ("consent" === a) { + const [t] = i; + e("consent", "update", t) + } else if ("get" === a) { + const [t, n, r] = i; + e("get", t, n, r) + } else if ("set" === a) { + const [t] = i; + e("set", t) + } else e(a, ...i) + } catch (e) { + se.error(e) + } + } + }(i, e, t, n), { + gtagCore: i, + wrappedGtag: window.gtag + } + }(ve, ye, Ie); + De = e, Ee = t, Ce = !0 + } + return ve[r] = be(e, ye, Ie, t, Ee, Se, n), new we(e) + } + + function Ae(e = (0, r.Mq)()) { + e = (0, i.m9)(e); + const t = (0, r.qX)(e, ae); + return t.isInitialized() ? t.getImmediate() : function(e, t = {}) { + const n = (0, r.qX)(e, ae); + if (n.isInitialized()) { + const e = n.getImmediate(); + if ((0, i.vZ)(t, n.getOptions())) return e; + throw oe.create("already-initialized") + } + return n.initialize({ + options: t + }) + }(e) + } + + function Te(e, t, n, r) { + e = (0, i.m9)(e), async function(e, t, n, r, a) { + if (a && a.global) e("event", n, r); + else { + const a = await t; + e("event", n, Object.assign(Object.assign({}, r), { + send_to: a + })) + } + }(De, ve[e.app.options.appId], t, n, r).catch((e => se.error(e))) + } + const Le = "@firebase/analytics", + Be = "0.10.0"; + (0, r.Xd)(new s.wA(ae, ((e, { + options: t + }) => _e(e.getProvider("app").getImmediate(), e.getProvider("installations-internal").getImmediate(), t)), "PUBLIC")), (0, r.Xd)(new s.wA("analytics-internal", (function(e) { + try { + const t = e.getProvider(ae).getImmediate(); + return { + logEvent: (e, n, r) => Te(t, e, n, r) + } + } catch (e) { + throw oe.create("interop-component-reg-failed", { + reason: e + }) + } + }), "PRIVATE")), (0, r.KN)(Le, Be), (0, r.KN)(Le, Be, "esm2017") + }, + 83977: (e, t, n) => { + n.d(t, { + ZF: () => r.ZF + }); + var r = n(10389); + (0, r.KN)("firebase", "10.6.0", "app") + } + } +]); \ No newline at end of file diff --git a/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js.LICENSE.txt b/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js.LICENSE.txt new file mode 100644 index 0000000..a166268 --- /dev/null +++ b/mp-core/5972.3a4ce7cbebe3ef574f60.bundle.js.LICENSE.txt @@ -0,0 +1,84 @@ +/** + * @license + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @license + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @license + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ diff --git a/mp-core/6282.79a261084de7bc1b171a.bundle.js b/mp-core/6282.79a261084de7bc1b171a.bundle.js new file mode 100644 index 0000000..a364bc4 --- /dev/null +++ b/mp-core/6282.79a261084de7bc1b171a.bundle.js @@ -0,0 +1,498 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [6282], { + 6147: (e, t, i) => { + i.d(t, { + Z: () => r + }); + var n = i(4028); + class r { + get settings() { + return [{ + type: "checkbox", + id: "hidden", + name: "Hidden", + help: "If enabled, the object will not be visible." + }] + } + static showBoundingBoxes = !1; + static wireframeMode = !1; + _lastEntityWireframe = void 0; + container = new THREE.Object3D; + object = null; + entity = {}; + hideLock = new n.Z; + hasLoaded = !1; + wireframeState = {}; + async onLoad() {} + afterLoad() { + if (!this.object?.isObject3D) throw new Error("The renderer must create an Object3D instance when subclassing Object3DRenderer."); + this.container.entityRenderer = this, this.container.add(this.object), metapress.renderer.scene.add(this.container), this.applyTransforms(), this._lastUrl = this.entity.url, this._lastEntityWireframe = this.entity.wireframe + } + onUnload() {} + afterUnload() { + this.container?.removeFromParent(), this.container = null, this.applyParent() + } + onEntityUpdated() { + this._lastUrl != this.entity.url && metapress.entities.reload(this.entity.id); + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + this.entity.wireframe != this._lastEntityWireframe && (this._lastEntityWireframe = this.entity.wireframe, this.container.traverse((e => { + e.isMesh && e.material && (e.material.wireframe = this.entity.wireframe ?? !1, this.wireframeState[e.uuid] = e.material.wireframe) + }))), this.onRender() + } + onRender() { + this._lastTransformUpdate != this.entity.lastModified && (this._lastTransformUpdate = this.entity.lastModified, this.applyTransforms()), this.applyHideLock(), this.applyBoundingBox(), this.applyWireframe() + } + applyTransforms() { + this.object && (this.entity.x = parseFloat(this.entity.x) || 0, this.entity.y = parseFloat(this.entity.y) || 0, this.entity.z = parseFloat(this.entity.z) || 0, this.entity.scaleX = parseFloat(this.entity.scaleX) || 1, this.entity.scaleY = parseFloat(this.entity.scaleY) || 1, this.entity.scaleZ = parseFloat(this.entity.scaleZ) || 1, this.entity.quatX = parseFloat(this.entity.quatX) || 0, this.entity.quatY = parseFloat(this.entity.quatY) || 0, this.entity.quatZ = parseFloat(this.entity.quatZ) || 0, this.entity.quatW = parseFloat(this.entity.quatW) || 0, this.entity.extra_offset_x = parseFloat(this.entity.extra_offset_x) || 0, this.entity.extra_offset_y = parseFloat(this.entity.extra_offset_y) || 0, this.entity.extra_offset_z = parseFloat(this.entity.extra_offset_z) || 0, this.entity.extra_scale_x = parseFloat(this.entity.extra_scale_x) || 1, this.entity.extra_scale_y = parseFloat(this.entity.extra_scale_y) || 1, this.entity.extra_scale_z = parseFloat(this.entity.extra_scale_z) || 1, this.entity.extra_rotation_x = parseFloat(this.entity.extra_rotation_x) || 0, this.entity.extra_rotation_y = parseFloat(this.entity.extra_rotation_y) || 0, this.entity.extra_rotation_z = parseFloat(this.entity.extra_rotation_z) || 0, this.container.position.set(this.entity.x, this.entity.y, this.entity.z), this.container.scale.set(this.entity.scaleX, this.entity.scaleY, this.entity.scaleZ), this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW ? this.container.quaternion.set(this.entity.quatX, this.entity.quatY, this.entity.quatZ, this.entity.quatW) : this.container.quaternion.set(0, 0, 0, 1), this.object.position.set(this.entity.extra_offset_x, this.entity.extra_offset_y, this.entity.extra_offset_z), this.object.scale.set(this.entity.extra_scale_x, this.entity.extra_scale_y, this.entity.extra_scale_z), this.object.rotation.set(this.entity.extra_rotation_x, this.entity.extra_rotation_y, this.entity.extra_rotation_z)) + } + applyHideLock() { + let e = !this.entity.hidden && !this.hideLock.isAcquired; + this.container.visible && !e ? this.container.visible = !1 : !this.container.visible && e && (this.container.visible = !0) + } + applyBoundingBox() { + this.boundingBoxHelper?.update(); + let e = r.showBoundingBoxes && this.container.visible; + !e && this.boundingBoxHelper ? (this.boundingBoxHelper.removeFromParent(), this.boundingBoxHelper.dispose(), this.boundingBoxHelper = null) : e && !this.boundingBoxHelper && (this.boundingBoxHelper = new THREE.BoxHelper(this.container, 16777215), metapress.renderer.scene.add(this.boundingBoxHelper)) + } + applyWireframe() { + this._lastWireframeMode != r.wireframeMode && (this._lastWireframeMode = r.wireframeMode, this.container.traverse((e => { + e.isMesh && e.material && (this.hasLoaded || (this.wireframeState[e.uuid] = !!e.material.wireframe), e.material.wireframe = !!r.wireframeMode || (this.wireframeState[e.uuid] ?? !1)) + })), this.hasLoaded = !0) + } + applyParent(e) { + if (!e && !this.parentHideLock && void 0 !== this._lastParent && this._lastParent != this.entity.parent) return; + if (this._lastParent = this.entity.parent || "", !e) + for (let e of metapress.entities.renderers) e != this && e.container?.isObject3D && e.applyParent && e.applyParent(!0); + if (!this.entity.parent) return this.parentHideLock?.(), this.parentHideLock = null, void(this.container && this.container.parent != metapress.renderer.scene && (this.container.removeFromParent(), metapress.renderer.scene.add(this.container))); + let t = metapress.entities.getRenderer(this.entity.parent); + t?.object?.isObject3D ? (this.parentHideLock?.(), this.parentHideLock = null, this.container.parent != t.container && (this.container.removeFromParent(), t.container.add(this.container))) : this.parentHideLock || (this.parentHideLock = this.hideLock.acquire()) + } + } + }, + 16282: (e, t, i) => { + i.r(t), i.d(t, { + default: () => c + }); + var n = i(99477), + r = i(6147), + s = i(25108); + class a extends r.Z { + get settings() { + let e = [], + t = metapress.plugins.callAll("getRegionPresets").flat().filter((e => !!e.id)).sort(((e, t) => e.priority != t.priority ? (t.priority || 0) - (e.priority || 0) : (e.name || e.id).localeCompare(t.name || t.id))); + return t.unshift({ + id: "", + name: "(none)" + }), e.push({ + id: "region_preset", + name: "Preset", + type: "select", + help: "Select a preset environment type.", + values: t.map((e => e.id)), + labels: t.map((e => e.name || e.id)) + }), e + } + async onLoad() { + let e = new n.BoxGeometry(1, 1, 1), + t = new n.MeshBasicMaterial; + this.object = new n.Mesh(e, t), this.object.visible = !1, this._lastPreset = this.entity.region_preset, a._checkTimer || (a._checkTimer = setInterval((() => a.checkAll()), 1e3)), this.entity.region_preset && this.setPreset(this.entity.region_preset) + } + afterLoad() { + super.afterLoad(), this.object.updateMatrixWorld(!0) + } + onEntityEdited() { + if (this._lastPreset != this.entity.region_preset) { + this._lastPreset = this.entity.region_preset; + try { + this.setPreset(this.entity.region_preset) + } catch (e) { + s.warn(`[MetaPress > Region] Unable to set preset to '${this.entity.region_preset}' : ${e.message}`) + } + } + } + setPreset(e) { + if (!e) return; + let t = metapress.plugins.callAll("getRegionPresets").flat().find((t => t.id == e)); + if (!t) throw new Error("Preset not found."); + if (!t.fields) throw new Error("Missing 'fields' on preset."); + for (let e in t.fields) "id" != e && "name" != e && "type" != e && "comment" != e && (this.entity[e] = t.fields[e]); + this.entity.lastModified = Date.now() + } + static activeRegions() { + let e = [], + t = metapress.renderer.camera.position; + for (let i of metapress.entities.renderers) "region" == i.entity.type && i.object?.geometry && (this._box3a || (this._box3a = new n.Box3), this._m4a || (this._m4a = new n.Matrix4), i.object.geometry.boundingBox || i.object.geometry.computeBoundingBox(), i.container.updateMatrixWorld(!0), this._box3a.copy(i.object.geometry.boundingBox).applyMatrix4(i.container.matrixWorld), this._box3a.containsPoint(t) && e.push(i)); + return e.sort(((e, t) => (this._v3a || (this._v3a = new n.Vector3), e.object.geometry.boundingBox.getSize(this._v3a).length() - t.object.geometry.boundingBox.getSize(this._v3a).length()))), e + } + static checkAll() { + let e = a.activeRegions(); + for (let t of metapress.entities.renderers) { + if ("region" != t.entity.type) continue; + if (!t.object?.geometry) continue; + let i = e.includes(t); + i && !t._regionWasActive ? (t._regionWasActive = i, t.onRegionActivate?.()) : !i && t._regionWasActive && (t._regionWasActive = i, t.onRegionDeactivate?.()); + let n = e[0] == t; + n && !t._regionWasPrimary ? (t._regionWasPrimary = n, t.onRegionBecamePrimary?.()) : !n && t._regionWasPrimary && (t._regionWasPrimary = n, t.onRegionLostPrimary?.()) + } + for (let t of metapress.entities.modifiers) { + if ("region" != t.entity.type) continue; + if (!t.renderer?.object?.geometry) continue; + let i = e.includes(t.renderer); + i && !t._regionWasActive ? (t._regionWasActive = i, t.onRegionActivate?.()) : !i && t._regionWasActive && (t._regionWasActive = i, t.onRegionDeactivate?.()); + let n = a.isPrimaryModifier(e, t.entity.id, t.id); + n && !t._regionWasPrimary ? (t._regionWasPrimary = n, t.onRegionModifierBecamePrimary?.()) : !n && t._regionWasPrimary && (t._regionWasPrimary = n, t.onRegionModifierLostPrimary?.()) + } + } + static isPrimaryModifier(e, t, i) { + for (let n of e) + if (n.entity["modifier:" + i]) return n.entity.id == t; + return !1 + } + } + var o = i(91259); + class p { + name = "Skybox"; + hidden = !0; + exrLoader = null; + get settings() { + if (this.entity.skybox_settings_hidden) return []; + let e = []; + return e.push({ + id: "skybox_type", + type: "select", + name: "Type", + values: ["cubemap", "equirectangular"], + labels: ["Cube Map", "Equirectangular"] + }), "cubemap" == this.entity.skybox_type ? e = e.concat([{ + id: "skybox_nx", + name: "-X", + type: "file" + }, { + id: "skybox_px", + name: "+X", + type: "file" + }, { + id: "skybox_ny", + name: "-Y", + type: "file" + }, { + id: "skybox_py", + name: "+Y", + type: "file" + }, { + id: "skybox_nz", + name: "-Z", + type: "file" + }, { + id: "skybox_pz", + name: "+Z", + type: "file" + }]) : "equirectangular" == this.entity.skybox_type ? e = e.concat([{ + id: "skybox_equirectangular", + name: "Image", + type: "file" + }]) : "skybox_exr" == this.entity.skybox_type && (e = e.concat([{ + id: "skybox_exr_file", + name: "exr", + type: "file" + }])), e.push({ + type: "header", + name: "Environment Map" + }), e.push({ + id: "envmap_copy_skybox", + type: "checkbox", + name: "Copy skybox" + }), this.entity.envmap_copy_skybox || e.push({ + id: "envmap_type", + type: "select", + name: "Type", + values: ["", "cubemap", "equirectangular"], + labels: ["Default", "Cube Map", "Equirectangular"] + }), this.entity.envmap_copy_skybox || !this.entity.envmap_type || ("cubemap" == this.entity.envmap_type ? e = e.concat([{ + id: "envmap_nx", + name: "Environment -X", + type: "file" + }, { + id: "envmap_px", + name: "Environment +X", + type: "file" + }, { + id: "envmap_ny", + name: "Environment -Y", + type: "file" + }, { + id: "envmap_py", + name: "Environment +Y", + type: "file" + }, { + id: "envmap_nz", + name: "Environment -Z", + type: "file" + }, { + id: "envmap_pz", + name: "Environment +Z", + type: "file" + }]) : "equirectangular" == this.entity.envmap_type && (e = e.concat([{ + id: "envmap_equirectangular", + name: "Image", + type: "file" + }]))), e + } + onRegionModifierBecamePrimary() { + this.isPrimarySkybox = !0, this._fieldCache = null, this.updateEnvironment() + } + onRegionModifierLostPrimary() { + this.isPrimarySkybox = !1, this._fieldCache = null + } + onEntityEdited() { + this.isPrimarySkybox && this.updateEnvironment() + } + hasPropertiesChanged() { + const e = ["skybox_nx", "skybox_px", "skybox_ny", "skybox_py", "skybox_nz", "skybox_pz", "skybox_type", "skybox_equirectangular", "envmap_nx", "envmap_px", "envmap_ny", "envmap_py", "envmap_nz", "envmap_pz", "envmap_copy_skybox", "envmap_type", "envmap_equirectangular"]; + this._fieldCache || (this._fieldCache = {}); + let t = !1; + for (let i of e) this._fieldCache[i] != this.entity[i] && (t = !0, this._fieldCache[i] = this.entity[i]); + return t + } + async updateEnvironment() { + if (!this.hasPropertiesChanged()) return; + let e = ((t = metapress.renderer.glrenderer)._pmremGenerator || (t._pmremGenerator = new n.PMREMGenerator(t), t._pmremGenerator.compileCubemapShader(), t._pmremGenerator.compileEquirectangularShader()), t._pmremGenerator); + var t; + "cubemap" == this.entity.skybox_type ? metapress.renderer.scene.background = (new n.CubeTextureLoader).load([this.entity.skybox_px, this.entity.skybox_nx, this.entity.skybox_py, this.entity.skybox_ny, this.entity.skybox_pz, this.entity.skybox_nz], (e => { + metapress.renderer.scene.background = e + })) : "equirectangular" == this.entity.skybox_type && "exr" == this.entity.skybox_equirectangular?.split("?")[0].split(".").pop() ? (metapress.renderer.scene.background = (new o.I).load(this.entity.skybox_equirectangular), metapress.renderer.scene.background.mapping = n.EquirectangularReflectionMapping, metapress.renderer.scene.background.encoding = n.LinearSRGBColorSpace) : (metapress.renderer.scene.background = (new n.TextureLoader).load(this.entity.skybox_equirectangular), metapress.renderer.scene.background.mapping = n.EquirectangularReflectionMapping); + let r = this.entity.envmap_type, + s = this.entity.envmap_px, + a = this.entity.envmap_nx, + p = this.entity.envmap_py, + y = this.entity.envmap_ny, + c = this.entity.envmap_pz, + h = this.entity.envmap_nz, + l = this.entity.envmap_equirectangular || ""; + if (this.entity.envmap_copy_skybox && (r = this.entity.skybox_type, s = this.entity.skybox_px, a = this.entity.skybox_nx, p = this.entity.skybox_py, y = this.entity.skybox_ny, c = this.entity.skybox_pz, h = this.entity.skybox_nz, l = this.entity.skybox_equirectangular || ""), r) + if ("cubemap" == r) { + let t = await new Promise(((e, t) => (new n.CubeTextureLoader).load([s, a, p, y, c, h], e, null, t))); + metapress.renderer.scene.environment = e.fromCubemap(t).texture + } else if ("equirectangular" == r && "exr" == l.split("?")[0].split(".").pop()) { + let t = await new Promise(((e, t) => (new o.I).load(l, e, null, t))); + t.mapping = n.EquirectangularReflectionMapping, t.encoding = n.LinearSRGBColorSpace, metapress.renderer.scene.environment = e.fromEquirectangular(t).texture + } else { + let t = await new Promise(((e, t) => (new n.TextureLoader).load(l, e, null, t))); + t.mapping = n.EquirectangularReflectionMapping, metapress.renderer.scene.environment = e.fromEquirectangular(t).texture + } else { + let t = await new Promise(((e, t) => (new n.CubeTextureLoader).load([i(52022), i(94493), i(57067), i(89701), i(42474), i(65964)], e, null, t))); + metapress.renderer.scene.environment = e.fromCubemap(t).texture + } + } + } + class y { + name = "Fog"; + hidden = !0; + get settings() { + let e = []; + return e.push({ + id: "fog_description", + type: "description", + name: "Adds fog to the environment." + }, { + id: "fog_enabler", + type: "checkbox", + name: "Enable Fog", + help: "When enabled, fog will be created for this environment." + }), this.entity.fog_enabler && (e = e.concat([{ + id: "fog_color", + type: "color", + name: "Color", + default: "#DEDEDE", + value: null != this.entity.fog_color ? this.entity.fog_color : "#FFFFFF", + help: "The color of the fog." + }, { + id: "fog_near", + type: "number", + name: "Minimum Distance", + placeholder: 10, + help: "The minimum distance, in metres, around the user at which of the fog appears." + }, { + id: "fog_far", + type: "number", + name: "Maximum Distance", + placeholder: 40, + help: "The maximum distance, in metres, at which the fog appears." + }])), e + } + applyFog = !0; + onRegionModifierBecamePrimary() { + this.isPrimary = !0, this.updateEnvironmentFog() + } + onRegionModifierLostPrimary() { + this.isPrimary = !1, metapress.renderer.scene.fog = null + } + onEntityEdited() { + this.entity.fog_enabler && this.fogDistanceValidity(), this.isPrimary && this.onRegionModifierBecamePrimary() + } + fogDistanceValidity() { + return this.entity.fog_far < 0 || this.entity.fog_near < 0 ? (metapress.menubar.toasts.show({ + id: "fog.settings", + text: "Fog distance values should be positive.", + duration: 3e3 + }), void(this.applyFog = !1)) : 0 != this.entity.fog_far || 0 != this.entity.fog_near ? this.entity.fog_near > this.entity.fog_far || this.entity.fog_far < this.entity.fog_near ? (metapress.menubar.toasts.show({ + id: "fog.settings", + text: "Invalid fog distance values! Minimum Fog Distance should be lower than Maximum Fog Distance.", + duration: 3e3 + }), void(this.applyFog = !1)) : void(this.applyFog = !0) : void(this.applyFog = !1) + } + updateEnvironmentFog() { + if (!this.entity.fog_enabler || !this.applyFog) return metapress.renderer.scene.fog = null; + const e = new n.Fog(new n.Color(this.entity.fog_color), this.entity.fog_near, this.entity.fog_far); + metapress.renderer.scene.fog = e + } + } + class c { + id = "core.render.regions"; + name = "Regions"; + description = "Manages regions."; + version = "1.0.0"; + provides = ["render:region", "modifier:skybox", "modifier:fog"]; + createRenderer(e) { + if ("region" == e) return new a + } + createModifier(e) { + return "skybox" == e ? new p : "fog" == e ? new y : void 0 + } + $getRegionPresets = () => [{ + id: "core.sunny", + name: "Sunny", + priority: 10, + fields: { + "modifier:skybox": !0, + "modifier:fog": !0, + skybox_settings_hidden: !0, + skybox_type: "cubemap", + skybox_nx: i(93663), + skybox_px: i(66910), + skybox_ny: i(5465), + skybox_py: i(58464), + skybox_nz: i(44424), + skybox_pz: i(48405), + envmap_copy_skybox: !1, + envmap_type: "" + } + }, { + id: "core.overcast", + name: "Overcast", + fields: { + "modifier:skybox": !0, + "modifier:fog": !0, + skybox_settings_hidden: !0, + skybox_type: "cubemap", + skybox_nx: i(93663), + skybox_px: i(66910), + skybox_ny: i(5465), + skybox_py: i(58464), + skybox_nz: i(44424), + skybox_pz: i(48405), + envmap_copy_skybox: !1, + envmap_type: "cubemap", + envmap_nx: i(74331), + envmap_px: i(60250), + envmap_ny: i(37960), + envmap_py: i(29826), + envmap_nz: i(11430), + envmap_pz: i(79882) + } + }, { + id: "core.custom", + name: "Custom", + priority: -10, + fields: { + "modifier:skybox": !0, + skybox_settings_hidden: !1, + "modifier:fog": !0 + } + }] + } + }, + 4028: (e, t, i) => { + i.d(t, { + Z: () => n + }); + class n { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let e = !1; + return () => { + e || (e = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + }, + 74331: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_nx.c305aab6164aba47e304.jpg" + }, + 37960: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_ny.dd15b7d3b718b31f74df.jpg" + }, + 11430: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_nz.1d729561e0dca050a308.jpg" + }, + 60250: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_px.0fa2662a0952f86d993a.jpg" + }, + 29826: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_py.5a10b1213adccf2e2f01.jpg" + }, + 79882: (e, t, i) => { + e.exports = i.p + "mp-core/overcastEnv_pz.bbe72b99f24a744acc85.jpg" + }, + 93663: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_nx.c54bd67d3a1f4cf7dd40.jpg" + }, + 5465: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_ny.f812cf466afd9b70f00b.jpg" + }, + 44424: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_nz.066f5b999c05ff9bc0d1.jpg" + }, + 66910: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_px.e66bb446bf515c768c9d.jpg" + }, + 58464: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_py.712cc34a8de3bcb502c5.jpg" + }, + 48405: (e, t, i) => { + e.exports = i.p + "mp-core/skybox3_pz.ae33242069c1dc3dad62.jpg" + }, + 94493: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_nx.6ae59103870ceb6357cd.jpg" + }, + 89701: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_ny.a3bf2702c2c6e68ac885.jpg" + }, + 65964: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_nz.fafae53c18ddc94757e6.jpg" + }, + 52022: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_px.3441181d436903d0b9c9.jpg" + }, + 57067: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_py.789e631b909ca15d3208.jpg" + }, + 42474: (e, t, i) => { + e.exports = i.p + "mp-core/sunnyEnv_pz.1ac6f091a04f1cd66d01.jpg" + } + } +]); \ No newline at end of file diff --git a/mp-core/6955.57f38995c76dd52b66e0.bundle.js b/mp-core/6955.57f38995c76dd52b66e0.bundle.js new file mode 100644 index 0000000..59e2714 --- /dev/null +++ b/mp-core/6955.57f38995c76dd52b66e0.bundle.js @@ -0,0 +1,121 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [6955], { + 26955: (t, e, i) => { + i.r(e), i.d(e, { + default: () => o + }); + var s = i(4162), + r = i(99477), + a = i(25108); + class o { + id = "core.render.camera"; + name = "Camera Controller"; + description = "Controls the 3D camera."; + version = "1.0.0"; + requires = ["renderer", "raycast", "input"]; + provides = ["camera"]; + priority = 100; + focusedEntity = null; + attachedEntity = null; + attachedPosition = new r.Vector3; + attachedEntityOffset = new r.Vector3; + screenOffset = new r.Vector2(.3, 0); + cameraCollision = !0; + get camera() { + return metapress.renderer.camera + } + zoom = 2; + minZoom = 1; + maxZoom = 5; + rotation = new r.Vector2; + wantsToBeBehind = !0; + cameraColliderFirstPerson = !1; + get isFirstPerson() { + return 0 == this.zoom || metapress.renderer.glrenderer.xr.isPresenting || 1 == this.cameraColliderFirstPerson + } + onLoad() { + this.raycaster = new r.Raycaster, this.tempVec1 = new r.Vector3, this.tempVec2 = new r.Vector3, this.camera.rotation.order = "YXZ", this.reticleDiv = document.createElement("div"), this.reticleDiv.style.cssText = `position: absolute; width: 8px; height: 8px; top: calc(50% - 4px); left: calc(50% - 4px); opacity: 0; transition: width 0.3s, height 0.3s, top 0.3s, left 0.3s, opacity 0.3s, background-color 0.3s; background-color: black; mask: url(${i(62994)}) center / contain no-repeat; -webkit-mask: url(${i(62994)}) center / contain no-repeat; pointer-events: none; `, metapress.contentDiv.appendChild(this.reticleDiv), this.hoveringTimer = setInterval((() => this.doHoveringCheck()), 250), this.colorTimer = setInterval((() => this.doReticleColorCheck()), 1e3) + } + get reticleActive() { + return this._reticleActive + } + set reticleActive(t) { + this._reticleActive !== t && (this._reticleActive = t, this.updateReticleStyle()) + } + get reticleLightMode() { + return this._reticleLightMode + } + set reticleLightMode(t) { + this._reticleLightMode !== t && (this._reticleLightMode = t, this.updateReticleStyle()) + } + get reticleVisible() { + return this._reticleVisible + } + set reticleVisible(t) { + this._reticleVisible !== t && (this._reticleVisible = t, this.updateReticleStyle()) + } + updateReticleStyle() { + this.reticleVisible ? (this.reticleActive ? this.reticleDiv.style.cssText += "width: 16px; height: 16px; top: calc(50% - 8px); left: calc(50% - 8px); opacity: 0.75; " : this.reticleDiv.style.cssText += "width: 8px; height: 8px; top: calc(50% - 4px); left: calc(50% - 4px); opacity: 0.25; ", this.reticleLightMode ? this.reticleDiv.style.cssText += "background-color: white; " : this.reticleDiv.style.cssText += "background-color: black; ") : this.reticleDiv.style.cssText += "width: 8px; height: 8px; top: calc(50% - 4px); left: calc(50% - 4px); opacity: 0; " + } + async doHoveringCheck() { + if (metapress.renderer.glrenderer.xr.isPresenting) return; + if (!document.pointerLockElement && !metapress.input.gamepad.isActive) return this.focusedEntity = null, this.focusedEntityHit = null, this.reticleActive = !1, void(this.reticleVisible = !1); + this.reticleVisible = !0; + let t = metapress.raycast.clickableAtScreenCoordinates(metapress.renderer.canvasRect.width / 2, metapress.renderer.canvasRect.height / 2, 10); + if (!t?.entityRenderer) return this.focusedEntity = null, this.focusedEntityHit = null, void(this.reticleActive = !1); + this.focusedEntity = t.entity, this.focusedEntityHit = t, this.reticleActive = !0 + } + async doReticleColorCheck() { + if (metapress.renderer.glrenderer.xr.isPresenting) return; + this._reticleImgBuffer || (this._reticleImgBuffer = new Uint8Array(4096)); + let t = this._reticleImgBuffer, + e = metapress.renderer.glrenderer.getContext(), + i = metapress.renderer.canvasRect.width / 2 - 16, + s = metapress.renderer.canvasRect.height / 2 - 16; + e.readPixels(i, s, 32, 32, e.RGBA, e.UNSIGNED_BYTE, t); + let r = 0; + for (let e = 0; e < t.length; e += 4) r += (t[e + 0] + t[e + 1] + t[e + 2]) / 3; + r /= 1024, this.reticleLightMode = r < 128 + } + $onRender() { + this.updateCamera() + } + axisX = new r.Vector3(1, 0, 0); + axisY = new r.Vector3(0, 1, 0); + axisZ = new r.Vector3(0, 0, 1); + quatA = new r.Quaternion; + v3a = new r.Vector3; + updateCamera() { + if (this.attachedEntityRenderer && this.attachedEntityRenderer.entity == this.attachedEntity || (this.attachedEntityRenderer = this.attachedEntity && metapress.entities.getRenderer(this.attachedEntity.id), this.avatarHideLockRelease?.(), this.avatarHideLockRelease = null, this.bodyphysicsModifier = null), this.attachedEntityRenderer && (this.attachedEntityRenderer.container?.updateMatrixWorld(), this.attachedEntityRenderer.container?.getWorldPosition(this.attachedPosition), this.attachedPosition.add(this.attachedEntityOffset)), this.zoom == this.minZoom && metapress.input.zoomSmoothed < 0 ? this.zoom = 0 : 0 == this.zoom && metapress.input.zoomSmoothed > 0 && (this.zoom = this.minZoom), !this.avatarHideLockRelease && this.isFirstPerson ? this.avatarHideLockRelease = this.attachedEntityRenderer?.hideLock?.acquire() : this.avatarHideLockRelease && !this.isFirstPerson && (this.avatarHideLockRelease?.(), this.avatarHideLockRelease = null), !metapress.renderer.glrenderer.xr.isPresenting) + if (this.wantsToBeBehind && this.attachedEntityRenderer, this.rotation.x = r.MathUtils.clamp(this.rotation.x + metapress.input.rotationSmoothed.y, -1.45, 1.45), this.rotation.y += metapress.input.rotationSmoothed.x, this.zoom > 0 && (this.zoom = r.MathUtils.clamp(this.zoom + metapress.input.zoomSmoothed, this.minZoom, this.maxZoom)), this.v3a.set(0, 0, this.zoom), this.v3a.applyAxisAngle(this.axisX, this.rotation.x), this.v3a.applyAxisAngle(this.axisY, this.rotation.y), this.v3a.add(this.attachedPosition), this.camera.position.copy(this.v3a), 0 == this.zoom) this.setCameraToFirstPerson(); + else if (this.v3a.set(this.screenOffset.x, this.screenOffset.y, 0), this.v3a.applyAxisAngle(this.axisX, this.rotation.x), this.v3a.applyAxisAngle(this.axisY, this.rotation.y), this.v3a.add(this.attachedPosition), this.camera.lookAt(this.v3a), this.cameraCollision && this.attachedEntityRenderer) { + this.desiredCameraDistance = this.camera.position.distanceTo(this.attachedPosition), this.tempVec1.subVectors(this.camera.position, this.attachedPosition).normalize(), this.raycasterRapier = new s.zH(this.attachedPosition, this.tempVec1), this.bodyphysicsModifier || (this.bodyphysicsModifier = metapress.entities.getModifier(metapress.avatar?.currentUserEntity.id, "physics")); + let t = metapress.physics?.world.castRayAndGetNormal(this.raycasterRapier, this.desiredCameraDistance, !1, null, null, null, this.bodyphysicsModifier?.body); + if (t && (this.tempVec2.copy(this.tempVec1).multiplyScalar(.9 * t.toi).add(this.attachedPosition), this.camera.position.copy(this.tempVec2), this.tempVec2.distanceTo(this.attachedPosition) < 1)) return this.cameraColliderFirstPerson = !0, void this.setCameraToFirstPerson(); + this.cameraColliderFirstPerson = !1 + } + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:setFirstPerson`, + type: "action", + name: "Set to first person", + content: `Run "${this.id}:setFirstPerson" to set the camera to first person mode. This will make the camera look straight forward from the user's perspective.`, + action: async () => { + try { + return this.zoom = 0, metapress.input.zoomSmoothed = -1, this.setCameraToFirstPerson(), "Success, camera set to first person mode" + } catch (t) { + return a.warn("[CameraController] Error:", t), "Failed to set camera to first person mode" + } + } + }]; + setCameraToFirstPerson() { + this.v3a.set(0, 0, -1), this.v3a.applyAxisAngle(this.axisX, this.rotation.x), this.v3a.applyAxisAngle(this.axisY, this.rotation.y), this.v3a.add(this.camera.position), this.camera.lookAt(this.v3a) + } + } + }, + 62994: (t, e, i) => { + t.exports = i.p + "mp-core/reticle.fbac6bded228452dead9.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/7109.ac3ba5f29adea1f80a5a.bundle.js b/mp-core/7109.ac3ba5f29adea1f80a5a.bundle.js new file mode 100644 index 0000000..a752ff5 --- /dev/null +++ b/mp-core/7109.ac3ba5f29adea1f80a5a.bundle.js @@ -0,0 +1,296 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [7109], { + 77109: (e, t, o) => { + o.r(t), o.d(t, { + default: () => d + }); + var i = o(99477); + class s { + id = "gamepad"; + manager = null; + movement = new THREE.Vector2; + movementVelocity = new THREE.Vector2; + rotation = new THREE.Vector2; + rotationVelocity = new THREE.Vector2; + zoom = 0; + zoomVelocity = 0; + actions = {}; + deadzone = .15; + isActive = !1; + constructor(e) { + this.manager = e + } + processInput() { + let e = navigator.getGamepads?.()?.[0]; + if (!e) return this.movementVelocity.set(0, 0), this.rotationVelocity.set(0, 0), this.zoomVelocity = 0, void(this.isActive = !1); + let t = e.axes[0], + o = e.axes[1], + i = e.axes[2], + s = e.axes[3], + n = e.buttons; + Math.abs(t) < this.deadzone && (t = 0), Math.abs(o) < this.deadzone && (o = 0), Math.abs(i) < this.deadzone && (i = 0), Math.abs(s) < this.deadzone && (s = 0), this.movementVelocity.set(t, -o), n[10]?.value > .5 ? (this.zoomVelocity = 2 * s, this.rotationVelocity.set(0, 0), this.movementVelocity.set(0, 0)) : (this.zoomVelocity = 0, this.rotationVelocity.set(2 * -i, 2 * -s), this.movementVelocity.set(t, -o)), this.isActive = !0, this.movementVelocity.length() > .95 ? this.manager.onActionPressed(this, "run") : this.manager.onActionReleased(this, "run"), n[3].value > .5 ? this.manager.onActionPressed(this, "jump") : this.manager.onActionReleased(this, "jump"); + let r = n[0].value > .5; + if (!this._actionButtonWasPressed && r && metapress.camera.focusedEntity) { + let e = metapress.raycast.atScreenCoordinates(metapress.renderer.canvasRect.width / 2, metapress.renderer.canvasRect.height / 2); + metapress.entities.getRenderer(metapress.camera.focusedEntity.id)?.onClick?.(e); + for (let t of metapress.entities.getModifiers(metapress.camera.focusedEntity.id)) t.onClick?.(e) + } + this._actionButtonWasPressed = r + } + } + class n { + id = "keyboard"; + manager = null; + activeKeys = {}; + movementVelocity = new THREE.Vector2; + rotation = new THREE.Vector2; + rotationVelocity = new THREE.Vector2; + zoom = 0; + zoomVelocity = 0; + actions = {}; + constructor(e) { + this.manager = e, window.addEventListener("keydown", this.onKeyDown.bind(this)), window.addEventListener("keyup", this.onKeyUp.bind(this)) + } + ignoredElements = ["INPUT", "TEXTAREA", "WEB-WEAVER-EMBED"]; + onKeyDown(e) { + metapress.isOpen && !this.ignoredElements.includes(document.activeElement?.tagName) ? (metapress.plugins.sendEvent("input_onUserInput", e), (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) && "KeyJ" == e.code || (e.preventDefault(), this.activeKeys[e.code] = !0, "ShiftLeft" != e.code && "ShiftRight" != e.code || this.manager.onActionPressed(this, "run"), "Space" == e.code && this.manager.onActionPressed(this, "jump"))) : this.activeKeys[e.code] = !1 + } + onKeyUp(e) { + metapress.isOpen && !this.ignoredElements.includes(document.activeElement?.tagName) ? (e.preventDefault(), this.activeKeys[e.code] = !1, "ShiftLeft" != e.code && "ShiftRight" != e.code || this.manager.onActionReleased(this, "run"), "Space" == e.code && this.manager.onActionReleased(this, "jump")) : this.activeKeys[e.code] = !1 + } + reset() { + this.movementVelocity.set(0, 0), this.rotationVelocity.set(0, 0), this.manager.onActionReleased(this, "run"), this.manager.onActionReleased(this, "jump") + } + processInput() { + if ("INPUT" != document.activeElement?.tagName && "TEXTAREA" != document.activeElement?.tagName) { + if (this.movementVelocity.set(0, 0), this.rotationVelocity.set(0, 0), (this.activeKeys.KeyW || this.activeKeys.ArrowUp) && (this.movementVelocity.y = 1), (this.activeKeys.KeyS || this.activeKeys.ArrowDown) && (this.movementVelocity.y = -1), this.activeKeys.KeyA && (this.movementVelocity.x = -1), this.activeKeys.KeyD && (this.movementVelocity.x = 1), this.activeKeys.ArrowLeft && (this.rotationVelocity.x = 1), this.activeKeys.ArrowRight && (this.rotationVelocity.x = -1), 0 != this.movementVelocity.x && 0 != this.movementVelocity.y) { + const e = Math.sqrt(this.movementVelocity.x ** 2 + this.movementVelocity.y ** 2); + this.movementVelocity.x = this.movementVelocity.x / e, this.movementVelocity.y = this.movementVelocity.y / e + } + } else this.reset() + } + } + var r = o(50840), + a = o.n(r), + m = o(4028); + class h { + id = "touch"; + manager = null; + movement = new THREE.Vector2; + movementVelocity = new THREE.Vector2; + rotation = new THREE.Vector2; + rotationVelocity = new THREE.Vector2; + zoom = 0; + zoomVelocity = 0; + actions = {}; + preventInput = new m.Z; + constructor(e) { + this.manager = e, this.hammer = new(a().Manager)(metapress.renderer.canvas, { + touchAction: "none", + recognizers: [ + [a().Tap, { + event: "doubletap", + taps: 2 + }, + [], + [] + ], + [a().Tap, { + event: "tap", + taps: 1 + }, + [], + ["doubletap"] + ], + [a().Pan, { + event: "zoom", + pointers: 3, + direction: a().DIRECTION_VERTICAL + }, + [], + [] + ] + ] + }), this.hammer.on("tap", this.onTap.bind(this)), this.hammer.on("doubletap", this.onDoubleTap.bind(this)), this.hammer.on("zoomstart", this.onZoomStart.bind(this)), this.hammer.on("zoommove", this.onZoomMove.bind(this)), this.hammer.on("zoomend", this.onZoomEnd.bind(this)), metapress.renderer.canvas.addEventListener("pointerdown", this.onPointerDown.bind(this), { + passive: !0 + }), window.addEventListener("pointermove", this.onPointerMove.bind(this), { + passive: !0 + }), window.addEventListener("pointerup", this.onPointerUp.bind(this), { + passive: !0 + }), metapress.renderer.canvas.addEventListener("touchstart", (e => e.preventDefault()), { + passive: !1 + }) + } + movePointerID = -1; + movePointerStart = new THREE.Vector2; + cameraPointerID = -1; + cameraPointerStart = new THREE.Vector2; + onPointerDown(e) { + if ("touch" != e.pointerType) return; + e.pageX < window.innerWidth / 2 ? (this.movePointerID = e.pointerId, this.movePointerStart.set(e.pageX, e.pageY)) : (this.cameraPointerID = e.pointerId, this.cameraPointerStart.set(e.pageX, e.pageY)), metapress.menubar.fade("out"); + const t = metapress.button?.div; + t && (t.style.cssText = "bottom: -42px;") + } + onPointerMove(e) { + if ("touch" == e.pointerType && !this.preventInput.isLocked) + if (this.isZooming) this.onPointerUp(e); + else if (e.pointerId == this.movePointerID) { + let t = e.pageX - this.movePointerStart.x, + o = e.pageY - this.movePointerStart.y; + this.movementVelocity.set(t, -o).multiplyScalar(.02), Math.sqrt(t ** 2 + o ** 2) > 125 ? this.manager.onActionPressed(this, "run") : this.manager.onActionReleased(this, "run") + } else if (e.pointerId == this.cameraPointerID) { + let t = e.pageX - this.cameraPointerStart.x, + o = e.pageY - this.cameraPointerStart.y; + Math.abs(t) + Math.abs(o) < 50 ? this.rotationVelocity.set(0, 0) : this.rotationVelocity.set(-t, -o).multiplyScalar(.02) + } + } + onPointerUp(e) { + e.pointerId == this.movePointerID ? (this.movePointerID = -1, this.movementVelocity.set(0, 0), this.manager.onActionReleased(this, "run")) : e.pointerId == this.cameraPointerID && (this.cameraPointerID = -1, this.rotationVelocity.set(0, 0)), -1 === this.cameraPointerID && -1 === this.movePointerID && metapress.menubar.fade("in"); + const t = metapress.button?.div; + t && (t.style.cssText = null) + } + onZoomStart(e) { + e.preventDefault(), "touch" == e.pointerType && (this.lastZoomY = e.center.y, this.isZooming = !0) + } + onZoomMove(e) { + e.preventDefault(), "touch" == e.pointerType && (this.preventInput.isLocked || (this.zoom += .05 * (this.lastZoomY - e.center.y), this.lastZoomY = e.center.y, this.isZooming = !0)) + } + onZoomEnd(e) { + e.preventDefault(), this.isZooming = !1 + } + onTap(e) { + if (e.preventDefault(), "touch" != e.pointerType) return; + if (this.preventInput.isLocked) return; + metapress.plugins.sendEvent("input_onUserInput", e); + let t = metapress.raycast.atScreenCoordinates(e.center.x, e.center.y); + t?.entity && metapress.entities.doClick(t.entity.id, t) || metapress.renderer.canvas.focus() + } + onDoubleTap(e) { + e.preventDefault(), "touch" == e.pointerType && (this.preventInput.isLocked || (metapress.plugins.sendEvent("input_onUserInput", e), metapress.plugins.sendEvent("input_onDoubleClick", { + x: e.center.x, + y: e.center.y + }))) + } + } + class c { + id = "mouse"; + manager = null; + movement = new THREE.Vector2; + movementVelocity = new THREE.Vector2; + rotation = new THREE.Vector2; + rotationVelocity = new THREE.Vector2; + zoom = 0; + zoomVelocity = 0; + actions = {}; + preventInput = new m.Z; + _lastClickTime = null; + constructor(e) { + this.manager = e, metapress.renderer.glrenderer.domElement.addEventListener("mousedown", this.onPointerDown.bind(this)), metapress.renderer.glrenderer.domElement.addEventListener("mousemove", this.onPointerMove.bind(this)), metapress.renderer.glrenderer.domElement.addEventListener("mouseup", this.onPointerUp.bind(this)), metapress.renderer.glrenderer.domElement.addEventListener("wheel", this.onWheel.bind(this)), metapress.renderer.glrenderer.domElement.addEventListener("contextmenu", (e => e.preventDefault())), metapress.renderer.glrenderer.domElement.focus() + } + onPointerDown(e) { + if (e.preventDefault(), metapress.plugins.sendEvent("input_onUserInput", e), this.preventInput.isLocked) return; + if (2 == e.button && document.pointerLockElement) return void document.exitPointerLock(); + if (2 == e.button) return metapress.renderer.glrenderer.domElement.focus(), void metapress.renderer.glrenderer.domElement.requestPointerLock(); + this._lastClickTime || (this._lastClickTime = Date.now()); + let t = Date.now() - this._lastClickTime; + if (t > 0 && t < 500) return metapress.plugins.sendEvent("input_onDoubleClick", { + x: e.clientX, + y: e.clientY + }), void(this._lastClickTime = Date.now()); + if (this._lastClickTime = Date.now(), !document.pointerLockElement) { + let t = metapress.raycast.atScreenCoordinates(e.x, e.y); + if (t?.entity && metapress.entities.doClick(t.entity.id, t)) return; + return metapress.renderer.glrenderer.domElement.focus(), void metapress.renderer.glrenderer.domElement.requestPointerLock() + } + if (metapress.camera.focusedEntity) { + let e = metapress.raycast.atScreenCoordinates(metapress.renderer.canvasRect.width / 2, metapress.renderer.canvasRect.height / 2); + metapress.entities.getRenderer(metapress.camera.focusedEntity.id)?.onClick?.(e); + for (let t of metapress.entities.getModifiers(metapress.camera.focusedEntity.id)) t.onClick?.(e) + } + } + onPointerMove(e) { + e.preventDefault(), document.pointerLockElement && (this.rotation.x -= .005 * e.movementX, this.rotation.y -= .005 * e.movementY) + } + onPointerUp(e) { + e.preventDefault() + } + onWheel(e) { + e.preventDefault(); + let t = e.deltaX, + o = e.deltaY; + 0 == e.deltaMode || e.wheelDeltaX || e.wheelDeltaY ? (t = e.wheelDeltaX || e.deltaX, o = e.wheelDeltaY || e.deltaY) : 1 == e.deltaMode ? (t = 20 * e.deltaX, o = 20 * e.deltaY) : 2 == e.deltaMode && (t = 50 * e.deltaX, o = 50 * e.deltaY); + let i = Date.now(); + (!this.lastWheelDate || i - this.lastWheelDate > 250) && (Math.abs(e.deltaX) > Math.abs(e.deltaY) ? this.wheelMode = "camera" : this.wheelMode = "zoom"), this.lastWheelDate = i, "camera" == this.wheelMode ? (this.rotation.x += .005 * e.deltaX, this.rotation.y += .0025 * e.deltaY) : this.zoom += .005 * e.deltaY + } + } + class d { + id = "core.input"; + name = "First Person Camera"; + description = "Allows the user to move around in first-person view."; + version = "1.0.0"; + provides = ["input"]; + requires = ["renderer", "raycast"]; + eyeHeight = 1.7; + movement = new i.Vector2; + movementSmoothed = new i.Vector2; + rotation = new i.Vector2; + rotationSmoothed = new i.Vector2; + zoom = 0; + zoomSmoothed = 0; + devices = []; + actions = {}; + onActionPressed(e, t) { + this.actions[t]?.includes?.(e) || (this.actions[t] = this.actions[t] || [], this.actions[t].push(e), 1 == this.actions[t].length && metapress.plugins.sendEvent("input_actionPressed", t)) + } + onActionReleased(e, t) { + this.actions[t]?.includes?.(e) && (this.actions[t] = this.actions[t].filter((t => t !== e)), metapress.plugins.sendEvent("input_actionReleased", t)) + } + onLoad() { + this.addDevice(new n(this)), this.addDevice(new h(this)), this.addDevice(new c(this)), this.addDevice(new s(this)) + } + actionActive(e) { + return !!this.actions[e]?.length + } + addDevice(e) { + this.devices.push(e), e.id && !this[e.id] && (this[e.id] = e) + } + $beforeRender() { + this.rotation.set(0, 0), this.movement.set(0, 0), this.zoom = 0; + for (let e = 0; e < this.devices.length; e++) { + let t = this.devices[e]; + t.processInput?.(), this.movement.x += t.movementVelocity.x, this.movement.y += t.movementVelocity.y, this.rotation.x += t.rotationVelocity.x, this.rotation.y += t.rotationVelocity.y, this.rotation.x += t.rotation.x / metapress.renderer.delta, this.rotation.y += t.rotation.y / metapress.renderer.delta, this.zoom += t.zoomVelocity, this.zoom += t.zoom / metapress.renderer.delta, t.rotation.set(0, 0), t.zoom = 0 + } + this.movement.length() > 1 && this.movement.setLength(1), this.movement.multiplyScalar(metapress.renderer.delta), this.rotation.multiplyScalar(metapress.renderer.delta), this.zoom *= metapress.renderer.delta, this.movementSmoothed.x = i.MathUtils.damp(this.movementSmoothed.x, this.movement.x, 10, metapress.renderer.delta), this.movementSmoothed.y = i.MathUtils.damp(this.movementSmoothed.y, this.movement.y, 10, metapress.renderer.delta), this.rotationSmoothed.x = i.MathUtils.damp(this.rotationSmoothed.x, this.rotation.x, 10, metapress.renderer.delta), this.rotationSmoothed.y = i.MathUtils.damp(this.rotationSmoothed.y, this.rotation.y, 10, metapress.renderer.delta), this.zoomSmoothed = i.MathUtils.damp(this.zoomSmoothed, this.zoom, 10, metapress.renderer.delta) + } + } + }, + 4028: (e, t, o) => { + o.d(t, { + Z: () => i + }); + class i { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let e = !1; + return () => { + e || (e = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + } + } +]); \ No newline at end of file diff --git a/mp-core/7141.b23c3a293c5eca16605d.bundle.js b/mp-core/7141.b23c3a293c5eca16605d.bundle.js new file mode 100644 index 0000000..fc8455e --- /dev/null +++ b/mp-core/7141.b23c3a293c5eca16605d.bundle.js @@ -0,0 +1,48 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [7141], { + 27141: (e, t, s) => { + s.r(t), s.d(t, { + default: () => a + }); + class a { + id = "core.integration.web-weaver"; + name = "Web Weaver AI"; + description = "Manages integration with Web Weaver AI."; + version = "1.0.0"; + requires = []; + provides = ["ai", "webWeaver"]; + onLoad() { + window.webWeaver = window.webWeaver || {}, window.webWeaver.pageSummary = window.webWeaver.pageSummary || "You are Web Weaver, an AI helping the user to interact with MetaPress.", window.webWeaver.knowledgeBase = window.webWeaver.knowledgeBase || [], document.addEventListener("webweaver_kb_search", (e => this.onKnowledgeBaseSearch(e))) + } + onKnowledgeBaseSearch(e) { + const t = metapress.plugins.callAll("ai_getKnowledgeBaseEntries").flat().filter((e => e && !e.disabled)); + for (let e of t) e.sourceID = "VerseWeb"; + window.webWeaver.knowledgeBase = window.webWeaver.knowledgeBase.filter((e => !t.find((e => "VerseWeb" == e.sourceID)))).concat(t) + } + $ai_getKnowledgeBaseEntries = () => [{ + type: "info", + name: "VerseWeb", + tags: "VerseWeb features, MP features, VerseWeb capabilities, MP capabilities, VerseWeb description, MP description, VerseWeb info, MP info, VerseWeb information, MP information", + content: "VerseWeb is a tool which allows anyone to create and host their own metaverse. It runs in the browser and can automatically pull in content from backends like WordPress. Visit https://metapress.dev for more information." + }, { + type: "tour", + name: "General guided tour of MetaPress", + content: `Perform these steps one by one:\n ${metapress.isOpen?"":'- Open MetaPress by running the KB action "core.metapress:open"'}\n - Explain that the sidebar on the left of the screen contains actions the user can perform. Suggest the response "Continue" and wait.\n ${(metapress.entities?.all||[]).filter((e=>"menubar.item"==e.type&&(e.ai_description||e.description))).sort(((e,t)=>(e.order||0)-(t.order||0))).map((e=>e.is_panel?`- Explain the sidebar button "${e.ai_name||e.name}". ${e.ai_description||e.description}. Run the KB action "core.ui.menubar:clickItem" with value "${e.id}". Suggest the response "Continue" and wait.`:`- Explain the sidebar button "${e.ai_name||e.name}". ${e.ai_description||e.description}. Suggest the response "Continue" and wait.`))}\n - This is the end of the tour.\n ` + }, { + id: "core.metapress:open", + type: "action", + name: "Open MetaPress", + content: "Opens the metaverse if it's not already open.", + action: e => metapress.isOpen ? "Success: Already open." : (metapress.open(), "Success") + }, { + id: "core.metapress:close", + type: "action", + name: "Close MetaPress", + content: "Closes the metaverse and goes back to the 2D page.", + action: e => metapress.isOpen ? (metapress.close(), "Success") : "Success: Already closed." + }] + } + } + } +]); \ No newline at end of file diff --git a/mp-core/7195.8181ac8896c1ce405592.bundle.js b/mp-core/7195.8181ac8896c1ce405592.bundle.js new file mode 100644 index 0000000..5185dbd --- /dev/null +++ b/mp-core/7195.8181ac8896c1ce405592.bundle.js @@ -0,0 +1,52 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [7195], { + 47195: (e, t, s) => { + s.r(t), s.d(t, { + default: () => n + }); + var l = s(25108); + class n { + id = "core.ui.fullscreen"; + name = "Fullscreen Support"; + description = "Allows the app to enter fullscreen mode on supported devices."; + requires = ["menubar", "renderer"]; + provides = ["fullscreen"]; + onLoad() { + document.body.requestFullscreen && (window.addEventListener("keydown", (e => { + (e.altKey || e.metaKey) && "Enter" == e.key && this.toggle() + })), document.body.addEventListener("fullscreenchange", (() => { + this.isFullscreen || null == metapress.button?.div?.style?.bottom || (metapress.button.div.style.bottom = null) + }))) + } + get isFullscreen() { + return !!document.fullscreenElement + } + async toggle() { + try { + this.isFullscreen ? await this.exit() : await this.enter() + } catch (e) { + l.warn("[Fullscreen] Unable to toggle fullscreen mode.", e) + } + } + async enter() { + this.isFullscreen || (await document.body.requestFullscreen(), metapress.button?.div && (metapress.button.div.style.bottom = "-42px")) + } + async exit() { + this.isFullscreen && (await document.exitFullscreen(), metapress.button?.div && (metapress.button.div.style.bottom = null)) + } + $input_onDoubleClick() { + this.toggle() + } + $ai_getKnowledgeBaseEntries = () => [{ + id: `${this.id}:enterFullscreen`, + type: "action", + name: "Enter fullscreen", + tags: "enter fullscreen, take over screen, full screen, mouse lock, cursor lock", + content: "\n Use this action to enter fullscreen mode. Value is 'enter' or 'leave' to enter or leave fullscreen mode.\n ", + action: async e => "enter" == e.value ? this.isFullscreen ? "Already in fullscreen mode" : (await this.enter(), "Successfully entered fullscreen mode") : this.isFullscreen ? (await this.exit(), "Successfully exited fullscreen mode") : "Not in fullscreen mode" + }] + } + } + } +]); \ No newline at end of file diff --git a/mp-core/7263.41c1258b0ad3dc2168de.bundle.js b/mp-core/7263.41c1258b0ad3dc2168de.bundle.js new file mode 100644 index 0000000..19a98a8 --- /dev/null +++ b/mp-core/7263.41c1258b0ad3dc2168de.bundle.js @@ -0,0 +1,5 @@ +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [7263], { + 17263: () => {} + } +]); \ No newline at end of file diff --git a/mp-core/7387.68400629ead8ff4f5fb7.bundle.js b/mp-core/7387.68400629ead8ff4f5fb7.bundle.js new file mode 100644 index 0000000..08fb14f --- /dev/null +++ b/mp-core/7387.68400629ead8ff4f5fb7.bundle.js @@ -0,0 +1,440 @@ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [7387], { + 6147: (t, e, i) => { + i.d(e, { + Z: () => r + }); + var s = i(4028); + class r { + get settings() { + return [{ + type: "checkbox", + id: "hidden", + name: "Hidden", + help: "If enabled, the object will not be visible." + }] + } + static showBoundingBoxes = !1; + static wireframeMode = !1; + _lastEntityWireframe = void 0; + container = new THREE.Object3D; + object = null; + entity = {}; + hideLock = new s.Z; + hasLoaded = !1; + wireframeState = {}; + async onLoad() {} + afterLoad() { + if (!this.object?.isObject3D) throw new Error("The renderer must create an Object3D instance when subclassing Object3DRenderer."); + this.container.entityRenderer = this, this.container.add(this.object), metapress.renderer.scene.add(this.container), this.applyTransforms(), this._lastUrl = this.entity.url, this._lastEntityWireframe = this.entity.wireframe + } + onUnload() {} + afterUnload() { + this.container?.removeFromParent(), this.container = null, this.applyParent() + } + onEntityUpdated() { + this._lastUrl != this.entity.url && metapress.entities.reload(this.entity.id); + for (let t of metapress.entities.renderers) t != this && t.container?.isObject3D && t.applyParent && t.applyParent(!0); + this.entity.wireframe != this._lastEntityWireframe && (this._lastEntityWireframe = this.entity.wireframe, this.container.traverse((t => { + t.isMesh && t.material && (t.material.wireframe = this.entity.wireframe ?? !1, this.wireframeState[t.uuid] = t.material.wireframe) + }))), this.onRender() + } + onRender() { + this._lastTransformUpdate != this.entity.lastModified && (this._lastTransformUpdate = this.entity.lastModified, this.applyTransforms()), this.applyHideLock(), this.applyBoundingBox(), this.applyWireframe() + } + applyTransforms() { + this.object && (this.entity.x = parseFloat(this.entity.x) || 0, this.entity.y = parseFloat(this.entity.y) || 0, this.entity.z = parseFloat(this.entity.z) || 0, this.entity.scaleX = parseFloat(this.entity.scaleX) || 1, this.entity.scaleY = parseFloat(this.entity.scaleY) || 1, this.entity.scaleZ = parseFloat(this.entity.scaleZ) || 1, this.entity.quatX = parseFloat(this.entity.quatX) || 0, this.entity.quatY = parseFloat(this.entity.quatY) || 0, this.entity.quatZ = parseFloat(this.entity.quatZ) || 0, this.entity.quatW = parseFloat(this.entity.quatW) || 0, this.entity.extra_offset_x = parseFloat(this.entity.extra_offset_x) || 0, this.entity.extra_offset_y = parseFloat(this.entity.extra_offset_y) || 0, this.entity.extra_offset_z = parseFloat(this.entity.extra_offset_z) || 0, this.entity.extra_scale_x = parseFloat(this.entity.extra_scale_x) || 1, this.entity.extra_scale_y = parseFloat(this.entity.extra_scale_y) || 1, this.entity.extra_scale_z = parseFloat(this.entity.extra_scale_z) || 1, this.entity.extra_rotation_x = parseFloat(this.entity.extra_rotation_x) || 0, this.entity.extra_rotation_y = parseFloat(this.entity.extra_rotation_y) || 0, this.entity.extra_rotation_z = parseFloat(this.entity.extra_rotation_z) || 0, this.container.position.set(this.entity.x, this.entity.y, this.entity.z), this.container.scale.set(this.entity.scaleX, this.entity.scaleY, this.entity.scaleZ), this.entity.quatX || this.entity.quatY || this.entity.quatZ || this.entity.quatW ? this.container.quaternion.set(this.entity.quatX, this.entity.quatY, this.entity.quatZ, this.entity.quatW) : this.container.quaternion.set(0, 0, 0, 1), this.object.position.set(this.entity.extra_offset_x, this.entity.extra_offset_y, this.entity.extra_offset_z), this.object.scale.set(this.entity.extra_scale_x, this.entity.extra_scale_y, this.entity.extra_scale_z), this.object.rotation.set(this.entity.extra_rotation_x, this.entity.extra_rotation_y, this.entity.extra_rotation_z)) + } + applyHideLock() { + let t = !this.entity.hidden && !this.hideLock.isAcquired; + this.container.visible && !t ? this.container.visible = !1 : !this.container.visible && t && (this.container.visible = !0) + } + applyBoundingBox() { + this.boundingBoxHelper?.update(); + let t = r.showBoundingBoxes && this.container.visible; + !t && this.boundingBoxHelper ? (this.boundingBoxHelper.removeFromParent(), this.boundingBoxHelper.dispose(), this.boundingBoxHelper = null) : t && !this.boundingBoxHelper && (this.boundingBoxHelper = new THREE.BoxHelper(this.container, 16777215), metapress.renderer.scene.add(this.boundingBoxHelper)) + } + applyWireframe() { + this._lastWireframeMode != r.wireframeMode && (this._lastWireframeMode = r.wireframeMode, this.container.traverse((t => { + t.isMesh && t.material && (this.hasLoaded || (this.wireframeState[t.uuid] = !!t.material.wireframe), t.material.wireframe = !!r.wireframeMode || (this.wireframeState[t.uuid] ?? !1)) + })), this.hasLoaded = !0) + } + applyParent(t) { + if (!t && !this.parentHideLock && void 0 !== this._lastParent && this._lastParent != this.entity.parent) return; + if (this._lastParent = this.entity.parent || "", !t) + for (let t of metapress.entities.renderers) t != this && t.container?.isObject3D && t.applyParent && t.applyParent(!0); + if (!this.entity.parent) return this.parentHideLock?.(), this.parentHideLock = null, void(this.container && this.container.parent != metapress.renderer.scene && (this.container.removeFromParent(), metapress.renderer.scene.add(this.container))); + let e = metapress.entities.getRenderer(this.entity.parent); + e?.object?.isObject3D ? (this.parentHideLock?.(), this.parentHideLock = null, this.container.parent != e.container && (this.container.removeFromParent(), e.container.add(this.container))) : this.parentHideLock || (this.parentHideLock = this.hideLock.acquire()) + } + } + }, + 37387: (t, e, i) => { + i.r(e), i.d(e, { + default: () => p + }); + var s = i(6147); + class r extends s.Z { + onLoad() { + this.material = metapress.ui.createMaterial({ + width: 1024, + height: 256, + transparent: !0, + alphaTest: .1 + }); + let t = new THREE.PlaneGeometry(1, 1); + this.object = new THREE.Mesh(t, this.material), this.timer = setInterval((() => this.updateUI()), 3e4), this.updateUI() + } + onUnload() { + clearInterval(this.timer) + } + updateUI() { + if (!this.material) return; + let t = metapress.entities.all.filter((t => "menubar.item" == t.type)); + t.sort(((t, e) => (t.order || 0) - (e.order || 0))), this.material.viewportSize.width = 64 * t.length + 100, this.material.viewportSize.height = 64, this.object.scale.set(.001 * this.material.viewportSize.width, .001 * this.material.viewportSize.height, 1), this.material.baseView = metapress.ui.createElement("box"), this.material.baseView.background = "#333", this.material.baseView.borderRadius = 32; + for (let e = 0; e < t.length; e++) { + let i = t[e], + s = metapress.ui.createElement("center-layout"); + s.x = 64 * e, s.y = 0, s.width = 64, s.height = this.material.viewportSize.height, s.addEventListener("click", (t => metapress.menubar.onMenuItemClicked(i))), this.material.baseView.add(s); + let r = metapress.ui.createElement("image"); + r.url = i.icon, r.scaleMode = "fit", r.width = 32, r.height = 32, s.add(r) + } + let e = metapress.ui.createElement("center-layout"); + e.x = this.material.viewportSize.width - 100, e.y = 0, e.width = 100, e.height = this.material.viewportSize.height, this.material.baseView.add(e); + let i = metapress.ui.createElement("text"); + i.autoHeight = !0, i.width = 100, i.text = (new Date).toLocaleTimeString("en-US", { + timeStyle: "short" + }), i.textAlign = "center", i.color = "#FFF", i.font = "bold 15px Comfortaa, Arial, Helvetica, sans-serif", e.add(i), this.material.invalidate() + } + onClick(t) { + this.material.incomingClick(t.hit?.uv?.x, t.hit?.uv?.y, !0) + } + $menubar_iconsUpdated() { + this.updateUI() + } + } + var n = i(92583), + a = i(9801), + o = i(1594), + h = i(99477); + class l extends h.Object3D { + get lineLength() { + return this._lineLength + } + set lineLength(t) { + this._lineLength != t && (this._lineLength = Math.max(.001, t), this.updateLine()) + } + get color() { + return this.startShape.material.color + } + set color(t) { + this.startShape.material.color = t, this.startShape.material.emissive = t + } + raycaster = new h.Raycaster;constructor(t = 1) { + super(), this._lineLength = t, this.isPhysicalObject = !1; + let e = new h.SphereGeometry(.01, 8, 8), + i = new h.MeshStandardMaterial({ + color: 16711680, + emissive: 16711680, + emissiveIntensity: 5, + flatShading: !0 + }); + this.startShape = new h.Mesh(e, i), this.add(this.startShape), this.endShape = new h.Mesh(e, i), this.add(this.endShape), e = new h.CylinderGeometry(.005, .005, 1, 5), this.lineShape = new h.Mesh(e, i), this.lineShape.rotation.x = Math.PI / 2, this.add(this.lineShape), this.updateLine() + } + updateLine() { + this.endShape.position.z = -this._lineLength, this.lineShape.position.z = -this._lineLength / 2, this.lineShape.scale.y = this._lineLength + } + updateRay() { + this.startShape.getWorldPosition(this.raycaster.ray.origin), this.endShape.getWorldPosition(this.raycaster.ray.direction), this.raycaster.ray.direction.sub(this.raycaster.ray.origin).normalize() + } + intersectObjects(t, e = !1) { + return this.updateRay(), this.raycaster.intersectObjects(t, e) + } + intersectObject(t, e = !1) { + return this.updateRay(), this.raycaster.intersectObject(t, e) + } + } + class d { + id = "vr-controllers"; + manager = null; + plugin = null; + movement = new THREE.Vector2; + movementVelocity = new THREE.Vector2; + rotation = new THREE.Vector2; + rotationVelocity = new THREE.Vector2; + zoom = 0; + zoomVelocity = 0; + actions = {}; + deadzone = .15; + xrManager = null; + xrSession = null; + laserLine = new l; + leftControllerWristRotation = (new THREE.Quaternion).setFromEuler(new THREE.Euler(0, Math.PI / 2, Math.PI / 2, "XZY")); + leftControllerWristPosition = new THREE.Vector3(-.12, 0, 0); + rightControllerWristRotation = (new THREE.Quaternion).setFromEuler(new THREE.Euler(Math.PI, Math.PI / 2, -Math.PI / 2, "XZY")); + rightControllerWristPosition = new THREE.Vector3(.12, 0, 0); + leftHandWristRotation = (new THREE.Quaternion).setFromEuler(new THREE.Euler(-Math.PI / 2, 0, Math.PI / 2, "XYZ")); + leftHandWristPosition = new THREE.Vector3(0, 0, .02); + rightHandWristRotation = (new THREE.Quaternion).setFromEuler(new THREE.Euler(-Math.PI / 2, 0, -Math.PI / 2, "XYZ")); + rightHandWristPosition = new THREE.Vector3(0, 0, .02); + constructor() { + this.laserLine.position.z = -.05 + } + attachSession(t, e, i) { + this.xrManager = e, this.xrSession = i; + let s = e.getController(0); + t.add(s); + let r = e.getController(1); + t.add(r); + const h = new n.i; + let l = e.getControllerGrip(0); + l.isPhysicalObject = !1, l.add(h.createControllerModel(l)), t.add(l); + let d = e.getHand(0); + d.isPhysicalObject = !1, d.add(new a.X(d)), t.add(d), this.handPointer1 = new o.P(d, s), d.add(this.handPointer1); + let c = e.getControllerGrip(1); + c.isPhysicalObject = !1, c.add(h.createControllerModel(c)), t.add(c); + let p = e.getHand(1); + p.isPhysicalObject = !1, p.add(new a.X(p)), t.add(p), this.handPointer2 = new o.P(p, r), p.add(this.handPointer2); + let u = setInterval((() => { + let t = d.getObjectByProperty("type", "SkinnedMesh"), + e = p.getObjectByProperty("type", "SkinnedMesh"); + t && e && (e.material = t.material, t.material.color = new THREE.Color("#66BBFF"), t.material.needsUpdate = !0, clearInterval(u)) + }), 100) + } + detachSession() { + this.xrSession = null, this.laserLine.removeFromParent() + } + processInput() { + if (this.movementVelocity.set(0, 0), this.rotationVelocity.set(0, 0), this.zoomVelocity = 0, !this.xrSession || !this.xrManager) return; + let t = null, + e = null, + i = 0, + s = 0; + for (let r = 0; r < this.plugin.session.inputSources.length; r++) { + let n = this.plugin.session.inputSources[r]; + "left" == n.handedness ? (t = n, i = r) : "right" == n.handedness && (e = n, s = r) + } + t?.hand ? (this.processHandPointer(this.handPointer1), this.processHandPointer(this.handPointer2), this.laserLine.removeFromParent(), this.setEntityTransform(this.plugin.entities.wristLeft, this.xrManager.getHand(i)?.joints?.wrist, this.leftHandWristRotation, this.leftHandWristPosition), this.setEntityTransform(this.plugin.entities.wristRight, this.xrManager.getHand(s)?.joints?.wrist, this.rightHandWristRotation, this.rightHandWristPosition)) : (this.processGamepad(t, e), this.processLaserLine(t, e, i, s), this.setEntityTransform(this.plugin.entities.wristLeft, this.xrManager.getController(i), this.leftControllerWristRotation, this.leftControllerWristPosition), this.setEntityTransform(this.plugin.entities.wristRight, this.xrManager.getController(s), this.rightControllerWristRotation, this.rightControllerWristPosition)) + } + setEntityTransform(t, e, i, s) { + if (!t || !e) return; + let r = this._matrixA || (this._matrixA = new THREE.Matrix4); + r.makeTranslation(s); + let n = this._matrixB || (this._matrixB = new THREE.Matrix4); + n.makeRotationFromQuaternion(i), n.multiply(r); + let a = this._matrixC || (this._matrixC = new THREE.Matrix4); + a.copy(e.matrixWorld), a.multiply(n); + let o = this._posA || (this._pos = new THREE.Vector3), + h = this._quatA || (this._quatA = new THREE.Quaternion), + l = this._scaleA || (this._scaleA = new THREE.Vector3); + a.decompose(o, h, l), t.x = o.x, t.y = o.y, t.z = o.z, t.quatX = h.x, t.quatY = h.y, t.quatZ = h.z, t.quatW = h.w, t.lastModified = Date.now() + } + processGamepad(t, e) { + let i = t?.gamepad?.axes[2] || 0, + s = t?.gamepad?.axes[3] || 0, + r = e?.gamepad?.axes[2] || 0, + n = e?.gamepad?.axes[3] || 0; + Math.abs(i) < this.deadzone && (i = 0), Math.abs(s) < this.deadzone && (s = 0), Math.abs(r) < this.deadzone && (r = 0), Math.abs(n) < this.deadzone && (n = 0), this.movementVelocity.set(i, -s); + let a = r <= 1 && r >= .5, + o = r >= -1 && r <= -.5; + !this._wasSnappingLeft && a && (this.plugin.rotation += Math.PI / 8), !this._wasSnappingRight && o && (this.plugin.rotation -= Math.PI / 8), this._wasSnappingLeft = a, this._wasSnappingRight = o + } + processLaserLine(t, e, i, s) { + let r = t?.gamepad?.buttons[0]?.touched || t?.gamepad?.buttons[0]?.value > .2, + n = e?.gamepad?.buttons[0]?.touched || e?.gamepad?.buttons[0]?.value > .2; + if (!r && !n) return void this.laserLine.removeFromParent(); + let a = r ? i : s, + o = this.xrManager.getController(a); + this.laserLine.parent != o && (this.laserLine.removeFromParent(), o.add(this.laserLine)); + let h = this.laserLine.intersectObjects(metapress.raycast.physicalObjects, !1)[0], + l = h?.object, + d = l && metapress.entities.rendererFromObject3D(l), + p = d && metapress.entities.isClickable(d.entity.id); + this.laserLine.lineLength = h?.distance || 1e3, p ? "g" != this.laserLine.colorCode && (this.laserLine.colorCode = "g", this.laserLine.color = new THREE.Color(65280)) : "r" != this.laserLine.colorCode && (this.laserLine.colorCode = "r", this.laserLine.color = new THREE.Color(16711680)); + let u = r ? t : n ? e : null, + m = u?.gamepad?.buttons[0]?.value || 0, + y = l && m > .8; + !this.currentLaserEvent && y ? (this.currentLaserEvent = { + id: c++, + hit: h, + position: h?.point, + hitObject: l, + hitRenderer: d, + startPosition: h.point, + controller: u, + startTime: Date.now(), + inputType: "controller" + }, metapress.plugins.sendEvent("vr_pointerDown", this.currentLaserEvent)) : this.currentLaserEvent && y ? (this.currentLaserEvent.position = h?.point, this.currentLaserEvent.controller = u, metapress.plugins.sendEvent("vr_pointerMove", this.currentLaserEvent)) : this.currentLaserEvent && !y && (this.currentLaserEvent.position = h?.point, this.currentLaserEvent.controller = u, metapress.plugins.sendEvent("vr_pointerUp", this.currentLaserEvent), Date.now() - this.currentLaserEvent.startTime < 500 && (metapress.plugins.sendEvent("vr_click", this.currentLaserEvent), this.onClick(this.currentLaserEvent)), this.currentLaserEvent = null) + } + processHandPointer(t) { + if (!t) return; + let e = t.intersectObjects(metapress.raycast.physicalObjects, !1)[0]; + if (e) { + if (t.cursorObject.visible = !0, t.setCursor(e.distance), !t.currentPinchEvent && t.isPinched()) { + let i = e?.object, + s = i && metapress.entities.rendererFromObject3D(i), + r = t.cursorObject.getWorldPosition(new THREE.Vector3); + t.currentPinchEvent = { + id: c++, + hit: e, + hitObject: i, + hitRenderer: s, + position: r, + startPosition: r, + startTime: Date.now(), + inputType: "hand" + }, metapress.plugins.sendEvent("vr_pinchStart", t.currentPinchEvent) + } else if (t.currentPinchEvent && t.isPinched()); + else if (t.currentPinchEvent && !t.isPinched()) { + t.currentPinchEvent.position = t.cursorObject.getWorldPosition(new THREE.Vector3), metapress.plugins.sendEvent("vr_pinchEnd", t.currentPinchEvent); + let e = t.currentPinchEvent.position.distanceTo(t.currentPinchEvent.startPosition), + i = Date.now() - t.currentPinchEvent.startTime; + e < .5 && i < 500 && (metapress.plugins.sendEvent("vr_click", t.currentPinchEvent), this.onClick(t.currentPinchEvent)), t.currentPinchEvent = null + } + } else t.cursorObject.visible = !1 + } + onClick(t) { + t.hitRenderer?.entity?.id && metapress.entities.doClick(t.hitRenderer.entity.id, t) + } + } + let c = 1; + class p { + id = "core.render.vr"; + name = "VR"; + description = "Manages the VR session."; + version = "1.0.0"; + requires = ["entities", "renderer", "menubar", "input", "ui"]; + provides = ["vr", "render:vr.menubar"]; + entities = {}; + rotation = 0; + async onLoad() { + if (!await (window.navigator.xr?.isSessionSupported("immersive-vr"))) throw { + message: "VR is not supported.", + cancelled: !0 + }; + metapress.entities.add({ + id: "core.render.vr:menubutton", + type: "menubar.item", + name: "Enter VR", + description: "Enters immersive VR mode.", + icon: i(87024), + onClick: () => { + this.isActive ? this.exit() : this.enter() + } + }), metapress.renderer.glrenderer.xr.addEventListener("sessionend", this.onEnd.bind(this)), this.inputDevice = new d, this.inputDevice.plugin = this, metapress.input.addDevice(this.inputDevice), this.entities.container = metapress.entities.add({ + id: "vr:container", + type: "group", + hidden: !0 + }), this.entities.wristLeft = metapress.entities.add({ + id: "vr:wrist.left", + type: "group", + hidden: !0 + }), this.entities.wristRight = metapress.entities.add({ + id: "vr:wrist.right", + type: "group", + hidden: !0 + }); + let t = (new THREE.Quaternion).setFromEuler(new THREE.Euler(-.5, 0, 0)); + this.entities.menubar = metapress.entities.add({ + id: "core.render.vr:menubar", + type: "vr.menubar", + name: "VR Menubar", + parent: "vr:container", + x: 0, + y: 1, + z: -.6, + quatX: t.x, + quatY: t.y, + quatZ: t.z, + quatW: t.w + }) + } + createRenderer(t) { + if ("vr.menubar" == t) return new r + } + get isActive() { + return metapress.renderer.glrenderer.xr.isPresenting + } + async enter() { + this.isActive || (this.session = await navigator.xr.requestSession("immersive-vr", { + optionalFeatures: ["local-floor", "bounded-floor", "hand-tracking", "layers"] + }), this.referenceSpace = await this.session.requestReferenceSpace("local-floor"), metapress.renderer.composer && (metapress.renderer.composer.dispose(), metapress.renderer.composer = null), await metapress.renderer.glrenderer.xr.setSession(this.session), metapress.entities.update(this.entities.container.id, { + hidden: !1 + }), metapress.entities.update(this.entities.wristLeft.id, { + hidden: !1 + }), metapress.entities.update(this.entities.wristRight.id, { + hidden: !1 + }), metapress.entities.update("core.render.vr:menubutton", { + name: "Exit VR" + }), this._lastX = 0, this._lastY = 0, this._lastZ = 0, this._lastRotation = 0, this.inputDevice.attachSession(metapress.renderer.scene, metapress.renderer.glrenderer.xr, this.session)) + } + async exit(t = !1) { + this.isActive && await metapress.renderer.glrenderer.xr.getSession().end() + } + async onEnd() { + this.session = null, this.handPointerLeft = null, this.handPointerRight = null, metapress.renderer.onResize(), metapress.renderer.updatePipeline(), metapress.entities.update(this.entities.container.id, { + hidden: !0 + }), metapress.entities.update(this.entities.wristLeft.id, { + hidden: !0 + }), metapress.entities.update(this.entities.wristRight.id, { + hidden: !0 + }), metapress.entities.update("core.render.vr:menubutton", { + name: "Enter VR" + }), this.inputDevice.detachSession() + } + $onRender() { + if (!this.isActive) return; + this._rotationSmoothed !== this.rotation && (this._rotationSmoothed = THREE.MathUtils.damp(this._rotationSmoothed || 0, this.rotation, 40, metapress.renderer.delta), Math.abs(this.rotation - this._rotationSmoothed) < .001 && (this._rotationSmoothed = this.rotation)); + let t = metapress.renderer.glrenderer.xr, + e = metapress.avatars.currentUserEntity; + if (e && (this._lastX != e.x || this._lastY != e.y || this._lastZ != e.z || this._lastRotation != this._rotationSmoothed)) { + this._lastX = e.x, this._lastY = e.y, this._lastZ = e.z, this._lastRotation = this._rotationSmoothed, this._snapAngle = this._snapAngle || new THREE.Vector3(0, 1, 0), this._quat = this._quat || new THREE.Quaternion, this._quat.setFromAxisAngle(this._snapAngle, this._rotationSmoothed); + let i = this.referenceSpace.getOffsetReferenceSpace(new XRRigidTransform(null, this._quat)).getOffsetReferenceSpace(new XRRigidTransform({ + x: -e.x, + y: -e.y, + z: -e.z + }, null)); + t.setReferenceSpace(i), this._quat.setFromAxisAngle(this._snapAngle, -this._rotationSmoothed), this.entities.container.x = e.x, this.entities.container.y = e.y, this.entities.container.z = e.z, this.entities.container.quatX = this._quat.x, this.entities.container.quatY = this._quat.y, this.entities.container.quatZ = this._quat.z, this.entities.container.quatW = this._quat.w, this.entities.container.lastModified = Date.now() + } + } + $dialogs_didShow() { + this.exit() + } + $menubar_didOpenPanel() { + this.exit() + } + } + }, + 4028: (t, e, i) => { + i.d(e, { + Z: () => s + }); + class s { + _counter = 0; + get isUnlocked() { + return 0 == this._counter + } + get isLocked() { + return this._counter > 0 + } + get isAcquired() { + return this._counter > 0 + } + lock() { + this._counter += 1; + let t = !1; + return () => { + t || (t = !0, this._counter = Math.max(0, this._counter - 1)) + } + } + acquire() { + return this.lock() + } + } + }, + 87024: (t, e, i) => { + t.exports = i.p + "mp-core/vr.47898486ae76643b63b1.svg" + } + } +]); \ No newline at end of file diff --git a/mp-core/745.f0412a366bed1690f45f.bundle.js b/mp-core/745.f0412a366bed1690f45f.bundle.js new file mode 100644 index 0000000..a503211 --- /dev/null +++ b/mp-core/745.f0412a366bed1690f45f.bundle.js @@ -0,0 +1,6418 @@ +/*! For license information please see 745.f0412a366bed1690f45f.bundle.js.LICENSE.txt */ +"use strict"; +(self.webpackChunkmetapress = self.webpackChunkmetapress || []).push([ + [745], { + 64448: (e, n, t) => { + var r = t(25108), + l = t(67294), + a = t(63840); + + function u(e) { + for (var n = "https://reactjs.org/docs/error-decoder.html?invariant=" + e, t = 1; t < arguments.length; t++) n += "&args[]=" + encodeURIComponent(arguments[t]); + return "Minified React error #" + e + "; visit " + n + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + } + var o = new Set, + i = {}; + + function s(e, n) { + c(e, n), c(e + "Capture", n) + } + + function c(e, n) { + for (i[e] = n, e = 0; e < n.length; e++) o.add(n[e]) + } + var f = !("undefined" == typeof window || void 0 === window.document || void 0 === window.document.createElement), + d = Object.prototype.hasOwnProperty, + p = /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, + m = {}, + h = {}; + + function g(e, n, t, r, l, a, u) { + this.acceptsBooleans = 2 === n || 3 === n || 4 === n, this.attributeName = r, this.attributeNamespace = l, this.mustUseProperty = t, this.propertyName = e, this.type = n, this.sanitizeURL = a, this.removeEmptyString = u + } + var v = {}; + "children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e) { + v[e] = new g(e, 0, !1, e, null, !1, !1) + })), [ + ["acceptCharset", "accept-charset"], + ["className", "class"], + ["htmlFor", "for"], + ["httpEquiv", "http-equiv"] + ].forEach((function(e) { + var n = e[0]; + v[n] = new g(n, 1, !1, e[1], null, !1, !1) + })), ["contentEditable", "draggable", "spellCheck", "value"].forEach((function(e) { + v[e] = new g(e, 2, !1, e.toLowerCase(), null, !1, !1) + })), ["autoReverse", "externalResourcesRequired", "focusable", "preserveAlpha"].forEach((function(e) { + v[e] = new g(e, 2, !1, e, null, !1, !1) + })), "allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e) { + v[e] = new g(e, 3, !1, e.toLowerCase(), null, !1, !1) + })), ["checked", "multiple", "muted", "selected"].forEach((function(e) { + v[e] = new g(e, 3, !0, e, null, !1, !1) + })), ["capture", "download"].forEach((function(e) { + v[e] = new g(e, 4, !1, e, null, !1, !1) + })), ["cols", "rows", "size", "span"].forEach((function(e) { + v[e] = new g(e, 6, !1, e, null, !1, !1) + })), ["rowSpan", "start"].forEach((function(e) { + v[e] = new g(e, 5, !1, e.toLowerCase(), null, !1, !1) + })); + var y = /[\-:]([a-z])/g; + + function b(e) { + return e[1].toUpperCase() + } + + function k(e, n, t, r) { + var l = v.hasOwnProperty(n) ? v[n] : null; + (null !== l ? 0 !== l.type : r || !(2 < n.length) || "o" !== n[0] && "O" !== n[0] || "n" !== n[1] && "N" !== n[1]) && (function(e, n, t, r) { + if (null == n || function(e, n, t, r) { + if (null !== t && 0 === t.type) return !1; + switch (typeof n) { + case "function": + case "symbol": + return !0; + case "boolean": + return !r && (null !== t ? !t.acceptsBooleans : "data-" !== (e = e.toLowerCase().slice(0, 5)) && "aria-" !== e); + default: + return !1 + } + }(e, n, t, r)) return !0; + if (r) return !1; + if (null !== t) switch (t.type) { + case 3: + return !n; + case 4: + return !1 === n; + case 5: + return isNaN(n); + case 6: + return isNaN(n) || 1 > n + } + return !1 + }(n, t, l, r) && (t = null), r || null === l ? function(e) { + return !!d.call(h, e) || !d.call(m, e) && (p.test(e) ? h[e] = !0 : (m[e] = !0, !1)) + }(n) && (null === t ? e.removeAttribute(n) : e.setAttribute(n, "" + t)) : l.mustUseProperty ? e[l.propertyName] = null === t ? 3 !== l.type && "" : t : (n = l.attributeName, r = l.attributeNamespace, null === t ? e.removeAttribute(n) : (t = 3 === (l = l.type) || 4 === l && !0 === t ? "" : "" + t, r ? e.setAttributeNS(r, n, t) : e.setAttribute(n, t)))) + } + "accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e) { + var n = e.replace(y, b); + v[n] = new g(n, 1, !1, e, null, !1, !1) + })), "xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e) { + var n = e.replace(y, b); + v[n] = new g(n, 1, !1, e, "http://www.w3.org/1999/xlink", !1, !1) + })), ["xml:base", "xml:lang", "xml:space"].forEach((function(e) { + var n = e.replace(y, b); + v[n] = new g(n, 1, !1, e, "http://www.w3.org/XML/1998/namespace", !1, !1) + })), ["tabIndex", "crossOrigin"].forEach((function(e) { + v[e] = new g(e, 1, !1, e.toLowerCase(), null, !1, !1) + })), v.xlinkHref = new g("xlinkHref", 1, !1, "xlink:href", "http://www.w3.org/1999/xlink", !0, !1), ["src", "href", "action", "formAction"].forEach((function(e) { + v[e] = new g(e, 1, !1, e.toLowerCase(), null, !0, !0) + })); + var w = l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + S = Symbol.for("react.element"), + x = Symbol.for("react.portal"), + E = Symbol.for("react.fragment"), + C = Symbol.for("react.strict_mode"), + _ = Symbol.for("react.profiler"), + z = Symbol.for("react.provider"), + N = Symbol.for("react.context"), + P = Symbol.for("react.forward_ref"), + T = Symbol.for("react.suspense"), + L = Symbol.for("react.suspense_list"), + M = Symbol.for("react.memo"), + F = Symbol.for("react.lazy"); + Symbol.for("react.scope"), Symbol.for("react.debug_trace_mode"); + var R = Symbol.for("react.offscreen"); + Symbol.for("react.legacy_hidden"), Symbol.for("react.cache"), Symbol.for("react.tracing_marker"); + var D = Symbol.iterator; + + function O(e) { + return null === e || "object" != typeof e ? null : "function" == typeof(e = D && e[D] || e["@@iterator"]) ? e : null + } + var I, U = Object.assign; + + function V(e) { + if (void 0 === I) try { + throw Error() + } catch (e) { + var n = e.stack.trim().match(/\n( *(at )?)/); + I = n && n[1] || "" + } + return "\n" + I + e + } + var A = !1; + + function B(e, n) { + if (!e || A) return ""; + A = !0; + var t = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + if (n) + if (n = function() { + throw Error() + }, Object.defineProperty(n.prototype, "props", { + set: function() { + throw Error() + } + }), "object" == typeof Reflect && Reflect.construct) { + try { + Reflect.construct(n, []) + } catch (e) { + var r = e + } + Reflect.construct(e, [], n) + } else { + try { + n.call() + } catch (e) { + r = e + } + e.call(n.prototype) + } + else { + try { + throw Error() + } catch (e) { + r = e + } + e() + } + } catch (n) { + if (n && r && "string" == typeof n.stack) { + for (var l = n.stack.split("\n"), a = r.stack.split("\n"), u = l.length - 1, o = a.length - 1; 1 <= u && 0 <= o && l[u] !== a[o];) o--; + for (; 1 <= u && 0 <= o; u--, o--) + if (l[u] !== a[o]) { + if (1 !== u || 1 !== o) + do { + if (u--, 0 > --o || l[u] !== a[o]) { + var i = "\n" + l[u].replace(" at new ", " at "); + return e.displayName && i.includes("") && (i = i.replace("", e.displayName)), i + } + } while (1 <= u && 0 <= o); + break + } + } + } finally { + A = !1, Error.prepareStackTrace = t + } + return (e = e ? e.displayName || e.name : "") ? V(e) : "" + } + + function H(e) { + switch (e.tag) { + case 5: + return V(e.type); + case 16: + return V("Lazy"); + case 13: + return V("Suspense"); + case 19: + return V("SuspenseList"); + case 0: + case 2: + case 15: + return B(e.type, !1); + case 11: + return B(e.type.render, !1); + case 1: + return B(e.type, !0); + default: + return "" + } + } + + function W(e) { + if (null == e) return null; + if ("function" == typeof e) return e.displayName || e.name || null; + if ("string" == typeof e) return e; + switch (e) { + case E: + return "Fragment"; + case x: + return "Portal"; + case _: + return "Profiler"; + case C: + return "StrictMode"; + case T: + return "Suspense"; + case L: + return "SuspenseList" + } + if ("object" == typeof e) switch (e.$$typeof) { + case N: + return (e.displayName || "Context") + ".Consumer"; + case z: + return (e._context.displayName || "Context") + ".Provider"; + case P: + var n = e.render; + return (e = e.displayName) || (e = "" !== (e = n.displayName || n.name || "") ? "ForwardRef(" + e + ")" : "ForwardRef"), e; + case M: + return null !== (n = e.displayName || null) ? n : W(e.type) || "Memo"; + case F: + n = e._payload, e = e._init; + try { + return W(e(n)) + } catch (e) {} + } + return null + } + + function Q(e) { + var n = e.type; + switch (e.tag) { + case 24: + return "Cache"; + case 9: + return (n.displayName || "Context") + ".Consumer"; + case 10: + return (n._context.displayName || "Context") + ".Provider"; + case 18: + return "DehydratedFragment"; + case 11: + return e = (e = n.render).displayName || e.name || "", n.displayName || ("" !== e ? "ForwardRef(" + e + ")" : "ForwardRef"); + case 7: + return "Fragment"; + case 5: + return n; + case 4: + return "Portal"; + case 3: + return "Root"; + case 6: + return "Text"; + case 16: + return W(n); + case 8: + return n === C ? "StrictMode" : "Mode"; + case 22: + return "Offscreen"; + case 12: + return "Profiler"; + case 21: + return "Scope"; + case 13: + return "Suspense"; + case 19: + return "SuspenseList"; + case 25: + return "TracingMarker"; + case 1: + case 0: + case 17: + case 2: + case 14: + case 15: + if ("function" == typeof n) return n.displayName || n.name || null; + if ("string" == typeof n) return n + } + return null + } + + function j(e) { + switch (typeof e) { + case "boolean": + case "number": + case "string": + case "undefined": + case "object": + return e; + default: + return "" + } + } + + function $(e) { + var n = e.type; + return (e = e.nodeName) && "input" === e.toLowerCase() && ("checkbox" === n || "radio" === n) + } + + function K(e) { + e._valueTracker || (e._valueTracker = function(e) { + var n = $(e) ? "checked" : "value", + t = Object.getOwnPropertyDescriptor(e.constructor.prototype, n), + r = "" + e[n]; + if (!e.hasOwnProperty(n) && void 0 !== t && "function" == typeof t.get && "function" == typeof t.set) { + var l = t.get, + a = t.set; + return Object.defineProperty(e, n, { + configurable: !0, + get: function() { + return l.call(this) + }, + set: function(e) { + r = "" + e, a.call(this, e) + } + }), Object.defineProperty(e, n, { + enumerable: t.enumerable + }), { + getValue: function() { + return r + }, + setValue: function(e) { + r = "" + e + }, + stopTracking: function() { + e._valueTracker = null, delete e[n] + } + } + } + }(e)) + } + + function q(e) { + if (!e) return !1; + var n = e._valueTracker; + if (!n) return !0; + var t = n.getValue(), + r = ""; + return e && (r = $(e) ? e.checked ? "true" : "false" : e.value), (e = r) !== t && (n.setValue(e), !0) + } + + function Y(e) { + if (void 0 === (e = e || ("undefined" != typeof document ? document : void 0))) return null; + try { + return e.activeElement || e.body + } catch (n) { + return e.body + } + } + + function X(e, n) { + var t = n.checked; + return U({}, n, { + defaultChecked: void 0, + defaultValue: void 0, + value: void 0, + checked: null != t ? t : e._wrapperState.initialChecked + }) + } + + function G(e, n) { + var t = null == n.defaultValue ? "" : n.defaultValue, + r = null != n.checked ? n.checked : n.defaultChecked; + t = j(null != n.value ? n.value : t), e._wrapperState = { + initialChecked: r, + initialValue: t, + controlled: "checkbox" === n.type || "radio" === n.type ? null != n.checked : null != n.value + } + } + + function Z(e, n) { + null != (n = n.checked) && k(e, "checked", n, !1) + } + + function J(e, n) { + Z(e, n); + var t = j(n.value), + r = n.type; + if (null != t) "number" === r ? (0 === t && "" === e.value || e.value != t) && (e.value = "" + t) : e.value !== "" + t && (e.value = "" + t); + else if ("submit" === r || "reset" === r) return void e.removeAttribute("value"); + n.hasOwnProperty("value") ? ne(e, n.type, t) : n.hasOwnProperty("defaultValue") && ne(e, n.type, j(n.defaultValue)), null == n.checked && null != n.defaultChecked && (e.defaultChecked = !!n.defaultChecked) + } + + function ee(e, n, t) { + if (n.hasOwnProperty("value") || n.hasOwnProperty("defaultValue")) { + var r = n.type; + if (!("submit" !== r && "reset" !== r || void 0 !== n.value && null !== n.value)) return; + n = "" + e._wrapperState.initialValue, t || n === e.value || (e.value = n), e.defaultValue = n + } + "" !== (t = e.name) && (e.name = ""), e.defaultChecked = !!e._wrapperState.initialChecked, "" !== t && (e.name = t) + } + + function ne(e, n, t) { + "number" === n && Y(e.ownerDocument) === e || (null == t ? e.defaultValue = "" + e._wrapperState.initialValue : e.defaultValue !== "" + t && (e.defaultValue = "" + t)) + } + var te = Array.isArray; + + function re(e, n, t, r) { + if (e = e.options, n) { + n = {}; + for (var l = 0; l < t.length; l++) n["$" + t[l]] = !0; + for (t = 0; t < e.length; t++) l = n.hasOwnProperty("$" + e[t].value), e[t].selected !== l && (e[t].selected = l), l && r && (e[t].defaultSelected = !0) + } else { + for (t = "" + j(t), n = null, l = 0; l < e.length; l++) { + if (e[l].value === t) return e[l].selected = !0, void(r && (e[l].defaultSelected = !0)); + null !== n || e[l].disabled || (n = e[l]) + } + null !== n && (n.selected = !0) + } + } + + function le(e, n) { + if (null != n.dangerouslySetInnerHTML) throw Error(u(91)); + return U({}, n, { + value: void 0, + defaultValue: void 0, + children: "" + e._wrapperState.initialValue + }) + } + + function ae(e, n) { + var t = n.value; + if (null == t) { + if (t = n.children, n = n.defaultValue, null != t) { + if (null != n) throw Error(u(92)); + if (te(t)) { + if (1 < t.length) throw Error(u(93)); + t = t[0] + } + n = t + } + null == n && (n = ""), t = n + } + e._wrapperState = { + initialValue: j(t) + } + } + + function ue(e, n) { + var t = j(n.value), + r = j(n.defaultValue); + null != t && ((t = "" + t) !== e.value && (e.value = t), null == n.defaultValue && e.defaultValue !== t && (e.defaultValue = t)), null != r && (e.defaultValue = "" + r) + } + + function oe(e) { + var n = e.textContent; + n === e._wrapperState.initialValue && "" !== n && null !== n && (e.value = n) + } + + function ie(e) { + switch (e) { + case "svg": + return "http://www.w3.org/2000/svg"; + case "math": + return "http://www.w3.org/1998/Math/MathML"; + default: + return "http://www.w3.org/1999/xhtml" + } + } + + function se(e, n) { + return null == e || "http://www.w3.org/1999/xhtml" === e ? ie(n) : "http://www.w3.org/2000/svg" === e && "foreignObject" === n ? "http://www.w3.org/1999/xhtml" : e + } + var ce, fe, de = (fe = function(e, n) { + if ("http://www.w3.org/2000/svg" !== e.namespaceURI || "innerHTML" in e) e.innerHTML = n; + else { + for ((ce = ce || document.createElement("div")).innerHTML = "" + n.valueOf().toString() + "", n = ce.firstChild; e.firstChild;) e.removeChild(e.firstChild); + for (; n.firstChild;) e.appendChild(n.firstChild) + } + }, "undefined" != typeof MSApp && MSApp.execUnsafeLocalFunction ? function(e, n, t, r) { + MSApp.execUnsafeLocalFunction((function() { + return fe(e, n) + })) + } : fe); + + function pe(e, n) { + if (n) { + var t = e.firstChild; + if (t && t === e.lastChild && 3 === t.nodeType) return void(t.nodeValue = n) + } + e.textContent = n + } + var me = { + animationIterationCount: !0, + aspectRatio: !0, + borderImageOutset: !0, + borderImageSlice: !0, + borderImageWidth: !0, + boxFlex: !0, + boxFlexGroup: !0, + boxOrdinalGroup: !0, + columnCount: !0, + columns: !0, + flex: !0, + flexGrow: !0, + flexPositive: !0, + flexShrink: !0, + flexNegative: !0, + flexOrder: !0, + gridArea: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowSpan: !0, + gridRowStart: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnSpan: !0, + gridColumnStart: !0, + fontWeight: !0, + lineClamp: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + tabSize: !0, + widows: !0, + zIndex: !0, + zoom: !0, + fillOpacity: !0, + floodOpacity: !0, + stopOpacity: !0, + strokeDasharray: !0, + strokeDashoffset: !0, + strokeMiterlimit: !0, + strokeOpacity: !0, + strokeWidth: !0 + }, + he = ["Webkit", "ms", "Moz", "O"]; + + function ge(e, n, t) { + return null == n || "boolean" == typeof n || "" === n ? "" : t || "number" != typeof n || 0 === n || me.hasOwnProperty(e) && me[e] ? ("" + n).trim() : n + "px" + } + + function ve(e, n) { + for (var t in e = e.style, n) + if (n.hasOwnProperty(t)) { + var r = 0 === t.indexOf("--"), + l = ge(t, n[t], r); + "float" === t && (t = "cssFloat"), r ? e.setProperty(t, l) : e[t] = l + } + } + Object.keys(me).forEach((function(e) { + he.forEach((function(n) { + n = n + e.charAt(0).toUpperCase() + e.substring(1), me[n] = me[e] + })) + })); + var ye = U({ + menuitem: !0 + }, { + area: !0, + base: !0, + br: !0, + col: !0, + embed: !0, + hr: !0, + img: !0, + input: !0, + keygen: !0, + link: !0, + meta: !0, + param: !0, + source: !0, + track: !0, + wbr: !0 + }); + + function be(e, n) { + if (n) { + if (ye[e] && (null != n.children || null != n.dangerouslySetInnerHTML)) throw Error(u(137, e)); + if (null != n.dangerouslySetInnerHTML) { + if (null != n.children) throw Error(u(60)); + if ("object" != typeof n.dangerouslySetInnerHTML || !("__html" in n.dangerouslySetInnerHTML)) throw Error(u(61)) + } + if (null != n.style && "object" != typeof n.style) throw Error(u(62)) + } + } + + function ke(e, n) { + if (-1 === e.indexOf("-")) return "string" == typeof n.is; + switch (e) { + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + return !1; + default: + return !0 + } + } + var we = null; + + function Se(e) { + return (e = e.target || e.srcElement || window).correspondingUseElement && (e = e.correspondingUseElement), 3 === e.nodeType ? e.parentNode : e + } + var xe = null, + Ee = null, + Ce = null; + + function _e(e) { + if (e = kl(e)) { + if ("function" != typeof xe) throw Error(u(280)); + var n = e.stateNode; + n && (n = Sl(n), xe(e.stateNode, e.type, n)) + } + } + + function ze(e) { + Ee ? Ce ? Ce.push(e) : Ce = [e] : Ee = e + } + + function Ne() { + if (Ee) { + var e = Ee, + n = Ce; + if (Ce = Ee = null, _e(e), n) + for (e = 0; e < n.length; e++) _e(n[e]) + } + } + + function Pe(e, n) { + return e(n) + } + + function Te() {} + var Le = !1; + + function Me(e, n, t) { + if (Le) return e(n, t); + Le = !0; + try { + return Pe(e, n, t) + } finally { + Le = !1, (null !== Ee || null !== Ce) && (Te(), Ne()) + } + } + + function Fe(e, n) { + var t = e.stateNode; + if (null === t) return null; + var r = Sl(t); + if (null === r) return null; + t = r[n]; + e: switch (n) { + case "onClick": + case "onClickCapture": + case "onDoubleClick": + case "onDoubleClickCapture": + case "onMouseDown": + case "onMouseDownCapture": + case "onMouseMove": + case "onMouseMoveCapture": + case "onMouseUp": + case "onMouseUpCapture": + case "onMouseEnter": + (r = !r.disabled) || (r = !("button" === (e = e.type) || "input" === e || "select" === e || "textarea" === e)), e = !r; + break e; + default: + e = !1 + } + if (e) return null; + if (t && "function" != typeof t) throw Error(u(231, n, typeof t)); + return t + } + var Re = !1; + if (f) try { + var De = {}; + Object.defineProperty(De, "passive", { + get: function() { + Re = !0 + } + }), window.addEventListener("test", De, De), window.removeEventListener("test", De, De) + } catch (fe) { + Re = !1 + } + + function Oe(e, n, t, r, l, a, u, o, i) { + var s = Array.prototype.slice.call(arguments, 3); + try { + n.apply(t, s) + } catch (e) { + this.onError(e) + } + } + var Ie = !1, + Ue = null, + Ve = !1, + Ae = null, + Be = { + onError: function(e) { + Ie = !0, Ue = e + } + }; + + function He(e, n, t, r, l, a, u, o, i) { + Ie = !1, Ue = null, Oe.apply(Be, arguments) + } + + function We(e) { + var n = e, + t = e; + if (e.alternate) + for (; n.return;) n = n.return; + else { + e = n; + do { + 0 != (4098 & (n = e).flags) && (t = n.return), e = n.return + } while (e) + } + return 3 === n.tag ? t : null + } + + function Qe(e) { + if (13 === e.tag) { + var n = e.memoizedState; + if (null === n && null !== (e = e.alternate) && (n = e.memoizedState), null !== n) return n.dehydrated + } + return null + } + + function je(e) { + if (We(e) !== e) throw Error(u(188)) + } + + function $e(e) { + return null !== (e = function(e) { + var n = e.alternate; + if (!n) { + if (null === (n = We(e))) throw Error(u(188)); + return n !== e ? null : e + } + for (var t = e, r = n;;) { + var l = t.return; + if (null === l) break; + var a = l.alternate; + if (null === a) { + if (null !== (r = l.return)) { + t = r; + continue + } + break + } + if (l.child === a.child) { + for (a = l.child; a;) { + if (a === t) return je(l), e; + if (a === r) return je(l), n; + a = a.sibling + } + throw Error(u(188)) + } + if (t.return !== r.return) t = l, r = a; + else { + for (var o = !1, i = l.child; i;) { + if (i === t) { + o = !0, t = l, r = a; + break + } + if (i === r) { + o = !0, r = l, t = a; + break + } + i = i.sibling + } + if (!o) { + for (i = a.child; i;) { + if (i === t) { + o = !0, t = a, r = l; + break + } + if (i === r) { + o = !0, r = a, t = l; + break + } + i = i.sibling + } + if (!o) throw Error(u(189)) + } + } + if (t.alternate !== r) throw Error(u(190)) + } + if (3 !== t.tag) throw Error(u(188)); + return t.stateNode.current === t ? e : n + }(e)) ? Ke(e) : null + } + + function Ke(e) { + if (5 === e.tag || 6 === e.tag) return e; + for (e = e.child; null !== e;) { + var n = Ke(e); + if (null !== n) return n; + e = e.sibling + } + return null + } + var qe = a.unstable_scheduleCallback, + Ye = a.unstable_cancelCallback, + Xe = a.unstable_shouldYield, + Ge = a.unstable_requestPaint, + Ze = a.unstable_now, + Je = a.unstable_getCurrentPriorityLevel, + en = a.unstable_ImmediatePriority, + nn = a.unstable_UserBlockingPriority, + tn = a.unstable_NormalPriority, + rn = a.unstable_LowPriority, + ln = a.unstable_IdlePriority, + an = null, + un = null, + on = Math.clz32 ? Math.clz32 : function(e) { + return 0 == (e >>>= 0) ? 32 : 31 - (sn(e) / cn | 0) | 0 + }, + sn = Math.log, + cn = Math.LN2, + fn = 64, + dn = 4194304; + + function pn(e) { + switch (e & -e) { + case 1: + return 1; + case 2: + return 2; + case 4: + return 4; + case 8: + return 8; + case 16: + return 16; + case 32: + return 32; + case 64: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: + return 4194240 & e; + case 4194304: + case 8388608: + case 16777216: + case 33554432: + case 67108864: + return 130023424 & e; + case 134217728: + return 134217728; + case 268435456: + return 268435456; + case 536870912: + return 536870912; + case 1073741824: + return 1073741824; + default: + return e + } + } + + function mn(e, n) { + var t = e.pendingLanes; + if (0 === t) return 0; + var r = 0, + l = e.suspendedLanes, + a = e.pingedLanes, + u = 268435455 & t; + if (0 !== u) { + var o = u & ~l; + 0 !== o ? r = pn(o) : 0 != (a &= u) && (r = pn(a)) + } else 0 != (u = t & ~l) ? r = pn(u) : 0 !== a && (r = pn(a)); + if (0 === r) return 0; + if (0 !== n && n !== r && 0 == (n & l) && ((l = r & -r) >= (a = n & -n) || 16 === l && 0 != (4194240 & a))) return n; + if (0 != (4 & r) && (r |= 16 & t), 0 !== (n = e.entangledLanes)) + for (e = e.entanglements, n &= r; 0 < n;) l = 1 << (t = 31 - on(n)), r |= e[t], n &= ~l; + return r + } + + function hn(e, n) { + switch (e) { + case 1: + case 2: + case 4: + return n + 250; + case 8: + case 16: + case 32: + case 64: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: + return n + 5e3; + default: + return -1 + } + } + + function gn(e) { + return 0 != (e = -1073741825 & e.pendingLanes) ? e : 1073741824 & e ? 1073741824 : 0 + } + + function vn() { + var e = fn; + return 0 == (4194240 & (fn <<= 1)) && (fn = 64), e + } + + function yn(e) { + for (var n = [], t = 0; 31 > t; t++) n.push(e); + return n + } + + function bn(e, n, t) { + e.pendingLanes |= n, 536870912 !== n && (e.suspendedLanes = 0, e.pingedLanes = 0), (e = e.eventTimes)[n = 31 - on(n)] = t + } + + function kn(e, n) { + var t = e.entangledLanes |= n; + for (e = e.entanglements; t;) { + var r = 31 - on(t), + l = 1 << r; + l & n | e[r] & n && (e[r] |= n), t &= ~l + } + } + var wn = 0; + + function Sn(e) { + return 1 < (e &= -e) ? 4 < e ? 0 != (268435455 & e) ? 16 : 536870912 : 4 : 1 + } + var xn, En, Cn, _n, zn, Nn = !1, + Pn = [], + Tn = null, + Ln = null, + Mn = null, + Fn = new Map, + Rn = new Map, + Dn = [], + On = "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "); + + function In(e, n) { + switch (e) { + case "focusin": + case "focusout": + Tn = null; + break; + case "dragenter": + case "dragleave": + Ln = null; + break; + case "mouseover": + case "mouseout": + Mn = null; + break; + case "pointerover": + case "pointerout": + Fn.delete(n.pointerId); + break; + case "gotpointercapture": + case "lostpointercapture": + Rn.delete(n.pointerId) + } + } + + function Un(e, n, t, r, l, a) { + return null === e || e.nativeEvent !== a ? (e = { + blockedOn: n, + domEventName: t, + eventSystemFlags: r, + nativeEvent: a, + targetContainers: [l] + }, null !== n && null !== (n = kl(n)) && En(n), e) : (e.eventSystemFlags |= r, n = e.targetContainers, null !== l && -1 === n.indexOf(l) && n.push(l), e) + } + + function Vn(e) { + var n = bl(e.target); + if (null !== n) { + var t = We(n); + if (null !== t) + if (13 === (n = t.tag)) { + if (null !== (n = Qe(t))) return e.blockedOn = n, void zn(e.priority, (function() { + Cn(t) + })) + } else if (3 === n && t.stateNode.current.memoizedState.isDehydrated) return void(e.blockedOn = 3 === t.tag ? t.stateNode.containerInfo : null) + } + e.blockedOn = null + } + + function An(e) { + if (null !== e.blockedOn) return !1; + for (var n = e.targetContainers; 0 < n.length;) { + var t = Gn(e.domEventName, e.eventSystemFlags, n[0], e.nativeEvent); + if (null !== t) return null !== (n = kl(t)) && En(n), e.blockedOn = t, !1; + var r = new(t = e.nativeEvent).constructor(t.type, t); + we = r, t.target.dispatchEvent(r), we = null, n.shift() + } + return !0 + } + + function Bn(e, n, t) { + An(e) && t.delete(n) + } + + function Hn() { + Nn = !1, null !== Tn && An(Tn) && (Tn = null), null !== Ln && An(Ln) && (Ln = null), null !== Mn && An(Mn) && (Mn = null), Fn.forEach(Bn), Rn.forEach(Bn) + } + + function Wn(e, n) { + e.blockedOn === n && (e.blockedOn = null, Nn || (Nn = !0, a.unstable_scheduleCallback(a.unstable_NormalPriority, Hn))) + } + + function Qn(e) { + function n(n) { + return Wn(n, e) + } + if (0 < Pn.length) { + Wn(Pn[0], e); + for (var t = 1; t < Pn.length; t++) { + var r = Pn[t]; + r.blockedOn === e && (r.blockedOn = null) + } + } + for (null !== Tn && Wn(Tn, e), null !== Ln && Wn(Ln, e), null !== Mn && Wn(Mn, e), Fn.forEach(n), Rn.forEach(n), t = 0; t < Dn.length; t++)(r = Dn[t]).blockedOn === e && (r.blockedOn = null); + for (; 0 < Dn.length && null === (t = Dn[0]).blockedOn;) Vn(t), null === t.blockedOn && Dn.shift() + } + var jn = w.ReactCurrentBatchConfig, + $n = !0; + + function Kn(e, n, t, r) { + var l = wn, + a = jn.transition; + jn.transition = null; + try { + wn = 1, Yn(e, n, t, r) + } finally { + wn = l, jn.transition = a + } + } + + function qn(e, n, t, r) { + var l = wn, + a = jn.transition; + jn.transition = null; + try { + wn = 4, Yn(e, n, t, r) + } finally { + wn = l, jn.transition = a + } + } + + function Yn(e, n, t, r) { + if ($n) { + var l = Gn(e, n, t, r); + if (null === l) jr(e, n, r, Xn, t), In(e, r); + else if (function(e, n, t, r, l) { + switch (n) { + case "focusin": + return Tn = Un(Tn, e, n, t, r, l), !0; + case "dragenter": + return Ln = Un(Ln, e, n, t, r, l), !0; + case "mouseover": + return Mn = Un(Mn, e, n, t, r, l), !0; + case "pointerover": + var a = l.pointerId; + return Fn.set(a, Un(Fn.get(a) || null, e, n, t, r, l)), !0; + case "gotpointercapture": + return a = l.pointerId, Rn.set(a, Un(Rn.get(a) || null, e, n, t, r, l)), !0 + } + return !1 + }(l, e, n, t, r)) r.stopPropagation(); + else if (In(e, r), 4 & n && -1 < On.indexOf(e)) { + for (; null !== l;) { + var a = kl(l); + if (null !== a && xn(a), null === (a = Gn(e, n, t, r)) && jr(e, n, r, Xn, t), a === l) break; + l = a + } + null !== l && r.stopPropagation() + } else jr(e, n, r, null, t) + } + } + var Xn = null; + + function Gn(e, n, t, r) { + if (Xn = null, null !== (e = bl(e = Se(r)))) + if (null === (n = We(e))) e = null; + else if (13 === (t = n.tag)) { + if (null !== (e = Qe(n))) return e; + e = null + } else if (3 === t) { + if (n.stateNode.current.memoizedState.isDehydrated) return 3 === n.tag ? n.stateNode.containerInfo : null; + e = null + } else n !== e && (e = null); + return Xn = e, null + } + + function Zn(e) { + switch (e) { + case "cancel": + case "click": + case "close": + case "contextmenu": + case "copy": + case "cut": + case "auxclick": + case "dblclick": + case "dragend": + case "dragstart": + case "drop": + case "focusin": + case "focusout": + case "input": + case "invalid": + case "keydown": + case "keypress": + case "keyup": + case "mousedown": + case "mouseup": + case "paste": + case "pause": + case "play": + case "pointercancel": + case "pointerdown": + case "pointerup": + case "ratechange": + case "reset": + case "resize": + case "seeked": + case "submit": + case "touchcancel": + case "touchend": + case "touchstart": + case "volumechange": + case "change": + case "selectionchange": + case "textInput": + case "compositionstart": + case "compositionend": + case "compositionupdate": + case "beforeblur": + case "afterblur": + case "beforeinput": + case "blur": + case "fullscreenchange": + case "focus": + case "hashchange": + case "popstate": + case "select": + case "selectstart": + return 1; + case "drag": + case "dragenter": + case "dragexit": + case "dragleave": + case "dragover": + case "mousemove": + case "mouseout": + case "mouseover": + case "pointermove": + case "pointerout": + case "pointerover": + case "scroll": + case "toggle": + case "touchmove": + case "wheel": + case "mouseenter": + case "mouseleave": + case "pointerenter": + case "pointerleave": + return 4; + case "message": + switch (Je()) { + case en: + return 1; + case nn: + return 4; + case tn: + case rn: + return 16; + case ln: + return 536870912; + default: + return 16 + } + default: + return 16 + } + } + var Jn = null, + et = null, + nt = null; + + function tt() { + if (nt) return nt; + var e, n, t = et, + r = t.length, + l = "value" in Jn ? Jn.value : Jn.textContent, + a = l.length; + for (e = 0; e < r && t[e] === l[e]; e++); + var u = r - e; + for (n = 1; n <= u && t[r - n] === l[a - n]; n++); + return nt = l.slice(e, 1 < n ? 1 - n : void 0) + } + + function rt(e) { + var n = e.keyCode; + return "charCode" in e ? 0 === (e = e.charCode) && 13 === n && (e = 13) : e = n, 10 === e && (e = 13), 32 <= e || 13 === e ? e : 0 + } + + function lt() { + return !0 + } + + function at() { + return !1 + } + + function ut(e) { + function n(n, t, r, l, a) { + for (var u in this._reactName = n, this._targetInst = r, this.type = t, this.nativeEvent = l, this.target = a, this.currentTarget = null, e) e.hasOwnProperty(u) && (n = e[u], this[u] = n ? n(l) : l[u]); + return this.isDefaultPrevented = (null != l.defaultPrevented ? l.defaultPrevented : !1 === l.returnValue) ? lt : at, this.isPropagationStopped = at, this + } + return U(n.prototype, { + preventDefault: function() { + this.defaultPrevented = !0; + var e = this.nativeEvent; + e && (e.preventDefault ? e.preventDefault() : "unknown" != typeof e.returnValue && (e.returnValue = !1), this.isDefaultPrevented = lt) + }, + stopPropagation: function() { + var e = this.nativeEvent; + e && (e.stopPropagation ? e.stopPropagation() : "unknown" != typeof e.cancelBubble && (e.cancelBubble = !0), this.isPropagationStopped = lt) + }, + persist: function() {}, + isPersistent: lt + }), n + } + var ot, it, st, ct = { + eventPhase: 0, + bubbles: 0, + cancelable: 0, + timeStamp: function(e) { + return e.timeStamp || Date.now() + }, + defaultPrevented: 0, + isTrusted: 0 + }, + ft = ut(ct), + dt = U({}, ct, { + view: 0, + detail: 0 + }), + pt = ut(dt), + mt = U({}, dt, { + screenX: 0, + screenY: 0, + clientX: 0, + clientY: 0, + pageX: 0, + pageY: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + getModifierState: _t, + button: 0, + buttons: 0, + relatedTarget: function(e) { + return void 0 === e.relatedTarget ? e.fromElement === e.srcElement ? e.toElement : e.fromElement : e.relatedTarget + }, + movementX: function(e) { + return "movementX" in e ? e.movementX : (e !== st && (st && "mousemove" === e.type ? (ot = e.screenX - st.screenX, it = e.screenY - st.screenY) : it = ot = 0, st = e), ot) + }, + movementY: function(e) { + return "movementY" in e ? e.movementY : it + } + }), + ht = ut(mt), + gt = ut(U({}, mt, { + dataTransfer: 0 + })), + vt = ut(U({}, dt, { + relatedTarget: 0 + })), + yt = ut(U({}, ct, { + animationName: 0, + elapsedTime: 0, + pseudoElement: 0 + })), + bt = U({}, ct, { + clipboardData: function(e) { + return "clipboardData" in e ? e.clipboardData : window.clipboardData + } + }), + kt = ut(bt), + wt = ut(U({}, ct, { + data: 0 + })), + St = { + Esc: "Escape", + Spacebar: " ", + Left: "ArrowLeft", + Up: "ArrowUp", + Right: "ArrowRight", + Down: "ArrowDown", + Del: "Delete", + Win: "OS", + Menu: "ContextMenu", + Apps: "ContextMenu", + Scroll: "ScrollLock", + MozPrintableKey: "Unidentified" + }, + xt = { + 8: "Backspace", + 9: "Tab", + 12: "Clear", + 13: "Enter", + 16: "Shift", + 17: "Control", + 18: "Alt", + 19: "Pause", + 20: "CapsLock", + 27: "Escape", + 32: " ", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "ArrowLeft", + 38: "ArrowUp", + 39: "ArrowRight", + 40: "ArrowDown", + 45: "Insert", + 46: "Delete", + 112: "F1", + 113: "F2", + 114: "F3", + 115: "F4", + 116: "F5", + 117: "F6", + 118: "F7", + 119: "F8", + 120: "F9", + 121: "F10", + 122: "F11", + 123: "F12", + 144: "NumLock", + 145: "ScrollLock", + 224: "Meta" + }, + Et = { + Alt: "altKey", + Control: "ctrlKey", + Meta: "metaKey", + Shift: "shiftKey" + }; + + function Ct(e) { + var n = this.nativeEvent; + return n.getModifierState ? n.getModifierState(e) : !!(e = Et[e]) && !!n[e] + } + + function _t() { + return Ct + } + var zt = U({}, dt, { + key: function(e) { + if (e.key) { + var n = St[e.key] || e.key; + if ("Unidentified" !== n) return n + } + return "keypress" === e.type ? 13 === (e = rt(e)) ? "Enter" : String.fromCharCode(e) : "keydown" === e.type || "keyup" === e.type ? xt[e.keyCode] || "Unidentified" : "" + }, + code: 0, + location: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + repeat: 0, + locale: 0, + getModifierState: _t, + charCode: function(e) { + return "keypress" === e.type ? rt(e) : 0 + }, + keyCode: function(e) { + return "keydown" === e.type || "keyup" === e.type ? e.keyCode : 0 + }, + which: function(e) { + return "keypress" === e.type ? rt(e) : "keydown" === e.type || "keyup" === e.type ? e.keyCode : 0 + } + }), + Nt = ut(zt), + Pt = ut(U({}, mt, { + pointerId: 0, + width: 0, + height: 0, + pressure: 0, + tangentialPressure: 0, + tiltX: 0, + tiltY: 0, + twist: 0, + pointerType: 0, + isPrimary: 0 + })), + Tt = ut(U({}, dt, { + touches: 0, + targetTouches: 0, + changedTouches: 0, + altKey: 0, + metaKey: 0, + ctrlKey: 0, + shiftKey: 0, + getModifierState: _t + })), + Lt = ut(U({}, ct, { + propertyName: 0, + elapsedTime: 0, + pseudoElement: 0 + })), + Mt = U({}, mt, { + deltaX: function(e) { + return "deltaX" in e ? e.deltaX : "wheelDeltaX" in e ? -e.wheelDeltaX : 0 + }, + deltaY: function(e) { + return "deltaY" in e ? e.deltaY : "wheelDeltaY" in e ? -e.wheelDeltaY : "wheelDelta" in e ? -e.wheelDelta : 0 + }, + deltaZ: 0, + deltaMode: 0 + }), + Ft = ut(Mt), + Rt = [9, 13, 27, 32], + Dt = f && "CompositionEvent" in window, + Ot = null; + f && "documentMode" in document && (Ot = document.documentMode); + var It = f && "TextEvent" in window && !Ot, + Ut = f && (!Dt || Ot && 8 < Ot && 11 >= Ot), + Vt = String.fromCharCode(32), + At = !1; + + function Bt(e, n) { + switch (e) { + case "keyup": + return -1 !== Rt.indexOf(n.keyCode); + case "keydown": + return 229 !== n.keyCode; + case "keypress": + case "mousedown": + case "focusout": + return !0; + default: + return !1 + } + } + + function Ht(e) { + return "object" == typeof(e = e.detail) && "data" in e ? e.data : null + } + var Wt = !1, + Qt = { + color: !0, + date: !0, + datetime: !0, + "datetime-local": !0, + email: !0, + month: !0, + number: !0, + password: !0, + range: !0, + search: !0, + tel: !0, + text: !0, + time: !0, + url: !0, + week: !0 + }; + + function jt(e) { + var n = e && e.nodeName && e.nodeName.toLowerCase(); + return "input" === n ? !!Qt[e.type] : "textarea" === n + } + + function $t(e, n, t, r) { + ze(r), 0 < (n = Kr(n, "onChange")).length && (t = new ft("onChange", "change", null, t, r), e.push({ + event: t, + listeners: n + })) + } + var Kt = null, + qt = null; + + function Yt(e) { + Vr(e, 0) + } + + function Xt(e) { + if (q(wl(e))) return e + } + + function Gt(e, n) { + if ("change" === e) return n + } + var Zt = !1; + if (f) { + var Jt; + if (f) { + var er = "oninput" in document; + if (!er) { + var nr = document.createElement("div"); + nr.setAttribute("oninput", "return;"), er = "function" == typeof nr.oninput + } + Jt = er + } else Jt = !1; + Zt = Jt && (!document.documentMode || 9 < document.documentMode) + } + + function tr() { + Kt && (Kt.detachEvent("onpropertychange", rr), qt = Kt = null) + } + + function rr(e) { + if ("value" === e.propertyName && Xt(qt)) { + var n = []; + $t(n, qt, e, Se(e)), Me(Yt, n) + } + } + + function lr(e, n, t) { + "focusin" === e ? (tr(), qt = t, (Kt = n).attachEvent("onpropertychange", rr)) : "focusout" === e && tr() + } + + function ar(e) { + if ("selectionchange" === e || "keyup" === e || "keydown" === e) return Xt(qt) + } + + function ur(e, n) { + if ("click" === e) return Xt(n) + } + + function or(e, n) { + if ("input" === e || "change" === e) return Xt(n) + } + var ir = "function" == typeof Object.is ? Object.is : function(e, n) { + return e === n && (0 !== e || 1 / e == 1 / n) || e != e && n != n + }; + + function sr(e, n) { + if (ir(e, n)) return !0; + if ("object" != typeof e || null === e || "object" != typeof n || null === n) return !1; + var t = Object.keys(e), + r = Object.keys(n); + if (t.length !== r.length) return !1; + for (r = 0; r < t.length; r++) { + var l = t[r]; + if (!d.call(n, l) || !ir(e[l], n[l])) return !1 + } + return !0 + } + + function cr(e) { + for (; e && e.firstChild;) e = e.firstChild; + return e + } + + function fr(e, n) { + var t, r = cr(e); + for (e = 0; r;) { + if (3 === r.nodeType) { + if (t = e + r.textContent.length, e <= n && t >= n) return { + node: r, + offset: n - e + }; + e = t + } + e: { + for (; r;) { + if (r.nextSibling) { + r = r.nextSibling; + break e + } + r = r.parentNode + } + r = void 0 + } + r = cr(r) + } + } + + function dr(e, n) { + return !(!e || !n) && (e === n || (!e || 3 !== e.nodeType) && (n && 3 === n.nodeType ? dr(e, n.parentNode) : "contains" in e ? e.contains(n) : !!e.compareDocumentPosition && !!(16 & e.compareDocumentPosition(n)))) + } + + function pr() { + for (var e = window, n = Y(); n instanceof e.HTMLIFrameElement;) { + try { + var t = "string" == typeof n.contentWindow.location.href + } catch (e) { + t = !1 + } + if (!t) break; + n = Y((e = n.contentWindow).document) + } + return n + } + + function mr(e) { + var n = e && e.nodeName && e.nodeName.toLowerCase(); + return n && ("input" === n && ("text" === e.type || "search" === e.type || "tel" === e.type || "url" === e.type || "password" === e.type) || "textarea" === n || "true" === e.contentEditable) + } + + function hr(e) { + var n = pr(), + t = e.focusedElem, + r = e.selectionRange; + if (n !== t && t && t.ownerDocument && dr(t.ownerDocument.documentElement, t)) { + if (null !== r && mr(t)) + if (n = r.start, void 0 === (e = r.end) && (e = n), "selectionStart" in t) t.selectionStart = n, t.selectionEnd = Math.min(e, t.value.length); + else if ((e = (n = t.ownerDocument || document) && n.defaultView || window).getSelection) { + e = e.getSelection(); + var l = t.textContent.length, + a = Math.min(r.start, l); + r = void 0 === r.end ? a : Math.min(r.end, l), !e.extend && a > r && (l = r, r = a, a = l), l = fr(t, a); + var u = fr(t, r); + l && u && (1 !== e.rangeCount || e.anchorNode !== l.node || e.anchorOffset !== l.offset || e.focusNode !== u.node || e.focusOffset !== u.offset) && ((n = n.createRange()).setStart(l.node, l.offset), e.removeAllRanges(), a > r ? (e.addRange(n), e.extend(u.node, u.offset)) : (n.setEnd(u.node, u.offset), e.addRange(n))) + } + for (n = [], e = t; e = e.parentNode;) 1 === e.nodeType && n.push({ + element: e, + left: e.scrollLeft, + top: e.scrollTop + }); + for ("function" == typeof t.focus && t.focus(), t = 0; t < n.length; t++)(e = n[t]).element.scrollLeft = e.left, e.element.scrollTop = e.top + } + } + var gr = f && "documentMode" in document && 11 >= document.documentMode, + vr = null, + yr = null, + br = null, + kr = !1; + + function wr(e, n, t) { + var r = t.window === t ? t.document : 9 === t.nodeType ? t : t.ownerDocument; + kr || null == vr || vr !== Y(r) || (r = "selectionStart" in (r = vr) && mr(r) ? { + start: r.selectionStart, + end: r.selectionEnd + } : { + anchorNode: (r = (r.ownerDocument && r.ownerDocument.defaultView || window).getSelection()).anchorNode, + anchorOffset: r.anchorOffset, + focusNode: r.focusNode, + focusOffset: r.focusOffset + }, br && sr(br, r) || (br = r, 0 < (r = Kr(yr, "onSelect")).length && (n = new ft("onSelect", "select", null, n, t), e.push({ + event: n, + listeners: r + }), n.target = vr))) + } + + function Sr(e, n) { + var t = {}; + return t[e.toLowerCase()] = n.toLowerCase(), t["Webkit" + e] = "webkit" + n, t["Moz" + e] = "moz" + n, t + } + var xr = { + animationend: Sr("Animation", "AnimationEnd"), + animationiteration: Sr("Animation", "AnimationIteration"), + animationstart: Sr("Animation", "AnimationStart"), + transitionend: Sr("Transition", "TransitionEnd") + }, + Er = {}, + Cr = {}; + + function _r(e) { + if (Er[e]) return Er[e]; + if (!xr[e]) return e; + var n, t = xr[e]; + for (n in t) + if (t.hasOwnProperty(n) && n in Cr) return Er[e] = t[n]; + return e + } + f && (Cr = document.createElement("div").style, "AnimationEvent" in window || (delete xr.animationend.animation, delete xr.animationiteration.animation, delete xr.animationstart.animation), "TransitionEvent" in window || delete xr.transitionend.transition); + var zr = _r("animationend"), + Nr = _r("animationiteration"), + Pr = _r("animationstart"), + Tr = _r("transitionend"), + Lr = new Map, + Mr = "abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" "); + + function Fr(e, n) { + Lr.set(e, n), s(n, [e]) + } + for (var Rr = 0; Rr < Mr.length; Rr++) { + var Dr = Mr[Rr]; + Fr(Dr.toLowerCase(), "on" + (Dr[0].toUpperCase() + Dr.slice(1))) + } + Fr(zr, "onAnimationEnd"), Fr(Nr, "onAnimationIteration"), Fr(Pr, "onAnimationStart"), Fr("dblclick", "onDoubleClick"), Fr("focusin", "onFocus"), Fr("focusout", "onBlur"), Fr(Tr, "onTransitionEnd"), c("onMouseEnter", ["mouseout", "mouseover"]), c("onMouseLeave", ["mouseout", "mouseover"]), c("onPointerEnter", ["pointerout", "pointerover"]), c("onPointerLeave", ["pointerout", "pointerover"]), s("onChange", "change click focusin focusout input keydown keyup selectionchange".split(" ")), s("onSelect", "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")), s("onBeforeInput", ["compositionend", "keypress", "textInput", "paste"]), s("onCompositionEnd", "compositionend focusout keydown keypress keyup mousedown".split(" ")), s("onCompositionStart", "compositionstart focusout keydown keypress keyup mousedown".split(" ")), s("onCompositionUpdate", "compositionupdate focusout keydown keypress keyup mousedown".split(" ")); + var Or = "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "), + Ir = new Set("cancel close invalid load scroll toggle".split(" ").concat(Or)); + + function Ur(e, n, t) { + var r = e.type || "unknown-event"; + e.currentTarget = t, + function(e, n, t, r, l, a, o, i, s) { + if (He.apply(this, arguments), Ie) { + if (!Ie) throw Error(u(198)); + var c = Ue; + Ie = !1, Ue = null, Ve || (Ve = !0, Ae = c) + } + }(r, n, void 0, e), e.currentTarget = null + } + + function Vr(e, n) { + n = 0 != (4 & n); + for (var t = 0; t < e.length; t++) { + var r = e[t], + l = r.event; + r = r.listeners; + e: { + var a = void 0; + if (n) + for (var u = r.length - 1; 0 <= u; u--) { + var o = r[u], + i = o.instance, + s = o.currentTarget; + if (o = o.listener, i !== a && l.isPropagationStopped()) break e; + Ur(l, o, s), a = i + } else + for (u = 0; u < r.length; u++) { + if (i = (o = r[u]).instance, s = o.currentTarget, o = o.listener, i !== a && l.isPropagationStopped()) break e; + Ur(l, o, s), a = i + } + } + } + if (Ve) throw e = Ae, Ve = !1, Ae = null, e + } + + function Ar(e, n) { + var t = n[gl]; + void 0 === t && (t = n[gl] = new Set); + var r = e + "__bubble"; + t.has(r) || (Qr(n, e, 2, !1), t.add(r)) + } + + function Br(e, n, t) { + var r = 0; + n && (r |= 4), Qr(t, e, r, n) + } + var Hr = "_reactListening" + Math.random().toString(36).slice(2); + + function Wr(e) { + if (!e[Hr]) { + e[Hr] = !0, o.forEach((function(n) { + "selectionchange" !== n && (Ir.has(n) || Br(n, !1, e), Br(n, !0, e)) + })); + var n = 9 === e.nodeType ? e : e.ownerDocument; + null === n || n[Hr] || (n[Hr] = !0, Br("selectionchange", !1, n)) + } + } + + function Qr(e, n, t, r) { + switch (Zn(n)) { + case 1: + var l = Kn; + break; + case 4: + l = qn; + break; + default: + l = Yn + } + t = l.bind(null, n, t, e), l = void 0, !Re || "touchstart" !== n && "touchmove" !== n && "wheel" !== n || (l = !0), r ? void 0 !== l ? e.addEventListener(n, t, { + capture: !0, + passive: l + }) : e.addEventListener(n, t, !0) : void 0 !== l ? e.addEventListener(n, t, { + passive: l + }) : e.addEventListener(n, t, !1) + } + + function jr(e, n, t, r, l) { + var a = r; + if (0 == (1 & n) && 0 == (2 & n) && null !== r) e: for (;;) { + if (null === r) return; + var u = r.tag; + if (3 === u || 4 === u) { + var o = r.stateNode.containerInfo; + if (o === l || 8 === o.nodeType && o.parentNode === l) break; + if (4 === u) + for (u = r.return; null !== u;) { + var i = u.tag; + if ((3 === i || 4 === i) && ((i = u.stateNode.containerInfo) === l || 8 === i.nodeType && i.parentNode === l)) return; + u = u.return + } + for (; null !== o;) { + if (null === (u = bl(o))) return; + if (5 === (i = u.tag) || 6 === i) { + r = a = u; + continue e + } + o = o.parentNode + } + } + r = r.return + } + Me((function() { + var r = a, + l = Se(t), + u = []; + e: { + var o = Lr.get(e); + if (void 0 !== o) { + var i = ft, + s = e; + switch (e) { + case "keypress": + if (0 === rt(t)) break e; + case "keydown": + case "keyup": + i = Nt; + break; + case "focusin": + s = "focus", i = vt; + break; + case "focusout": + s = "blur", i = vt; + break; + case "beforeblur": + case "afterblur": + i = vt; + break; + case "click": + if (2 === t.button) break e; + case "auxclick": + case "dblclick": + case "mousedown": + case "mousemove": + case "mouseup": + case "mouseout": + case "mouseover": + case "contextmenu": + i = ht; + break; + case "drag": + case "dragend": + case "dragenter": + case "dragexit": + case "dragleave": + case "dragover": + case "dragstart": + case "drop": + i = gt; + break; + case "touchcancel": + case "touchend": + case "touchmove": + case "touchstart": + i = Tt; + break; + case zr: + case Nr: + case Pr: + i = yt; + break; + case Tr: + i = Lt; + break; + case "scroll": + i = pt; + break; + case "wheel": + i = Ft; + break; + case "copy": + case "cut": + case "paste": + i = kt; + break; + case "gotpointercapture": + case "lostpointercapture": + case "pointercancel": + case "pointerdown": + case "pointermove": + case "pointerout": + case "pointerover": + case "pointerup": + i = Pt + } + var c = 0 != (4 & n), + f = !c && "scroll" === e, + d = c ? null !== o ? o + "Capture" : null : o; + c = []; + for (var p, m = r; null !== m;) { + var h = (p = m).stateNode; + if (5 === p.tag && null !== h && (p = h, null !== d && null != (h = Fe(m, d)) && c.push($r(m, h, p))), f) break; + m = m.return + } + 0 < c.length && (o = new i(o, s, null, t, l), u.push({ + event: o, + listeners: c + })) + } + } + if (0 == (7 & n)) { + if (i = "mouseout" === e || "pointerout" === e, (!(o = "mouseover" === e || "pointerover" === e) || t === we || !(s = t.relatedTarget || t.fromElement) || !bl(s) && !s[hl]) && (i || o) && (o = l.window === l ? l : (o = l.ownerDocument) ? o.defaultView || o.parentWindow : window, i ? (i = r, null !== (s = (s = t.relatedTarget || t.toElement) ? bl(s) : null) && (s !== (f = We(s)) || 5 !== s.tag && 6 !== s.tag) && (s = null)) : (i = null, s = r), i !== s)) { + if (c = ht, h = "onMouseLeave", d = "onMouseEnter", m = "mouse", "pointerout" !== e && "pointerover" !== e || (c = Pt, h = "onPointerLeave", d = "onPointerEnter", m = "pointer"), f = null == i ? o : wl(i), p = null == s ? o : wl(s), (o = new c(h, m + "leave", i, t, l)).target = f, o.relatedTarget = p, h = null, bl(l) === r && ((c = new c(d, m + "enter", s, t, l)).target = p, c.relatedTarget = f, h = c), f = h, i && s) e: { + for (d = s, m = 0, p = c = i; p; p = qr(p)) m++; + for (p = 0, h = d; h; h = qr(h)) p++; + for (; 0 < m - p;) c = qr(c), + m--; + for (; 0 < p - m;) d = qr(d), + p--; + for (; m--;) { + if (c === d || null !== d && c === d.alternate) break e; + c = qr(c), d = qr(d) + } + c = null + } + else c = null; + null !== i && Yr(u, o, i, c, !1), null !== s && null !== f && Yr(u, f, s, c, !0) + } + if ("select" === (i = (o = r ? wl(r) : window).nodeName && o.nodeName.toLowerCase()) || "input" === i && "file" === o.type) var g = Gt; + else if (jt(o)) + if (Zt) g = or; + else { + g = ar; + var v = lr + } + else(i = o.nodeName) && "input" === i.toLowerCase() && ("checkbox" === o.type || "radio" === o.type) && (g = ur); + switch (g && (g = g(e, r)) ? $t(u, g, t, l) : (v && v(e, o, r), "focusout" === e && (v = o._wrapperState) && v.controlled && "number" === o.type && ne(o, "number", o.value)), v = r ? wl(r) : window, e) { + case "focusin": + (jt(v) || "true" === v.contentEditable) && (vr = v, yr = r, br = null); + break; + case "focusout": + br = yr = vr = null; + break; + case "mousedown": + kr = !0; + break; + case "contextmenu": + case "mouseup": + case "dragend": + kr = !1, wr(u, t, l); + break; + case "selectionchange": + if (gr) break; + case "keydown": + case "keyup": + wr(u, t, l) + } + var y; + if (Dt) e: { + switch (e) { + case "compositionstart": + var b = "onCompositionStart"; + break e; + case "compositionend": + b = "onCompositionEnd"; + break e; + case "compositionupdate": + b = "onCompositionUpdate"; + break e + } + b = void 0 + } + else Wt ? Bt(e, t) && (b = "onCompositionEnd") : "keydown" === e && 229 === t.keyCode && (b = "onCompositionStart"); + b && (Ut && "ko" !== t.locale && (Wt || "onCompositionStart" !== b ? "onCompositionEnd" === b && Wt && (y = tt()) : (et = "value" in (Jn = l) ? Jn.value : Jn.textContent, Wt = !0)), 0 < (v = Kr(r, b)).length && (b = new wt(b, e, null, t, l), u.push({ + event: b, + listeners: v + }), (y || null !== (y = Ht(t))) && (b.data = y))), (y = It ? function(e, n) { + switch (e) { + case "compositionend": + return Ht(n); + case "keypress": + return 32 !== n.which ? null : (At = !0, Vt); + case "textInput": + return (e = n.data) === Vt && At ? null : e; + default: + return null + } + }(e, t) : function(e, n) { + if (Wt) return "compositionend" === e || !Dt && Bt(e, n) ? (e = tt(), nt = et = Jn = null, Wt = !1, e) : null; + switch (e) { + case "paste": + default: + return null; + case "keypress": + if (!(n.ctrlKey || n.altKey || n.metaKey) || n.ctrlKey && n.altKey) { + if (n.char && 1 < n.char.length) return n.char; + if (n.which) return String.fromCharCode(n.which) + } + return null; + case "compositionend": + return Ut && "ko" !== n.locale ? null : n.data + } + }(e, t)) && 0 < (r = Kr(r, "onBeforeInput")).length && (l = new wt("onBeforeInput", "beforeinput", null, t, l), u.push({ + event: l, + listeners: r + }), l.data = y) + } + Vr(u, n) + })) + } + + function $r(e, n, t) { + return { + instance: e, + listener: n, + currentTarget: t + } + } + + function Kr(e, n) { + for (var t = n + "Capture", r = []; null !== e;) { + var l = e, + a = l.stateNode; + 5 === l.tag && null !== a && (l = a, null != (a = Fe(e, t)) && r.unshift($r(e, a, l)), null != (a = Fe(e, n)) && r.push($r(e, a, l))), e = e.return + } + return r + } + + function qr(e) { + if (null === e) return null; + do { + e = e.return + } while (e && 5 !== e.tag); + return e || null + } + + function Yr(e, n, t, r, l) { + for (var a = n._reactName, u = []; null !== t && t !== r;) { + var o = t, + i = o.alternate, + s = o.stateNode; + if (null !== i && i === r) break; + 5 === o.tag && null !== s && (o = s, l ? null != (i = Fe(t, a)) && u.unshift($r(t, i, o)) : l || null != (i = Fe(t, a)) && u.push($r(t, i, o))), t = t.return + } + 0 !== u.length && e.push({ + event: n, + listeners: u + }) + } + var Xr = /\r\n?/g, + Gr = /\u0000|\uFFFD/g; + + function Zr(e) { + return ("string" == typeof e ? e : "" + e).replace(Xr, "\n").replace(Gr, "") + } + + function Jr(e, n, t) { + if (n = Zr(n), Zr(e) !== n && t) throw Error(u(425)) + } + + function el() {} + var nl = null, + tl = null; + + function rl(e, n) { + return "textarea" === e || "noscript" === e || "string" == typeof n.children || "number" == typeof n.children || "object" == typeof n.dangerouslySetInnerHTML && null !== n.dangerouslySetInnerHTML && null != n.dangerouslySetInnerHTML.__html + } + var ll = "function" == typeof setTimeout ? setTimeout : void 0, + al = "function" == typeof clearTimeout ? clearTimeout : void 0, + ul = "function" == typeof Promise ? Promise : void 0, + ol = "function" == typeof queueMicrotask ? queueMicrotask : void 0 !== ul ? function(e) { + return ul.resolve(null).then(e).catch(il) + } : ll; + + function il(e) { + setTimeout((function() { + throw e + })) + } + + function sl(e, n) { + var t = n, + r = 0; + do { + var l = t.nextSibling; + if (e.removeChild(t), l && 8 === l.nodeType) + if ("/$" === (t = l.data)) { + if (0 === r) return e.removeChild(l), void Qn(n); + r-- + } else "$" !== t && "$?" !== t && "$!" !== t || r++; + t = l + } while (t); + Qn(n) + } + + function cl(e) { + for (; null != e; e = e.nextSibling) { + var n = e.nodeType; + if (1 === n || 3 === n) break; + if (8 === n) { + if ("$" === (n = e.data) || "$!" === n || "$?" === n) break; + if ("/$" === n) return null + } + } + return e + } + + function fl(e) { + e = e.previousSibling; + for (var n = 0; e;) { + if (8 === e.nodeType) { + var t = e.data; + if ("$" === t || "$!" === t || "$?" === t) { + if (0 === n) return e; + n-- + } else "/$" === t && n++ + } + e = e.previousSibling + } + return null + } + var dl = Math.random().toString(36).slice(2), + pl = "__reactFiber$" + dl, + ml = "__reactProps$" + dl, + hl = "__reactContainer$" + dl, + gl = "__reactEvents$" + dl, + vl = "__reactListeners$" + dl, + yl = "__reactHandles$" + dl; + + function bl(e) { + var n = e[pl]; + if (n) return n; + for (var t = e.parentNode; t;) { + if (n = t[hl] || t[pl]) { + if (t = n.alternate, null !== n.child || null !== t && null !== t.child) + for (e = fl(e); null !== e;) { + if (t = e[pl]) return t; + e = fl(e) + } + return n + } + t = (e = t).parentNode + } + return null + } + + function kl(e) { + return !(e = e[pl] || e[hl]) || 5 !== e.tag && 6 !== e.tag && 13 !== e.tag && 3 !== e.tag ? null : e + } + + function wl(e) { + if (5 === e.tag || 6 === e.tag) return e.stateNode; + throw Error(u(33)) + } + + function Sl(e) { + return e[ml] || null + } + var xl = [], + El = -1; + + function Cl(e) { + return { + current: e + } + } + + function _l(e) { + 0 > El || (e.current = xl[El], xl[El] = null, El--) + } + + function zl(e, n) { + El++, xl[El] = e.current, e.current = n + } + var Nl = {}, + Pl = Cl(Nl), + Tl = Cl(!1), + Ll = Nl; + + function Ml(e, n) { + var t = e.type.contextTypes; + if (!t) return Nl; + var r = e.stateNode; + if (r && r.__reactInternalMemoizedUnmaskedChildContext === n) return r.__reactInternalMemoizedMaskedChildContext; + var l, a = {}; + for (l in t) a[l] = n[l]; + return r && ((e = e.stateNode).__reactInternalMemoizedUnmaskedChildContext = n, e.__reactInternalMemoizedMaskedChildContext = a), a + } + + function Fl(e) { + return null != e.childContextTypes + } + + function Rl() { + _l(Tl), _l(Pl) + } + + function Dl(e, n, t) { + if (Pl.current !== Nl) throw Error(u(168)); + zl(Pl, n), zl(Tl, t) + } + + function Ol(e, n, t) { + var r = e.stateNode; + if (n = n.childContextTypes, "function" != typeof r.getChildContext) return t; + for (var l in r = r.getChildContext()) + if (!(l in n)) throw Error(u(108, Q(e) || "Unknown", l)); + return U({}, t, r) + } + + function Il(e) { + return e = (e = e.stateNode) && e.__reactInternalMemoizedMergedChildContext || Nl, Ll = Pl.current, zl(Pl, e), zl(Tl, Tl.current), !0 + } + + function Ul(e, n, t) { + var r = e.stateNode; + if (!r) throw Error(u(169)); + t ? (e = Ol(e, n, Ll), r.__reactInternalMemoizedMergedChildContext = e, _l(Tl), _l(Pl), zl(Pl, e)) : _l(Tl), zl(Tl, t) + } + var Vl = null, + Al = !1, + Bl = !1; + + function Hl(e) { + null === Vl ? Vl = [e] : Vl.push(e) + } + + function Wl() { + if (!Bl && null !== Vl) { + Bl = !0; + var e = 0, + n = wn; + try { + var t = Vl; + for (wn = 1; e < t.length; e++) { + var r = t[e]; + do { + r = r(!0) + } while (null !== r) + } + Vl = null, Al = !1 + } catch (n) { + throw null !== Vl && (Vl = Vl.slice(e + 1)), qe(en, Wl), n + } finally { + wn = n, Bl = !1 + } + } + return null + } + var Ql = [], + jl = 0, + $l = null, + Kl = 0, + ql = [], + Yl = 0, + Xl = null, + Gl = 1, + Zl = ""; + + function Jl(e, n) { + Ql[jl++] = Kl, Ql[jl++] = $l, $l = e, Kl = n + } + + function ea(e, n, t) { + ql[Yl++] = Gl, ql[Yl++] = Zl, ql[Yl++] = Xl, Xl = e; + var r = Gl; + e = Zl; + var l = 32 - on(r) - 1; + r &= ~(1 << l), t += 1; + var a = 32 - on(n) + l; + if (30 < a) { + var u = l - l % 5; + a = (r & (1 << u) - 1).toString(32), r >>= u, l -= u, Gl = 1 << 32 - on(n) + l | t << l | r, Zl = a + e + } else Gl = 1 << a | t << l | r, Zl = e + } + + function na(e) { + null !== e.return && (Jl(e, 1), ea(e, 1, 0)) + } + + function ta(e) { + for (; e === $l;) $l = Ql[--jl], Ql[jl] = null, Kl = Ql[--jl], Ql[jl] = null; + for (; e === Xl;) Xl = ql[--Yl], ql[Yl] = null, Zl = ql[--Yl], ql[Yl] = null, Gl = ql[--Yl], ql[Yl] = null + } + var ra = null, + la = null, + aa = !1, + ua = null; + + function oa(e, n) { + var t = Ms(5, null, null, 0); + t.elementType = "DELETED", t.stateNode = n, t.return = e, null === (n = e.deletions) ? (e.deletions = [t], e.flags |= 16) : n.push(t) + } + + function ia(e, n) { + switch (e.tag) { + case 5: + var t = e.type; + return null !== (n = 1 !== n.nodeType || t.toLowerCase() !== n.nodeName.toLowerCase() ? null : n) && (e.stateNode = n, ra = e, la = cl(n.firstChild), !0); + case 6: + return null !== (n = "" === e.pendingProps || 3 !== n.nodeType ? null : n) && (e.stateNode = n, ra = e, la = null, !0); + case 13: + return null !== (n = 8 !== n.nodeType ? null : n) && (t = null !== Xl ? { + id: Gl, + overflow: Zl + } : null, e.memoizedState = { + dehydrated: n, + treeContext: t, + retryLane: 1073741824 + }, (t = Ms(18, null, null, 0)).stateNode = n, t.return = e, e.child = t, ra = e, la = null, !0); + default: + return !1 + } + } + + function sa(e) { + return 0 != (1 & e.mode) && 0 == (128 & e.flags) + } + + function ca(e) { + if (aa) { + var n = la; + if (n) { + var t = n; + if (!ia(e, n)) { + if (sa(e)) throw Error(u(418)); + n = cl(t.nextSibling); + var r = ra; + n && ia(e, n) ? oa(r, t) : (e.flags = -4097 & e.flags | 2, aa = !1, ra = e) + } + } else { + if (sa(e)) throw Error(u(418)); + e.flags = -4097 & e.flags | 2, aa = !1, ra = e + } + } + } + + function fa(e) { + for (e = e.return; null !== e && 5 !== e.tag && 3 !== e.tag && 13 !== e.tag;) e = e.return; + ra = e + } + + function da(e) { + if (e !== ra) return !1; + if (!aa) return fa(e), aa = !0, !1; + var n; + if ((n = 3 !== e.tag) && !(n = 5 !== e.tag) && (n = "head" !== (n = e.type) && "body" !== n && !rl(e.type, e.memoizedProps)), n && (n = la)) { + if (sa(e)) throw pa(), Error(u(418)); + for (; n;) oa(e, n), n = cl(n.nextSibling) + } + if (fa(e), 13 === e.tag) { + if (!(e = null !== (e = e.memoizedState) ? e.dehydrated : null)) throw Error(u(317)); + e: { + for (e = e.nextSibling, n = 0; e;) { + if (8 === e.nodeType) { + var t = e.data; + if ("/$" === t) { + if (0 === n) { + la = cl(e.nextSibling); + break e + } + n-- + } else "$" !== t && "$!" !== t && "$?" !== t || n++ + } + e = e.nextSibling + } + la = null + } + } else la = ra ? cl(e.stateNode.nextSibling) : null; + return !0 + } + + function pa() { + for (var e = la; e;) e = cl(e.nextSibling) + } + + function ma() { + la = ra = null, aa = !1 + } + + function ha(e) { + null === ua ? ua = [e] : ua.push(e) + } + var ga = w.ReactCurrentBatchConfig; + + function va(e, n) { + if (e && e.defaultProps) { + for (var t in n = U({}, n), e = e.defaultProps) void 0 === n[t] && (n[t] = e[t]); + return n + } + return n + } + var ya = Cl(null), + ba = null, + ka = null, + wa = null; + + function Sa() { + wa = ka = ba = null + } + + function xa(e) { + var n = ya.current; + _l(ya), e._currentValue = n + } + + function Ea(e, n, t) { + for (; null !== e;) { + var r = e.alternate; + if ((e.childLanes & n) !== n ? (e.childLanes |= n, null !== r && (r.childLanes |= n)) : null !== r && (r.childLanes & n) !== n && (r.childLanes |= n), e === t) break; + e = e.return + } + } + + function Ca(e, n) { + ba = e, wa = ka = null, null !== (e = e.dependencies) && null !== e.firstContext && (0 != (e.lanes & n) && (wo = !0), e.firstContext = null) + } + + function _a(e) { + var n = e._currentValue; + if (wa !== e) + if (e = { + context: e, + memoizedValue: n, + next: null + }, null === ka) { + if (null === ba) throw Error(u(308)); + ka = e, ba.dependencies = { + lanes: 0, + firstContext: e + } + } else ka = ka.next = e; + return n + } + var za = null; + + function Na(e) { + null === za ? za = [e] : za.push(e) + } + + function Pa(e, n, t, r) { + var l = n.interleaved; + return null === l ? (t.next = t, Na(n)) : (t.next = l.next, l.next = t), n.interleaved = t, Ta(e, r) + } + + function Ta(e, n) { + e.lanes |= n; + var t = e.alternate; + for (null !== t && (t.lanes |= n), t = e, e = e.return; null !== e;) e.childLanes |= n, null !== (t = e.alternate) && (t.childLanes |= n), t = e, e = e.return; + return 3 === t.tag ? t.stateNode : null + } + var La = !1; + + function Ma(e) { + e.updateQueue = { + baseState: e.memoizedState, + firstBaseUpdate: null, + lastBaseUpdate: null, + shared: { + pending: null, + interleaved: null, + lanes: 0 + }, + effects: null + } + } + + function Fa(e, n) { + e = e.updateQueue, n.updateQueue === e && (n.updateQueue = { + baseState: e.baseState, + firstBaseUpdate: e.firstBaseUpdate, + lastBaseUpdate: e.lastBaseUpdate, + shared: e.shared, + effects: e.effects + }) + } + + function Ra(e, n) { + return { + eventTime: e, + lane: n, + tag: 0, + payload: null, + callback: null, + next: null + } + } + + function Da(e, n, t) { + var r = e.updateQueue; + if (null === r) return null; + if (r = r.shared, 0 != (2 & Pi)) { + var l = r.pending; + return null === l ? n.next = n : (n.next = l.next, l.next = n), r.pending = n, Ta(e, t) + } + return null === (l = r.interleaved) ? (n.next = n, Na(r)) : (n.next = l.next, l.next = n), r.interleaved = n, Ta(e, t) + } + + function Oa(e, n, t) { + if (null !== (n = n.updateQueue) && (n = n.shared, 0 != (4194240 & t))) { + var r = n.lanes; + t |= r &= e.pendingLanes, n.lanes = t, kn(e, t) + } + } + + function Ia(e, n) { + var t = e.updateQueue, + r = e.alternate; + if (null !== r && t === (r = r.updateQueue)) { + var l = null, + a = null; + if (null !== (t = t.firstBaseUpdate)) { + do { + var u = { + eventTime: t.eventTime, + lane: t.lane, + tag: t.tag, + payload: t.payload, + callback: t.callback, + next: null + }; + null === a ? l = a = u : a = a.next = u, t = t.next + } while (null !== t); + null === a ? l = a = n : a = a.next = n + } else l = a = n; + return t = { + baseState: r.baseState, + firstBaseUpdate: l, + lastBaseUpdate: a, + shared: r.shared, + effects: r.effects + }, void(e.updateQueue = t) + } + null === (e = t.lastBaseUpdate) ? t.firstBaseUpdate = n : e.next = n, t.lastBaseUpdate = n + } + + function Ua(e, n, t, r) { + var l = e.updateQueue; + La = !1; + var a = l.firstBaseUpdate, + u = l.lastBaseUpdate, + o = l.shared.pending; + if (null !== o) { + l.shared.pending = null; + var i = o, + s = i.next; + i.next = null, null === u ? a = s : u.next = s, u = i; + var c = e.alternate; + null !== c && (o = (c = c.updateQueue).lastBaseUpdate) !== u && (null === o ? c.firstBaseUpdate = s : o.next = s, c.lastBaseUpdate = i) + } + if (null !== a) { + var f = l.baseState; + for (u = 0, c = s = i = null, o = a;;) { + var d = o.lane, + p = o.eventTime; + if ((r & d) === d) { + null !== c && (c = c.next = { + eventTime: p, + lane: 0, + tag: o.tag, + payload: o.payload, + callback: o.callback, + next: null + }); + e: { + var m = e, + h = o; + switch (d = n, p = t, h.tag) { + case 1: + if ("function" == typeof(m = h.payload)) { + f = m.call(p, f, d); + break e + } + f = m; + break e; + case 3: + m.flags = -65537 & m.flags | 128; + case 0: + if (null == (d = "function" == typeof(m = h.payload) ? m.call(p, f, d) : m)) break e; + f = U({}, f, d); + break e; + case 2: + La = !0 + } + } + null !== o.callback && 0 !== o.lane && (e.flags |= 64, null === (d = l.effects) ? l.effects = [o] : d.push(o)) + } else p = { + eventTime: p, + lane: d, + tag: o.tag, + payload: o.payload, + callback: o.callback, + next: null + }, null === c ? (s = c = p, i = f) : c = c.next = p, u |= d; + if (null === (o = o.next)) { + if (null === (o = l.shared.pending)) break; + o = (d = o).next, d.next = null, l.lastBaseUpdate = d, l.shared.pending = null + } + } + if (null === c && (i = f), l.baseState = i, l.firstBaseUpdate = s, l.lastBaseUpdate = c, null !== (n = l.shared.interleaved)) { + l = n; + do { + u |= l.lane, l = l.next + } while (l !== n) + } else null === a && (l.shared.lanes = 0); + Ii |= u, e.lanes = u, e.memoizedState = f + } + } + + function Va(e, n, t) { + if (e = n.effects, n.effects = null, null !== e) + for (n = 0; n < e.length; n++) { + var r = e[n], + l = r.callback; + if (null !== l) { + if (r.callback = null, r = t, "function" != typeof l) throw Error(u(191, l)); + l.call(r) + } + } + } + var Aa = (new l.Component).refs; + + function Ba(e, n, t, r) { + t = null == (t = t(r, n = e.memoizedState)) ? n : U({}, n, t), e.memoizedState = t, 0 === e.lanes && (e.updateQueue.baseState = t) + } + var Ha = { + isMounted: function(e) { + return !!(e = e._reactInternals) && We(e) === e + }, + enqueueSetState: function(e, n, t) { + e = e._reactInternals; + var r = ns(), + l = ts(e), + a = Ra(r, l); + a.payload = n, null != t && (a.callback = t), null !== (n = Da(e, a, l)) && (rs(n, e, l, r), Oa(n, e, l)) + }, + enqueueReplaceState: function(e, n, t) { + e = e._reactInternals; + var r = ns(), + l = ts(e), + a = Ra(r, l); + a.tag = 1, a.payload = n, null != t && (a.callback = t), null !== (n = Da(e, a, l)) && (rs(n, e, l, r), Oa(n, e, l)) + }, + enqueueForceUpdate: function(e, n) { + e = e._reactInternals; + var t = ns(), + r = ts(e), + l = Ra(t, r); + l.tag = 2, null != n && (l.callback = n), null !== (n = Da(e, l, r)) && (rs(n, e, r, t), Oa(n, e, r)) + } + }; + + function Wa(e, n, t, r, l, a, u) { + return "function" == typeof(e = e.stateNode).shouldComponentUpdate ? e.shouldComponentUpdate(r, a, u) : !(n.prototype && n.prototype.isPureReactComponent && sr(t, r) && sr(l, a)) + } + + function Qa(e, n, t) { + var r = !1, + l = Nl, + a = n.contextType; + return "object" == typeof a && null !== a ? a = _a(a) : (l = Fl(n) ? Ll : Pl.current, a = (r = null != (r = n.contextTypes)) ? Ml(e, l) : Nl), n = new n(t, a), e.memoizedState = null !== n.state && void 0 !== n.state ? n.state : null, n.updater = Ha, e.stateNode = n, n._reactInternals = e, r && ((e = e.stateNode).__reactInternalMemoizedUnmaskedChildContext = l, e.__reactInternalMemoizedMaskedChildContext = a), n + } + + function ja(e, n, t, r) { + e = n.state, "function" == typeof n.componentWillReceiveProps && n.componentWillReceiveProps(t, r), "function" == typeof n.UNSAFE_componentWillReceiveProps && n.UNSAFE_componentWillReceiveProps(t, r), n.state !== e && Ha.enqueueReplaceState(n, n.state, null) + } + + function $a(e, n, t, r) { + var l = e.stateNode; + l.props = t, l.state = e.memoizedState, l.refs = Aa, Ma(e); + var a = n.contextType; + "object" == typeof a && null !== a ? l.context = _a(a) : (a = Fl(n) ? Ll : Pl.current, l.context = Ml(e, a)), l.state = e.memoizedState, "function" == typeof(a = n.getDerivedStateFromProps) && (Ba(e, n, a, t), l.state = e.memoizedState), "function" == typeof n.getDerivedStateFromProps || "function" == typeof l.getSnapshotBeforeUpdate || "function" != typeof l.UNSAFE_componentWillMount && "function" != typeof l.componentWillMount || (n = l.state, "function" == typeof l.componentWillMount && l.componentWillMount(), "function" == typeof l.UNSAFE_componentWillMount && l.UNSAFE_componentWillMount(), n !== l.state && Ha.enqueueReplaceState(l, l.state, null), Ua(e, t, l, r), l.state = e.memoizedState), "function" == typeof l.componentDidMount && (e.flags |= 4194308) + } + + function Ka(e, n, t) { + if (null !== (e = t.ref) && "function" != typeof e && "object" != typeof e) { + if (t._owner) { + if (t = t._owner) { + if (1 !== t.tag) throw Error(u(309)); + var r = t.stateNode + } + if (!r) throw Error(u(147, e)); + var l = r, + a = "" + e; + return null !== n && null !== n.ref && "function" == typeof n.ref && n.ref._stringRef === a ? n.ref : (n = function(e) { + var n = l.refs; + n === Aa && (n = l.refs = {}), null === e ? delete n[a] : n[a] = e + }, n._stringRef = a, n) + } + if ("string" != typeof e) throw Error(u(284)); + if (!t._owner) throw Error(u(290, e)) + } + return e + } + + function qa(e, n) { + throw e = Object.prototype.toString.call(n), Error(u(31, "[object Object]" === e ? "object with keys {" + Object.keys(n).join(", ") + "}" : e)) + } + + function Ya(e) { + return (0, e._init)(e._payload) + } + + function Xa(e) { + function n(n, t) { + if (e) { + var r = n.deletions; + null === r ? (n.deletions = [t], n.flags |= 16) : r.push(t) + } + } + + function t(t, r) { + if (!e) return null; + for (; null !== r;) n(t, r), r = r.sibling; + return null + } + + function r(e, n) { + for (e = new Map; null !== n;) null !== n.key ? e.set(n.key, n) : e.set(n.index, n), n = n.sibling; + return e + } + + function l(e, n) { + return (e = Rs(e, n)).index = 0, e.sibling = null, e + } + + function a(n, t, r) { + return n.index = r, e ? null !== (r = n.alternate) ? (r = r.index) < t ? (n.flags |= 2, t) : r : (n.flags |= 2, t) : (n.flags |= 1048576, t) + } + + function o(n) { + return e && null === n.alternate && (n.flags |= 2), n + } + + function i(e, n, t, r) { + return null === n || 6 !== n.tag ? ((n = Us(t, e.mode, r)).return = e, n) : ((n = l(n, t)).return = e, n) + } + + function s(e, n, t, r) { + var a = t.type; + return a === E ? f(e, n, t.props.children, r, t.key) : null !== n && (n.elementType === a || "object" == typeof a && null !== a && a.$$typeof === F && Ya(a) === n.type) ? ((r = l(n, t.props)).ref = Ka(e, n, t), r.return = e, r) : ((r = Ds(t.type, t.key, t.props, null, e.mode, r)).ref = Ka(e, n, t), r.return = e, r) + } + + function c(e, n, t, r) { + return null === n || 4 !== n.tag || n.stateNode.containerInfo !== t.containerInfo || n.stateNode.implementation !== t.implementation ? ((n = Vs(t, e.mode, r)).return = e, n) : ((n = l(n, t.children || [])).return = e, n) + } + + function f(e, n, t, r, a) { + return null === n || 7 !== n.tag ? ((n = Os(t, e.mode, r, a)).return = e, n) : ((n = l(n, t)).return = e, n) + } + + function d(e, n, t) { + if ("string" == typeof n && "" !== n || "number" == typeof n) return (n = Us("" + n, e.mode, t)).return = e, n; + if ("object" == typeof n && null !== n) { + switch (n.$$typeof) { + case S: + return (t = Ds(n.type, n.key, n.props, null, e.mode, t)).ref = Ka(e, null, n), t.return = e, t; + case x: + return (n = Vs(n, e.mode, t)).return = e, n; + case F: + return d(e, (0, n._init)(n._payload), t) + } + if (te(n) || O(n)) return (n = Os(n, e.mode, t, null)).return = e, n; + qa(e, n) + } + return null + } + + function p(e, n, t, r) { + var l = null !== n ? n.key : null; + if ("string" == typeof t && "" !== t || "number" == typeof t) return null !== l ? null : i(e, n, "" + t, r); + if ("object" == typeof t && null !== t) { + switch (t.$$typeof) { + case S: + return t.key === l ? s(e, n, t, r) : null; + case x: + return t.key === l ? c(e, n, t, r) : null; + case F: + return p(e, n, (l = t._init)(t._payload), r) + } + if (te(t) || O(t)) return null !== l ? null : f(e, n, t, r, null); + qa(e, t) + } + return null + } + + function m(e, n, t, r, l) { + if ("string" == typeof r && "" !== r || "number" == typeof r) return i(n, e = e.get(t) || null, "" + r, l); + if ("object" == typeof r && null !== r) { + switch (r.$$typeof) { + case S: + return s(n, e = e.get(null === r.key ? t : r.key) || null, r, l); + case x: + return c(n, e = e.get(null === r.key ? t : r.key) || null, r, l); + case F: + return m(e, n, t, (0, r._init)(r._payload), l) + } + if (te(r) || O(r)) return f(n, e = e.get(t) || null, r, l, null); + qa(n, r) + } + return null + } + + function h(l, u, o, i) { + for (var s = null, c = null, f = u, h = u = 0, g = null; null !== f && h < o.length; h++) { + f.index > h ? (g = f, f = null) : g = f.sibling; + var v = p(l, f, o[h], i); + if (null === v) { + null === f && (f = g); + break + } + e && f && null === v.alternate && n(l, f), u = a(v, u, h), null === c ? s = v : c.sibling = v, c = v, f = g + } + if (h === o.length) return t(l, f), aa && Jl(l, h), s; + if (null === f) { + for (; h < o.length; h++) null !== (f = d(l, o[h], i)) && (u = a(f, u, h), null === c ? s = f : c.sibling = f, c = f); + return aa && Jl(l, h), s + } + for (f = r(l, f); h < o.length; h++) null !== (g = m(f, l, h, o[h], i)) && (e && null !== g.alternate && f.delete(null === g.key ? h : g.key), u = a(g, u, h), null === c ? s = g : c.sibling = g, c = g); + return e && f.forEach((function(e) { + return n(l, e) + })), aa && Jl(l, h), s + } + + function g(l, o, i, s) { + var c = O(i); + if ("function" != typeof c) throw Error(u(150)); + if (null == (i = c.call(i))) throw Error(u(151)); + for (var f = c = null, h = o, g = o = 0, v = null, y = i.next(); null !== h && !y.done; g++, y = i.next()) { + h.index > g ? (v = h, h = null) : v = h.sibling; + var b = p(l, h, y.value, s); + if (null === b) { + null === h && (h = v); + break + } + e && h && null === b.alternate && n(l, h), o = a(b, o, g), null === f ? c = b : f.sibling = b, f = b, h = v + } + if (y.done) return t(l, h), aa && Jl(l, g), c; + if (null === h) { + for (; !y.done; g++, y = i.next()) null !== (y = d(l, y.value, s)) && (o = a(y, o, g), null === f ? c = y : f.sibling = y, f = y); + return aa && Jl(l, g), c + } + for (h = r(l, h); !y.done; g++, y = i.next()) null !== (y = m(h, l, g, y.value, s)) && (e && null !== y.alternate && h.delete(null === y.key ? g : y.key), o = a(y, o, g), null === f ? c = y : f.sibling = y, f = y); + return e && h.forEach((function(e) { + return n(l, e) + })), aa && Jl(l, g), c + } + return function e(r, a, u, i) { + if ("object" == typeof u && null !== u && u.type === E && null === u.key && (u = u.props.children), "object" == typeof u && null !== u) { + switch (u.$$typeof) { + case S: + e: { + for (var s = u.key, c = a; null !== c;) { + if (c.key === s) { + if ((s = u.type) === E) { + if (7 === c.tag) { + t(r, c.sibling), (a = l(c, u.props.children)).return = r, r = a; + break e + } + } else if (c.elementType === s || "object" == typeof s && null !== s && s.$$typeof === F && Ya(s) === c.type) { + t(r, c.sibling), (a = l(c, u.props)).ref = Ka(r, c, u), a.return = r, r = a; + break e + } + t(r, c); + break + } + n(r, c), c = c.sibling + } + u.type === E ? ((a = Os(u.props.children, r.mode, i, u.key)).return = r, r = a) : ((i = Ds(u.type, u.key, u.props, null, r.mode, i)).ref = Ka(r, a, u), i.return = r, r = i) + } + return o(r); + case x: + e: { + for (c = u.key; null !== a;) { + if (a.key === c) { + if (4 === a.tag && a.stateNode.containerInfo === u.containerInfo && a.stateNode.implementation === u.implementation) { + t(r, a.sibling), (a = l(a, u.children || [])).return = r, r = a; + break e + } + t(r, a); + break + } + n(r, a), a = a.sibling + }(a = Vs(u, r.mode, i)).return = r, + r = a + } + return o(r); + case F: + return e(r, a, (c = u._init)(u._payload), i) + } + if (te(u)) return h(r, a, u, i); + if (O(u)) return g(r, a, u, i); + qa(r, u) + } + return "string" == typeof u && "" !== u || "number" == typeof u ? (u = "" + u, null !== a && 6 === a.tag ? (t(r, a.sibling), (a = l(a, u)).return = r, r = a) : (t(r, a), (a = Us(u, r.mode, i)).return = r, r = a), o(r)) : t(r, a) + } + } + var Ga = Xa(!0), + Za = Xa(!1), + Ja = {}, + eu = Cl(Ja), + nu = Cl(Ja), + tu = Cl(Ja); + + function ru(e) { + if (e === Ja) throw Error(u(174)); + return e + } + + function lu(e, n) { + switch (zl(tu, n), zl(nu, e), zl(eu, Ja), e = n.nodeType) { + case 9: + case 11: + n = (n = n.documentElement) ? n.namespaceURI : se(null, ""); + break; + default: + n = se(n = (e = 8 === e ? n.parentNode : n).namespaceURI || null, e = e.tagName) + } + _l(eu), zl(eu, n) + } + + function au() { + _l(eu), _l(nu), _l(tu) + } + + function uu(e) { + ru(tu.current); + var n = ru(eu.current), + t = se(n, e.type); + n !== t && (zl(nu, e), zl(eu, t)) + } + + function ou(e) { + nu.current === e && (_l(eu), _l(nu)) + } + var iu = Cl(0); + + function su(e) { + for (var n = e; null !== n;) { + if (13 === n.tag) { + var t = n.memoizedState; + if (null !== t && (null === (t = t.dehydrated) || "$?" === t.data || "$!" === t.data)) return n + } else if (19 === n.tag && void 0 !== n.memoizedProps.revealOrder) { + if (0 != (128 & n.flags)) return n + } else if (null !== n.child) { + n.child.return = n, n = n.child; + continue + } + if (n === e) break; + for (; null === n.sibling;) { + if (null === n.return || n.return === e) return null; + n = n.return + } + n.sibling.return = n.return, n = n.sibling + } + return null + } + var cu = []; + + function fu() { + for (var e = 0; e < cu.length; e++) cu[e]._workInProgressVersionPrimary = null; + cu.length = 0 + } + var du = w.ReactCurrentDispatcher, + pu = w.ReactCurrentBatchConfig, + mu = 0, + hu = null, + gu = null, + vu = null, + yu = !1, + bu = !1, + ku = 0, + wu = 0; + + function Su() { + throw Error(u(321)) + } + + function xu(e, n) { + if (null === n) return !1; + for (var t = 0; t < n.length && t < e.length; t++) + if (!ir(e[t], n[t])) return !1; + return !0 + } + + function Eu(e, n, t, r, l, a) { + if (mu = a, hu = n, n.memoizedState = null, n.updateQueue = null, n.lanes = 0, du.current = null === e || null === e.memoizedState ? oo : io, e = t(r, l), bu) { + a = 0; + do { + if (bu = !1, ku = 0, 25 <= a) throw Error(u(301)); + a += 1, vu = gu = null, n.updateQueue = null, du.current = so, e = t(r, l) + } while (bu) + } + if (du.current = uo, n = null !== gu && null !== gu.next, mu = 0, vu = gu = hu = null, yu = !1, n) throw Error(u(300)); + return e + } + + function Cu() { + var e = 0 !== ku; + return ku = 0, e + } + + function _u() { + var e = { + memoizedState: null, + baseState: null, + baseQueue: null, + queue: null, + next: null + }; + return null === vu ? hu.memoizedState = vu = e : vu = vu.next = e, vu + } + + function zu() { + if (null === gu) { + var e = hu.alternate; + e = null !== e ? e.memoizedState : null + } else e = gu.next; + var n = null === vu ? hu.memoizedState : vu.next; + if (null !== n) vu = n, gu = e; + else { + if (null === e) throw Error(u(310)); + e = { + memoizedState: (gu = e).memoizedState, + baseState: gu.baseState, + baseQueue: gu.baseQueue, + queue: gu.queue, + next: null + }, null === vu ? hu.memoizedState = vu = e : vu = vu.next = e + } + return vu + } + + function Nu(e, n) { + return "function" == typeof n ? n(e) : n + } + + function Pu(e) { + var n = zu(), + t = n.queue; + if (null === t) throw Error(u(311)); + t.lastRenderedReducer = e; + var r = gu, + l = r.baseQueue, + a = t.pending; + if (null !== a) { + if (null !== l) { + var o = l.next; + l.next = a.next, a.next = o + } + r.baseQueue = l = a, t.pending = null + } + if (null !== l) { + a = l.next, r = r.baseState; + var i = o = null, + s = null, + c = a; + do { + var f = c.lane; + if ((mu & f) === f) null !== s && (s = s.next = { + lane: 0, + action: c.action, + hasEagerState: c.hasEagerState, + eagerState: c.eagerState, + next: null + }), r = c.hasEagerState ? c.eagerState : e(r, c.action); + else { + var d = { + lane: f, + action: c.action, + hasEagerState: c.hasEagerState, + eagerState: c.eagerState, + next: null + }; + null === s ? (i = s = d, o = r) : s = s.next = d, hu.lanes |= f, Ii |= f + } + c = c.next + } while (null !== c && c !== a); + null === s ? o = r : s.next = i, ir(r, n.memoizedState) || (wo = !0), n.memoizedState = r, n.baseState = o, n.baseQueue = s, t.lastRenderedState = r + } + if (null !== (e = t.interleaved)) { + l = e; + do { + a = l.lane, hu.lanes |= a, Ii |= a, l = l.next + } while (l !== e) + } else null === l && (t.lanes = 0); + return [n.memoizedState, t.dispatch] + } + + function Tu(e) { + var n = zu(), + t = n.queue; + if (null === t) throw Error(u(311)); + t.lastRenderedReducer = e; + var r = t.dispatch, + l = t.pending, + a = n.memoizedState; + if (null !== l) { + t.pending = null; + var o = l = l.next; + do { + a = e(a, o.action), o = o.next + } while (o !== l); + ir(a, n.memoizedState) || (wo = !0), n.memoizedState = a, null === n.baseQueue && (n.baseState = a), t.lastRenderedState = a + } + return [a, r] + } + + function Lu() {} + + function Mu(e, n) { + var t = hu, + r = zu(), + l = n(), + a = !ir(r.memoizedState, l); + if (a && (r.memoizedState = l, wo = !0), r = r.queue, Qu(Du.bind(null, t, r, e), [e]), r.getSnapshot !== n || a || null !== vu && 1 & vu.memoizedState.tag) { + if (t.flags |= 2048, Vu(9, Ru.bind(null, t, r, l, n), void 0, null), null === Ti) throw Error(u(349)); + 0 != (30 & mu) || Fu(t, n, l) + } + return l + } + + function Fu(e, n, t) { + e.flags |= 16384, e = { + getSnapshot: n, + value: t + }, null === (n = hu.updateQueue) ? (n = { + lastEffect: null, + stores: null + }, hu.updateQueue = n, n.stores = [e]) : null === (t = n.stores) ? n.stores = [e] : t.push(e) + } + + function Ru(e, n, t, r) { + n.value = t, n.getSnapshot = r, Ou(n) && Iu(e) + } + + function Du(e, n, t) { + return t((function() { + Ou(n) && Iu(e) + })) + } + + function Ou(e) { + var n = e.getSnapshot; + e = e.value; + try { + var t = n(); + return !ir(e, t) + } catch (e) { + return !0 + } + } + + function Iu(e) { + var n = Ta(e, 1); + null !== n && rs(n, e, 1, -1) + } + + function Uu(e) { + var n = _u(); + return "function" == typeof e && (e = e()), n.memoizedState = n.baseState = e, e = { + pending: null, + interleaved: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: Nu, + lastRenderedState: e + }, n.queue = e, e = e.dispatch = to.bind(null, hu, e), [n.memoizedState, e] + } + + function Vu(e, n, t, r) { + return e = { + tag: e, + create: n, + destroy: t, + deps: r, + next: null + }, null === (n = hu.updateQueue) ? (n = { + lastEffect: null, + stores: null + }, hu.updateQueue = n, n.lastEffect = e.next = e) : null === (t = n.lastEffect) ? n.lastEffect = e.next = e : (r = t.next, t.next = e, e.next = r, n.lastEffect = e), e + } + + function Au() { + return zu().memoizedState + } + + function Bu(e, n, t, r) { + var l = _u(); + hu.flags |= e, l.memoizedState = Vu(1 | n, t, void 0, void 0 === r ? null : r) + } + + function Hu(e, n, t, r) { + var l = zu(); + r = void 0 === r ? null : r; + var a = void 0; + if (null !== gu) { + var u = gu.memoizedState; + if (a = u.destroy, null !== r && xu(r, u.deps)) return void(l.memoizedState = Vu(n, t, a, r)) + } + hu.flags |= e, l.memoizedState = Vu(1 | n, t, a, r) + } + + function Wu(e, n) { + return Bu(8390656, 8, e, n) + } + + function Qu(e, n) { + return Hu(2048, 8, e, n) + } + + function ju(e, n) { + return Hu(4, 2, e, n) + } + + function $u(e, n) { + return Hu(4, 4, e, n) + } + + function Ku(e, n) { + return "function" == typeof n ? (e = e(), n(e), function() { + n(null) + }) : null != n ? (e = e(), n.current = e, function() { + n.current = null + }) : void 0 + } + + function qu(e, n, t) { + return t = null != t ? t.concat([e]) : null, Hu(4, 4, Ku.bind(null, n, e), t) + } + + function Yu() {} + + function Xu(e, n) { + var t = zu(); + n = void 0 === n ? null : n; + var r = t.memoizedState; + return null !== r && null !== n && xu(n, r[1]) ? r[0] : (t.memoizedState = [e, n], e) + } + + function Gu(e, n) { + var t = zu(); + n = void 0 === n ? null : n; + var r = t.memoizedState; + return null !== r && null !== n && xu(n, r[1]) ? r[0] : (e = e(), t.memoizedState = [e, n], e) + } + + function Zu(e, n, t) { + return 0 == (21 & mu) ? (e.baseState && (e.baseState = !1, wo = !0), e.memoizedState = t) : (ir(t, n) || (t = vn(), hu.lanes |= t, Ii |= t, e.baseState = !0), n) + } + + function Ju(e, n) { + var t = wn; + wn = 0 !== t && 4 > t ? t : 4, e(!0); + var r = pu.transition; + pu.transition = {}; + try { + e(!1), n() + } finally { + wn = t, pu.transition = r + } + } + + function eo() { + return zu().memoizedState + } + + function no(e, n, t) { + var r = ts(e); + t = { + lane: r, + action: t, + hasEagerState: !1, + eagerState: null, + next: null + }, ro(e) ? lo(n, t) : null !== (t = Pa(e, n, t, r)) && (rs(t, e, r, ns()), ao(t, n, r)) + } + + function to(e, n, t) { + var r = ts(e), + l = { + lane: r, + action: t, + hasEagerState: !1, + eagerState: null, + next: null + }; + if (ro(e)) lo(n, l); + else { + var a = e.alternate; + if (0 === e.lanes && (null === a || 0 === a.lanes) && null !== (a = n.lastRenderedReducer)) try { + var u = n.lastRenderedState, + o = a(u, t); + if (l.hasEagerState = !0, l.eagerState = o, ir(o, u)) { + var i = n.interleaved; + return null === i ? (l.next = l, Na(n)) : (l.next = i.next, i.next = l), void(n.interleaved = l) + } + } catch (e) {} + null !== (t = Pa(e, n, l, r)) && (rs(t, e, r, l = ns()), ao(t, n, r)) + } + } + + function ro(e) { + var n = e.alternate; + return e === hu || null !== n && n === hu + } + + function lo(e, n) { + bu = yu = !0; + var t = e.pending; + null === t ? n.next = n : (n.next = t.next, t.next = n), e.pending = n + } + + function ao(e, n, t) { + if (0 != (4194240 & t)) { + var r = n.lanes; + t |= r &= e.pendingLanes, n.lanes = t, kn(e, t) + } + } + var uo = { + readContext: _a, + useCallback: Su, + useContext: Su, + useEffect: Su, + useImperativeHandle: Su, + useInsertionEffect: Su, + useLayoutEffect: Su, + useMemo: Su, + useReducer: Su, + useRef: Su, + useState: Su, + useDebugValue: Su, + useDeferredValue: Su, + useTransition: Su, + useMutableSource: Su, + useSyncExternalStore: Su, + useId: Su, + unstable_isNewReconciler: !1 + }, + oo = { + readContext: _a, + useCallback: function(e, n) { + return _u().memoizedState = [e, void 0 === n ? null : n], e + }, + useContext: _a, + useEffect: Wu, + useImperativeHandle: function(e, n, t) { + return t = null != t ? t.concat([e]) : null, Bu(4194308, 4, Ku.bind(null, n, e), t) + }, + useLayoutEffect: function(e, n) { + return Bu(4194308, 4, e, n) + }, + useInsertionEffect: function(e, n) { + return Bu(4, 2, e, n) + }, + useMemo: function(e, n) { + var t = _u(); + return n = void 0 === n ? null : n, e = e(), t.memoizedState = [e, n], e + }, + useReducer: function(e, n, t) { + var r = _u(); + return n = void 0 !== t ? t(n) : n, r.memoizedState = r.baseState = n, e = { + pending: null, + interleaved: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: e, + lastRenderedState: n + }, r.queue = e, e = e.dispatch = no.bind(null, hu, e), [r.memoizedState, e] + }, + useRef: function(e) { + return e = { + current: e + }, _u().memoizedState = e + }, + useState: Uu, + useDebugValue: Yu, + useDeferredValue: function(e) { + return _u().memoizedState = e + }, + useTransition: function() { + var e = Uu(!1), + n = e[0]; + return e = Ju.bind(null, e[1]), _u().memoizedState = e, [n, e] + }, + useMutableSource: function() {}, + useSyncExternalStore: function(e, n, t) { + var r = hu, + l = _u(); + if (aa) { + if (void 0 === t) throw Error(u(407)); + t = t() + } else { + if (t = n(), null === Ti) throw Error(u(349)); + 0 != (30 & mu) || Fu(r, n, t) + } + l.memoizedState = t; + var a = { + value: t, + getSnapshot: n + }; + return l.queue = a, Wu(Du.bind(null, r, a, e), [e]), r.flags |= 2048, Vu(9, Ru.bind(null, r, a, t, n), void 0, null), t + }, + useId: function() { + var e = _u(), + n = Ti.identifierPrefix; + if (aa) { + var t = Zl; + n = ":" + n + "R" + (t = (Gl & ~(1 << 32 - on(Gl) - 1)).toString(32) + t), 0 < (t = ku++) && (n += "H" + t.toString(32)), n += ":" + } else n = ":" + n + "r" + (t = wu++).toString(32) + ":"; + return e.memoizedState = n + }, + unstable_isNewReconciler: !1 + }, + io = { + readContext: _a, + useCallback: Xu, + useContext: _a, + useEffect: Qu, + useImperativeHandle: qu, + useInsertionEffect: ju, + useLayoutEffect: $u, + useMemo: Gu, + useReducer: Pu, + useRef: Au, + useState: function() { + return Pu(Nu) + }, + useDebugValue: Yu, + useDeferredValue: function(e) { + return Zu(zu(), gu.memoizedState, e) + }, + useTransition: function() { + return [Pu(Nu)[0], zu().memoizedState] + }, + useMutableSource: Lu, + useSyncExternalStore: Mu, + useId: eo, + unstable_isNewReconciler: !1 + }, + so = { + readContext: _a, + useCallback: Xu, + useContext: _a, + useEffect: Qu, + useImperativeHandle: qu, + useInsertionEffect: ju, + useLayoutEffect: $u, + useMemo: Gu, + useReducer: Tu, + useRef: Au, + useState: function() { + return Tu(Nu) + }, + useDebugValue: Yu, + useDeferredValue: function(e) { + var n = zu(); + return null === gu ? n.memoizedState = e : Zu(n, gu.memoizedState, e) + }, + useTransition: function() { + return [Tu(Nu)[0], zu().memoizedState] + }, + useMutableSource: Lu, + useSyncExternalStore: Mu, + useId: eo, + unstable_isNewReconciler: !1 + }; + + function co(e, n) { + try { + var t = "", + r = n; + do { + t += H(r), r = r.return + } while (r); + var l = t + } catch (e) { + l = "\nError generating stack: " + e.message + "\n" + e.stack + } + return { + value: e, + source: n, + stack: l, + digest: null + } + } + + function fo(e, n, t) { + return { + value: e, + source: null, + stack: null != t ? t : null, + digest: null != n ? n : null + } + } + + function po(e, n) { + try { + r.error(n.value) + } catch (e) { + setTimeout((function() { + throw e + })) + } + } + var mo = "function" == typeof WeakMap ? WeakMap : Map; + + function ho(e, n, t) { + (t = Ra(-1, t)).tag = 3, t.payload = { + element: null + }; + var r = n.value; + return t.callback = function() { + ji || (ji = !0, $i = r), po(0, n) + }, t + } + + function go(e, n, t) { + (t = Ra(-1, t)).tag = 3; + var r = e.type.getDerivedStateFromError; + if ("function" == typeof r) { + var l = n.value; + t.payload = function() { + return r(l) + }, t.callback = function() { + po(0, n) + } + } + var a = e.stateNode; + return null !== a && "function" == typeof a.componentDidCatch && (t.callback = function() { + po(0, n), "function" != typeof r && (null === Ki ? Ki = new Set([this]) : Ki.add(this)); + var e = n.stack; + this.componentDidCatch(n.value, { + componentStack: null !== e ? e : "" + }) + }), t + } + + function vo(e, n, t) { + var r = e.pingCache; + if (null === r) { + r = e.pingCache = new mo; + var l = new Set; + r.set(n, l) + } else void 0 === (l = r.get(n)) && (l = new Set, r.set(n, l)); + l.has(t) || (l.add(t), e = _s.bind(null, e, n, t), n.then(e, e)) + } + + function yo(e) { + do { + var n; + if ((n = 13 === e.tag) && (n = null === (n = e.memoizedState) || null !== n.dehydrated), n) return e; + e = e.return + } while (null !== e); + return null + } + + function bo(e, n, t, r, l) { + return 0 == (1 & e.mode) ? (e === n ? e.flags |= 65536 : (e.flags |= 128, t.flags |= 131072, t.flags &= -52805, 1 === t.tag && (null === t.alternate ? t.tag = 17 : ((n = Ra(-1, 1)).tag = 2, Da(t, n, 1))), t.lanes |= 1), e) : (e.flags |= 65536, e.lanes = l, e) + } + var ko = w.ReactCurrentOwner, + wo = !1; + + function So(e, n, t, r) { + n.child = null === e ? Za(n, null, t, r) : Ga(n, e.child, t, r) + } + + function xo(e, n, t, r, l) { + t = t.render; + var a = n.ref; + return Ca(n, l), r = Eu(e, n, t, r, a, l), t = Cu(), null === e || wo ? (aa && t && na(n), n.flags |= 1, So(e, n, r, l), n.child) : (n.updateQueue = e.updateQueue, n.flags &= -2053, e.lanes &= ~l, jo(e, n, l)) + } + + function Eo(e, n, t, r, l) { + if (null === e) { + var a = t.type; + return "function" != typeof a || Fs(a) || void 0 !== a.defaultProps || null !== t.compare || void 0 !== t.defaultProps ? ((e = Ds(t.type, null, r, n, n.mode, l)).ref = n.ref, e.return = n, n.child = e) : (n.tag = 15, n.type = a, Co(e, n, a, r, l)) + } + if (a = e.child, 0 == (e.lanes & l)) { + var u = a.memoizedProps; + if ((t = null !== (t = t.compare) ? t : sr)(u, r) && e.ref === n.ref) return jo(e, n, l) + } + return n.flags |= 1, (e = Rs(a, r)).ref = n.ref, e.return = n, n.child = e + } + + function Co(e, n, t, r, l) { + if (null !== e) { + var a = e.memoizedProps; + if (sr(a, r) && e.ref === n.ref) { + if (wo = !1, n.pendingProps = r = a, 0 == (e.lanes & l)) return n.lanes = e.lanes, jo(e, n, l); + 0 != (131072 & e.flags) && (wo = !0) + } + } + return No(e, n, t, r, l) + } + + function _o(e, n, t) { + var r = n.pendingProps, + l = r.children, + a = null !== e ? e.memoizedState : null; + if ("hidden" === r.mode) + if (0 == (1 & n.mode)) n.memoizedState = { + baseLanes: 0, + cachePool: null, + transitions: null + }, zl(Ri, Fi), Fi |= t; + else { + if (0 == (1073741824 & t)) return e = null !== a ? a.baseLanes | t : t, n.lanes = n.childLanes = 1073741824, n.memoizedState = { + baseLanes: e, + cachePool: null, + transitions: null + }, n.updateQueue = null, zl(Ri, Fi), Fi |= e, null; + n.memoizedState = { + baseLanes: 0, + cachePool: null, + transitions: null + }, r = null !== a ? a.baseLanes : t, zl(Ri, Fi), Fi |= r + } + else null !== a ? (r = a.baseLanes | t, n.memoizedState = null) : r = t, zl(Ri, Fi), Fi |= r; + return So(e, n, l, t), n.child + } + + function zo(e, n) { + var t = n.ref; + (null === e && null !== t || null !== e && e.ref !== t) && (n.flags |= 512, n.flags |= 2097152) + } + + function No(e, n, t, r, l) { + var a = Fl(t) ? Ll : Pl.current; + return a = Ml(n, a), Ca(n, l), t = Eu(e, n, t, r, a, l), r = Cu(), null === e || wo ? (aa && r && na(n), n.flags |= 1, So(e, n, t, l), n.child) : (n.updateQueue = e.updateQueue, n.flags &= -2053, e.lanes &= ~l, jo(e, n, l)) + } + + function Po(e, n, t, r, l) { + if (Fl(t)) { + var a = !0; + Il(n) + } else a = !1; + if (Ca(n, l), null === n.stateNode) Qo(e, n), Qa(n, t, r), $a(n, t, r, l), r = !0; + else if (null === e) { + var u = n.stateNode, + o = n.memoizedProps; + u.props = o; + var i = u.context, + s = t.contextType; + s = "object" == typeof s && null !== s ? _a(s) : Ml(n, s = Fl(t) ? Ll : Pl.current); + var c = t.getDerivedStateFromProps, + f = "function" == typeof c || "function" == typeof u.getSnapshotBeforeUpdate; + f || "function" != typeof u.UNSAFE_componentWillReceiveProps && "function" != typeof u.componentWillReceiveProps || (o !== r || i !== s) && ja(n, u, r, s), La = !1; + var d = n.memoizedState; + u.state = d, Ua(n, r, u, l), i = n.memoizedState, o !== r || d !== i || Tl.current || La ? ("function" == typeof c && (Ba(n, t, c, r), i = n.memoizedState), (o = La || Wa(n, t, o, r, d, i, s)) ? (f || "function" != typeof u.UNSAFE_componentWillMount && "function" != typeof u.componentWillMount || ("function" == typeof u.componentWillMount && u.componentWillMount(), "function" == typeof u.UNSAFE_componentWillMount && u.UNSAFE_componentWillMount()), "function" == typeof u.componentDidMount && (n.flags |= 4194308)) : ("function" == typeof u.componentDidMount && (n.flags |= 4194308), n.memoizedProps = r, n.memoizedState = i), u.props = r, u.state = i, u.context = s, r = o) : ("function" == typeof u.componentDidMount && (n.flags |= 4194308), r = !1) + } else { + u = n.stateNode, Fa(e, n), o = n.memoizedProps, s = n.type === n.elementType ? o : va(n.type, o), u.props = s, f = n.pendingProps, d = u.context, i = "object" == typeof(i = t.contextType) && null !== i ? _a(i) : Ml(n, i = Fl(t) ? Ll : Pl.current); + var p = t.getDerivedStateFromProps; + (c = "function" == typeof p || "function" == typeof u.getSnapshotBeforeUpdate) || "function" != typeof u.UNSAFE_componentWillReceiveProps && "function" != typeof u.componentWillReceiveProps || (o !== f || d !== i) && ja(n, u, r, i), La = !1, d = n.memoizedState, u.state = d, Ua(n, r, u, l); + var m = n.memoizedState; + o !== f || d !== m || Tl.current || La ? ("function" == typeof p && (Ba(n, t, p, r), m = n.memoizedState), (s = La || Wa(n, t, s, r, d, m, i) || !1) ? (c || "function" != typeof u.UNSAFE_componentWillUpdate && "function" != typeof u.componentWillUpdate || ("function" == typeof u.componentWillUpdate && u.componentWillUpdate(r, m, i), "function" == typeof u.UNSAFE_componentWillUpdate && u.UNSAFE_componentWillUpdate(r, m, i)), "function" == typeof u.componentDidUpdate && (n.flags |= 4), "function" == typeof u.getSnapshotBeforeUpdate && (n.flags |= 1024)) : ("function" != typeof u.componentDidUpdate || o === e.memoizedProps && d === e.memoizedState || (n.flags |= 4), "function" != typeof u.getSnapshotBeforeUpdate || o === e.memoizedProps && d === e.memoizedState || (n.flags |= 1024), n.memoizedProps = r, n.memoizedState = m), u.props = r, u.state = m, u.context = i, r = s) : ("function" != typeof u.componentDidUpdate || o === e.memoizedProps && d === e.memoizedState || (n.flags |= 4), "function" != typeof u.getSnapshotBeforeUpdate || o === e.memoizedProps && d === e.memoizedState || (n.flags |= 1024), r = !1) + } + return To(e, n, t, r, a, l) + } + + function To(e, n, t, r, l, a) { + zo(e, n); + var u = 0 != (128 & n.flags); + if (!r && !u) return l && Ul(n, t, !1), jo(e, n, a); + r = n.stateNode, ko.current = n; + var o = u && "function" != typeof t.getDerivedStateFromError ? null : r.render(); + return n.flags |= 1, null !== e && u ? (n.child = Ga(n, e.child, null, a), n.child = Ga(n, null, o, a)) : So(e, n, o, a), n.memoizedState = r.state, l && Ul(n, t, !0), n.child + } + + function Lo(e) { + var n = e.stateNode; + n.pendingContext ? Dl(0, n.pendingContext, n.pendingContext !== n.context) : n.context && Dl(0, n.context, !1), lu(e, n.containerInfo) + } + + function Mo(e, n, t, r, l) { + return ma(), ha(l), n.flags |= 256, So(e, n, t, r), n.child + } + var Fo, Ro, Do, Oo = { + dehydrated: null, + treeContext: null, + retryLane: 0 + }; + + function Io(e) { + return { + baseLanes: e, + cachePool: null, + transitions: null + } + } + + function Uo(e, n, t) { + var r, l = n.pendingProps, + a = iu.current, + o = !1, + i = 0 != (128 & n.flags); + if ((r = i) || (r = (null === e || null !== e.memoizedState) && 0 != (2 & a)), r ? (o = !0, n.flags &= -129) : null !== e && null === e.memoizedState || (a |= 1), zl(iu, 1 & a), null === e) return ca(n), null !== (e = n.memoizedState) && null !== (e = e.dehydrated) ? (0 == (1 & n.mode) ? n.lanes = 1 : "$!" === e.data ? n.lanes = 8 : n.lanes = 1073741824, null) : (i = l.children, e = l.fallback, o ? (l = n.mode, o = n.child, i = { + mode: "hidden", + children: i + }, 0 == (1 & l) && null !== o ? (o.childLanes = 0, o.pendingProps = i) : o = Is(i, l, 0, null), e = Os(e, l, t, null), o.return = n, e.return = n, o.sibling = e, n.child = o, n.child.memoizedState = Io(t), n.memoizedState = Oo, e) : Vo(n, i)); + if (null !== (a = e.memoizedState) && null !== (r = a.dehydrated)) return function(e, n, t, r, l, a, o) { + if (t) return 256 & n.flags ? (n.flags &= -257, Ao(e, n, o, r = fo(Error(u(422))))) : null !== n.memoizedState ? (n.child = e.child, n.flags |= 128, null) : (a = r.fallback, l = n.mode, r = Is({ + mode: "visible", + children: r.children + }, l, 0, null), (a = Os(a, l, o, null)).flags |= 2, r.return = n, a.return = n, r.sibling = a, n.child = r, 0 != (1 & n.mode) && Ga(n, e.child, null, o), n.child.memoizedState = Io(o), n.memoizedState = Oo, a); + if (0 == (1 & n.mode)) return Ao(e, n, o, null); + if ("$!" === l.data) { + if (r = l.nextSibling && l.nextSibling.dataset) var i = r.dgst; + return r = i, Ao(e, n, o, r = fo(a = Error(u(419)), r, void 0)) + } + if (i = 0 != (o & e.childLanes), wo || i) { + if (null !== (r = Ti)) { + switch (o & -o) { + case 4: + l = 2; + break; + case 16: + l = 8; + break; + case 64: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: + case 4194304: + case 8388608: + case 16777216: + case 33554432: + case 67108864: + l = 32; + break; + case 536870912: + l = 268435456; + break; + default: + l = 0 + } + 0 !== (l = 0 != (l & (r.suspendedLanes | o)) ? 0 : l) && l !== a.retryLane && (a.retryLane = l, Ta(e, l), rs(r, e, l, -1)) + } + return gs(), Ao(e, n, o, r = fo(Error(u(421)))) + } + return "$?" === l.data ? (n.flags |= 128, n.child = e.child, n = Ns.bind(null, e), l._reactRetry = n, null) : (e = a.treeContext, la = cl(l.nextSibling), ra = n, aa = !0, ua = null, null !== e && (ql[Yl++] = Gl, ql[Yl++] = Zl, ql[Yl++] = Xl, Gl = e.id, Zl = e.overflow, Xl = n), (n = Vo(n, r.children)).flags |= 4096, n) + }(e, n, i, l, r, a, t); + if (o) { + o = l.fallback, i = n.mode, r = (a = e.child).sibling; + var s = { + mode: "hidden", + children: l.children + }; + return 0 == (1 & i) && n.child !== a ? ((l = n.child).childLanes = 0, l.pendingProps = s, n.deletions = null) : (l = Rs(a, s)).subtreeFlags = 14680064 & a.subtreeFlags, null !== r ? o = Rs(r, o) : (o = Os(o, i, t, null)).flags |= 2, o.return = n, l.return = n, l.sibling = o, n.child = l, l = o, o = n.child, i = null === (i = e.child.memoizedState) ? Io(t) : { + baseLanes: i.baseLanes | t, + cachePool: null, + transitions: i.transitions + }, o.memoizedState = i, o.childLanes = e.childLanes & ~t, n.memoizedState = Oo, l + } + return e = (o = e.child).sibling, l = Rs(o, { + mode: "visible", + children: l.children + }), 0 == (1 & n.mode) && (l.lanes = t), l.return = n, l.sibling = null, null !== e && (null === (t = n.deletions) ? (n.deletions = [e], n.flags |= 16) : t.push(e)), n.child = l, n.memoizedState = null, l + } + + function Vo(e, n) { + return (n = Is({ + mode: "visible", + children: n + }, e.mode, 0, null)).return = e, e.child = n + } + + function Ao(e, n, t, r) { + return null !== r && ha(r), Ga(n, e.child, null, t), (e = Vo(n, n.pendingProps.children)).flags |= 2, n.memoizedState = null, e + } + + function Bo(e, n, t) { + e.lanes |= n; + var r = e.alternate; + null !== r && (r.lanes |= n), Ea(e.return, n, t) + } + + function Ho(e, n, t, r, l) { + var a = e.memoizedState; + null === a ? e.memoizedState = { + isBackwards: n, + rendering: null, + renderingStartTime: 0, + last: r, + tail: t, + tailMode: l + } : (a.isBackwards = n, a.rendering = null, a.renderingStartTime = 0, a.last = r, a.tail = t, a.tailMode = l) + } + + function Wo(e, n, t) { + var r = n.pendingProps, + l = r.revealOrder, + a = r.tail; + if (So(e, n, r.children, t), 0 != (2 & (r = iu.current))) r = 1 & r | 2, n.flags |= 128; + else { + if (null !== e && 0 != (128 & e.flags)) e: for (e = n.child; null !== e;) { + if (13 === e.tag) null !== e.memoizedState && Bo(e, t, n); + else if (19 === e.tag) Bo(e, t, n); + else if (null !== e.child) { + e.child.return = e, e = e.child; + continue + } + if (e === n) break e; + for (; null === e.sibling;) { + if (null === e.return || e.return === n) break e; + e = e.return + } + e.sibling.return = e.return, e = e.sibling + } + r &= 1 + } + if (zl(iu, r), 0 == (1 & n.mode)) n.memoizedState = null; + else switch (l) { + case "forwards": + for (t = n.child, l = null; null !== t;) null !== (e = t.alternate) && null === su(e) && (l = t), t = t.sibling; + null === (t = l) ? (l = n.child, n.child = null) : (l = t.sibling, t.sibling = null), Ho(n, !1, l, t, a); + break; + case "backwards": + for (t = null, l = n.child, n.child = null; null !== l;) { + if (null !== (e = l.alternate) && null === su(e)) { + n.child = l; + break + } + e = l.sibling, l.sibling = t, t = l, l = e + } + Ho(n, !0, t, null, a); + break; + case "together": + Ho(n, !1, null, null, void 0); + break; + default: + n.memoizedState = null + } + return n.child + } + + function Qo(e, n) { + 0 == (1 & n.mode) && null !== e && (e.alternate = null, n.alternate = null, n.flags |= 2) + } + + function jo(e, n, t) { + if (null !== e && (n.dependencies = e.dependencies), Ii |= n.lanes, 0 == (t & n.childLanes)) return null; + if (null !== e && n.child !== e.child) throw Error(u(153)); + if (null !== n.child) { + for (t = Rs(e = n.child, e.pendingProps), n.child = t, t.return = n; null !== e.sibling;) e = e.sibling, (t = t.sibling = Rs(e, e.pendingProps)).return = n; + t.sibling = null + } + return n.child + } + + function $o(e, n) { + if (!aa) switch (e.tailMode) { + case "hidden": + n = e.tail; + for (var t = null; null !== n;) null !== n.alternate && (t = n), n = n.sibling; + null === t ? e.tail = null : t.sibling = null; + break; + case "collapsed": + t = e.tail; + for (var r = null; null !== t;) null !== t.alternate && (r = t), t = t.sibling; + null === r ? n || null === e.tail ? e.tail = null : e.tail.sibling = null : r.sibling = null + } + } + + function Ko(e) { + var n = null !== e.alternate && e.alternate.child === e.child, + t = 0, + r = 0; + if (n) + for (var l = e.child; null !== l;) t |= l.lanes | l.childLanes, r |= 14680064 & l.subtreeFlags, r |= 14680064 & l.flags, l.return = e, l = l.sibling; + else + for (l = e.child; null !== l;) t |= l.lanes | l.childLanes, r |= l.subtreeFlags, r |= l.flags, l.return = e, l = l.sibling; + return e.subtreeFlags |= r, e.childLanes = t, n + } + + function qo(e, n, t) { + var r = n.pendingProps; + switch (ta(n), n.tag) { + case 2: + case 16: + case 15: + case 0: + case 11: + case 7: + case 8: + case 12: + case 9: + case 14: + return Ko(n), null; + case 1: + case 17: + return Fl(n.type) && Rl(), Ko(n), null; + case 3: + return r = n.stateNode, au(), _l(Tl), _l(Pl), fu(), r.pendingContext && (r.context = r.pendingContext, r.pendingContext = null), null !== e && null !== e.child || (da(n) ? n.flags |= 4 : null === e || e.memoizedState.isDehydrated && 0 == (256 & n.flags) || (n.flags |= 1024, null !== ua && (os(ua), ua = null))), Ko(n), null; + case 5: + ou(n); + var l = ru(tu.current); + if (t = n.type, null !== e && null != n.stateNode) Ro(e, n, t, r), e.ref !== n.ref && (n.flags |= 512, n.flags |= 2097152); + else { + if (!r) { + if (null === n.stateNode) throw Error(u(166)); + return Ko(n), null + } + if (e = ru(eu.current), da(n)) { + r = n.stateNode, t = n.type; + var a = n.memoizedProps; + switch (r[pl] = n, r[ml] = a, e = 0 != (1 & n.mode), t) { + case "dialog": + Ar("cancel", r), Ar("close", r); + break; + case "iframe": + case "object": + case "embed": + Ar("load", r); + break; + case "video": + case "audio": + for (l = 0; l < Or.length; l++) Ar(Or[l], r); + break; + case "source": + Ar("error", r); + break; + case "img": + case "image": + case "link": + Ar("error", r), Ar("load", r); + break; + case "details": + Ar("toggle", r); + break; + case "input": + G(r, a), Ar("invalid", r); + break; + case "select": + r._wrapperState = { + wasMultiple: !!a.multiple + }, Ar("invalid", r); + break; + case "textarea": + ae(r, a), Ar("invalid", r) + } + for (var o in be(t, a), l = null, a) + if (a.hasOwnProperty(o)) { + var s = a[o]; + "children" === o ? "string" == typeof s ? r.textContent !== s && (!0 !== a.suppressHydrationWarning && Jr(r.textContent, s, e), l = ["children", s]) : "number" == typeof s && r.textContent !== "" + s && (!0 !== a.suppressHydrationWarning && Jr(r.textContent, s, e), l = ["children", "" + s]) : i.hasOwnProperty(o) && null != s && "onScroll" === o && Ar("scroll", r) + } switch (t) { + case "input": + K(r), ee(r, a, !0); + break; + case "textarea": + K(r), oe(r); + break; + case "select": + case "option": + break; + default: + "function" == typeof a.onClick && (r.onclick = el) + } + r = l, n.updateQueue = r, null !== r && (n.flags |= 4) + } else { + o = 9 === l.nodeType ? l : l.ownerDocument, "http://www.w3.org/1999/xhtml" === e && (e = ie(t)), "http://www.w3.org/1999/xhtml" === e ? "script" === t ? ((e = o.createElement("div")).innerHTML = "