@openlv/modal 0.0.1-beta.11 → 0.0.1-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../core/dist/url/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/dist/index.js","../../session/dist/base.js","../../provider/dist/base.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/theme/index.tsx","../src/styles/index.ts","../src/element.tsx","../src/utils/i18n.tsx","../src/context.tsx","../src/hooks/useSession.ts","../src/components/UnknownState.tsx","../src/hooks/useClipboard.ts","../src/flow/HandshakeOpen.tsx","../src/flow/connecting.tsx","../src/flow/ConnectionFlow.tsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/defaultAttributes.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/Icon.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-left.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/circle-question-mark.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/plus.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/qr-code.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/settings.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/trash-2.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.jsx","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.1.18/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.1.18/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.1.18/node_modules/tailwind-variants/dist/lite.js","../src/ui/Button.tsx","../src/flow/disconnected/ConnectionGraphic.tsx","../src/flow/disconnected/Disconnected.tsx","../src/flow/InfoScreen.tsx","../src/hooks/usePunchTransition.ts","../src/hooks/useSettings.ts","../src/hooks/useTheme.ts","../src/assets/logo.ts","../src/components/footer/StatusIndicator.tsx","../src/components/footer/Footer.tsx","../src/components/Header.tsx","../src/hooks/useNavigationStack.ts","../src/ui/TransitionContainer.tsx","../src/ui/menu/MenuGroup.tsx","../src/ui/menu/MenuItem.tsx","../src/ui/Select.tsx","../src/components/settings/a11y/theme.tsx","../src/components/settings/a11y/index.tsx","../src/ui/InfoTooltip.tsx","../src/ui/menu/MenuLink.tsx","../src/ui/Toggle.tsx","../src/components/settings/connection/index.tsx","../src/ui/Input.tsx","../src/components/settings/connection/signaling.tsx","../src/components/settings/connection/transport.tsx","../src/components/settings/index.tsx","../src/components/ModalRoot.tsx","../src/utils/log.ts","../src/index.ts"],"sourcesContent":["export const OPENLV_PROTOCOL_VERSION = 1;\nexport const encodeConnectionURL = (payload) => {\n const params = new URLSearchParams();\n params.set(\"h\", payload.h);\n params.set(\"k\", payload.k);\n if (payload.p) {\n params.set(\"p\", payload.p);\n }\n if (payload.s) {\n params.set(\"s\", payload.s);\n }\n return `openlv://${payload.sessionId}@${OPENLV_PROTOCOL_VERSION}?${params.toString()}`;\n};\nexport const decodeConnectionURL = (url) => {\n // Type check and validation\n if (typeof url !== \"string\") {\n throw new TypeError(`Invalid URL type: expected string, got ${typeof url}`);\n }\n if (!url || url.trim() === \"\") {\n throw new Error(\"URL cannot be empty\");\n }\n if (!url.startsWith(\"openlv://\")) {\n throw new Error(`Invalid URL format: must start with 'openlv://', got: ${url}`);\n }\n try {\n const urlObj = new URL(url);\n const sessionId = urlObj.username;\n const version = Number(urlObj.hostname || urlObj.pathname.replace(\"/\", \"\"));\n if (version !== OPENLV_PROTOCOL_VERSION) {\n throw new Error(`Invalid protocol version: expected ${OPENLV_PROTOCOL_VERSION}, got ${version}`);\n }\n const h = urlObj.searchParams.get(\"h\") || \"\";\n const k = urlObj.searchParams.get(\"k\") || \"\";\n const s = urlObj.searchParams.get(\"s\") || undefined;\n const p = urlObj.searchParams.get(\"p\") || \"mqtt\";\n if (!sessionId) {\n throw new Error(\"Session ID is required in URL\");\n }\n // Validate session ID format (16 characters, URL-safe alphabet)\n if (!/^[A-Za-z0-9_-]{16}$/.test(sessionId)) {\n throw new Error(\"Invalid session ID format: must be 16 URL-safe characters\");\n }\n if (!h) {\n throw new Error(\"Public key hash (h parameter) is required in URL\");\n }\n // Validate public key hash format (16 hex characters)\n if (!/^[0-9a-f]{16}$/.test(h)) {\n throw new Error(\"Invalid public key hash format: must be 16 hex characters\");\n }\n if (!k) {\n throw new Error(\"Shared key (k parameter) is required in URL\");\n }\n // Validate shared key format (32 hex characters)\n if (!/^[0-9a-f]{32}$/.test(k)) {\n throw new Error(`Invalid shared key format: must be 32 hex characters, received: ${k}`);\n }\n return {\n version,\n sessionId,\n h,\n k,\n // TODO: figure out why '' empty string and not undefined\n s: s ? decodeURIComponent(s) : \"\",\n p,\n };\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Failed to parse URL: ${url}. Original error: ${errorMessage}`);\n }\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&\"optional\"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return\"number\"==typeof t}function S(t){return\"string\"==typeof t}function j(t){return\"bigint\"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return\"boolean\"==typeof t})),_=a(p(function(t){return\"symbol\"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||\"object\"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\\`P.record\\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n=\"string\"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};\n//# sourceMappingURL=index.js.map\n","import { decodeConnectionURL, OPENLV_PROTOCOL_VERSION, } from \"@openlv/core\";\nimport { deriveSymmetricKey, generateHandshakeKey, generateSessionId, initEncryptionKeys, initHash, parseEncryptionKey, } from \"@openlv/core/encryption\";\nimport { SIGNAL_STATE, } from \"@openlv/signaling\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { TRANSPORT_STATE, } from \"@openlv/transport\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { log } from \"./utils/log.js\";\nexport const SESSION_STATE = {\n CREATED: \"created\",\n SIGNALING: \"signaling\",\n READY: \"ready\",\n LINKING: \"linking\",\n CONNECTED: \"connected\",\n DISCONNECTED: \"disconnected\",\n};\n/**\n * OpenLV Session\n *\n * https://openlv.sh/api/session\n */\nexport const createSession = async (initParameters, signalLayer, transportLayer, onMessage) => {\n const emitter = new EventEmitter();\n const messages = new EventEmitter();\n const sessionId = \"sessionId\" in initParameters\n ? initParameters.sessionId\n : generateSessionId();\n const { encryptionKey, decryptionKey: { decrypt }, } = await initEncryptionKeys(initParameters);\n let relyingPublicKey;\n const handshakeKey = \"k\" in initParameters\n ? await deriveSymmetricKey(initParameters.k)\n : await generateHandshakeKey();\n const { hash, isHost } = await initHash(\"h\" in initParameters ? initParameters.h : undefined, encryptionKey);\n let status = SESSION_STATE.CREATED;\n const protocol = initParameters.p;\n const server = initParameters.s;\n const updateStatus = (newStatus) => {\n log(\"updateStatus\", newStatus);\n status = newStatus;\n emitter.emit(\"state_change\", { status, signaling: signal.getState() });\n };\n const signaling = await signalLayer({\n topic: sessionId,\n url: server,\n });\n const signal = await signaling({\n h: hash,\n canEncrypt() {\n return relyingPublicKey !== undefined;\n },\n async encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n log(`encrypting to ${relyingPublicKey.toString()}`, message);\n return await relyingPublicKey.encrypt(message);\n },\n decrypt,\n publicKey: encryptionKey,\n k: handshakeKey,\n async rpDiscovered(rpKey) {\n const role = isHost ? \"host\" : \"client\";\n log(`rpKey discovered by ${role}`, rpKey);\n relyingPublicKey = await parseEncryptionKey(rpKey);\n },\n isHost,\n });\n const transport = transportLayer({\n encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return relyingPublicKey?.encrypt(message);\n },\n decrypt,\n isHost,\n onmessage: async (message) => {\n console.log(\"Session: received message from transport\", message);\n if (message[\"type\"] === \"request\") {\n const data = await onMessage(message[\"payload\"]);\n const response = {\n type: \"response\",\n messageId: message[\"messageId\"],\n payload: data,\n };\n await transport.send(response);\n }\n if (message[\"type\"] === \"response\") {\n messages.emit(\"message\", message);\n }\n },\n async subsend(message) {\n console.log(\"Session: sending trans msg to signal\", message);\n const sessionMessage = {\n type: \"request\",\n messageId: crypto.randomUUID(),\n payload: message,\n };\n await signal.send(sessionMessage);\n },\n });\n transport.emitter.on(\"state_change\", (state) => {\n log(\"transport state change\", state);\n if (state === TRANSPORT_STATE.CONNECTED) {\n updateStatus(SESSION_STATE.CONNECTED);\n }\n });\n const startTransport = async () => {\n await transport.setup();\n };\n // let transport: TransportLayer | undefined;\n const onSignalMessage = async (message) => {\n log(\"Session: received message from signaling\", message);\n const sessionMsg = message;\n if (sessionMsg.type === \"response\") {\n log(\"Session: received data message\", sessionMsg.payload);\n messages.emit(\"message\", sessionMsg);\n }\n if (sessionMsg.type === \"request\") {\n log(\"Session: received request message\", sessionMsg.payload);\n transport.handle(sessionMsg.payload);\n }\n };\n return {\n connect: async () => {\n updateStatus(SESSION_STATE.SIGNALING);\n log(\"connecting to session, isHost:\", isHost);\n // TODO: implement\n log(\"connecting to session\");\n signal.on(\"message\", onSignalMessage);\n signal.on(\"state_change\", (state) => {\n log(\"signal state change\", state);\n if (state === SIGNAL_STATE.READY) {\n updateStatus(SESSION_STATE.READY);\n }\n if ([\n SIGNAL_STATE.HANDSHAKE,\n SIGNAL_STATE.HANDSHAKE_PARTIAL,\n ].includes(state)) {\n updateStatus(SESSION_STATE.LINKING);\n }\n if (state === SIGNAL_STATE.ENCRYPTED) {\n // for now cuz we just use signaling call this a full connection\n // updateStatus(\"connected\");\n startTransport();\n }\n });\n // TODO: handle errors in setup nicely in modal UI\n await signal.setup();\n },\n async close() {\n log(\"session teardown\");\n await signal?.teardown();\n updateStatus(SESSION_STATE.DISCONNECTED);\n },\n getState() {\n return {\n status,\n signaling: signal.getState(),\n // transport: transport.getState(),\n };\n },\n getHandshakeParameters() {\n return {\n version: OPENLV_PROTOCOL_VERSION,\n sessionId,\n h: hash,\n k: handshakeKey.toString(),\n p: protocol,\n s: server,\n };\n },\n waitForLink: async () => new Promise((resolve) => {\n emitter.on(\"state_change\", (state) => {\n if (state?.status === SESSION_STATE.CONNECTED) {\n resolve();\n }\n });\n }),\n async send(message, timeout = 5000) {\n const ready = signal.getState().state === SIGNAL_STATE.ENCRYPTED;\n // const transportReady = transport.getState() === TRANSPORT_STATE.CONNECTED;\n if (!ready) {\n throw new Error(\"Session not ready\");\n }\n const randomID = crypto.randomUUID();\n const sessionMessage = {\n type: \"request\",\n messageId: randomID,\n payload: message,\n };\n // for now use signaling\n // await signal.send(sessionMessage);\n await transport.send(sessionMessage);\n return Promise.race([\n new Promise((resolve) => {\n messages.on(\"message\", (message) => {\n if (message.messageId === randomID && message.type === \"response\") {\n resolve(message.payload);\n }\n });\n }),\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(new Error(\"Timeout\"));\n }, timeout);\n }),\n ]);\n },\n _internal: {\n signal,\n transport,\n },\n emitter,\n };\n};\n/**\n * Connect to a session from its openlv:// URL\n */\nexport const connectSession = async (connectionUrl, onMessage, transport) => {\n const initParameters = decodeConnectionURL(connectionUrl);\n const signaling = await dynamicSignalingLayer(initParameters.p);\n if (!signaling) {\n throw new Error(`Invalid signaling protocol: ${initParameters.p}`);\n }\n return createSession(initParameters, signaling, transport, onMessage);\n};\n//# sourceMappingURL=base.js.map","/* eslint-disable unicorn/consistent-function-scoping */\nimport { encodeConnectionURL } from \"@openlv/core\";\nimport { createSession, } from \"@openlv/session\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { webrtc } from \"@openlv/transport/webrtc\";\nimport { Provider as OxProvider } from \"ox\";\nimport { match } from \"ts-pattern\";\nimport { createProviderStorage, } from \"./storage/index.js\";\nimport { log } from \"./utils/log.js\";\nexport const PROVIDER_STATUS = {\n STANDBY: \"standby\",\n CREATING: \"creating\",\n CONNECTING: \"connecting\",\n CONNECTED: \"connected\",\n ERROR: \"error\",\n};\nconst convertTempV1 = (transport) => {\n const stun = transport?.stun?.map(url => ({ urls: url })) || [];\n const turn = transport?.turn?.map(server => ({\n urls: server.urls,\n username: server.username,\n credential: server.credential,\n })) || [];\n return {\n iceServers: [...stun, ...turn],\n };\n};\n/**\n * OpenLV Provider\n *\n * https://openlv.sh/api/provider\n */\nexport const createProvider = (parameters) => {\n const oxEmitter = OxProvider.createEmitter();\n let session;\n let status = PROVIDER_STATUS.STANDBY;\n let accounts = [];\n const storage = createProviderStorage({ storage: parameters.storage });\n const { openModal, config } = parameters;\n const updateStatus = (newStatus) => {\n status = newStatus;\n log(\"updateStatus\", status);\n oxEmitter.emit(\"status_change\", newStatus);\n };\n const onMessage = async (message) => {\n log(\"onMessage\", message);\n return { result: \"success\" };\n };\n const getAccounts = async () => {\n if (session) {\n return (await session.send({\n method: \"eth_accounts\",\n params: [],\n }));\n }\n throw new Error(\"No session\");\n };\n const start = async (\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\n parameters = {\n p: \"mqtt\",\n s: \"wss://mqtt-dashboard.com:8884/mqtt\",\n }) => {\n updateStatus(PROVIDER_STATUS.CREATING);\n const transportOptions = convertTempV1(storage.getSettings().transport?.s?.webrtc)\n || config?.transport?.s?.webrtc;\n session = await createSession(parameters, await dynamicSignalingLayer(parameters.p), webrtc(transportOptions), onMessage);\n updateStatus(PROVIDER_STATUS.CONNECTING);\n log(\"session created\");\n await session.connect();\n log(\"session connected\");\n const handshakeParameters = session.getHandshakeParameters();\n const url = encodeConnectionURL(handshakeParameters);\n log(\"session url\", url);\n oxEmitter.emit(\"session_started\", session);\n await session.waitForLink();\n log(\"session linked\");\n accounts = await getAccounts();\n const chainIdHex = (await session.send({\n method: \"eth_chainId\",\n params: [],\n }));\n updateStatus(PROVIDER_STATUS.CONNECTED);\n oxEmitter.emit(\"connect\", { chainId: chainIdHex });\n oxEmitter.emit(\"accountsChanged\", accounts);\n return session;\n };\n const closeSession = async () => {\n await session?.close();\n session = undefined;\n updateStatus(PROVIDER_STATUS.STANDBY);\n };\n const request = async (request) => {\n log(\"ox request\", request.method, request.params);\n return match(request)\n .with({ method: \"eth_chainId\" }, async () => {\n log(\"eth_chainId\");\n if (session) {\n log(\"sending eth_chainId to session\");\n const result = await session.send(request);\n log(\"eth_chainId result from session\", result);\n return result;\n }\n return \"0x1\";\n })\n .with({ method: \"wallet_requestPermissions\" }, () => {\n throw new Error(\"Not implemented\");\n // console.log(\"wallet_requestPermissions\", v.params);\n // return [] as ExtractReturnType<\n // RpcSchema,\n // \"wallet_requestPermissions\"\n // >;\n })\n .with({ method: \"wallet_revokePermissions\" }, async () => {\n await closeSession();\n return;\n })\n // TODO: if modal is enabled explicitly toggle the modal to show.\n .with({ method: \"eth_requestAccounts\" }, async () => {\n log(\"eth_requestAccounts\");\n let provider;\n if (oxProvider) {\n provider = oxProvider;\n }\n if (openModal && provider) {\n await openModal(provider);\n await new Promise((resolve) => {\n provider?.on(\"connect\", resolve);\n provider?.on(\"disconnect\", resolve);\n });\n return await getAccounts();\n }\n const x = await start();\n log(\"x\", x);\n return await getAccounts();\n })\n .with({ method: \"eth_accounts\" }, async () => {\n log(\"eth_accounts\");\n return await getAccounts();\n })\n .otherwise(async (v) => {\n if (session) {\n log(\"sending request to session\", request);\n const result = await session.send(request);\n log(\"result from session\", result);\n return result;\n }\n throw new Error(`Method ${v.method} not supported`);\n });\n };\n const oxProvider = OxProvider.from({\n ...oxEmitter,\n storage,\n request,\n getSession: () => session,\n getAccounts,\n createSession: start,\n closeSession,\n getState: () => ({ status, session: session?.getState() ?? undefined }),\n });\n return oxProvider;\n};\n//# sourceMappingURL=base.js.map","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import type {\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nexport type {\n PredefinedThemeName,\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nconst importOrPassthrough = async (\n theme: ThemeConfig[\"theme\"],\n): Promise<ThemeTokensMap> => {\n if (typeof theme === \"string\") {\n if (theme === \"simple\") {\n return await import(\"./simple.js\").then(m => m.simpleTheme);\n }\n else if (theme === \"openlv\") {\n return await import(\"./openlv.js\").then(m => m.openlvTheme);\n }\n else {\n throw new Error(`Unknown theme: ${theme}`);\n }\n }\n\n return theme;\n};\n\ntype Primitive = string | number | boolean | null | undefined;\ntype Leaf = Primitive; // extend if you want to allow Date, bigint, etc.\n\ntype FlatCssVars = Record<`--${string}`, Leaf>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenToCssVars = <T extends Record<string, unknown>>(\n obj: T,\n prefix: readonly string[] = [],\n out: FlatCssVars = {},\n): FlatCssVars => {\n for (const [key, value] of Object.entries(obj)) {\n const path = [...prefix, key];\n\n if (isPlainObject(value)) {\n flattenToCssVars(value, path, out);\n }\n else {\n out[`--lv-${path.join(\"-\")}` as `--${string}`] = value as Leaf;\n }\n }\n\n return out;\n};\n\nexport const resolveMode = (\n appThemeMode: ThemeMode = \"auto\",\n userTheme: UserThemePreference = \"system\",\n): \"light\" | \"dark\" => {\n if (appThemeMode === \"light\" || appThemeMode === \"dark\") {\n return appThemeMode;\n }\n\n if (userTheme === \"system\") {\n return globalThis.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n return userTheme;\n};\n\nconst deepMerge = (\n base: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = { ...base };\n\n for (const key of Object.keys(overlay)) {\n const baseValue = base[key];\n const overlayValue = overlay[key];\n\n result[key]\n = isPlainObject(baseValue) && isPlainObject(overlayValue)\n ? deepMerge(baseValue, overlayValue)\n : overlayValue;\n }\n\n return result;\n};\n\n// Converts the theme into css variables\n// --lv-\nexport const buildTheme = async (\n config: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n const theme = await importOrPassthrough(config.theme);\n\n const resolvedMode = resolveMode(config.mode, userTheme);\n const variant = theme[resolvedMode];\n\n if (!variant) return \"\";\n\n const mergedVariant = theme.common\n ? deepMerge(theme.common, variant)\n : variant;\n\n const flattened = flattenToCssVars(mergedVariant);\n\n return Object.entries(flattened)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\"\\n\");\n};\n","import \"./index.css\";\n\nimport { buildTheme } from \"../theme/index.js\";\nimport type { ThemeConfig, UserThemePreference } from \"../theme/types.js\";\n// @ts-expect-error - Vite handles this import at build time\nimport cssContent from \"./index.css?inline\";\n\n/**\n * Ensures styles exist in the shadow root and updates them with the current theme.\n */\nexport const updateStyles = async (\n shadowRoot: ShadowRoot,\n theme?: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n let style = shadowRoot.querySelector(\n \"style[data-openlv-modal]\",\n ) as HTMLStyleElement | null;\n\n if (!style) {\n style = document.createElement(\"style\");\n style.dataset.openlvModal = \"true\";\n shadowRoot.append(style);\n }\n\n const themeConfig = {\n ...theme,\n theme: theme?.theme ?? \"simple\",\n };\n\n if (themeConfig) {\n const themeStr = await buildTheme(themeConfig, userTheme);\n\n style.textContent = `:root, :host {\\n${themeStr}\\n}\\n` + cssContent;\n }\n else {\n style.textContent = cssContent;\n }\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport { render } from \"solid-js/web\";\n\nimport { ModalProvider } from \"./context.js\";\nimport { updateStyles } from \"./styles/index.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\n\nexport type OpenLVModalElementProps = {\n provider: OpenLVProvider;\n onClose?: () => void;\n theme?: ThemeConfig;\n};\n\nexport class OpenLVModalElement\n extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private renderRequested = false;\n private readonly parameters: OpenLVModalElementProps;\n private themeCleanup?: () => void;\n private disposeRender?: () => void;\n\n constructor(parameters: OpenLVModalElementProps) {\n super();\n this.parameters = parameters;\n\n this.shadow = this.attachShadow({ mode: \"open\" });\n const initialUserTheme\n = parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, parameters.theme, initialUserTheme);\n }\n\n connectedCallback() {\n this.requestRender();\n this.themeCleanup?.();\n this.setupThemeListener();\n }\n\n disconnectedCallback() {\n this.disposeRender?.();\n this.disposeRender = undefined;\n this.themeCleanup?.();\n }\n\n private setupThemeListener() {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const update = () => {\n const userTheme\n = this.parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, this.parameters.theme, userTheme);\n };\n\n this.parameters.provider.storage.emitter.on(\"settings_change\", update);\n\n const mediaQuery = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\n\n mediaQuery.addEventListener(\"change\", update);\n\n this.themeCleanup = () => {\n this.parameters.provider.storage.emitter.off(\"settings_change\", update);\n mediaQuery.removeEventListener(\"change\", update);\n };\n }\n\n showModal() {\n this.style.display = \"block\";\n }\n\n hideModal() {\n this.style.display = \"none\";\n }\n\n private requestRender() {\n if (this.renderRequested) {\n return;\n }\n\n this.renderRequested = true;\n queueMicrotask(() => {\n this.renderRequested = false;\n this.performRender();\n });\n }\n\n private performRender() {\n this.disposeRender?.();\n this.disposeRender = render(\n () => <ModalProvider {...this.parameters} />,\n this.shadow,\n );\n }\n}\n\nexport default OpenLVModalElement;\n","import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n type ParentComponent,\n useContext,\n} from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport fallbackEnglish from \"../../lang/en.json\" with { type: \"json\" };\nimport { useModalContext } from \"../context.jsx\";\n\nexport type LanguageTag =\n | \"en\"\n | \"nl\"\n | \"fr\"\n | \"es\"\n | \"sv\"\n | \"zh-cn\"\n | \"ar\"\n | \"he\"\n | \"fa\";\n\nexport type LanguageInfo = {\n tag: LanguageTag;\n name: string;\n nativeName: string;\n rtl?: boolean;\n};\n\nexport const LANGUAGES: LanguageInfo[] = [\n { tag: \"en\", name: \"English\", nativeName: \"English\" },\n { tag: \"nl\", name: \"Dutch\", nativeName: \"Nederlands\" },\n { tag: \"es\", name: \"Spanish\", nativeName: \"Español\" },\n { tag: \"sv\", name: \"Swedish\", nativeName: \"Svenska\" },\n { tag: \"zh-cn\", name: \"Chinese (Simplified)\", nativeName: \"简体中文\" },\n { tag: \"fr\", name: \"French\", nativeName: \"Français\" },\n { tag: \"ar\", name: \"Arabic\", nativeName: \"العربية\", rtl: true },\n { tag: \"he\", name: \"Hebrew\", nativeName: \"עברית\", rtl: true },\n { tag: \"fa\", name: \"Persian\", nativeName: \"فارسی\", rtl: true },\n];\n\nexport const isRtlLanguage = (tag: LanguageTag): boolean => {\n const language = LANGUAGES.find(l => l.tag === tag);\n\n return language?.rtl ?? false;\n};\n\nconst SUPPORTED_LANGUAGE_TAGS = new Set(LANGUAGES.map(l => l.tag));\n\nexport const detectBrowserLanguage = (): LanguageTag => {\n if (typeof navigator === \"undefined\") return \"en\";\n\n const languages = navigator.languages || [navigator.language];\n\n for (const browserLang of languages) {\n const lang = browserLang.toLowerCase();\n\n // Exact match\n if (SUPPORTED_LANGUAGE_TAGS.has(lang as LanguageTag)) {\n return lang as LanguageTag;\n }\n\n // Check for zh-cn variants (zh, zh-hans, zh-cn)\n if (\n lang === \"zh\"\n || lang.startsWith(\"zh-hans\")\n || lang.startsWith(\"zh-cn\")\n ) {\n return \"zh-cn\";\n }\n\n // Base language match (e.g., \"en-US\" -> \"en\")\n const [baseLang] = lang.split(\"-\");\n\n if (SUPPORTED_LANGUAGE_TAGS.has(baseLang as LanguageTag)) {\n return baseLang as LanguageTag;\n }\n }\n\n return \"en\";\n};\n\nexport const getLanguageScore = (tag: string): number => {\n if (typeof navigator === \"undefined\") return 0;\n\n const languages = navigator.languages || [navigator.language];\n\n for (let i = 0; i < languages.length; i++) {\n const browserLang = languages[i].toLowerCase();\n\n // Exact match\n if (browserLang === tag) return languages.length - i + 1;\n\n // Prefix match (e.g., \"en-US\" matches \"en\")\n if (browserLang.startsWith(`${tag}-`) || tag.startsWith(`${browserLang}-`))\n return languages.length - i;\n\n // Base language match (e.g., \"zh\" matches \"zh-cn\")\n const [baseLang] = browserLang.split(\"-\");\n\n if (baseLang === tag || tag.startsWith(`${baseLang}-`))\n return languages.length - i - 0.5;\n }\n\n return 0;\n};\n\nexport type Translate = (\n key: string,\n params?: Readonly<Record<string, string | number>>,\n) => string | JSX.Element;\n\nexport type Translations = Record<string, unknown>;\n\nconst resolveNestedValue = (\n source: Translations | null | undefined,\n key: string,\n): unknown => {\n if (!source) return undefined;\n\n const segments = key.split(\".\").filter(Boolean);\n\n if (segments.length === 0) return undefined;\n\n let current: unknown = source;\n\n for (const segment of segments) {\n if (typeof current !== \"object\" || current === null) return undefined;\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n};\n\nconst interpolate = (\n template: string,\n params?: Readonly<Record<string, string | number>>,\n): string => {\n if (!params) return template;\n\n return template.replaceAll(\n /\\{(\\w+)\\}/g,\n (matchText: string, key: string): string => {\n const value = params[key];\n\n return value === undefined ? matchText : String(value);\n },\n );\n};\n\nexport const resolveTranslation = (parameters: {\n primary: Translations | undefined;\n fallback: Translations;\n key: string;\n params?: Readonly<Record<string, string | number>>;\n}): string => {\n const fromPrimary = resolveNestedValue(parameters.primary, parameters.key);\n\n if (typeof fromPrimary === \"string\") {\n return interpolate(fromPrimary, parameters.params);\n }\n\n const fromFallback = resolveNestedValue(parameters.fallback, parameters.key);\n\n if (typeof fromFallback === \"string\") {\n return interpolate(fromFallback, parameters.params);\n }\n\n return parameters.key;\n};\n\nexport type TranslationContextValue = {\n languageTag: Accessor<LanguageTag>;\n setLanguageTag: (languageTag: LanguageTag) => void;\n isLoadingLanguagePack: Accessor<boolean>;\n isRtl: Accessor<boolean>;\n t: Translate;\n};\n\nexport const TranslationContext = createContext<\n TranslationContextValue | undefined\n>(undefined);\n\nconst loadLanguagePack = async (\n languageTag: LanguageTag,\n): Promise<Translations | undefined> =>\n match(languageTag)\n .with(\"en\", () => Promise.resolve(undefined))\n .with(\"nl\", async () => import(\"../../lang/nl.json\").then(m => m.default))\n .with(\"es\", async () => import(\"../../lang/es.json\").then(m => m.default))\n .with(\"sv\", async () => import(\"../../lang/sv.json\").then(m => m.default))\n .with(\"fr\", async () => import(\"../../lang/fr.json\").then(m => m.default))\n .with(\"zh-cn\", async () =>\n import(\"../../lang/zh-cn.json\").then(m => m.default),\n )\n .with(\"ar\", async () => import(\"../../lang/ar.json\").then(m => m.default))\n .with(\"he\", async () => import(\"../../lang/he.json\").then(m => m.default))\n .with(\"fa\", async () => import(\"../../lang/fa.json\").then(m => m.default))\n .exhaustive();\n\nexport const TranslationProvider: ParentComponent = (props) => {\n const { provider } = useModalContext();\n const initialLanguageTag = provider.storage.getSettings().language as LanguageTag | undefined;\n const [languageTag, setLanguageTag] = createSignal<LanguageTag>(\n initialLanguageTag ?? \"en\",\n );\n const [languagePack, setLanguagePack] = createSignal<\n Translations | undefined\n >(undefined);\n const [isLoadingLanguagePack, setIsLoadingLanguagePack] = createSignal(false);\n\n createEffect(() => {\n let cancelled = false;\n\n const run = async () => {\n setIsLoadingLanguagePack(true);\n\n try {\n const nextPack = await loadLanguagePack(languageTag());\n\n if (cancelled) return;\n\n setLanguagePack(nextPack);\n }\n finally {\n if (!cancelled) setIsLoadingLanguagePack(false);\n }\n };\n\n void run();\n\n onCleanup(() => {\n cancelled = true;\n });\n });\n\n const t: Translate = (key, params) => {\n const translated = resolveTranslation({\n primary: languagePack(),\n fallback: fallbackEnglish as unknown as Translations,\n key,\n params,\n });\n const lines = translated.split(\"\\n\");\n\n if (lines.length <= 1) {\n return translated;\n }\n\n return (\n <>\n {lines.map((line, index) => (\n <>\n {line}\n {index < lines.length - 1 ? <br /> : null}\n </>\n ))}\n </>\n );\n };\n\n const isRtl = createMemo(() => isRtlLanguage(languageTag()));\n const updateLanguageTag = (nextLanguageTag: LanguageTag) => {\n setLanguageTag(nextLanguageTag);\n };\n\n const contextValue: TranslationContextValue = {\n languageTag,\n setLanguageTag: updateLanguageTag,\n isLoadingLanguagePack,\n isRtl,\n t,\n };\n\n return (\n <TranslationContext.Provider value={contextValue}>\n {props.children}\n </TranslationContext.Provider>\n );\n};\n\nexport const useTranslation = () => {\n const context = useContext(TranslationContext);\n\n if (!context) {\n throw new Error(\"TranslationProvider not found\");\n }\n\n return context;\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport {\n type Component,\n createContext,\n useContext,\n} from \"solid-js\";\n\nimport { ModalRoot } from \"./components/ModalRoot.js\";\nimport { type OpenLVModalElementProps } from \"./element.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\nimport {\n TranslationProvider,\n} from \"./utils/i18n.js\";\n\nexport type ModalContextValue = {\n provider: OpenLVProvider;\n themeConfig?: ThemeConfig;\n};\n\nexport const ModalContext = createContext<ModalContextValue | undefined>(\n undefined,\n);\n\nexport const ModalProvider: Component<OpenLVModalElementProps> = (props) => {\n const { provider, theme } = props;\n\n return (\n <ModalContext.Provider value={{ provider, themeConfig: theme }}>\n <TranslationProvider>\n <ModalRoot onClose={props.onClose} />\n </TranslationProvider>\n </ModalContext.Provider>\n );\n};\n\nexport const useModalContext = () => {\n const context = useContext(ModalContext);\n\n if (!context) throw new Error(\"Modal context not found\");\n\n return context;\n};\n","import { encodeConnectionURL } from \"@openlv/core\";\nimport type { SessionStateObject } from \"@openlv/session\";\nimport { createMemo, createSignal, onCleanup, onMount } from \"solid-js\";\n\nimport { useModalContext } from \"../context.js\";\n\nexport const useSession = () => {\n const { provider } = useModalContext();\n const session = createMemo(() => provider.getSession(), undefined, { name: \"session\" });\n const [status, setStatus] = createSignal<SessionStateObject | undefined>(session()?.getState());\n\n console.log(\"session status\", status());\n\n const handleStateChange = (state?: SessionStateObject) => {\n console.log(\"session state change\", state);\n setStatus(state);\n };\n\n onMount(() => {\n session()?.emitter.on(\"state_change\", handleStateChange);\n });\n\n onCleanup(() => {\n session()?.emitter.off(\"state_change\", handleStateChange);\n });\n\n const parameters = createMemo(() => session()?.getHandshakeParameters());\n const uri = createMemo(() => {\n const handshakeParameters = parameters();\n\n return handshakeParameters\n ? encodeConnectionURL(handshakeParameters)\n : undefined;\n });\n\n return {\n uri,\n status,\n };\n};\n\nexport const useSessionStart = () => {\n const { provider } = useModalContext();\n\n return {\n start: () => {\n const currentSettings = provider.storage.getSettings();\n const p = currentSettings?.signaling?.p;\n const s = p ? currentSettings?.signaling?.s?.[p] : undefined;\n\n if (!p || !s) {\n throw new Error(\"Invalid protocol or server\");\n }\n\n return provider.createSession({\n p,\n s,\n });\n },\n };\n};\n","import { useSession } from \"../hooks/useSession.js\";\n\nexport const UnknownState = (props: { state: unknown; }) => {\n const { uri, status } = useSession();\n\n // biome-ignore lint/suspicious/noConsole: debug\n console.error(\"Unknown state:\", {\n state: props.state,\n });\n\n return (\n <div class=\"rounded-md bg-(--lv-control-button-secondary-background) p-2 text-(--lv-text-muted)\">\n <div>\n Unknown state:\n {JSON.stringify(props.state)}\n </div>\n <div>\n URI:\n {uri()}\n </div>\n <div>\n Session Status:\n {JSON.stringify(status())}\n </div>\n </div>\n );\n};\n","export const copyToClipboard = async (text: string): Promise<boolean> => {\n if (!text) return false;\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n\n return true;\n }\n }\n catch (error) {\n console.error(\"Failed to copy to clipboard\", error);\n }\n\n try {\n const textArea = document.createElement(\"textarea\");\n\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.append(textArea);\n textArea.focus();\n textArea.select();\n const result = document.execCommand(\"copy\");\n\n textArea.remove();\n\n return result;\n }\n catch {\n return false;\n }\n};\n","import * as QRCode from \"qrcode-generator\";\nimport { Show } from \"solid-js\";\n\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\n\nconst generateQRCode = (uriValue: string) => {\n // qrcode-generator ships a callable export as default, but its types are wrong\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const QR: any = (QRCode as any).default;\n\n const qr = QR(0, \"M\");\n\n qr.addData(uriValue);\n qr.make();\n\n return qr.createSvgTag({ cellSize: 5, margin: 0, scalable: true });\n};\n\nexport const HandshakeOpen = () => {\n const { t } = useTranslation();\n const { uri } = useSession();\n\n const handleCopy = () => {\n const sessionUri = uri();\n\n if (sessionUri) {\n copyToClipboard(sessionUri);\n }\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 px-2\">\n <div class=\"w-full space-y-4 rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-card-background) p-4\">\n <Show when={uri()}>\n {sessionUri => (\n <div class=\"relative mx-auto flex w-fit items-center justify-center rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-qr-background) p-4\">\n <button\n type=\"button\"\n class=\"h-[200px] w-[200px] cursor-pointer rounded bg-(--lv-qr-background) text-(--lv-qr-color)\"\n onClick={handleCopy}\n title={String(t(\"handshake.clickToCopyUrl\"))}\n innerHTML={generateQRCode(sessionUri())}\n />\n </div>\n )}\n </Show>\n\n <div class=\"w-full\">\n <button\n type=\"button\"\n onClick={handleCopy}\n class=\"w-full cursor-pointer rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-4 py-2 text-sm text-(--lv-text-primary) transition hover:bg-(--lv-control-button-secondary-hoverBackground) active:bg-(--lv-control-button-secondary-activeBackground)\"\n >\n {t(\"handshake.copyConnectionUrl\")}\n </button>\n </div>\n </div>\n <div class=\"w-full text-sm text-(--lv-text-secondary)\">\n <span>{t(\"handshake.scanCodeInstruction\")}</span>\n </div>\n </div>\n );\n};\n","import { SESSION_STATE } from \"@openlv/session\";\nimport { Match, Switch } from \"solid-js\";\n\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\nimport { HandshakeOpen } from \"./HandshakeOpen.jsx\";\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const Connecting = () => {\n const { status } = useSession();\n const { t } = useTranslation();\n\n return (\n <div>\n <Switch>\n <Match when={([SESSION_STATE.CREATED, SESSION_STATE.SIGNALING] as string[]).includes(status()?.status ?? \"\")}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connecting\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.waitingForNetwork\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={status()?.status === SESSION_STATE.READY}>\n <HandshakeOpen />\n </Match>\n <Match when={status()?.status === SESSION_STATE.LINKING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.establishingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.mayTakeFewSeconds\")}\n </p>\n </div>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport {\n createSignal,\n Match,\n onCleanup,\n onMount,\n Switch,\n} from \"solid-js\";\n\nimport { UnknownState } from \"../components/UnknownState.js\";\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Connecting } from \"./connecting.jsx\";\n\ninterface ConnectionFlowProps {\n onClose: () => void;\n onCopy: (uri: string) => void;\n}\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const ConnectionFlow = (props: ConnectionFlowProps) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n return (\n <div style={{ \"view-transition-name\": \"connection-flow\" }} class=\"w-full\">\n <Switch fallback={<UnknownState state={providerStatus()} />}>\n <Match when={providerStatus() === PROVIDER_STATUS.CREATING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.preparingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.generatingKeys\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTING}>\n <Connecting />\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTED}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">✅</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectedSuccessfully\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.walletConnectedReady\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.ERROR}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">🔌</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.disconnected\")}\n </h3>\n <p class=\"mb-4 text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.connectionClosed\")}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={props.onClose}\n class=\"w-full rounded-lg bg-(--lv-control-button-secondary-background) px-4 py-2 font-semibold text-(--lv-text-primary) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"common.close\")}\n </button>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/defaultAttributes.ts\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\nvar defaultAttributes_default = defaultAttributes;\nexport {\n defaultAttributes_default as default\n};\n//# sourceMappingURL=defaultAttributes.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/Icon.tsx\nimport { For, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport defaultAttributes from \"./defaultAttributes\";\n\n// ../shared/src/utils/hasA11yProp.ts\nvar hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\n// ../shared/src/utils/mergeClasses.ts\nvar mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\n// ../shared/src/utils/toCamelCase.ts\nvar toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\n// ../shared/src/utils/toKebabCase.ts\nvar toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\n// ../shared/src/utils/toPascalCase.ts\nvar toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\n// src/Icon.tsx\nvar Icon = (props) => {\n const [localProps, rest] = splitProps(props, [\n \"color\",\n \"size\",\n \"strokeWidth\",\n \"children\",\n \"class\",\n \"name\",\n \"iconNode\",\n \"absoluteStrokeWidth\"\n ]);\n return <svg\n {...defaultAttributes}\n width={localProps.size ?? defaultAttributes.width}\n height={localProps.size ?? defaultAttributes.height}\n stroke={localProps.color ?? defaultAttributes.stroke}\n stroke-width={localProps.absoluteStrokeWidth ? Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * 24 / Number(localProps.size) : Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"])}\n class={mergeClasses(\n \"lucide\",\n \"lucide-icon\",\n ...localProps.name != null ? [\n `lucide-${toKebabCase(toPascalCase(localProps.name))}`,\n `lucide-${toKebabCase(localProps.name)}`\n ] : [],\n localProps.class != null ? localProps.class : \"\"\n )}\n aria-hidden={!localProps.children && !hasA11yProp(rest) ? \"true\" : void 0}\n {...rest}\n >\n <For each={localProps.iconNode}>\n {([elementName, attrs]) => {\n return <Dynamic\n component={elementName}\n {...attrs}\n />;\n }}\n </For>\n </svg>;\n};\nvar Icon_default = Icon;\nexport {\n Icon_default as default\n};\n//# sourceMappingURL=Icon.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-left.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nvar ChevronLeft = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-left\" />;\nvar chevron_left_default = ChevronLeft;\nexport {\n chevron_left_default as default\n};\n//# sourceMappingURL=chevron-left.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-right.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nvar ChevronRight = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-right\" />;\nvar chevron_right_default = ChevronRight;\nexport {\n chevron_right_default as default\n};\n//# sourceMappingURL=chevron-right.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/circle-question-mark.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nvar CircleQuestionMark = (props) => <Icon {...props} iconNode={iconNode} name=\"circle-question-mark\" />;\nvar circle_question_mark_default = CircleQuestionMark;\nexport {\n circle_question_mark_default as default\n};\n//# sourceMappingURL=circle-question-mark.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/plus.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nvar Plus = (props) => <Icon {...props} iconNode={iconNode} name=\"plus\" />;\nvar plus_default = Plus;\nexport {\n plus_default as default\n};\n//# sourceMappingURL=plus.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/qr-code.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n];\nvar QrCode = (props) => <Icon {...props} iconNode={iconNode} name=\"qr-code\" />;\nvar qr_code_default = QrCode;\nexport {\n qr_code_default as default\n};\n//# sourceMappingURL=qr-code.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/settings.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nvar Settings = (props) => <Icon {...props} iconNode={iconNode} name=\"settings\" />;\nvar settings_default = Settings;\nexport {\n settings_default as default\n};\n//# sourceMappingURL=settings.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/trash-2.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nvar Trash2 = (props) => <Icon {...props} iconNode={iconNode} name=\"trash-2\" />;\nvar trash_2_default = Trash2;\nexport {\n trash_2_default as default\n};\n//# sourceMappingURL=trash-2.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/x.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nvar X = (props) => <Icon {...props} iconNode={iconNode} name=\"x\" />;\nvar x_default = X;\nexport {\n x_default as default\n};\n//# sourceMappingURL=x.jsx.map\n","// src/utils.js\nvar SPACE_REGEX = /\\s+/g;\nvar removeExtraSpaces = (str) => {\n if (typeof str !== \"string\" || !str) return str;\n return str.replace(SPACE_REGEX, \" \").trim();\n};\nvar cx = (...classnames) => {\n const classList = [];\n const buildClassString = (input) => {\n if (!input && input !== 0 && input !== 0n) return;\n if (Array.isArray(input)) {\n for (let i = 0, len = input.length; i < len; i++) buildClassString(input[i]);\n return;\n }\n const type = typeof input;\n if (type === \"string\" || type === \"number\" || type === \"bigint\") {\n if (type === \"number\" && input !== input) return;\n classList.push(String(input));\n } else if (type === \"object\") {\n const keys = Object.keys(input);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (input[key]) classList.push(key);\n }\n }\n };\n for (let i = 0, len = classnames.length; i < len; i++) {\n const c = classnames[i];\n if (c !== null && c !== void 0) buildClassString(c);\n }\n return classList.length > 0 ? removeExtraSpaces(classList.join(\" \")) : void 0;\n};\nvar falsyToString = (value) => value === false ? \"false\" : value === true ? \"true\" : value === 0 ? \"0\" : value;\nvar isEmptyObject = (obj) => {\n if (!obj || typeof obj !== \"object\") return true;\n for (const _ in obj) return false;\n return true;\n};\nvar isEqual = (obj1, obj2) => {\n if (obj1 === obj2) return true;\n if (!obj1 || !obj2) return false;\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n for (let i = 0; i < keys1.length; i++) {\n const key = keys1[i];\n if (!keys2.includes(key)) return false;\n if (obj1[key] !== obj2[key]) return false;\n }\n return true;\n};\nvar isBoolean = (value) => value === true || value === false;\nvar joinObjects = (obj1, obj2) => {\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const val2 = obj2[key];\n if (key in obj1) {\n obj1[key] = cx(obj1[key], val2);\n } else {\n obj1[key] = val2;\n }\n }\n }\n return obj1;\n};\nvar flat = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i];\n if (Array.isArray(el)) flat(el, target);\n else if (el) target.push(el);\n }\n};\nfunction flatArray(arr) {\n const flattened = [];\n flat(arr, flattened);\n return flattened;\n}\nvar flatMergeArrays = (...arrays) => {\n const result = [];\n flat(arrays, result);\n const filtered = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i]) filtered.push(result[i]);\n }\n return filtered;\n};\nvar mergeObjects = (obj1, obj2) => {\n const result = {};\n for (const key in obj1) {\n const val1 = obj1[key];\n if (key in obj2) {\n const val2 = obj2[key];\n if (Array.isArray(val1) || Array.isArray(val2)) {\n result[key] = flatMergeArrays(val2, val1);\n } else if (typeof val1 === \"object\" && typeof val2 === \"object\" && val1 && val2) {\n result[key] = mergeObjects(val1, val2);\n } else {\n result[key] = val2 + \" \" + val1;\n }\n } else {\n result[key] = val1;\n }\n }\n for (const key in obj2) {\n if (!(key in obj1)) {\n result[key] = obj2[key];\n }\n }\n return result;\n};\n\nexport { cx, falsyToString, flat, flatArray, flatMergeArrays, isBoolean, isEmptyObject, isEqual, joinObjects, mergeObjects, removeExtraSpaces };\n","import { cx, isEmptyObject, mergeObjects, isEqual, joinObjects, flatMergeArrays, falsyToString } from './chunk-LQJYWU4O.js';\n\n// src/config.js\nvar defaultConfig = {\n twMerge: true,\n twMergeConfig: {}\n};\n\n// src/state.js\nfunction createState() {\n let cachedTwMerge = null;\n let cachedTwMergeConfig = {};\n let didTwMergeConfigChange = false;\n return {\n get cachedTwMerge() {\n return cachedTwMerge;\n },\n set cachedTwMerge(value) {\n cachedTwMerge = value;\n },\n get cachedTwMergeConfig() {\n return cachedTwMergeConfig;\n },\n set cachedTwMergeConfig(value) {\n cachedTwMergeConfig = value;\n },\n get didTwMergeConfigChange() {\n return didTwMergeConfigChange;\n },\n set didTwMergeConfigChange(value) {\n didTwMergeConfigChange = value;\n },\n reset() {\n cachedTwMerge = null;\n cachedTwMergeConfig = {};\n didTwMergeConfigChange = false;\n }\n };\n}\nvar state = createState();\n\n// src/core.js\nvar getTailwindVariants = (cn) => {\n const tv = (options, configProp) => {\n const {\n extend = null,\n slots: slotProps = {},\n variants: variantsProps = {},\n compoundVariants: compoundVariantsProps = [],\n compoundSlots = [],\n defaultVariants: defaultVariantsProps = {}\n } = options;\n const config = { ...defaultConfig, ...configProp };\n const base = extend?.base ? cx(extend.base, options?.base) : options?.base;\n const variants = extend?.variants && !isEmptyObject(extend.variants) ? mergeObjects(variantsProps, extend.variants) : variantsProps;\n const defaultVariants = extend?.defaultVariants && !isEmptyObject(extend.defaultVariants) ? { ...extend.defaultVariants, ...defaultVariantsProps } : defaultVariantsProps;\n if (!isEmptyObject(config.twMergeConfig) && !isEqual(config.twMergeConfig, state.cachedTwMergeConfig)) {\n state.didTwMergeConfigChange = true;\n state.cachedTwMergeConfig = config.twMergeConfig;\n }\n const isExtendedSlotsEmpty = isEmptyObject(extend?.slots);\n const componentSlots = !isEmptyObject(slotProps) ? {\n // add \"base\" to the slots object\n base: cx(options?.base, isExtendedSlotsEmpty && extend?.base),\n ...slotProps\n } : {};\n const slots = isExtendedSlotsEmpty ? componentSlots : joinObjects(\n { ...extend?.slots },\n isEmptyObject(componentSlots) ? { base: options?.base } : componentSlots\n );\n const compoundVariants = isEmptyObject(extend?.compoundVariants) ? compoundVariantsProps : flatMergeArrays(extend?.compoundVariants, compoundVariantsProps);\n const component = (props) => {\n if (isEmptyObject(variants) && isEmptyObject(slotProps) && isExtendedSlotsEmpty) {\n return cn(base, props?.class, props?.className)(config);\n }\n if (compoundVariants && !Array.isArray(compoundVariants)) {\n throw new TypeError(\n `The \"compoundVariants\" prop must be an array. Received: ${typeof compoundVariants}`\n );\n }\n if (compoundSlots && !Array.isArray(compoundSlots)) {\n throw new TypeError(\n `The \"compoundSlots\" prop must be an array. Received: ${typeof compoundSlots}`\n );\n }\n const getVariantValue = (variant, vrs = variants, _slotKey = null, slotProps2 = null) => {\n const variantObj = vrs[variant];\n if (!variantObj || isEmptyObject(variantObj)) {\n return null;\n }\n const variantProp = slotProps2?.[variant] ?? props?.[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp);\n if (typeof variantKey === \"object\") {\n return null;\n }\n const defaultVariantProp = defaultVariants?.[variant];\n const key = variantKey != null ? variantKey : falsyToString(defaultVariantProp);\n const value = variantObj[key || \"false\"];\n return value;\n };\n const getVariantClassNames = () => {\n if (!variants) return null;\n const keys = Object.keys(variants);\n const result = [];\n for (let i = 0; i < keys.length; i++) {\n const value = getVariantValue(keys[i], variants);\n if (value) result.push(value);\n }\n return result;\n };\n const getVariantClassNamesBySlotKey = (slotKey, slotProps2) => {\n if (!variants || typeof variants !== \"object\") return null;\n const result = [];\n for (const variant in variants) {\n const variantValue = getVariantValue(variant, variants, slotKey, slotProps2);\n const value = slotKey === \"base\" && typeof variantValue === \"string\" ? variantValue : variantValue && variantValue[slotKey];\n if (value) result.push(value);\n }\n return result;\n };\n const propsWithoutUndefined = {};\n for (const prop in props) {\n const value = props[prop];\n if (value !== void 0) propsWithoutUndefined[prop] = value;\n }\n const getCompleteProps = (key, slotProps2) => {\n const initialProp = typeof props?.[key] === \"object\" ? {\n [key]: props[key]?.initial\n } : {};\n return {\n ...defaultVariants,\n ...propsWithoutUndefined,\n ...initialProp,\n ...slotProps2\n };\n };\n const getCompoundVariantsValue = (cv = [], slotProps2) => {\n const result = [];\n const cvLength = cv.length;\n for (let i = 0; i < cvLength; i++) {\n const { class: tvClass, className: tvClassName, ...compoundVariantOptions } = cv[i];\n let isValid = true;\n const completeProps = getCompleteProps(null, slotProps2);\n for (const key in compoundVariantOptions) {\n const value = compoundVariantOptions[key];\n const completePropsValue = completeProps[key];\n if (Array.isArray(value)) {\n if (!value.includes(completePropsValue)) {\n isValid = false;\n break;\n }\n } else {\n if ((value == null || value === false) && (completePropsValue == null || completePropsValue === false))\n continue;\n if (completePropsValue !== value) {\n isValid = false;\n break;\n }\n }\n }\n if (isValid) {\n if (tvClass) result.push(tvClass);\n if (tvClassName) result.push(tvClassName);\n }\n }\n return result;\n };\n const getCompoundVariantClassNamesBySlot = (slotProps2) => {\n const compoundClassNames = getCompoundVariantsValue(compoundVariants, slotProps2);\n if (!Array.isArray(compoundClassNames)) return compoundClassNames;\n const result = {};\n const cnFn = cn;\n for (let i = 0; i < compoundClassNames.length; i++) {\n const className = compoundClassNames[i];\n if (typeof className === \"string\") {\n result.base = cnFn(result.base, className)(config);\n } else if (typeof className === \"object\") {\n for (const slot in className) {\n result[slot] = cnFn(result[slot], className[slot])(config);\n }\n }\n }\n return result;\n };\n const getCompoundSlotClassNameBySlot = (slotProps2) => {\n if (compoundSlots.length < 1) return null;\n const result = {};\n const completeProps = getCompleteProps(null, slotProps2);\n for (let i = 0; i < compoundSlots.length; i++) {\n const {\n slots: slots2 = [],\n class: slotClass,\n className: slotClassName,\n ...slotVariants\n } = compoundSlots[i];\n if (!isEmptyObject(slotVariants)) {\n let isValid = true;\n for (const key in slotVariants) {\n const completePropsValue = completeProps[key];\n const slotVariantValue = slotVariants[key];\n if (completePropsValue === void 0 || (Array.isArray(slotVariantValue) ? !slotVariantValue.includes(completePropsValue) : slotVariantValue !== completePropsValue)) {\n isValid = false;\n break;\n }\n }\n if (!isValid) continue;\n }\n for (let j = 0; j < slots2.length; j++) {\n const slotName = slots2[j];\n if (!result[slotName]) result[slotName] = [];\n result[slotName].push([slotClass, slotClassName]);\n }\n }\n return result;\n };\n if (!isEmptyObject(slotProps) || !isExtendedSlotsEmpty) {\n const slotsFns = {};\n if (typeof slots === \"object\" && !isEmptyObject(slots)) {\n const cnFn = cn;\n for (const slotKey in slots) {\n slotsFns[slotKey] = (slotProps2) => {\n const compoundVariantClasses = getCompoundVariantClassNamesBySlot(slotProps2);\n const compoundSlotClasses = getCompoundSlotClassNameBySlot(slotProps2);\n return cnFn(\n slots[slotKey],\n getVariantClassNamesBySlotKey(slotKey, slotProps2),\n compoundVariantClasses ? compoundVariantClasses[slotKey] : void 0,\n compoundSlotClasses ? compoundSlotClasses[slotKey] : void 0,\n slotProps2?.class,\n slotProps2?.className\n )(config);\n };\n }\n }\n return slotsFns;\n }\n return cn(\n base,\n getVariantClassNames(),\n getCompoundVariantsValue(compoundVariants),\n props?.class,\n props?.className\n )(config);\n };\n const getVariantKeys = () => {\n if (!variants || typeof variants !== \"object\") return;\n return Object.keys(variants);\n };\n component.variantKeys = getVariantKeys();\n component.extend = extend;\n component.base = base;\n component.slots = slots;\n component.variants = variants;\n component.defaultVariants = defaultVariants;\n component.compoundSlots = compoundSlots;\n component.compoundVariants = compoundVariants;\n return component;\n };\n const createTV = (configProp) => {\n return (options, config) => tv(options, config ? mergeObjects(configProp, config) : configProp);\n };\n return {\n tv,\n createTV\n };\n};\n\nexport { defaultConfig, getTailwindVariants, state };\n","import { getTailwindVariants } from './chunk-RZF76H2U.js';\nexport { defaultConfig } from './chunk-RZF76H2U.js';\nimport { cx } from './chunk-LQJYWU4O.js';\nexport { cx } from './chunk-LQJYWU4O.js';\n\n// src/lite.js\nvar cnAdapter = (...classnames) => {\n return (_config) => {\n const base = cx(classnames);\n return base || void 0;\n };\n};\nvar { createTV, tv } = getTailwindVariants(cnAdapter);\n\nexport { cnAdapter as cn, cnAdapter, createTV, tv };\n","// Button implementation that also supports being an anchor tag\nimport classNames from \"classnames\";\nimport { type JSX, splitProps } from \"solid-js\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst styles = tv({\n base: \"flex items-center justify-center rounded-lg transition-all duration-100 cursor-pointer active:scale-95\",\n variants: {\n $variant: {\n primary:\n \"font-semibold text-sm bg-(--lv-control-button-primary-background) text-(--lv-control-button-primary-color) border-(--lv-control-button-primary-border) hover:bg-(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background)) active:bg-(--lv-control-button-primary-activeBackground,var(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background))) disabled:bg-(--lv-control-button-primary-disabledBackground,var(--lv-control-button-primary-background)) disabled:text-(--lv-control-button-primary-disabledColor,var(--lv-control-button-primary-color))\",\n secondary:\n \"border bg-(--lv-control-button-secondary-background) text-(--lv-control-button-secondary-color) border-(--lv-control-button-secondary-border,var(--lv-control-button-secondary-background)) hover:bg-(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background)) active:bg-(--lv-control-button-secondary-activeBackground,var(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background))) disabled:bg-(--lv-control-button-secondary-disabledBackground,var(--lv-control-button-secondary-background)) disabled:text-(--lv-control-button-secondary-disabledColor,var(--lv-control-button-secondary-color))\",\n tertiary:\n \"bg-transparent text-(--lv-text-muted) hover:bg-(--lv-control-button-tertiary-hoverBackground,transparent) active:bg-(--lv-control-button-tertiary-activeBackground,var(--lv-control-button-tertiary-hoverBackground,transparent)) disabled:text-(--lv-control-button-tertiary-disabledColor,var(--lv-text-muted))\",\n },\n $size: {\n sm: \"h-6\",\n md: \"h-8\",\n lg: \"h-11\",\n },\n $aspect: {\n square: \"aspect-square\",\n auto: \"\",\n },\n },\n defaultVariants: {\n $size: \"md\",\n $variant: \"primary\",\n $aspect: \"auto\",\n },\n});\n\nexport type ButtonButtonProps = {\n onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;\n} & JSX.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonLinkProps = {\n href: string;\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n} & JSX.AnchorHTMLAttributes<HTMLAnchorElement>;\nexport type ButtonProps = {\n children?: JSX.Element;\n class?: string;\n} & VariantProps<typeof styles> &\n(\n | ({\n href: string;\n } & ButtonLinkProps)\n | ({\n href?: undefined;\n } & ButtonButtonProps)\n );\n\nexport const Button = (rawProps: ButtonProps) => {\n const [local, props] = splitProps(rawProps, [\n \"children\",\n \"class\",\n \"$variant\",\n \"$size\",\n \"$aspect\",\n \"href\",\n \"onClick\",\n ]);\n\n if (local.href) {\n return (\n <a\n href={local.href}\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {local.children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {local.children}\n </button>\n );\n};\n","import { For } from \"solid-js\";\n\nconst dotCount = (isApple: boolean) => (isApple ? 1 : 3);\n\nconst TabletGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full justify-between\">\n <div class=\"grow py-1 ps-1\">\n <div class=\"h-full rounded-sm border border-gray-300 bg-gray-400\"></div>\n </div>\n <div class=\"flex h-full w-3 flex-col items-center justify-center gap-0.5 pr-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-500\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nconst PhoneGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full flex-col justify-between\">\n <div class=\"grow px-1 pt-1\">\n <div class=\"h-full rounded-sm border border-gray-200 bg-gray-300\"></div>\n </div>\n <div class=\"flex h-3 w-full items-center justify-center gap-0.5 pb-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-400\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nexport const ConnectionGraphic = () => {\n // the only fingerprinting we ever do\n // is Apple device\n // const isApple =\n // navigator.userAgent.includes(\"iPhone\") ||\n // navigator.userAgent.includes(\"iPad\") ||\n // navigator.userAgent.includes(\"iPod\");\n const isApple = true;\n\n return (\n <div class=\"-space-x-4 flex items-end\">\n <div class=\"h-38 w-48 overflow-hidden rounded-lg bg-gray-300\">\n <TabletGraphic isApple={isApple} />\n </div>\n <div class=\"h-18 w-12 overflow-hidden rounded-lg bg-gray-200\">\n <PhoneGraphic isApple={isApple} />\n </div>\n </div>\n );\n};\n","import { LucideSettings } from \"lucide-solid\";\n\nimport { useSessionStart } from \"../../hooks/useSession.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\nimport { ConnectionGraphic } from \"./ConnectionGraphic.js\";\n\nexport const Disconnected = (props: { onSettings: () => void; }) => {\n const { t } = useTranslation();\n const { start } = useSessionStart();\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <ConnectionGraphic />\n <div class=\"text-center\">\n <p class=\"text-sm text-(--lv-text-secondary)\">\n {t(\"disconnected.prompt\")}\n </p>\n </div>\n <div class=\"flex items-center\">\n <Button\n type=\"button\"\n onClick={start}\n class=\"z-10 px-6 py-3\"\n $variant=\"primary\"\n $size=\"lg\"\n >\n {t(\"disconnected.generateQr\")}\n </Button>\n <Button\n type=\"button\"\n aria-label={String(t(\"disconnected.connectionSettings\"))}\n aria-pressed={false}\n onClick={props.onSettings}\n class=\"px-3 ltr:-ml-1 ltr:rounded-l-none rtl:-mr-1 rtl:rounded-r-none\"\n $aspect=\"square\"\n $size=\"lg\"\n $variant=\"secondary\"\n >\n <LucideSettings class=\"h-5 w-5 text-(--lv-text-muted)\" />\n </Button>\n </div>\n </div>\n );\n};\n","import { LucideQrCode } from \"lucide-solid\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\n\nexport const InfoScreen = () => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex flex-col space-y-2 px-4 text-start\">\n <div class=\"min-h-32 w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.scanQrCode\")}\n </div>\n <div class=\"flex justify-center items-center grow\">\n <LucideQrCode class=\"w-10 h-10\" />\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.approveOnDevice\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.youreConnected\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n </div>\n );\n};\n","import { type Accessor, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport interface PunchTransitionOptions {\n duration?: number;\n}\n\nexport const usePunchTransition = <T>(\n value: T | Accessor<T>,\n { duration = 200 }: PunchTransitionOptions = {},\n) => {\n const readValue: Accessor<T>\n = typeof value === \"function\" ? (value as Accessor<T>) : () => value;\n const initialValue = readValue();\n const [current, setCurrent] = createSignal<T>(initialValue);\n const [previous, setPrevious] = createSignal<T | undefined>(undefined);\n let timeoutRef: ReturnType<typeof setTimeout> | undefined;\n let lastValueRef = initialValue;\n\n createEffect(() => {\n const nextValue = readValue();\n\n if (Object.is(nextValue, lastValueRef)) return;\n\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n\n setPrevious(() => lastValueRef);\n setCurrent(() => nextValue);\n lastValueRef = nextValue;\n\n timeoutRef = globalThis.setTimeout(() => {\n setPrevious(() => undefined);\n timeoutRef = undefined;\n }, duration);\n\n onCleanup(() => {\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n });\n });\n\n return {\n current,\n previous,\n isTransitioning: () => previous() !== undefined,\n };\n};\n","import type {\n ProviderStorage,\n UserThemePreference,\n} from \"@openlv/provider/storage\";\nimport { createSignal } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../provider/dist/storage/version.js\";\nimport { useModalContext } from \"../context.js\";\nimport type { LanguageTag } from \"../utils/i18n.jsx\";\n\nexport const useSettings = () => {\n const { provider } = useModalContext();\n const [settings, setLocalSettings] = createSignal<ProviderStorage>(provider.storage.getSettings());\n\n const setSettings = (newSettings: ProviderStorage) => {\n setLocalSettings(newSettings);\n provider.storage.setSettings(newSettings);\n };\n\n const setLanguage = (language: LanguageTag) => {\n setSettings({ ...settings(), language });\n };\n\n const setThemeMode = (themeMode: UserThemePreference) => {\n setSettings({ ...settings(), theme: themeMode });\n };\n\n const setSignalingProtocol = (p: SignalingProtocol) => {\n setSettings({ ...settings(), signaling: { p, s: settings()?.signaling?.s ?? {} } });\n };\n\n const setSignalingOptions = (options: { url: string; }) => {\n const p = settings()?.signaling?.p;\n\n if (!p) return;\n\n const s = settings()?.signaling?.s ?? {};\n\n setSettings({ ...settings(), signaling: { p, s: { ...s, [p]: options.url } } });\n };\n\n const setRetainSessionHistory = (retain: boolean) => {\n setSettings({ ...settings(), retainHistory: retain });\n };\n\n const setAutoReconnect = (autoReconnect: boolean) => {\n setSettings({ ...settings(), autoReconnect });\n };\n\n return {\n settings,\n setSettings,\n setLanguage,\n setThemeMode,\n setSignalingProtocol,\n setSignalingOptions,\n setRetainSessionHistory,\n setAutoReconnect,\n };\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"./useSettings.js\";\n\nexport const useTheme = () => {\n const { settings } = useSettings();\n\n const theme = createMemo(() => settings().theme);\n const mode = createMemo(() => \"light\");\n\n return {\n theme,\n mode,\n };\n};\n","/**\n * OpenLV icon - 128x128 pixels, optimized WebP format\n * Best for larger UI elements, headers, prominent display\n */\nexport const OPENLV_ICON_128\n = \"data:image/webp;base64,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\";\n","import { createMemo, Show } from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport { useSession } from \"../../hooks/useSession.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\n\nexport const FooterStatus = () => {\n const { t } = useTranslation();\n const { status: sessionStatus } = useSession();\n const status = createMemo(() => {\n const sessionState = sessionStatus()?.status;\n const signalState = sessionStatus()?.signaling?.state as string | undefined;\n\n return match({ sessionState, signalState })\n .with({ sessionState: \"connected\" }, () => ({\n icon: \"✅\",\n text: t(\"status.connectedSuccessfully\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"standby\" }, () => ({\n icon: \"🫥\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"connecting\" }, () => ({\n icon: \"↗️\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"ready\" }, () => ({\n icon: \"👋\",\n text: t(\"status.ready\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"handshake\" }, () => ({\n icon: \"🤝\",\n text: t(\"status.handshakeClosed\"),\n }))\n .with(\n { sessionState: \"signaling\", signalState: \"handshake-partial\" },\n () => ({\n icon: \"🤝\",\n text: t(\"status.handshakePartial\"),\n }),\n )\n .with({ sessionState: \"signaling\", signalState: \"encrypted\" }, () => ({\n icon: \"🔒\",\n text: t(\"status.encrypted\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"error\" }, () => ({\n icon: \"❌\",\n text: t(\"status.signalError\"),\n }))\n .otherwise(() => undefined);\n });\n\n return (\n <Show when={status()}>\n {resolved => (\n <div class=\"group flex items-center gap-2 rounded-md px-2 py-2 hover:bg-(--lv-control-button-secondary-background)\">\n <div class=\"pointer-events-none whitespace-nowrap rounded-md text-xs opacity-0 group-hover:opacity-100\">\n {resolved().text}\n </div>\n <div>{resolved().icon}</div>\n </div>\n )}\n </Show>\n );\n};\n","import { OPENLV_ICON_128 } from \"../../assets/logo.js\";\nimport { FooterStatus } from \"./StatusIndicator.js\";\n\nexport const Footer = () => (\n <>\n <div class=\"h-11 w-full\"></div>\n <div class=\"absolute inset-x-0 bottom-0 flex items-end justify-between gap-2 px-3 py-2 text-(--lv-text-muted)\">\n <a\n href=\"https://github.com/v3xlabs/open-lavatory\"\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"flex items-center gap-2 p-1 font-semibold text-sm text-(--lv-text-muted)\"\n >\n <img\n src={OPENLV_ICON_128}\n alt=\"Open Lavatory Logo\"\n width={20}\n height={20}\n class=\"rounded\"\n data-openlv-brand-logo\n />\n <span>openlv</span>\n </a>\n <div class=\"text-sm text-(--lv-text-muted)\">\n <FooterStatus />\n </div>\n </div>\n </>\n);\n","import { LucideChevronLeft, LucideCircleQuestionMark, LucideX } from \"lucide-solid\";\n\nimport { Button } from \"../ui/Button.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport type { ModalView } from \"./ModalRoot.js\";\n\nexport const Header = (props: {\n title: string;\n view: ModalView;\n onClose: () => void;\n onBack?: () => void;\n setView: (view: ModalView) => void;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex items-center justify-between px-2 py-2\">\n {props.onBack\n ? (\n <Button\n onClick={props.onBack}\n aria-label={String(\n props.view === \"settings\"\n ? t(\"modal.backToQr\")\n : t(\"modal.closeModal\"),\n )}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideChevronLeft class=\"h-6 w-6 text-(--lv-text-muted) rtl:rotate-180\" />\n </Button>\n )\n : (\n <Button\n type=\"button\"\n onClick={() => props.setView(\"info\")}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideCircleQuestionMark class=\"h-5 w-5\" />\n </Button>\n )}\n <h2 class=\"flex items-center justify-center gap-2 font-semibold text-(--lv-text-primary) text-lg\">\n {props.title}\n </h2>\n <Button\n type=\"button\"\n aria-label={String(t(\"common.close\"))}\n aria-pressed={false}\n onClick={props.onClose}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideX class=\"h-6 w-6 text-(--lv-text-muted)\" />\n </Button>\n </div>\n );\n};\n","import type { Accessor } from \"solid-js\";\nimport { createMemo, createSignal } from \"solid-js\";\n\nimport { usePunchTransition } from \"./usePunchTransition.js\";\n\nexport interface UseNavigationStackOptions {\n transitionDuration?: number;\n}\n\nexport interface UseNavigationStackReturn<T> {\n screen: Accessor<T>;\n previousScreen: Accessor<T | undefined>;\n isTransitioning: Accessor<boolean>;\n navigate: (screen: T) => void;\n goBack: () => void;\n isAtRoot: Accessor<boolean>;\n}\n\nexport const useNavigationStack = <T>(\n initialScreen: T,\n { transitionDuration = 200 }: UseNavigationStackOptions = {},\n): UseNavigationStackReturn<T> => {\n const [stack, setStack] = createSignal<T[]>([initialScreen]);\n const [index, setIndex] = createSignal(0);\n const screen = createMemo<T>(() => stack()[index()] ?? initialScreen);\n const { current, previous, isTransitioning } = usePunchTransition(screen, {\n duration: transitionDuration,\n });\n\n const navigate = (nextScreen: T) => {\n const activeIndex = index();\n const activeStack = stack();\n const currentScreen = activeStack[activeIndex];\n\n if (Object.is(currentScreen, nextScreen)) return;\n\n const nextStack = activeStack.slice(0, activeIndex + 1);\n\n nextStack.push(nextScreen);\n setStack(nextStack);\n setIndex(nextStack.length - 1);\n };\n\n const goBack = () => {\n setIndex(currentIndex => Math.max(0, currentIndex - 1));\n };\n\n return {\n screen: current,\n previousScreen: previous,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot: () => index() === 0,\n };\n};\n","import classNames from \"classnames\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type TransitionContainerProps<T> = {\n current: T;\n previous: T | undefined;\n isTransitioning: boolean;\n render: (value: T) => JSX.Element;\n class?: string;\n};\n\nexport const TransitionContainer = <T = unknown>(\n props: TransitionContainerProps<T>,\n) => (\n <div class={classNames(\"modal-transition__container\", props.class)}>\n <Show when={props.previous !== undefined}>\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {props.render(props.previous as T)}\n </div>\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n props.isTransitioning && \"modal-transition__layer--incoming\",\n )}\n >\n {props.render(props.current)}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuGroupProps = ParentProps<{\n title: JSX.Element;\n right?: JSX.Element;\n}>;\n\nexport const MenuGroup = (props: MenuGroupProps) => (\n <div>\n <div class=\"flex items-end justify-between py-1 pl-2\">\n <div class=\"font-medium text-(--lv-text-primary) text-sm\">\n {props.title}\n </div>\n <div>{props.right}</div>\n </div>\n <div class=\"flex flex-col gap-1 rounded-md bg-(--lv-card-background)\">\n {props.children}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuItemProps = ParentProps<{\n label: JSX.Element;\n}>;\n\nexport const MenuItem = (props: MenuItemProps) => (\n <div class=\"flex items-baseline justify-between gap-2 px-2 py-1 first:pt-2 last:pb-2\">\n <div class=\"text-sm text-(--lv-text-secondary) text-start\">\n {props.label}\n </div>\n <div>{props.children}</div>\n </div>\n);\n","import { For, Show } from \"solid-js\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst buttonGroupStyles = tv({\n slots: {\n root: \"flex overflow-hidden rounded-md border border-(--lv-control-button-secondary-border)\",\n box: \"px-4 py-2 font-semibold text-xs transition border-l first:border-l-0 border-(--lv-control-button-secondary-border)\",\n },\n variants: {\n active: {\n on: {\n box: \"bg-(--lv-control-button-secondary-background) text-(--lv-text-primary)\",\n },\n off: {\n box: \"bg-transparent text-(--lv-text-secondary) cursor-pointer\",\n },\n },\n },\n defaultVariants: {\n active: \"off\",\n },\n});\n\nconst dropdownStyles = tv({\n base: \"w-full rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-3 py-2 font-semibold text-xs text-(--lv-text-primary) cursor-pointer focus:outline-none focus:ring-2 focus:ring-(--lv-control-button-primary-background) appearance-none bg-[url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')] bg-[length:14px] bg-[right_8px_center] bg-no-repeat pr-8\",\n});\n\nexport type SelectProps = {\n options: string[][];\n value: string;\n onChange: (value: string) => void;\n dropdownThreshold?: number;\n};\n\nexport const Select = (props: SelectProps) => {\n const dropdown = dropdownStyles();\n const { root, box } = buttonGroupStyles({});\n\n return (\n <Show\n when={props.options.length > (props.dropdownThreshold ?? 3)}\n fallback={(\n <div class={root()}>\n <For each={props.options}>\n {([slug, label]) => (\n <button\n type=\"button\"\n onClick={() => props.onChange(slug)}\n aria-pressed={slug === props.value}\n class={box({ active: slug === props.value ? \"on\" : \"off\" })}\n >\n {label}\n </button>\n )}\n </For>\n </div>\n )}\n >\n <select\n class={dropdown}\n value={props.value}\n onChange={event => props.onChange(event.currentTarget.value)}\n >\n <For each={props.options}>\n {([slug, label]) => <option value={slug}>{label}</option>}\n </For>\n </select>\n </Show>\n );\n};\n","import type { UserThemePreference } from \"@openlv/provider/storage\";\nimport { Show } from \"solid-js\";\n\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nexport const ThemeSettings = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const isUserConfigurable = () => theme.mode() === \"auto\";\n const userThemeMode = () => (theme.mode() === \"auto\" ? \"system\" : theme.mode());\n const updateThemePreference = (value: string) => {\n // theme.setMode(value as ThemeMode);\n };\n\n return (\n <Show when={isUserConfigurable()}>\n <MenuItem label={t(\"settings.theme.mode\") as string}>\n <Select\n options={[\n [\"light\", t(\"settings.theme.light\") as string],\n [\"dark\", t(\"settings.theme.dark\") as string],\n [\"system\", t(\"settings.theme.system\") as string],\n ]}\n value={userThemeMode()}\n onChange={value =>\n updateThemePreference(value as UserThemePreference)}\n />\n </MenuItem>\n </Show>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport {\n getLanguageScore,\n LANGUAGES,\n type LanguageTag,\n useTranslation,\n} from \"../../../utils/i18n.js\";\nimport { ThemeSettings } from \"./theme.js\";\n\nexport const LanguageSettings = () => {\n const { t, languageTag, setLanguageTag } = useTranslation();\n const { settings, setLanguage } = useSettings();\n\n const sortedLanguages = createMemo(() =>\n [...LANGUAGES].sort((a, b) => {\n const scoreA = getLanguageScore(a.tag);\n const scoreB = getLanguageScore(b.tag);\n\n return scoreB - scoreA;\n }),\n );\n\n const handleLanguageChange = (value: string) => {\n const newLang = value as LanguageTag;\n\n setLanguageTag(newLang);\n setLanguage(newLang);\n };\n\n return (\n <MenuGroup title={t(\"settings.appearance\")}>\n <MenuItem label={t(\"settings.language\")}>\n <Select\n options={sortedLanguages().map(lang => [lang.tag, lang.nativeName])}\n value={\n (settings()?.language as LanguageTag | undefined) || languageTag()\n }\n onChange={handleLanguageChange}\n />\n </MenuItem>\n <ThemeSettings />\n </MenuGroup>\n );\n};\n","import { LucideCircleQuestionMark } from \"lucide-solid\";\nimport { mergeProps, type ParentProps } from \"solid-js\";\nimport type { VariantProps } from \"tailwind-variants/lite\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { match } from \"ts-pattern\";\n\nconst styles = tv({\n slots: {\n root: \"group relative\",\n box: \"cursor-pointer rounded-md transition-colors flex items-center justify-center hover:[background-color:var(--lv-control-button-tertiary-hoverBackground)] text-(--lv-text-muted)\",\n popover:\n \"-translate-x-1/2 absolute top-full left-1/2 z-10 hidden rounded-md shadow-sm group-hover:block border border-(--lv-control-button-secondary-border) bg-(--lv-body-background) px-2 py-1.5 text-(--lv-text-primary) text-sm\",\n icon: \"\",\n },\n variants: {\n size: {\n sm: {\n box: \"h-5 w-5 p-1\",\n icon: \"h-3 w-3\",\n },\n md: {\n box: \"h-6 w-6 p-1\",\n icon: \"h-4 w-4\",\n },\n lg: {\n box: \"h-8 w-8 p-1.5\",\n icon: \"h-4 w-4\",\n },\n },\n variant: {\n icon: \"\",\n text: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\nexport type InfoTooltipProps = VariantProps<typeof styles>;\n\nexport const InfoTooltip = (rawProps: ParentProps<InfoTooltipProps>) => {\n const props = mergeProps(\n { variant: \"icon\" as const, size: \"lg\" as const },\n rawProps,\n );\n const { root, box, popover, icon } = styles({\n size: props.size,\n variant: props.variant,\n });\n\n return (\n <div class={root()}>\n <div class={box()}>\n {match(props.variant)\n .with(\"icon\", () => <LucideCircleQuestionMark class={icon()} />)\n .with(\"text\", () => <div>Text</div>)\n .exhaustive()}\n </div>\n <div class={popover()}>{props.children}</div>\n </div>\n );\n};\n","import { LucideChevronRight } from \"lucide-solid\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type MenuLinkProps = {\n label: JSX.Element;\n value?: JSX.Element;\n onClick: () => void;\n};\n\nexport const MenuLink = (props: MenuLinkProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-between gap-2 first:rounded-t-sm last:rounded-b-sm px-2 py-1 first:pt-1.5 last:pb-2 hover:bg-(--lv-control-button-tertiary-hoverBackground)\"\n >\n <div class=\"text-sm text-(--lv-text-secondary) flex items-center gap-1\">\n {props.label}\n </div>\n <div class=\"flex items-center gap-1\">\n <Show when={props.value}>\n <span class=\"text-sm text-(--lv-text-muted)\">{props.value}</span>\n </Show>\n <LucideChevronRight class=\"h-4 w-4 text-(--lv-text-muted) rtl:rotate-180\" />\n </div>\n </button>\n);\n","import type { JSX } from \"solid-js\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Select } from \"./Select.js\";\n\nexport type ToggleProps = {\n label: JSX.Element;\n value: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport const Toggle = (props: ToggleProps) => {\n const { t } = useTranslation();\n\n return (\n <Select\n options={[\n [\"true\", String(t(\"common.yes\"))],\n [\"false\", String(t(\"common.no\"))],\n ]}\n value={props.value ? \"true\" : \"false\"}\n onChange={value => props.onChange(value === \"true\")}\n />\n );\n};\n","import { For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { InfoTooltip } from \"../../../ui/InfoTooltip.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { MenuLink } from \"../../../ui/menu/MenuLink.js\";\nimport { Toggle } from \"../../../ui/Toggle.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\nimport type { SettingsScreen } from \"../index.js\";\n\nexport const ConnectionPreferences = (props: {\n onNavigate: (screen: SettingsScreen) => void;\n}) => {\n const { t } = useTranslation();\n const { settings, setRetainSessionHistory, setAutoReconnect } = useSettings();\n\n return (\n <MenuGroup title={t(\"settings.connectionPreferences.title\")}>\n <MenuLink\n label={(\n <>\n {t(\"settings.signaling.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.signaling.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"signaling\")}\n value={settings()?.signaling?.p}\n />\n <MenuLink\n label={(\n <>\n {t(\"settings.transport.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.transport.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"transport\")}\n value=\"WebRTC\"\n />\n <For\n each={\n [\n [\n t(\"settings.connectionPreferences.retainSessionHistory\"),\n settings()?.retainHistory ?? false,\n setRetainSessionHistory,\n ],\n [\n t(\"settings.connectionPreferences.autoReconnect\"),\n settings()?.autoReconnect ?? false,\n setAutoReconnect,\n ],\n ] as const\n }\n >\n {([label, value, onChange]) => (\n <MenuItem label={label}>\n <Toggle label={label} value={value} onChange={onChange} />\n </MenuItem>\n )}\n </For>\n </MenuGroup>\n );\n};\n","import { Index, mergeProps, splitProps } from \"solid-js\";\n\nconst labelClasses = \"font-semibold text-xs uppercase tracking-wide\";\nconst inputClasses\n = \"h-9 w-full rounded-lg border bg-white px-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 text-(--lv-text-primary) bg-(--lv-body-background) border-(--lv-control-input-border)\";\n\ntype LabelProps = {\n htmlFor?: string;\n children: string;\n};\n\nexport const Label = (props: LabelProps) => (\n <label\n class={`${labelClasses} text-(--lv-text-secondary)`}\n for={props.htmlFor}\n >\n {props.children}\n </label>\n);\n\ntype InputProps = {\n // eslint-disable-next-line no-restricted-syntax\n id?: string;\n value: string;\n placeholder?: string;\n ariaLabel?: string;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport const Input = (props: InputProps) => {\n const merged = mergeProps({ readOnly: true }, props);\n const [local] = splitProps(merged, [\n \"id\",\n \"value\",\n \"placeholder\",\n \"ariaLabel\",\n \"readOnly\",\n \"onChange\",\n ]);\n\n return (\n <input\n // eslint-disable-next-line no-restricted-syntax\n id={local.id}\n class={inputClasses}\n value={local.value}\n placeholder={local.placeholder}\n aria-label={local.ariaLabel}\n readOnly={local.readOnly}\n onInput={(e) => {\n local.onChange?.(e.currentTarget.value);\n }}\n />\n );\n};\n\ntype InputGroupProps = {\n label: string;\n values: readonly string[];\n placeholder?: string;\n inputIdPrefix?: string;\n};\n\nexport const InputGroup = (props: InputGroupProps) => (\n <div class=\"grid gap-2\">\n <Label>{props.label}</Label>\n <Index each={props.values}>\n {(value, index) => {\n // eslint-disable-next-line no-restricted-syntax\n const id = props.inputIdPrefix\n ? `${props.inputIdPrefix}-${index}`\n : undefined;\n const suffix = props.values.length > 1 ? ` ${index + 1}` : \"\";\n\n return (\n <Input\n // eslint-disable-next-line no-restricted-syntax\n id={id}\n value={value()}\n placeholder={props.placeholder}\n ariaLabel={`${props.label}${suffix}`}\n />\n );\n }}\n </Index>\n </div>\n);\n","import { createMemo } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../../../provider/dist/storage/version.js\";\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst AVAILABLE_PROTOCOLS = [\"mqtt\", \"ntfy\", \"gun\"];\n\nexport const SignalingSettings = () => {\n const { t } = useTranslation();\n const { settings, setSignalingProtocol, setSignalingOptions }\n = useSettings();\n const signalingProtocol = createMemo(() => settings()?.signaling?.p);\n const signalingServer = createMemo(() => {\n const activeProtocol = signalingProtocol();\n\n if (!activeProtocol) return \"\";\n\n return settings()?.signaling?.s?.[activeProtocol] ?? \"\";\n });\n\n return (\n <div>\n <MenuGroup title={t(\"settings.signaling.title\")}>\n <MenuItem label={t(\"common.protocol\")}>\n <Select\n options={AVAILABLE_PROTOCOLS.map(option => [\n option.toLowerCase(),\n option.toUpperCase(),\n ])}\n value={signalingProtocol() ?? \"\"}\n onChange={value => setSignalingProtocol(value as SignalingProtocol)}\n />\n </MenuItem>\n <MenuItem label={t(\"settings.signaling.server\")}>\n <Input\n id=\"server\"\n value={signalingServer()}\n onChange={value => setSignalingOptions({ url: value })}\n placeholder={String(t(\"settings.signaling.serverUrl\"))}\n ariaLabel={String(t(\"settings.signaling.serverUrl\"))}\n readOnly={false}\n />\n </MenuItem>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.signaling.description\")}\n </div>\n </div>\n );\n};\n","import type { TurnServer } from \"@openlv/provider/storage\";\nimport { LucidePlus, LucideTrash2 } from \"lucide-solid\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createSignal, For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst ServerListItem = (props: {\n children: JSX.Element;\n onRemove: () => void;\n}) => (\n <div class=\"flex items-center gap-2\">\n <div class=\"flex-1\">{props.children}</div>\n <Button\n onClick={props.onRemove}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"sm\"\n >\n <LucideTrash2 class=\"h-4 w-4 text-(--lv-text-muted)\" />\n </Button>\n </div>\n);\n\nconst AddServerButton = (props: {\n label: JSX.Element;\n onClick: () => void;\n}) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-center gap-1 rounded-md border border-dashed border-(--lv-control-input-border) py-2 text-sm text-(--lv-text-muted) hover:bg-(--lv-card-background)\"\n >\n <LucidePlus class=\"h-4 w-4\" />\n {props.label}\n </button>\n);\n\nexport const TransportSettings = () => {\n const { t } = useTranslation();\n const {\n settings,\n setSettings,\n } = useSettings();\n\n const [turnServers, setTurnServers] = createSignal<TurnServer[]>([]);\n const [stunServers, setStunServers] = createSignal<string[]>([]);\n\n const handleAddStun = () => {\n setStunServers([...stunServers(), \"\"]);\n };\n\n const handleRemoveStun = (index: number) => {\n setStunServers(stunServers().filter((_, i) => i !== index));\n };\n\n const handleStunChange = (index: number, value: string) => {\n setStunServers(stunServers().map((server, i) => (i === index ? value : server)));\n };\n\n const handleAddTurn = () => {\n setTurnServers([...turnServers(), { urls: \"\" }]);\n };\n\n const handleRemoveTurn = (index: number) => {\n setTurnServers(turnServers().filter((_, i) => i !== index));\n };\n\n const handleTurnChange = (index: number, field: keyof TurnServer, value: string) => {\n setTurnServers(turnServers().map((server, i) => (i === index ? { ...server, [field]: value } : server)));\n };\n\n // createEffect(() => {\n // setSettings({\n // ...settings(), transport: {\n // p: \"webrtc\",\n // s: {\n // webrtc: {\n // stun: stunServers(),\n // turn: turnServers(),\n // },\n // },\n // },\n // });\n // });\n\n return (\n <>\n <MenuGroup title={t(\"settings.transport.iceServers.stun\")}>\n <div class=\"flex flex-col gap-2 p-2\">\n <For each={stunServers()}>\n {(server, index) => (\n <ServerListItem onRemove={() => handleRemoveStun(index())}>\n <Input\n value={server}\n onChange={value => handleStunChange(index(), value)}\n placeholder=\"stun:stun.l.google.com:19302\"\n readOnly={false}\n />\n </ServerListItem>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addStun\")}\n onClick={handleAddStun}\n />\n </div>\n </MenuGroup>\n\n <MenuGroup title={t(\"settings.transport.iceServers.turn\")}>\n <div class=\"flex flex-col gap-3 p-2\">\n <For each={turnServers()}>\n {(server, index) => (\n <div class=\"flex flex-col gap-2 rounded-md border border-(--lv-control-input-border) p-2\">\n <ServerListItem onRemove={() => handleRemoveTurn(index())}>\n <Input\n value={server.urls}\n onChange={value =>\n handleTurnChange(index(), \"urls\", value)}\n placeholder=\"turn:relay.example.com:443\"\n readOnly={false}\n />\n </ServerListItem>\n <div class=\"grid grid-cols-2 gap-2\">\n <Input\n value={server.username ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"username\", value)}\n placeholder=\"Username\"\n readOnly={false}\n />\n <Input\n value={server.credential ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"credential\", value)}\n placeholder=\"Password\"\n readOnly={false}\n />\n </div>\n </div>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addTurn\")}\n onClick={handleAddTurn}\n />\n </div>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.transport.description\")}\n </div>\n </>\n );\n};\n","import { createEffect } from \"solid-js\";\n\nimport { useNavigationStack } from \"../../hooks/useNavigationStack.js\";\nimport { TransitionContainer } from \"../../ui/TransitionContainer.js\";\nimport { LanguageSettings } from \"./a11y/index.js\";\nimport { ConnectionPreferences } from \"./connection/index.js\";\nimport { SignalingSettings } from \"./connection/signaling.js\";\nimport { TransportSettings } from \"./connection/transport.js\";\n\nexport type SettingsScreen = \"main\" | \"signaling\" | \"transport\";\n\nexport interface SettingsNavigationRef {\n goBack: () => void;\n isAtRoot: boolean;\n}\n\nexport interface ModalSettingsProps {\n onTitleChange?: (titleKey: string) => void;\n navigationRef?: { current: SettingsNavigationRef | null; };\n}\n\nconst getSettingsTitleKey = (screen: SettingsScreen): string => {\n switch (screen) {\n case \"main\": {\n return \"settings.title\";\n }\n case \"signaling\": {\n return \"settings.signaling.title\";\n }\n case \"transport\": {\n return \"settings.transport.title\";\n }\n }\n};\n\nexport const ModalSettings = (props: ModalSettingsProps) => {\n const {\n screen,\n previousScreen,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot,\n } = useNavigationStack<SettingsScreen>(\"main\");\n\n const internalRef: SettingsNavigationRef = {\n goBack,\n get isAtRoot() {\n return isAtRoot();\n },\n };\n\n createEffect(() => {\n if (props.navigationRef) {\n props.navigationRef.current = internalRef;\n }\n });\n\n createEffect(() => {\n props.onTitleChange?.(getSettingsTitleKey(screen()));\n });\n\n const renderScreen = (s: SettingsScreen) => {\n switch (s) {\n case \"main\": {\n return (\n <>\n <ConnectionPreferences onNavigate={navigate} />\n <LanguageSettings />\n </>\n );\n }\n case \"signaling\": {\n return <SignalingSettings />;\n }\n case \"transport\": {\n return <TransportSettings />;\n }\n }\n };\n\n return (\n <div class=\"px-4 pb-2\">\n <TransitionContainer\n current={screen()}\n previous={previousScreen()}\n isTransitioning={isTransitioning()}\n render={renderScreen}\n />\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport classNames from \"classnames\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n onMount,\n Show,\n} from \"solid-js\";\nimport { match, P } from \"ts-pattern\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { ConnectionFlow } from \"../flow/ConnectionFlow.js\";\nimport { Disconnected } from \"../flow/disconnected/Disconnected.js\";\nimport { InfoScreen } from \"../flow/InfoScreen.js\";\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { usePunchTransition } from \"../hooks/usePunchTransition.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTheme } from \"../hooks/useTheme.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Footer } from \"./footer/Footer.js\";\nimport { Header } from \"./Header.js\";\nimport { ModalSettings, type SettingsNavigationRef } from \"./settings/index.js\";\nimport { UnknownState } from \"./UnknownState.js\";\n\nexport interface ModalRootProps {\n onClose?: () => void;\n onStartConnection?: () => void;\n onCopy?: (uri: string) => void;\n}\n\nexport type ModalView = \"start\" | \"settings\" | \"info\";\n\nconst useModalState = () => {\n const [view, setView] = createSignal<ModalView>(\"start\");\n const [copied, setCopied] = createSignal(false);\n\n createEffect(() => {\n if (!copied()) return;\n\n const timeout = globalThis.setTimeout(() => setCopied(false), 2000);\n\n onCleanup(() => globalThis.clearTimeout(timeout));\n });\n\n return {\n view,\n setView,\n copied,\n setCopied,\n };\n};\n\nconst useEscapeToClose = (handler: () => void) => {\n createEffect(() => {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const keyHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") handler();\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n onCleanup(() => document.removeEventListener(\"keydown\", keyHandler));\n });\n};\n\nconst useDynamicDialogHeight = () => {\n const [contentNode, setContentNode] = createSignal<HTMLDivElement>();\n const [height, setHeight] = createSignal(0);\n\n const measureHeight = (\n targetElement?: HTMLElement | null,\n useScrollHeight = false,\n ) => {\n const node = targetElement || contentNode();\n\n if (!node) return;\n\n const nextHeight = useScrollHeight\n ? node.scrollHeight\n : node.getBoundingClientRect().height;\n\n if (nextHeight > 0) {\n setHeight(previousHeight =>\n (typeof previousHeight === \"number\"\n && Math.abs(previousHeight - nextHeight) < 0.5\n ? previousHeight\n : nextHeight),\n );\n }\n };\n\n createEffect(() => {\n const node = contentNode();\n\n if (!node || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(() => {\n measureHeight();\n });\n\n observer.observe(node);\n\n onCleanup(() => observer.disconnect());\n });\n\n createEffect(() => {\n if (globalThis.window === undefined) return;\n\n window.addEventListener(\"resize\", measureHeight);\n\n onCleanup(() => window.removeEventListener(\"resize\", measureHeight));\n });\n\n return {\n setContentRef: setContentNode,\n contentNode,\n height,\n measureHeight,\n };\n};\n\nexport const ModalRoot = (props: { onClose: () => void; }) => {\n const { view: modalView, setView, copied, setCopied } = useModalState();\n const { uri, status } = useSession();\n const { provider } = useModalContext();\n const { setContentRef, contentNode, height, measureHeight }\n = useDynamicDialogHeight();\n const {\n current: displayedModalView,\n previous: previousModalView,\n isTransitioning: isModalViewTransitioning,\n } = usePunchTransition(modalView);\n const {\n current: displayedStatus,\n previous: previousStatus,\n isTransitioning: isStatusTransitioning,\n } = usePunchTransition(status);\n const openSettings = () => setView(\"settings\");\n const { t, isRtl, languageTag } = useTranslation();\n const theme = useTheme();\n\n const settingsNavRef: { current: SettingsNavigationRef | null; } = {\n current: null,\n };\n const [settingsTitleKey, setSettingsTitleKey]\n = createSignal(\"settings.title\");\n\n const title = createMemo(() =>\n match(modalView())\n .with(\"start\", () => t(\"start.title\"))\n .with(\"settings\", () => t(settingsTitleKey()))\n .with(\"info\", () => t(\"info.title\"))\n .exhaustive(),\n );\n\n useEscapeToClose(props.onClose);\n\n createEffect(() => {\n if (status()?.status === PROVIDER_STATUS.CONNECTED) {\n props.onClose();\n }\n });\n\n const handleCopy = async () => {\n const sessionUri = uri();\n const success = sessionUri && (await copyToClipboard(sessionUri));\n\n if (success) setCopied(true);\n };\n\n let isInitialMount = true;\n let initialMeasureTimeout: ReturnType<typeof setTimeout> | undefined;\n let previousHeight: number | undefined;\n let overflowTimeout: ReturnType<typeof setTimeout> | undefined;\n const [shouldHideOverflow, setShouldHideOverflow] = createSignal(false);\n\n createEffect(() => {\n displayedStatus();\n displayedModalView();\n const node = contentNode();\n\n if (!node) return;\n\n if (isInitialMount) {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n\n initialMeasureTimeout = globalThis.setTimeout(() => {\n if (contentNode()) {\n measureHeight(undefined, true);\n isInitialMount = false;\n }\n }, 0);\n }\n else {\n measureHeight();\n }\n\n onCleanup(() => {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n });\n });\n\n createEffect(() => {\n const currentHeight = height();\n const isHeightChanging\n = previousHeight !== undefined\n && currentHeight !== previousHeight\n && currentHeight > 0\n && previousHeight > 0\n && Math.abs(currentHeight - previousHeight) > 0.5;\n\n if (isHeightChanging) {\n setShouldHideOverflow(true);\n\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n\n overflowTimeout = globalThis.setTimeout(() => {\n setShouldHideOverflow(false);\n overflowTimeout = undefined;\n }, 200);\n }\n\n previousHeight = currentHeight;\n\n onCleanup(() => {\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n });\n });\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n const shouldShowBack = createMemo(\n () => !(modalView() === \"start\" && providerStatus() === PROVIDER_STATUS.STANDBY),\n );\n\n const onBack = () => {\n match({ view: modalView(), status: providerStatus() })\n .with({ view: \"start\", status: PROVIDER_STATUS.STANDBY }, () => undefined)\n .with({ view: \"start\" }, () => {\n provider.closeSession();\n })\n .with({ view: \"settings\" }, () => {\n if (settingsNavRef.current && !settingsNavRef.current.isAtRoot) {\n settingsNavRef.current.goBack();\n }\n else {\n setView(\"start\");\n }\n })\n .with({ view: \"info\" }, () => {\n setView(\"start\");\n })\n .otherwise(() => {\n provider.closeSession();\n props.onClose();\n });\n };\n\n const renderDisconnectedView = (targetView: ModalView): JSX.Element =>\n match(targetView)\n .with(\"start\", () => <Disconnected onSettings={openSettings} />)\n .with(\"settings\", () => (\n <ModalSettings\n onTitleChange={setSettingsTitleKey}\n navigationRef={settingsNavRef}\n />\n ))\n .with(\"info\", () => <InfoScreen />)\n .otherwise(() => <UnknownState state={targetView} />);\n\n const renderDisconnectedSection = () => (\n <div class=\"modal-transition__container\">\n <Show when={previousModalView()}>\n {previousView => (\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {renderDisconnectedView(previousView())}\n </div>\n )}\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n isModalViewTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n {renderDisconnectedView(displayedModalView())}\n </div>\n </div>\n );\n\n const renderStatusSection = (\n targetStatus: ProviderStatus,\n ): JSX.Element =>\n match(targetStatus)\n .with(PROVIDER_STATUS.STANDBY, () => renderDisconnectedSection())\n .with(\n P.union(\n PROVIDER_STATUS.CREATING,\n PROVIDER_STATUS.CONNECTING,\n PROVIDER_STATUS.CONNECTED,\n ),\n () => (\n <ConnectionFlow onClose={props.onClose} onCopy={handleCopy} />\n ),\n )\n .otherwise(state => <UnknownState state={state || \"unknown status\"} />);\n\n // todo remove this styling approach\n const overlayStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-overlay-background, rgba(0,0,0,0.3))\",\n \"backdrop-filter\": \"var(--lv-overlay-backdrop-filter, blur(4px))\",\n };\n\n // todo remove this styling approach\n const cardStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-body-background)\",\n \"color\": \"var(--lv-body-color, var(--lv-text-primary))\",\n \"border-radius\": \"var(--lv-border-radius, 16px)\",\n \"box-shadow\": \"var(--lv-modal-shadow, 0px 12px 32px rgba(0,0,0,0.25))\",\n };\n\n return (\n <div\n class=\"fixed inset-0 z-10000 flex animate-[bg-in_0.15s_ease-in-out] items-end justify-center md:items-center lg:p-4\"\n onMouseUp={(e) => {\n if (e.target === e.currentTarget) props.onClose();\n }}\n role=\"presentation\"\n data-openlv-modal-root\n data-openlv-theme-mode={theme.mode()}\n lang={languageTag()}\n dir={isRtl() ? \"rtl\" : \"ltr\"}\n style={overlayStyle}\n >\n <div\n class={classNames(\n \"relative w-full max-w-[400px] animate-[fade-in_0.15s_ease-in-out] transition-[height] duration-200 ease-out\",\n shouldHideOverflow() || previousStatus()\n ? \"overflow-hidden\"\n : undefined,\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={String(title())}\n onClick={event => event.stopPropagation()}\n style={{\n ...(typeof height() === \"number\" && height() > 0\n ? { height: `${height()}px` }\n : {}),\n ...cardStyle,\n }}\n >\n <div ref={setContentRef}>\n <Header\n title={String(title())}\n view={modalView()}\n onClose={props.onClose}\n onBack={shouldShowBack() ? onBack : undefined}\n setView={setView}\n />\n <div class=\"modal-transition__container\">\n <div\n class={classNames(\n \"modal-transition__layer\",\n isStatusTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n <div class=\"flex flex-col text-center\">\n {renderStatusSection(providerStatus())}\n </div>\n </div>\n </div>\n <Footer />\n </div>\n\n <div\n class={classNames(\n \"absolute top-5 rounded-lg bg-blue-500 px-4 py-3 font-medium text-sm text-white transition-all ltr:right-5 rtl:left-5\",\n copied()\n ? \"translate-x-0 opacity-100\"\n : \"opacity-0 ltr:translate-x-full rtl:-translate-x-full\",\n )}\n >\n {t(\"modal.urlCopied\")}\n </div>\n </div>\n </div>\n );\n};\n","export const log = (...x: Parameters<typeof console.log>) =>\n console.log(\n \"%c[modal]%c\",\n \"color: yellow; font-weight: bold\",\n \"color: inherit; font-weight: normal\",\n ...x,\n );\n","\n/** biome-ignore-all lint/performance/noBarrelFile: package entrypoint */\n/** biome-ignore-all lint/performance/noReExportAll: package entrypoint */\n/** biome-ignore-all lint/suspicious/noConsole: temp */\n\nexport { ModalRoot } from \"./components/ModalRoot.js\";\nexport { default, OpenLVModalElement, type OpenLVModalElementProps } from \"./element.js\";\nexport type { ThemeConfig } from \"./theme/index.js\";\n\nimport OpenLVModalElementDefault, {\n type OpenLVModalElementProps,\n} from \"./element.js\";\nimport { log } from \"./utils/log.js\";\nexport { OPENLV_ICON_128 } from \"./assets/logo.js\";\n\nexport const registerOpenLVModal = (tagName = \"openlv-modal\") => {\n if (globalThis.window === undefined) {\n return tagName;\n }\n\n const registry = globalThis.customElements;\n\n if (!registry) {\n console.warn(\n \"OpenLV modal: custom elements are not supported in this environment.\",\n );\n\n return tagName;\n }\n\n if (!registry.get(tagName)) {\n registry.define(\n tagName,\n OpenLVModalElementDefault as unknown as CustomElementConstructor,\n );\n }\n\n return tagName;\n};\n\nexport const triggerOpenModal = (props: OpenLVModalElementProps) => {\n const modal = document.querySelector(\"openlv-modal\");\n\n if (modal) modal.remove();\n\n if (!modal) {\n registerOpenLVModal();\n const x = new OpenLVModalElementDefault({\n onClose() {\n log(\"modal closed\");\n x.remove();\n props.onClose?.();\n },\n provider: props.provider,\n theme: props.theme,\n });\n\n document.body.append(x);\n // x.showModal();\n }\n};\n\nexport type TriggerOpenModal = typeof triggerOpenModal;\n"],"names":["OPENLV_PROTOCOL_VERSION","encodeConnectionURL","payload","params","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","name","handlers","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","module","t","e","n","r","o","s","c","u","a","h","d","y","v","f","g","m","p","b","w","S","K","O","E","x","A","N","P","k","T","B","_","W","$","z","I","L","M","R","F","SESSION_STATE","PROVIDER_STATUS","hasOwn","classNames","classes","arg","appendClass","parseValue","key","value","newClass","importOrPassthrough","theme","then","simpleTheme","openlvTheme","Error","isPlainObject","Array","isArray","flattenToCssVars","obj","out","Object","entries","path","join","resolveMode","appThemeMode","userTheme","globalThis","matchMedia","matches","deepMerge","base","overlay","result","keys","baseValue","overlayValue","buildTheme","config","resolvedMode","mode","variant","mergedVariant","common","flattened","map","updateStyles","shadowRoot","style","themeConfig","themeStr","cssContent","OpenLVModalElement","HTMLElement","constructor","parameters","shadow","renderRequested","themeCleanup","disposeRender","attachShadow","initialUserTheme","provider","storage","getSettings","connectedCallback","requestRender","setupThemeListener","disconnectedCallback","undefined","update","on","mediaQuery","addEventListener","off","removeEventListener","showModal","display","hideModal","queueMicrotask","performRender","render","_self$","_$createComponent","ModalProvider","_$mergeProps","LANGUAGES","tag","nativeName","rtl","isRtlLanguage","find","Set","getLanguageScore","navigator","languages","language","browserLang","toLowerCase","startsWith","baseLang","split","resolveNestedValue","source","segments","filter","Boolean","current","segment","interpolate","template","replaceAll","matchText","String","resolveTranslation","fromPrimary","primary","fromFallback","fallback","TranslationContext","createContext","loadLanguagePack","languageTag","match","with","Promise","resolve","default","exhaustive","TranslationProvider","props","useModalContext","initialLanguageTag","setLanguageTag","createSignal","languagePack","setLanguagePack","isLoadingLanguagePack","setIsLoadingLanguagePack","createEffect","cancelled","nextPack","run","onCleanup","translated","fallbackEnglish","lines","_$memo","line","index","_tmpl$","isRtl","createMemo","contextValue","nextLanguageTag","Provider","children","useTranslation","useContext","ModalContext","ModalRoot","onClose","useSession","session","status","setStatus","handleStateChange","state","onMount","handshakeParameters","useSessionStart","currentSettings","UnknownState","uri","console","error","_el$","_el$2","firstChild","_el$4","nextSibling","_el$6","_$insert","JSON","stringify","copyToClipboard","text","textArea","generateQRCode","uriValue","QR","QRCode","qr","addData","make","createSvgTag","cellSize","margin","scalable","HandshakeOpen","handleCopy","sessionUri","_el$3","_el$5","Show","when","_el$7","_tmpl$2","_el$8","$$click","_$effect","_p$","_v$","_v$2","_$setAttribute","innerHTML","_$delegateEvents","LoadingSpinner","Connecting","_tmpl$3","Switch","Match","CREATED","SIGNALING","includes","READY","LINKING","_el$9","_el$0","ConnectionFlow","providerStatus","setProviderStatus","getState","_tmpl$5","CREATING","CONNECTING","CONNECTED","_el$1","ERROR","_el$10","_tmpl$4","_el$11","_el$12","_el$13","_el$14","_el$15","_$addEventListener","defaultAttributes","xmlns","width","height","viewBox","fill","stroke","defaultAttributes_default","Icon","localProps","rest","splitProps","_$spread","size","color","absoluteStrokeWidth","Number","strokeWidth","mergeClasses","toKebabCase","toPascalCase","class","hasA11yProp","For","each","iconNode","elementName","attrs","Dynamic","component","Icon_default","ChevronLeft","chevron_left_default","ChevronRight","chevron_right_default","cx","cy","CircleQuestionMark","circle_question_mark_default","Plus","plus_default","rx","QrCode","qr_code_default","Settings","settings_default","Trash2","trash_2_default","X","x_default","SPACE_REGEX","removeExtraSpaces","str","classnames","classList","buildClassString","input","type","falsyToString","isEmptyObject","isEqual","obj1","obj2","keys1","keys2","joinObjects","val2","flat","arr","target","el","flatMergeArrays","arrays","filtered","mergeObjects","val1","defaultConfig","createState","cachedTwMerge","cachedTwMergeConfig","didTwMergeConfigChange","getTailwindVariants","cn","tv","options","configProp","extend","slotProps","variantsProps","compoundVariantsProps","compoundSlots","defaultVariantsProps","variants","defaultVariants","isExtendedSlotsEmpty","componentSlots","slots","compoundVariants","getVariantValue","vrs","_slotKey","slotProps2","variantObj","variantProp","variantKey","defaultVariantProp","getVariantClassNames","getVariantClassNamesBySlotKey","slotKey","variantValue","propsWithoutUndefined","prop","getCompleteProps","initialProp","getCompoundVariantsValue","cv","cvLength","tvClass","tvClassName","compoundVariantOptions","isValid","completeProps","completePropsValue","getCompoundVariantClassNamesBySlot","compoundClassNames","cnFn","className","slot","getCompoundSlotClassNameBySlot","slots2","slotClass","slotClassName","slotVariants","slotVariantValue","slotName","slotsFns","compoundVariantClasses","compoundSlotClasses","getVariantKeys","cnAdapter","_config","styles","$variant","secondary","tertiary","$size","sm","md","lg","$aspect","square","auto","Button","rawProps","local","href","onClick","dotCount","isApple","TabletGraphic","from","PhoneGraphic","ConnectionGraphic","Disconnected","start","onSettings","LucideSettings","InfoScreen","LucideQrCode","usePunchTransition","duration","readValue","initialValue","setCurrent","previous","setPrevious","timeoutRef","lastValueRef","nextValue","useSettings","settings","setLocalSettings","setSettings","newSettings","themeMode","retain","autoReconnect","useTheme","OPENLV_ICON_128","FooterStatus","sessionStatus","sessionState","signalState","signaling","icon","otherwise","resolved","Footer","Header","_c$","onBack","view","LucideChevronLeft","setView","LucideCircleQuestionMark","title","LucideX","useNavigationStack","initialScreen","transitionDuration","stack","setStack","setIndex","screen","isTransitioning","nextScreen","activeIndex","activeStack","currentScreen","nextStack","currentIndex","TransitionContainer","_$className","MenuGroup","right","MenuItem","label","buttonGroupStyles","root","box","active","dropdownStyles","Select","dropdown","dropdownThreshold","slug","onChange","currentTarget","ThemeSettings","isUserConfigurable","userThemeMode","updateThemePreference","LanguageSettings","setLanguage","sortedLanguages","sort","scoreA","handleLanguageChange","newLang","lang","popover","InfoTooltip","mergeProps","_v$3","MenuLink","LucideChevronRight","Toggle","ConnectionPreferences","setRetainSessionHistory","setAutoReconnect","onNavigate","retainHistory","Input","merged","readOnly","$$input","id","placeholder","ariaLabel","_v$4","AVAILABLE_PROTOCOLS","SignalingSettings","setSignalingProtocol","setSignalingOptions","signalingProtocol","signalingServer","activeProtocol","option","toUpperCase","url","ServerListItem","onRemove","LucideTrash2","AddServerButton","LucidePlus","TransportSettings","turnServers","setTurnServers","stunServers","setStunServers","handleAddStun","handleRemoveStun","handleStunChange","server","handleAddTurn","urls","handleRemoveTurn","handleTurnChange","field","_tmpl$6","username","credential","getSettingsTitleKey","ModalSettings","previousScreen","navigate","goBack","isAtRoot","internalRef","navigationRef","onTitleChange","renderScreen","useModalState","copied","setCopied","timeout","setTimeout","clearTimeout","useEscapeToClose","handler","keyHandler","document","useDynamicDialogHeight","contentNode","setContentNode","setHeight","measureHeight","targetElement","useScrollHeight","node","nextHeight","scrollHeight","getBoundingClientRect","previousHeight","Math","abs","ResizeObserver","observer","observe","disconnect","window","setContentRef","modalView","displayedModalView","previousModalView","isModalViewTransitioning","displayedStatus","previousStatus","isStatusTransitioning","openSettings","settingsNavRef","settingsTitleKey","setSettingsTitleKey","isInitialMount","initialMeasureTimeout","overflowTimeout","shouldHideOverflow","setShouldHideOverflow","currentHeight","shouldShowBack","STANDBY","closeSession","renderDisconnectedView","targetView","renderDisconnectedSection","previousView","renderStatusSection","targetStatus","union","onCopy","overlayStyle","cardStyle","$$mouseup","_$style","stopPropagation","_$use","_v$5","_v$6","_v$7","_v$8","log","registerOpenLVModal","tagName","registry","OpenLVModalElementDefault","triggerOpenModal","modal"],"mappings":"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","x_google_ignoreList":[1,2,5,17,18,19,20,21,22,23,24,25,26,27,28,29]}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.11/node_modules/solid-js/web/dist/web.js","../../core/dist/url/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/dist/index.js","../../session/dist/index.js","../../provider/dist/index.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/theme/index.tsx","../src/styles/index.ts","../src/element.tsx","../src/utils/i18n.tsx","../src/context.tsx","../src/hooks/useSession.ts","../src/components/UnknownState.tsx","../src/hooks/useClipboard.ts","../src/flow/HandshakeOpen.tsx","../src/flow/connecting.tsx","../src/flow/ConnectionFlow.tsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/defaultAttributes.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/Icon.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-left.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/circle-question-mark.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/plus.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/qr-code.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/settings.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/trash-2.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.jsx","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.3.0/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.3.0/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwindcss@4.3.0/node_modules/tailwind-variants/dist/lite.js","../src/ui/Button.tsx","../src/flow/disconnected/ConnectionGraphic.tsx","../src/flow/disconnected/Disconnected.tsx","../src/flow/InfoScreen.tsx","../src/hooks/usePunchTransition.ts","../src/hooks/useSettings.ts","../src/hooks/useTheme.ts","../src/assets/logo.ts","../src/components/footer/StatusIndicator.tsx","../src/components/footer/Footer.tsx","../src/components/Header.tsx","../src/hooks/useNavigationStack.ts","../src/ui/TransitionContainer.tsx","../src/ui/menu/MenuGroup.tsx","../src/ui/menu/MenuItem.tsx","../src/ui/Select.tsx","../src/components/settings/a11y/theme.tsx","../src/components/settings/a11y/index.tsx","../src/ui/InfoTooltip.tsx","../src/ui/menu/MenuLink.tsx","../src/ui/Toggle.tsx","../src/components/settings/connection/index.tsx","../src/ui/Input.tsx","../src/components/settings/connection/signaling.tsx","../src/components/settings/connection/transport.tsx","../src/components/settings/index.tsx","../src/components/ModalRoot.tsx","../src/utils/log.ts","../src/index.ts"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() => (Comp = comp()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, createRoot, createRenderEffect, untrack, sharedConfig, enableHydration, getOwner, createEffect, runWithOwner, createSignal, onCleanup, splitProps } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"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\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","export const OPENLV_PROTOCOL_VERSION = 1;\nexport const encodeConnectionURL = (payload) => {\n const params = new URLSearchParams();\n params.set(\"h\", payload.h);\n params.set(\"k\", payload.k);\n if (payload.p) {\n params.set(\"p\", payload.p);\n }\n if (payload.s) {\n params.set(\"s\", payload.s);\n }\n return `openlv://${payload.sessionId}@${OPENLV_PROTOCOL_VERSION}?${params.toString()}`;\n};\nexport const decodeConnectionURL = (url) => {\n // Type check and validation\n if (typeof url !== \"string\") {\n throw new TypeError(`Invalid URL type: expected string, got ${typeof url}`);\n }\n if (!url || url.trim() === \"\") {\n throw new Error(\"URL cannot be empty\");\n }\n if (!url.startsWith(\"openlv://\")) {\n throw new Error(`Invalid URL format: must start with 'openlv://', got: ${url}`);\n }\n try {\n const urlObj = new URL(url);\n const sessionId = urlObj.username;\n const version = Number(urlObj.hostname || urlObj.pathname.replace(\"/\", \"\"));\n if (version !== OPENLV_PROTOCOL_VERSION) {\n throw new Error(`Invalid protocol version: expected ${OPENLV_PROTOCOL_VERSION}, got ${version}`);\n }\n const h = urlObj.searchParams.get(\"h\") || \"\";\n const k = urlObj.searchParams.get(\"k\") || \"\";\n const s = urlObj.searchParams.get(\"s\") || undefined;\n const p = urlObj.searchParams.get(\"p\") || \"mqtt\";\n if (!sessionId) {\n throw new Error(\"Session ID is required in URL\");\n }\n // Validate session ID format (16 characters, URL-safe alphabet)\n if (!/^[A-Za-z0-9_-]{16}$/.test(sessionId)) {\n throw new Error(\"Invalid session ID format: must be 16 URL-safe characters\");\n }\n if (!h) {\n throw new Error(\"Public key hash (h parameter) is required in URL\");\n }\n // Validate public key hash format (16 hex characters)\n if (!/^[0-9a-f]{16}$/.test(h)) {\n throw new Error(\"Invalid public key hash format: must be 16 hex characters\");\n }\n if (!k) {\n throw new Error(\"Shared key (k parameter) is required in URL\");\n }\n // Validate shared key format (32 hex characters)\n if (!/^[0-9a-f]{32}$/.test(k)) {\n throw new Error(\"Invalid shared key format: must be 32 lowercase hex characters\");\n }\n return {\n version,\n sessionId,\n h,\n k,\n // TODO: figure out why '' empty string and not undefined\n s: s ? decodeURIComponent(s) : \"\",\n p,\n };\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n // Strip query string so handshake secrets (k) are not exposed in error messages\n const safeUrl = url.includes(\"?\") ? url.slice(0, url.indexOf(\"?\")) + \"?[redacted]\" : url;\n throw new Error(`Failed to parse URL: ${safeUrl}. Original error: ${errorMessage}`);\n }\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&\"optional\"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return\"number\"==typeof t}function S(t){return\"string\"==typeof t}function j(t){return\"bigint\"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return\"boolean\"==typeof t})),_=a(p(function(t){return\"symbol\"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||\"object\"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\\`P.record\\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n=\"string\"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};\n//# sourceMappingURL=index.js.map\n","import { decodeConnectionURL, OPENLV_PROTOCOL_VERSION, } from \"@openlv/core\";\nimport { deriveSymmetricKey, generateHandshakeKey, generateSessionId, initEncryptionKeys, initHash, parseEncryptionKey, } from \"@openlv/core/encryption\";\nimport { SIGNAL_STATE, } from \"@openlv/signaling\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { TRANSPORT_STATE, } from \"@openlv/transport\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { log } from \"./utils/log.js\";\nexport const SESSION_STATE = {\n CREATED: \"created\",\n SIGNALING: \"signaling\",\n READY: \"ready\",\n LINKING: \"linking\",\n CONNECTED: \"connected\",\n DISCONNECTED: \"disconnected\",\n};\n/**\n * OpenLV Session\n *\n * https://openlv.sh/api/session\n */\nexport const createSession = async (initParameters, signalLayer, transportLayer, onMessage) => {\n const emitter = new EventEmitter();\n const messages = new EventEmitter();\n const sessionId = \"sessionId\" in initParameters\n ? initParameters.sessionId\n : generateSessionId();\n const { encryptionKey, decryptionKey: { decrypt }, } = await initEncryptionKeys(initParameters);\n let relyingPublicKey;\n const handshakeKey = \"k\" in initParameters\n ? await deriveSymmetricKey(initParameters.k)\n : await generateHandshakeKey();\n const { hash, isHost } = await initHash(\"h\" in initParameters ? initParameters.h : undefined, encryptionKey);\n let status = SESSION_STATE.CREATED;\n const protocol = initParameters.p;\n const server = initParameters.s;\n const updateStatus = (newStatus) => {\n log(\"updateStatus\", newStatus);\n status = newStatus;\n emitter.emit(\"state_change\", { status, signaling: signal.getState() });\n };\n const signaling = await signalLayer({\n topic: sessionId,\n url: server,\n });\n const signal = await signaling({\n h: hash,\n canEncrypt() {\n return relyingPublicKey !== undefined;\n },\n async encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n log(`encrypting to ${relyingPublicKey.toString()}`, message);\n return await relyingPublicKey.encrypt(message);\n },\n decrypt,\n publicKey: encryptionKey,\n k: handshakeKey,\n async rpDiscovered(rpKey) {\n const role = isHost ? \"host\" : \"client\";\n log(`rpKey discovered by ${role}`, rpKey);\n relyingPublicKey = await parseEncryptionKey(rpKey);\n },\n isHost,\n });\n const transport = transportLayer({\n encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return relyingPublicKey?.encrypt(message);\n },\n decrypt,\n isHost,\n onmessage: async (message) => {\n log(\"Session: received message from transport\", message);\n if (message[\"type\"] === \"request\") {\n const messageId = message[\"messageId\"];\n // Immediately acknowledge receipt so the sender's ack-timeout does\n // not fire while the handler (which may await user interaction) runs.\n await transport.send({ type: \"ack\", messageId });\n // Notify observers before processing (e.g. wallet UI can show a\n // pending indicator before the handler resolves).\n emitter.emit(\"request\", message[\"payload\"]);\n const data = await onMessage(message[\"payload\"]);\n const response = {\n type: \"response\",\n messageId,\n payload: data,\n };\n await transport.send(response);\n }\n if (message[\"type\"] === \"response\" || message[\"type\"] === \"ack\") {\n // Both acks and responses are forwarded to the send() correlator.\n messages.emit(\"message\", message);\n }\n },\n async subsend(message) {\n log(\"Session: sending trans msg to signal\", message);\n const sessionMessage = {\n type: \"request\",\n messageId: crypto.randomUUID(),\n payload: message,\n };\n await signal.send(sessionMessage);\n },\n });\n transport.emitter.on(\"state_change\", (state) => {\n log(\"transport state change\", state);\n if (state === TRANSPORT_STATE.CONNECTED) {\n updateStatus(SESSION_STATE.CONNECTED);\n }\n });\n const startTransport = async () => {\n await transport.setup();\n };\n // let transport: TransportLayer | undefined;\n const onSignalMessage = async (message) => {\n log(\"Session: received message from signaling\", message);\n const sessionMsg = message;\n if (sessionMsg.type === \"response\") {\n log(\"Session: received data message\", sessionMsg.payload);\n messages.emit(\"message\", sessionMsg);\n }\n if (sessionMsg.type === \"request\") {\n log(\"Session: received request message\", sessionMsg.payload);\n await transport.handle(sessionMsg.payload);\n }\n };\n return {\n connect: async () => {\n updateStatus(SESSION_STATE.SIGNALING);\n log(\"connecting to session, isHost:\", isHost);\n // TODO: implement\n log(\"connecting to session\");\n signal.on(\"message\", onSignalMessage);\n signal.on(\"state_change\", (state) => {\n log(\"signal state change\", state);\n if (state === SIGNAL_STATE.READY) {\n updateStatus(SESSION_STATE.READY);\n }\n if ([\n SIGNAL_STATE.HANDSHAKE,\n SIGNAL_STATE.HANDSHAKE_PARTIAL,\n ].includes(state)) {\n updateStatus(SESSION_STATE.LINKING);\n }\n if (state === SIGNAL_STATE.ENCRYPTED) {\n startTransport();\n }\n if (state === SIGNAL_STATE.ERROR) {\n log(\"signaling error — marking session disconnected\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }\n });\n // TODO: handle errors in setup nicely in modal UI\n await signal.setup();\n },\n async close() {\n log(\"session teardown\");\n signal.off(\"message\", onSignalMessage);\n await Promise.all([\n transport.teardown(),\n signal.teardown(),\n ]);\n updateStatus(SESSION_STATE.DISCONNECTED);\n },\n getState() {\n return {\n status,\n signaling: signal.getState(),\n // transport: transport.getState(),\n };\n },\n getHandshakeParameters() {\n return {\n version: OPENLV_PROTOCOL_VERSION,\n sessionId,\n h: hash,\n k: handshakeKey.toString(),\n p: protocol,\n s: server,\n };\n },\n waitForLink: async () => {\n if (status === SESSION_STATE.CONNECTED)\n return;\n if (status === SESSION_STATE.DISCONNECTED) {\n throw new Error(\"Session failed to connect\");\n }\n return new Promise((resolve, reject) => {\n const handler = (state) => {\n if (state?.status === SESSION_STATE.CONNECTED) {\n emitter.off(\"state_change\", handler);\n resolve();\n }\n else if (state?.status === SESSION_STATE.DISCONNECTED) {\n emitter.off(\"state_change\", handler);\n reject(new Error(\"Session failed to connect\"));\n }\n };\n emitter.on(\"state_change\", handler);\n });\n },\n async send(message, ackTimeout = 10000, responseTimeout = 60 * 60000) {\n if (signal.getState().state !== SIGNAL_STATE.ENCRYPTED) {\n throw new Error(\"Session not ready\");\n }\n const messageId = crypto.randomUUID();\n const sessionMessage = {\n type: \"request\",\n messageId,\n payload: message,\n };\n await transport.send(sessionMessage);\n return new Promise((resolve, reject) => {\n let ackReceived = false;\n let ackTimer;\n let responseTimer;\n const cleanup = () => {\n clearTimeout(ackTimer);\n clearTimeout(responseTimer);\n messages.off(\"message\", handler);\n };\n const handler = (msg) => {\n if (msg.messageId !== messageId)\n return;\n if (msg.type === \"ack\" && !ackReceived) {\n ackReceived = true;\n clearTimeout(ackTimer);\n // The other side confirmed receipt; wait for the full response.\n responseTimer = setTimeout(() => {\n cleanup();\n reject(new Error(\"Request timed out: no response after acknowledgement\"));\n }, responseTimeout);\n return;\n }\n if (msg.type === \"response\") {\n cleanup();\n resolve(msg.payload);\n }\n };\n messages.on(\"message\", handler);\n // Short window for the ack — tells us the peer is alive and processing.\n ackTimer = setTimeout(() => {\n if (!ackReceived) {\n cleanup();\n reject(new Error(\"Request timed out: remote peer did not acknowledge\"));\n }\n }, ackTimeout);\n });\n },\n _internal: {\n signal,\n transport,\n },\n emitter,\n };\n};\n/**\n * Connect to a session from its openlv:// URL\n */\nexport const connectSession = async (connectionUrl, onMessage, transport) => {\n const initParameters = decodeConnectionURL(connectionUrl);\n const signaling = await dynamicSignalingLayer(initParameters.p);\n if (!signaling) {\n throw new Error(`Invalid signaling protocol: ${initParameters.p}`);\n }\n return createSession(initParameters, signaling, transport, onMessage);\n};\n//# sourceMappingURL=index.js.map","import { encodeConnectionURL } from \"@openlv/core\";\nimport { createSession, } from \"@openlv/session\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { webrtc } from \"@openlv/transport/webrtc\";\nimport { Provider as OxProvider } from \"ox\";\nimport { match } from \"ts-pattern\";\nimport { createProviderStorage, } from \"./storage/index.js\";\nimport { log } from \"./utils/log.js\";\n/** Unwrap `{ result }` / `{ error }` envelopes from wallet session handlers. */\nconst unwrapSessionResponse = (payload) => {\n if (typeof payload !== \"object\" || payload === null) {\n return payload;\n }\n if (\"error\" in payload && payload.error) {\n const rpcError = payload.error;\n throw Object.assign(new Error(rpcError.message), { code: rpcError.code });\n }\n if (\"result\" in payload) {\n return payload.result;\n }\n return payload;\n};\nexport const PROVIDER_STATUS = {\n STANDBY: \"standby\",\n CREATING: \"creating\",\n CONNECTING: \"connecting\",\n CONNECTED: \"connected\",\n ERROR: \"error\",\n};\nconst convertTempV1 = (transport) => {\n const stun = transport?.stun?.map(url => ({ urls: url })) || [];\n const turn = transport?.turn?.map(server => ({\n urls: server.urls,\n username: server.username,\n credential: server.credential,\n })) || [];\n return {\n iceServers: [...stun, ...turn],\n };\n};\n/**\n * OpenLV Provider\n *\n * https://openlv.sh/api/provider\n */\nexport const createProvider = (parameters) => {\n const oxEmitter = OxProvider.createEmitter();\n let session;\n let status = PROVIDER_STATUS.STANDBY;\n let accounts = [];\n const storage = createProviderStorage({ storage: parameters.storage });\n const { openModal, config } = parameters;\n const updateStatus = (newStatus) => {\n status = newStatus;\n log(\"updateStatus\", status);\n oxEmitter.emit(\"status_change\", newStatus);\n };\n /**\n * Called when the remote peer (wallet) sends a request to the dApp.\n *\n * In the normal EIP-1193 flow the dApp is always the requester, so this\n * path is unusual. We emit a `request` event on the session (once the\n * session is available) so the modal or other UI consumers can react.\n * For any method we have no built-in handler for, we return a JSON-RPC\n * \"Method not found\" error so the wallet receives a proper response rather\n * than a no-op stub.\n */\n const onMessage = async (message) => {\n log(\"onMessage received from remote peer\", message);\n // Emit on the session emitter so observers (e.g. modal) can react.\n session?.emitter.emit(\"request\", message);\n return {\n error: {\n code: -32601,\n message: \"Method not found\",\n },\n };\n };\n const getAccounts = async () => {\n if (session) {\n return unwrapSessionResponse(await session.send({ method: \"eth_accounts\", params: [] }));\n }\n throw new Error(\"No session\");\n };\n const start = async (parameters) => {\n updateStatus(PROVIDER_STATUS.CREATING);\n const linkParameters = parameters;\n if (!linkParameters) {\n throw new Error(\"No link parameters\");\n }\n const transportOptions = convertTempV1(storage.getSettings().transport?.s?.webrtc)\n || config?.transport?.s?.webrtc;\n session = await createSession(linkParameters, await dynamicSignalingLayer(linkParameters.p), webrtc(transportOptions), onMessage);\n updateStatus(PROVIDER_STATUS.CONNECTING);\n log(\"session created\");\n await session.connect();\n log(\"session connected\");\n const handshakeParameters = session.getHandshakeParameters();\n const url = encodeConnectionURL(handshakeParameters);\n log(\"session url\", url);\n oxEmitter.emit(\"session_started\", session);\n await session.waitForLink();\n log(\"session linked\");\n accounts = await getAccounts();\n const chainIdHex = unwrapSessionResponse(await session.send({ method: \"eth_chainId\", params: [] }));\n updateStatus(PROVIDER_STATUS.CONNECTED);\n oxEmitter.emit(\"connect\", { chainId: chainIdHex });\n oxEmitter.emit(\"accountsChanged\", accounts);\n return session;\n };\n const closeSession = async () => {\n await session?.close();\n session = undefined;\n updateStatus(PROVIDER_STATUS.STANDBY);\n };\n const request = async (request) => {\n log(\"ox request\", request.method, request.params);\n return match(request)\n .with({ method: \"eth_chainId\" }, async () => {\n log(\"eth_chainId\");\n if (session) {\n log(\"sending eth_chainId to session\");\n const result = unwrapSessionResponse(await session.send(request));\n log(\"eth_chainId result from session\", result);\n return result;\n }\n return \"0x1\";\n })\n .with({ method: \"wallet_requestPermissions\" }, () => {\n throw new Error(\"Not implemented\");\n // console.log(\"wallet_requestPermissions\", v.params);\n // return [] as ExtractReturnType<\n // RpcSchema,\n // \"wallet_requestPermissions\"\n // >;\n })\n .with({ method: \"wallet_revokePermissions\" }, async () => {\n await closeSession();\n return;\n })\n // TODO: if modal is enabled explicitly toggle the modal to show.\n .with({ method: \"eth_requestAccounts\" }, async () => {\n log(\"eth_requestAccounts\");\n let provider;\n if (oxProvider) {\n provider = oxProvider;\n }\n if (openModal && provider) {\n await openModal(provider);\n await new Promise((resolve) => {\n const onConnect = () => {\n cleanup();\n resolve();\n };\n const onDisconnect = () => {\n cleanup();\n resolve();\n };\n const cleanup = () => {\n provider?.off(\"connect\", onConnect);\n provider?.off(\"disconnect\", onDisconnect);\n };\n provider?.on(\"connect\", onConnect);\n provider?.on(\"disconnect\", onDisconnect);\n });\n return await getAccounts();\n }\n const x = await start();\n log(\"x\", x);\n return await getAccounts();\n })\n .with({ method: \"eth_accounts\" }, async () => {\n log(\"eth_accounts\");\n return await getAccounts();\n })\n .otherwise(async (v) => {\n if (session) {\n log(\"sending request to session\", request);\n const result = unwrapSessionResponse(await session.send(request));\n log(\"result from session\", result);\n return result;\n }\n throw new Error(`Method ${v.method} not supported`);\n });\n };\n const oxProvider = OxProvider.from({\n ...oxEmitter,\n storage,\n request,\n getSession: () => session,\n getAccounts,\n createSession: start,\n closeSession,\n getState: () => ({ status, session: session?.getState() ?? undefined }),\n });\n return oxProvider;\n};\n//# sourceMappingURL=index.js.map","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import type {\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nexport type {\n PredefinedThemeName,\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nconst importOrPassthrough = async (\n theme: ThemeConfig[\"theme\"],\n): Promise<ThemeTokensMap> => {\n if (typeof theme === \"string\") {\n if (theme === \"simple\") {\n return await import(\"./simple.js\").then(m => m.simpleTheme);\n }\n else if (theme === \"openlv\") {\n return await import(\"./openlv.js\").then(m => m.openlvTheme);\n }\n else {\n throw new Error(`Unknown theme: ${theme}`);\n }\n }\n\n return theme;\n};\n\ntype Primitive = string | number | boolean | null | undefined;\ntype Leaf = Primitive; // extend if you want to allow Date, bigint, etc.\n\ntype FlatCssVars = Record<`--${string}`, Leaf>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenToCssVars = <T extends Record<string, unknown>>(\n obj: T,\n prefix: readonly string[] = [],\n out: FlatCssVars = {},\n): FlatCssVars => {\n for (const [key, value] of Object.entries(obj)) {\n const path = [...prefix, key];\n\n if (isPlainObject(value)) {\n flattenToCssVars(value, path, out);\n }\n else {\n out[`--lv-${path.join(\"-\")}` as `--${string}`] = value as Leaf;\n }\n }\n\n return out;\n};\n\nexport const resolveMode = (\n appThemeMode: ThemeMode = \"auto\",\n userTheme: UserThemePreference = \"system\",\n): \"light\" | \"dark\" => {\n if (appThemeMode === \"light\" || appThemeMode === \"dark\") {\n return appThemeMode;\n }\n\n if (userTheme === \"system\") {\n return globalThis.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n return userTheme;\n};\n\nconst deepMerge = (\n base: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = { ...base };\n\n for (const key of Object.keys(overlay)) {\n const baseValue = base[key];\n const overlayValue = overlay[key];\n\n result[key]\n = isPlainObject(baseValue) && isPlainObject(overlayValue)\n ? deepMerge(baseValue, overlayValue)\n : overlayValue;\n }\n\n return result;\n};\n\n// Converts the theme into css variables\n// --lv-\nexport const buildTheme = async (\n config: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n const theme = await importOrPassthrough(config.theme);\n\n const resolvedMode = resolveMode(config.mode, userTheme);\n const variant = theme[resolvedMode];\n\n if (!variant) return \"\";\n\n const mergedVariant = theme.common\n ? deepMerge(theme.common, variant)\n : variant;\n\n const flattened = flattenToCssVars(mergedVariant);\n\n return Object.entries(flattened)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\"\\n\");\n};\n","import \"./index.css\";\n\nimport { buildTheme } from \"../theme/index.js\";\nimport type { ThemeConfig, UserThemePreference } from \"../theme/types.js\";\n// @ts-expect-error - Vite handles this import at build time\nimport cssContent from \"./index.css?inline\";\n\n/**\n * Ensures styles exist in the shadow root and updates them with the current theme.\n */\nexport const updateStyles = async (\n shadowRoot: ShadowRoot,\n theme?: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n let style = shadowRoot.querySelector(\n \"style[data-openlv-modal]\",\n ) as HTMLStyleElement | null;\n\n if (!style) {\n style = document.createElement(\"style\");\n style.dataset.openlvModal = \"true\";\n shadowRoot.append(style);\n }\n\n const themeConfig = {\n ...theme,\n theme: theme?.theme ?? \"simple\",\n };\n\n if (themeConfig) {\n const themeStr = await buildTheme(themeConfig, userTheme);\n\n style.textContent = `:root, :host {\\n${themeStr}\\n}\\n` + cssContent;\n }\n else {\n style.textContent = cssContent;\n }\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport { render } from \"solid-js/web\";\n\nimport { ModalProvider } from \"./context.js\";\nimport { updateStyles } from \"./styles/index.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\n\nexport type OpenLVModalElementProps = {\n provider: OpenLVProvider;\n onClose?: () => void;\n theme?: ThemeConfig;\n};\n\nexport class OpenLVModalElement\n extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private renderRequested = false;\n private readonly parameters: OpenLVModalElementProps;\n private themeCleanup?: () => void;\n private disposeRender?: () => void;\n\n constructor(parameters: OpenLVModalElementProps) {\n super();\n this.parameters = parameters;\n\n this.shadow = this.attachShadow({ mode: \"open\" });\n const initialUserTheme\n = parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, parameters.theme, initialUserTheme);\n }\n\n connectedCallback() {\n this.requestRender();\n this.themeCleanup?.();\n this.setupThemeListener();\n }\n\n disconnectedCallback() {\n this.disposeRender?.();\n this.disposeRender = undefined;\n this.themeCleanup?.();\n }\n\n private setupThemeListener() {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const update = () => {\n const userTheme\n = this.parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, this.parameters.theme, userTheme);\n };\n\n this.parameters.provider.storage.emitter.on(\"settings_change\", update);\n\n const mediaQuery = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\n\n mediaQuery.addEventListener(\"change\", update);\n\n this.themeCleanup = () => {\n this.parameters.provider.storage.emitter.off(\"settings_change\", update);\n mediaQuery.removeEventListener(\"change\", update);\n };\n }\n\n showModal() {\n this.style.display = \"block\";\n }\n\n hideModal() {\n this.style.display = \"none\";\n }\n\n private requestRender() {\n if (this.renderRequested) {\n return;\n }\n\n this.renderRequested = true;\n queueMicrotask(() => {\n this.renderRequested = false;\n this.performRender();\n });\n }\n\n private performRender() {\n this.disposeRender?.();\n this.disposeRender = render(\n () => <ModalProvider {...this.parameters} />,\n this.shadow,\n );\n }\n}\n\nexport default OpenLVModalElement;\n","import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n type ParentComponent,\n useContext,\n} from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport fallbackEnglish from \"../../lang/en.json\" with { type: \"json\" };\nimport { useModalContext } from \"../context.jsx\";\n\nexport type LanguageTag =\n | \"en\"\n | \"nl\"\n | \"fr\"\n | \"es\"\n | \"sv\"\n | \"zh-cn\"\n | \"ar\"\n | \"he\"\n | \"fa\";\n\nexport type LanguageInfo = {\n tag: LanguageTag;\n name: string;\n nativeName: string;\n rtl?: boolean;\n};\n\nexport const LANGUAGES: LanguageInfo[] = [\n { tag: \"en\", name: \"English\", nativeName: \"English\" },\n { tag: \"nl\", name: \"Dutch\", nativeName: \"Nederlands\" },\n { tag: \"es\", name: \"Spanish\", nativeName: \"Español\" },\n { tag: \"sv\", name: \"Swedish\", nativeName: \"Svenska\" },\n { tag: \"zh-cn\", name: \"Chinese (Simplified)\", nativeName: \"简体中文\" },\n { tag: \"fr\", name: \"French\", nativeName: \"Français\" },\n { tag: \"ar\", name: \"Arabic\", nativeName: \"العربية\", rtl: true },\n { tag: \"he\", name: \"Hebrew\", nativeName: \"עברית\", rtl: true },\n { tag: \"fa\", name: \"Persian\", nativeName: \"فارسی\", rtl: true },\n];\n\nexport const isRtlLanguage = (tag: LanguageTag): boolean => {\n const language = LANGUAGES.find(l => l.tag === tag);\n\n return language?.rtl ?? false;\n};\n\nconst SUPPORTED_LANGUAGE_TAGS = new Set(LANGUAGES.map(l => l.tag));\n\nexport const detectBrowserLanguage = (): LanguageTag => {\n if (typeof navigator === \"undefined\") return \"en\";\n\n const languages = navigator.languages || [navigator.language];\n\n for (const browserLang of languages) {\n const lang = browserLang.toLowerCase();\n\n // Exact match\n if (SUPPORTED_LANGUAGE_TAGS.has(lang as LanguageTag)) {\n return lang as LanguageTag;\n }\n\n // Check for zh-cn variants (zh, zh-hans, zh-cn)\n if (\n lang === \"zh\"\n || lang.startsWith(\"zh-hans\")\n || lang.startsWith(\"zh-cn\")\n ) {\n return \"zh-cn\";\n }\n\n // Base language match (e.g., \"en-US\" -> \"en\")\n const [baseLang] = lang.split(\"-\");\n\n if (SUPPORTED_LANGUAGE_TAGS.has(baseLang as LanguageTag)) {\n return baseLang as LanguageTag;\n }\n }\n\n return \"en\";\n};\n\nexport const getLanguageScore = (tag: string): number => {\n if (typeof navigator === \"undefined\") return 0;\n\n const languages = navigator.languages || [navigator.language];\n\n for (let i = 0; i < languages.length; i++) {\n const browserLang = languages[i].toLowerCase();\n\n // Exact match\n if (browserLang === tag) return languages.length - i + 1;\n\n // Prefix match (e.g., \"en-US\" matches \"en\")\n if (browserLang.startsWith(`${tag}-`) || tag.startsWith(`${browserLang}-`))\n return languages.length - i;\n\n // Base language match (e.g., \"zh\" matches \"zh-cn\")\n const [baseLang] = browserLang.split(\"-\");\n\n if (baseLang === tag || tag.startsWith(`${baseLang}-`))\n return languages.length - i - 0.5;\n }\n\n return 0;\n};\n\nexport type Translate = (\n key: string,\n params?: Readonly<Record<string, string | number>>,\n) => string | JSX.Element;\n\nexport type Translations = Record<string, unknown>;\n\nconst resolveNestedValue = (\n source: Translations | null | undefined,\n key: string,\n): unknown => {\n if (!source) return undefined;\n\n const segments = key.split(\".\").filter(Boolean);\n\n if (segments.length === 0) return undefined;\n\n let current: unknown = source;\n\n for (const segment of segments) {\n if (typeof current !== \"object\" || current === null) return undefined;\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n};\n\nconst interpolate = (\n template: string,\n params?: Readonly<Record<string, string | number>>,\n): string => {\n if (!params) return template;\n\n return template.replaceAll(\n /\\{(\\w+)\\}/g,\n (matchText: string, key: string): string => {\n const value = params[key];\n\n return value === undefined ? matchText : String(value);\n },\n );\n};\n\nexport const resolveTranslation = (parameters: {\n primary: Translations | undefined;\n fallback: Translations;\n key: string;\n params?: Readonly<Record<string, string | number>>;\n}): string => {\n const fromPrimary = resolveNestedValue(parameters.primary, parameters.key);\n\n if (typeof fromPrimary === \"string\") {\n return interpolate(fromPrimary, parameters.params);\n }\n\n const fromFallback = resolveNestedValue(parameters.fallback, parameters.key);\n\n if (typeof fromFallback === \"string\") {\n return interpolate(fromFallback, parameters.params);\n }\n\n return parameters.key;\n};\n\nexport type TranslationContextValue = {\n languageTag: Accessor<LanguageTag>;\n setLanguageTag: (languageTag: LanguageTag) => void;\n isLoadingLanguagePack: Accessor<boolean>;\n isRtl: Accessor<boolean>;\n t: Translate;\n};\n\nexport const TranslationContext = createContext<\n TranslationContextValue | undefined\n>(undefined);\n\nconst loadLanguagePack = async (\n languageTag: LanguageTag,\n): Promise<Translations | undefined> =>\n match(languageTag)\n .with(\"en\", () => Promise.resolve(undefined))\n .with(\"nl\", async () => import(\"../../lang/nl.json\").then(m => m.default))\n .with(\"es\", async () => import(\"../../lang/es.json\").then(m => m.default))\n .with(\"sv\", async () => import(\"../../lang/sv.json\").then(m => m.default))\n .with(\"fr\", async () => import(\"../../lang/fr.json\").then(m => m.default))\n .with(\"zh-cn\", async () =>\n import(\"../../lang/zh-cn.json\").then(m => m.default),\n )\n .with(\"ar\", async () => import(\"../../lang/ar.json\").then(m => m.default))\n .with(\"he\", async () => import(\"../../lang/he.json\").then(m => m.default))\n .with(\"fa\", async () => import(\"../../lang/fa.json\").then(m => m.default))\n .exhaustive();\n\nexport const TranslationProvider: ParentComponent = (props) => {\n const { provider } = useModalContext();\n const initialLanguageTag = provider.storage.getSettings().language as LanguageTag | undefined;\n const [languageTag, setLanguageTag] = createSignal<LanguageTag>(\n initialLanguageTag ?? \"en\",\n );\n const [languagePack, setLanguagePack] = createSignal<\n Translations | undefined\n >(undefined);\n const [isLoadingLanguagePack, setIsLoadingLanguagePack] = createSignal(false);\n\n createEffect(() => {\n let cancelled = false;\n\n const run = async () => {\n setIsLoadingLanguagePack(true);\n\n try {\n const nextPack = await loadLanguagePack(languageTag());\n\n if (cancelled) return;\n\n setLanguagePack(nextPack);\n }\n finally {\n if (!cancelled) setIsLoadingLanguagePack(false);\n }\n };\n\n void run();\n\n onCleanup(() => {\n cancelled = true;\n });\n });\n\n const t: Translate = (key, params) => {\n const translated = resolveTranslation({\n primary: languagePack(),\n fallback: fallbackEnglish as unknown as Translations,\n key,\n params,\n });\n const lines = translated.split(\"\\n\");\n\n if (lines.length <= 1) {\n return translated;\n }\n\n return (\n <>\n {lines.map((line, index) => (\n <>\n {line}\n {index < lines.length - 1 ? <br /> : null}\n </>\n ))}\n </>\n );\n };\n\n const isRtl = createMemo(() => isRtlLanguage(languageTag()));\n const updateLanguageTag = (nextLanguageTag: LanguageTag) => {\n setLanguageTag(nextLanguageTag);\n };\n\n const contextValue: TranslationContextValue = {\n languageTag,\n setLanguageTag: updateLanguageTag,\n isLoadingLanguagePack,\n isRtl,\n t,\n };\n\n return (\n <TranslationContext.Provider value={contextValue}>\n {props.children}\n </TranslationContext.Provider>\n );\n};\n\nexport const useTranslation = () => {\n const context = useContext(TranslationContext);\n\n if (!context) {\n throw new Error(\"TranslationProvider not found\");\n }\n\n return context;\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport {\n type Component,\n createContext,\n useContext,\n} from \"solid-js\";\n\nimport { ModalRoot } from \"./components/ModalRoot.js\";\nimport { type OpenLVModalElementProps } from \"./element.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\nimport {\n TranslationProvider,\n} from \"./utils/i18n.js\";\n\nexport type ModalContextValue = {\n provider: OpenLVProvider;\n themeConfig?: ThemeConfig;\n};\n\nexport const ModalContext = createContext<ModalContextValue | undefined>(\n undefined,\n);\n\nexport const ModalProvider: Component<OpenLVModalElementProps> = (props) => {\n const { provider, theme } = props;\n\n return (\n <ModalContext.Provider value={{ provider, themeConfig: theme }}>\n <TranslationProvider>\n <ModalRoot onClose={props.onClose} />\n </TranslationProvider>\n </ModalContext.Provider>\n );\n};\n\nexport const useModalContext = () => {\n const context = useContext(ModalContext);\n\n if (!context) throw new Error(\"Modal context not found\");\n\n return context;\n};\n","import { encodeConnectionURL } from \"@openlv/core\";\nimport type { SessionStateObject } from \"@openlv/session\";\nimport { createMemo, createSignal, onCleanup, onMount } from \"solid-js\";\n\nimport { useModalContext } from \"../context.js\";\n\nexport const useSession = () => {\n const { provider } = useModalContext();\n const session = createMemo(() => provider.getSession(), undefined, { name: \"session\" });\n const [status, setStatus] = createSignal<SessionStateObject | undefined>(session()?.getState());\n\n console.log(\"session status\", status());\n\n const handleStateChange = (state?: SessionStateObject) => {\n console.log(\"session state change\", state);\n setStatus(state);\n };\n\n onMount(() => {\n session()?.emitter.on(\"state_change\", handleStateChange);\n });\n\n onCleanup(() => {\n session()?.emitter.off(\"state_change\", handleStateChange);\n });\n\n const parameters = createMemo(() => session()?.getHandshakeParameters());\n const uri = createMemo(() => {\n const handshakeParameters = parameters();\n\n return handshakeParameters\n ? encodeConnectionURL(handshakeParameters)\n : undefined;\n });\n\n return {\n uri,\n status,\n };\n};\n\nexport const useSessionStart = () => {\n const { provider } = useModalContext();\n\n return {\n start: () => {\n const currentSettings = provider.storage.getSettings();\n const p = currentSettings?.signaling?.p;\n const s = p ? currentSettings?.signaling?.s?.[p] : undefined;\n\n if (!p || !s) {\n throw new Error(\"Invalid protocol or server\");\n }\n\n return provider.createSession({\n p,\n s,\n });\n },\n };\n};\n","import { useSession } from \"../hooks/useSession.js\";\n\nexport const UnknownState = (props: { state: unknown; }) => {\n const { uri, status } = useSession();\n\n // biome-ignore lint/suspicious/noConsole: debug\n console.error(\"Unknown state:\", {\n state: props.state,\n });\n\n return (\n <div class=\"rounded-md bg-(--lv-control-button-secondary-background) p-2 text-(--lv-text-muted)\">\n <div>\n Unknown state:\n {JSON.stringify(props.state)}\n </div>\n <div>\n URI:\n {uri()}\n </div>\n <div>\n Session Status:\n {JSON.stringify(status())}\n </div>\n </div>\n );\n};\n","export const copyToClipboard = async (text: string): Promise<boolean> => {\n if (!text) return false;\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n\n return true;\n }\n }\n catch (error) {\n console.error(\"Failed to copy to clipboard\", error);\n }\n\n try {\n const textArea = document.createElement(\"textarea\");\n\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.append(textArea);\n textArea.focus();\n textArea.select();\n const result = document.execCommand(\"copy\");\n\n textArea.remove();\n\n return result;\n }\n catch {\n return false;\n }\n};\n","import * as QRCode from \"qrcode-generator\";\nimport { Show } from \"solid-js\";\n\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\n\nconst generateQRCode = (uriValue: string) => {\n // qrcode-generator ships a callable export as default, but its types are wrong\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const QR: any = (QRCode as any).default;\n\n const qr = QR(0, \"M\");\n\n qr.addData(uriValue);\n qr.make();\n\n return qr.createSvgTag({ cellSize: 5, margin: 0, scalable: true });\n};\n\nexport const HandshakeOpen = () => {\n const { t } = useTranslation();\n const { uri } = useSession();\n\n const handleCopy = () => {\n const sessionUri = uri();\n\n if (sessionUri) {\n copyToClipboard(sessionUri);\n }\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 px-2\">\n <div class=\"w-full space-y-4 rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-card-background) p-4\">\n <Show when={uri()}>\n {sessionUri => (\n <div class=\"relative mx-auto flex w-fit items-center justify-center rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-qr-background) p-4\">\n <button\n type=\"button\"\n class=\"h-[200px] w-[200px] cursor-pointer rounded bg-(--lv-qr-background) text-(--lv-qr-color)\"\n onClick={handleCopy}\n title={String(t(\"handshake.clickToCopyUrl\"))}\n innerHTML={generateQRCode(sessionUri())}\n />\n </div>\n )}\n </Show>\n\n <div class=\"w-full\">\n <button\n type=\"button\"\n onClick={handleCopy}\n class=\"w-full cursor-pointer rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-4 py-2 text-sm text-(--lv-text-primary) transition hover:bg-(--lv-control-button-secondary-hoverBackground) active:bg-(--lv-control-button-secondary-activeBackground)\"\n >\n {t(\"handshake.copyConnectionUrl\")}\n </button>\n </div>\n </div>\n <div class=\"w-full text-sm text-(--lv-text-secondary)\">\n <span>{t(\"handshake.scanCodeInstruction\")}</span>\n </div>\n </div>\n );\n};\n","import { SESSION_STATE } from \"@openlv/session\";\nimport { Match, Switch } from \"solid-js\";\n\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\nimport { HandshakeOpen } from \"./HandshakeOpen.jsx\";\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const Connecting = () => {\n const { status } = useSession();\n const { t } = useTranslation();\n\n return (\n <div>\n <Switch>\n <Match when={([SESSION_STATE.CREATED, SESSION_STATE.SIGNALING] as string[]).includes(status()?.status ?? \"\")}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connecting\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.waitingForNetwork\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={status()?.status === SESSION_STATE.READY}>\n <HandshakeOpen />\n </Match>\n <Match when={status()?.status === SESSION_STATE.LINKING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.establishingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.mayTakeFewSeconds\")}\n </p>\n </div>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport {\n createSignal,\n Match,\n onCleanup,\n onMount,\n Switch,\n} from \"solid-js\";\n\nimport { UnknownState } from \"../components/UnknownState.js\";\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Connecting } from \"./connecting.jsx\";\n\ninterface ConnectionFlowProps {\n onClose: () => void;\n onCopy: (uri: string) => void;\n}\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const ConnectionFlow = (props: ConnectionFlowProps) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n return (\n <div style={{ \"view-transition-name\": \"connection-flow\" }} class=\"w-full\">\n <Switch fallback={<UnknownState state={providerStatus()} />}>\n <Match when={providerStatus() === PROVIDER_STATUS.CREATING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.preparingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.generatingKeys\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTING}>\n <Connecting />\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTED}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">✅</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectedSuccessfully\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.walletConnectedReady\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.ERROR}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">🔌</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.disconnected\")}\n </h3>\n <p class=\"mb-4 text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.connectionClosed\")}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={props.onClose}\n class=\"w-full rounded-lg bg-(--lv-control-button-secondary-background) px-4 py-2 font-semibold text-(--lv-text-primary) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"common.close\")}\n </button>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/defaultAttributes.ts\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\nvar defaultAttributes_default = defaultAttributes;\nexport {\n defaultAttributes_default as default\n};\n//# sourceMappingURL=defaultAttributes.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/Icon.tsx\nimport { For, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport defaultAttributes from \"./defaultAttributes\";\n\n// ../shared/src/utils/hasA11yProp.ts\nvar hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\n// ../shared/src/utils/mergeClasses.ts\nvar mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\n// ../shared/src/utils/toCamelCase.ts\nvar toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\n// ../shared/src/utils/toKebabCase.ts\nvar toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\n// ../shared/src/utils/toPascalCase.ts\nvar toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\n// src/Icon.tsx\nvar Icon = (props) => {\n const [localProps, rest] = splitProps(props, [\n \"color\",\n \"size\",\n \"strokeWidth\",\n \"children\",\n \"class\",\n \"name\",\n \"iconNode\",\n \"absoluteStrokeWidth\"\n ]);\n return <svg\n {...defaultAttributes}\n width={localProps.size ?? defaultAttributes.width}\n height={localProps.size ?? defaultAttributes.height}\n stroke={localProps.color ?? defaultAttributes.stroke}\n stroke-width={localProps.absoluteStrokeWidth ? Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * 24 / Number(localProps.size) : Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"])}\n class={mergeClasses(\n \"lucide\",\n \"lucide-icon\",\n ...localProps.name != null ? [\n `lucide-${toKebabCase(toPascalCase(localProps.name))}`,\n `lucide-${toKebabCase(localProps.name)}`\n ] : [],\n localProps.class != null ? localProps.class : \"\"\n )}\n aria-hidden={!localProps.children && !hasA11yProp(rest) ? \"true\" : void 0}\n {...rest}\n >\n <For each={localProps.iconNode}>\n {([elementName, attrs]) => {\n return <Dynamic\n component={elementName}\n {...attrs}\n />;\n }}\n </For>\n </svg>;\n};\nvar Icon_default = Icon;\nexport {\n Icon_default as default\n};\n//# sourceMappingURL=Icon.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-left.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nvar ChevronLeft = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-left\" />;\nvar chevron_left_default = ChevronLeft;\nexport {\n chevron_left_default as default\n};\n//# sourceMappingURL=chevron-left.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-right.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nvar ChevronRight = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-right\" />;\nvar chevron_right_default = ChevronRight;\nexport {\n chevron_right_default as default\n};\n//# sourceMappingURL=chevron-right.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/circle-question-mark.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nvar CircleQuestionMark = (props) => <Icon {...props} iconNode={iconNode} name=\"circle-question-mark\" />;\nvar circle_question_mark_default = CircleQuestionMark;\nexport {\n circle_question_mark_default as default\n};\n//# sourceMappingURL=circle-question-mark.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/plus.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nvar Plus = (props) => <Icon {...props} iconNode={iconNode} name=\"plus\" />;\nvar plus_default = Plus;\nexport {\n plus_default as default\n};\n//# sourceMappingURL=plus.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/qr-code.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n];\nvar QrCode = (props) => <Icon {...props} iconNode={iconNode} name=\"qr-code\" />;\nvar qr_code_default = QrCode;\nexport {\n qr_code_default as default\n};\n//# sourceMappingURL=qr-code.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/settings.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nvar Settings = (props) => <Icon {...props} iconNode={iconNode} name=\"settings\" />;\nvar settings_default = Settings;\nexport {\n settings_default as default\n};\n//# sourceMappingURL=settings.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/trash-2.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nvar Trash2 = (props) => <Icon {...props} iconNode={iconNode} name=\"trash-2\" />;\nvar trash_2_default = Trash2;\nexport {\n trash_2_default as default\n};\n//# sourceMappingURL=trash-2.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/x.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nvar X = (props) => <Icon {...props} iconNode={iconNode} name=\"x\" />;\nvar x_default = X;\nexport {\n x_default as default\n};\n//# sourceMappingURL=x.jsx.map\n","// src/utils.js\nvar SPACE_REGEX = /\\s+/g;\nvar removeExtraSpaces = (str) => {\n if (typeof str !== \"string\" || !str) return str;\n return str.replace(SPACE_REGEX, \" \").trim();\n};\nvar cx = (...classnames) => {\n const classList = [];\n const buildClassString = (input) => {\n if (!input && input !== 0 && input !== 0n) return;\n if (Array.isArray(input)) {\n for (let i = 0, len = input.length; i < len; i++) buildClassString(input[i]);\n return;\n }\n const type = typeof input;\n if (type === \"string\" || type === \"number\" || type === \"bigint\") {\n if (type === \"number\" && input !== input) return;\n classList.push(String(input));\n } else if (type === \"object\") {\n const keys = Object.keys(input);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (input[key]) classList.push(key);\n }\n }\n };\n for (let i = 0, len = classnames.length; i < len; i++) {\n const c = classnames[i];\n if (c !== null && c !== void 0) buildClassString(c);\n }\n return classList.length > 0 ? removeExtraSpaces(classList.join(\" \")) : void 0;\n};\nvar falsyToString = (value) => value === false ? \"false\" : value === true ? \"true\" : value === 0 ? \"0\" : value;\nvar isEmptyObject = (obj) => {\n if (!obj || typeof obj !== \"object\") return true;\n for (const _ in obj) return false;\n return true;\n};\nvar isEqual = (obj1, obj2) => {\n if (obj1 === obj2) return true;\n if (!obj1 || !obj2) return false;\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n for (let i = 0; i < keys1.length; i++) {\n const key = keys1[i];\n if (!keys2.includes(key)) return false;\n if (obj1[key] !== obj2[key]) return false;\n }\n return true;\n};\nvar isBoolean = (value) => value === true || value === false;\nvar joinObjects = (obj1, obj2) => {\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const val2 = obj2[key];\n if (key in obj1) {\n obj1[key] = cx(obj1[key], val2);\n } else {\n obj1[key] = val2;\n }\n }\n }\n return obj1;\n};\nvar flat = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i];\n if (Array.isArray(el)) flat(el, target);\n else if (el) target.push(el);\n }\n};\nfunction flatArray(arr) {\n const flattened = [];\n flat(arr, flattened);\n return flattened;\n}\nvar flatMergeArrays = (...arrays) => {\n const result = [];\n flat(arrays, result);\n const filtered = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i]) filtered.push(result[i]);\n }\n return filtered;\n};\nvar mergeObjects = (obj1, obj2) => {\n const result = {};\n for (const key in obj1) {\n const val1 = obj1[key];\n if (key in obj2) {\n const val2 = obj2[key];\n if (Array.isArray(val1) || Array.isArray(val2)) {\n result[key] = flatMergeArrays(val2, val1);\n } else if (typeof val1 === \"object\" && typeof val2 === \"object\" && val1 && val2) {\n result[key] = mergeObjects(val1, val2);\n } else {\n result[key] = val2 + \" \" + val1;\n }\n } else {\n result[key] = val1;\n }\n }\n for (const key in obj2) {\n if (!(key in obj1)) {\n result[key] = obj2[key];\n }\n }\n return result;\n};\n\nexport { cx, falsyToString, flat, flatArray, flatMergeArrays, isBoolean, isEmptyObject, isEqual, joinObjects, mergeObjects, removeExtraSpaces };\n","import { cx, isEmptyObject, mergeObjects, isEqual, joinObjects, flatMergeArrays, falsyToString } from './chunk-LQJYWU4O.js';\n\n// src/config.js\nvar defaultConfig = {\n twMerge: true,\n twMergeConfig: {}\n};\n\n// src/state.js\nfunction createState() {\n let cachedTwMerge = null;\n let cachedTwMergeConfig = {};\n let didTwMergeConfigChange = false;\n return {\n get cachedTwMerge() {\n return cachedTwMerge;\n },\n set cachedTwMerge(value) {\n cachedTwMerge = value;\n },\n get cachedTwMergeConfig() {\n return cachedTwMergeConfig;\n },\n set cachedTwMergeConfig(value) {\n cachedTwMergeConfig = value;\n },\n get didTwMergeConfigChange() {\n return didTwMergeConfigChange;\n },\n set didTwMergeConfigChange(value) {\n didTwMergeConfigChange = value;\n },\n reset() {\n cachedTwMerge = null;\n cachedTwMergeConfig = {};\n didTwMergeConfigChange = false;\n }\n };\n}\nvar state = createState();\n\n// src/core.js\nvar getTailwindVariants = (cn) => {\n const tv = (options, configProp) => {\n const {\n extend = null,\n slots: slotProps = {},\n variants: variantsProps = {},\n compoundVariants: compoundVariantsProps = [],\n compoundSlots = [],\n defaultVariants: defaultVariantsProps = {}\n } = options;\n const config = { ...defaultConfig, ...configProp };\n const base = extend?.base ? cx(extend.base, options?.base) : options?.base;\n const variants = extend?.variants && !isEmptyObject(extend.variants) ? mergeObjects(variantsProps, extend.variants) : variantsProps;\n const defaultVariants = extend?.defaultVariants && !isEmptyObject(extend.defaultVariants) ? { ...extend.defaultVariants, ...defaultVariantsProps } : defaultVariantsProps;\n if (!isEmptyObject(config.twMergeConfig) && !isEqual(config.twMergeConfig, state.cachedTwMergeConfig)) {\n state.didTwMergeConfigChange = true;\n state.cachedTwMergeConfig = config.twMergeConfig;\n }\n const isExtendedSlotsEmpty = isEmptyObject(extend?.slots);\n const componentSlots = !isEmptyObject(slotProps) ? {\n // add \"base\" to the slots object\n base: cx(options?.base, isExtendedSlotsEmpty && extend?.base),\n ...slotProps\n } : {};\n const slots = isExtendedSlotsEmpty ? componentSlots : joinObjects(\n { ...extend?.slots },\n isEmptyObject(componentSlots) ? { base: options?.base } : componentSlots\n );\n const compoundVariants = isEmptyObject(extend?.compoundVariants) ? compoundVariantsProps : flatMergeArrays(extend?.compoundVariants, compoundVariantsProps);\n const component = (props) => {\n if (isEmptyObject(variants) && isEmptyObject(slotProps) && isExtendedSlotsEmpty) {\n return cn(base, props?.class, props?.className)(config);\n }\n if (compoundVariants && !Array.isArray(compoundVariants)) {\n throw new TypeError(\n `The \"compoundVariants\" prop must be an array. Received: ${typeof compoundVariants}`\n );\n }\n if (compoundSlots && !Array.isArray(compoundSlots)) {\n throw new TypeError(\n `The \"compoundSlots\" prop must be an array. Received: ${typeof compoundSlots}`\n );\n }\n const getVariantValue = (variant, vrs = variants, _slotKey = null, slotProps2 = null) => {\n const variantObj = vrs[variant];\n if (!variantObj || isEmptyObject(variantObj)) {\n return null;\n }\n const variantProp = slotProps2?.[variant] ?? props?.[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp);\n if (typeof variantKey === \"object\") {\n return null;\n }\n const defaultVariantProp = defaultVariants?.[variant];\n const key = variantKey != null ? variantKey : falsyToString(defaultVariantProp);\n const value = variantObj[key || \"false\"];\n return value;\n };\n const getVariantClassNames = () => {\n if (!variants) return null;\n const keys = Object.keys(variants);\n const result = [];\n for (let i = 0; i < keys.length; i++) {\n const value = getVariantValue(keys[i], variants);\n if (value) result.push(value);\n }\n return result;\n };\n const getVariantClassNamesBySlotKey = (slotKey, slotProps2) => {\n if (!variants || typeof variants !== \"object\") return null;\n const result = [];\n for (const variant in variants) {\n const variantValue = getVariantValue(variant, variants, slotKey, slotProps2);\n const value = slotKey === \"base\" && typeof variantValue === \"string\" ? variantValue : variantValue && variantValue[slotKey];\n if (value) result.push(value);\n }\n return result;\n };\n const propsWithoutUndefined = {};\n for (const prop in props) {\n const value = props[prop];\n if (value !== void 0) propsWithoutUndefined[prop] = value;\n }\n const getCompleteProps = (key, slotProps2) => {\n const initialProp = typeof props?.[key] === \"object\" ? {\n [key]: props[key]?.initial\n } : {};\n return {\n ...defaultVariants,\n ...propsWithoutUndefined,\n ...initialProp,\n ...slotProps2\n };\n };\n const getCompoundVariantsValue = (cv = [], slotProps2) => {\n const result = [];\n const cvLength = cv.length;\n for (let i = 0; i < cvLength; i++) {\n const { class: tvClass, className: tvClassName, ...compoundVariantOptions } = cv[i];\n let isValid = true;\n const completeProps = getCompleteProps(null, slotProps2);\n for (const key in compoundVariantOptions) {\n const value = compoundVariantOptions[key];\n const completePropsValue = completeProps[key];\n if (Array.isArray(value)) {\n if (!value.includes(completePropsValue)) {\n isValid = false;\n break;\n }\n } else {\n if ((value == null || value === false) && (completePropsValue == null || completePropsValue === false))\n continue;\n if (completePropsValue !== value) {\n isValid = false;\n break;\n }\n }\n }\n if (isValid) {\n if (tvClass) result.push(tvClass);\n if (tvClassName) result.push(tvClassName);\n }\n }\n return result;\n };\n const getCompoundVariantClassNamesBySlot = (slotProps2) => {\n const compoundClassNames = getCompoundVariantsValue(compoundVariants, slotProps2);\n if (!Array.isArray(compoundClassNames)) return compoundClassNames;\n const result = {};\n const cnFn = cn;\n for (let i = 0; i < compoundClassNames.length; i++) {\n const className = compoundClassNames[i];\n if (typeof className === \"string\") {\n result.base = cnFn(result.base, className)(config);\n } else if (typeof className === \"object\") {\n for (const slot in className) {\n result[slot] = cnFn(result[slot], className[slot])(config);\n }\n }\n }\n return result;\n };\n const getCompoundSlotClassNameBySlot = (slotProps2) => {\n if (compoundSlots.length < 1) return null;\n const result = {};\n const completeProps = getCompleteProps(null, slotProps2);\n for (let i = 0; i < compoundSlots.length; i++) {\n const {\n slots: slots2 = [],\n class: slotClass,\n className: slotClassName,\n ...slotVariants\n } = compoundSlots[i];\n if (!isEmptyObject(slotVariants)) {\n let isValid = true;\n for (const key in slotVariants) {\n const completePropsValue = completeProps[key];\n const slotVariantValue = slotVariants[key];\n if (completePropsValue === void 0 || (Array.isArray(slotVariantValue) ? !slotVariantValue.includes(completePropsValue) : slotVariantValue !== completePropsValue)) {\n isValid = false;\n break;\n }\n }\n if (!isValid) continue;\n }\n for (let j = 0; j < slots2.length; j++) {\n const slotName = slots2[j];\n if (!result[slotName]) result[slotName] = [];\n result[slotName].push([slotClass, slotClassName]);\n }\n }\n return result;\n };\n if (!isEmptyObject(slotProps) || !isExtendedSlotsEmpty) {\n const slotsFns = {};\n if (typeof slots === \"object\" && !isEmptyObject(slots)) {\n const cnFn = cn;\n for (const slotKey in slots) {\n slotsFns[slotKey] = (slotProps2) => {\n const compoundVariantClasses = getCompoundVariantClassNamesBySlot(slotProps2);\n const compoundSlotClasses = getCompoundSlotClassNameBySlot(slotProps2);\n return cnFn(\n slots[slotKey],\n getVariantClassNamesBySlotKey(slotKey, slotProps2),\n compoundVariantClasses ? compoundVariantClasses[slotKey] : void 0,\n compoundSlotClasses ? compoundSlotClasses[slotKey] : void 0,\n slotProps2?.class,\n slotProps2?.className\n )(config);\n };\n }\n }\n return slotsFns;\n }\n return cn(\n base,\n getVariantClassNames(),\n getCompoundVariantsValue(compoundVariants),\n props?.class,\n props?.className\n )(config);\n };\n const getVariantKeys = () => {\n if (!variants || typeof variants !== \"object\") return;\n return Object.keys(variants);\n };\n component.variantKeys = getVariantKeys();\n component.extend = extend;\n component.base = base;\n component.slots = slots;\n component.variants = variants;\n component.defaultVariants = defaultVariants;\n component.compoundSlots = compoundSlots;\n component.compoundVariants = compoundVariants;\n return component;\n };\n const createTV = (configProp) => {\n return (options, config) => tv(options, config ? mergeObjects(configProp, config) : configProp);\n };\n return {\n tv,\n createTV\n };\n};\n\nexport { defaultConfig, getTailwindVariants, state };\n","import { getTailwindVariants } from './chunk-RZF76H2U.js';\nexport { defaultConfig } from './chunk-RZF76H2U.js';\nimport { cx } from './chunk-LQJYWU4O.js';\nexport { cx } from './chunk-LQJYWU4O.js';\n\n// src/lite.js\nvar cnAdapter = (...classnames) => {\n return (_config) => {\n const base = cx(classnames);\n return base || void 0;\n };\n};\nvar { createTV, tv } = getTailwindVariants(cnAdapter);\n\nexport { cnAdapter as cn, cnAdapter, createTV, tv };\n","// Button implementation that also supports being an anchor tag\nimport classNames from \"classnames\";\nimport { type JSX, splitProps } from \"solid-js\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst styles = tv({\n base: \"flex items-center justify-center rounded-lg transition-all duration-100 cursor-pointer active:scale-95\",\n variants: {\n $variant: {\n primary:\n \"font-semibold text-sm bg-(--lv-control-button-primary-background) text-(--lv-control-button-primary-color) border-(--lv-control-button-primary-border) hover:bg-(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background)) active:bg-(--lv-control-button-primary-activeBackground,var(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background))) disabled:bg-(--lv-control-button-primary-disabledBackground,var(--lv-control-button-primary-background)) disabled:text-(--lv-control-button-primary-disabledColor,var(--lv-control-button-primary-color))\",\n secondary:\n \"border bg-(--lv-control-button-secondary-background) text-(--lv-control-button-secondary-color) border-(--lv-control-button-secondary-border,var(--lv-control-button-secondary-background)) hover:bg-(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background)) active:bg-(--lv-control-button-secondary-activeBackground,var(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background))) disabled:bg-(--lv-control-button-secondary-disabledBackground,var(--lv-control-button-secondary-background)) disabled:text-(--lv-control-button-secondary-disabledColor,var(--lv-control-button-secondary-color))\",\n tertiary:\n \"bg-transparent text-(--lv-text-muted) hover:bg-(--lv-control-button-tertiary-hoverBackground,transparent) active:bg-(--lv-control-button-tertiary-activeBackground,var(--lv-control-button-tertiary-hoverBackground,transparent)) disabled:text-(--lv-control-button-tertiary-disabledColor,var(--lv-text-muted))\",\n },\n $size: {\n sm: \"h-6\",\n md: \"h-8\",\n lg: \"h-11\",\n },\n $aspect: {\n square: \"aspect-square\",\n auto: \"\",\n },\n },\n defaultVariants: {\n $size: \"md\",\n $variant: \"primary\",\n $aspect: \"auto\",\n },\n});\n\nexport type ButtonButtonProps = {\n onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;\n} & JSX.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonLinkProps = {\n href: string;\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n} & JSX.AnchorHTMLAttributes<HTMLAnchorElement>;\nexport type ButtonProps = {\n children?: JSX.Element;\n class?: string;\n} & VariantProps<typeof styles> &\n(\n | ({\n href: string;\n } & ButtonLinkProps)\n | ({\n href?: undefined;\n } & ButtonButtonProps)\n );\n\nexport const Button = (rawProps: ButtonProps) => {\n const [local, props] = splitProps(rawProps, [\n \"children\",\n \"class\",\n \"$variant\",\n \"$size\",\n \"$aspect\",\n \"href\",\n \"onClick\",\n ]);\n\n if (local.href) {\n return (\n <a\n href={local.href}\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {local.children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {local.children}\n </button>\n );\n};\n","import { For } from \"solid-js\";\n\nconst dotCount = (isApple: boolean) => (isApple ? 1 : 3);\n\nconst TabletGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full justify-between\">\n <div class=\"grow py-1 ps-1\">\n <div class=\"h-full rounded-sm border border-gray-300 bg-gray-400\"></div>\n </div>\n <div class=\"flex h-full w-3 flex-col items-center justify-center gap-0.5 pr-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-500\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nconst PhoneGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full flex-col justify-between\">\n <div class=\"grow px-1 pt-1\">\n <div class=\"h-full rounded-sm border border-gray-200 bg-gray-300\"></div>\n </div>\n <div class=\"flex h-3 w-full items-center justify-center gap-0.5 pb-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-400\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nexport const ConnectionGraphic = () => {\n // the only fingerprinting we ever do\n // is Apple device\n // const isApple =\n // navigator.userAgent.includes(\"iPhone\") ||\n // navigator.userAgent.includes(\"iPad\") ||\n // navigator.userAgent.includes(\"iPod\");\n const isApple = true;\n\n return (\n <div class=\"-space-x-4 flex items-end\">\n <div class=\"h-38 w-48 overflow-hidden rounded-lg bg-gray-300\">\n <TabletGraphic isApple={isApple} />\n </div>\n <div class=\"h-18 w-12 overflow-hidden rounded-lg bg-gray-200\">\n <PhoneGraphic isApple={isApple} />\n </div>\n </div>\n );\n};\n","import { LucideSettings } from \"lucide-solid\";\n\nimport { useSessionStart } from \"../../hooks/useSession.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\nimport { ConnectionGraphic } from \"./ConnectionGraphic.js\";\n\nexport const Disconnected = (props: { onSettings: () => void; }) => {\n const { t } = useTranslation();\n const { start } = useSessionStart();\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <ConnectionGraphic />\n <div class=\"text-center\">\n <p class=\"text-sm text-(--lv-text-secondary)\">\n {t(\"disconnected.prompt\")}\n </p>\n </div>\n <div class=\"flex items-center\">\n <Button\n type=\"button\"\n onClick={start}\n class=\"z-10 px-6 py-3\"\n $variant=\"primary\"\n $size=\"lg\"\n >\n {t(\"disconnected.generateQr\")}\n </Button>\n <Button\n type=\"button\"\n aria-label={String(t(\"disconnected.connectionSettings\"))}\n aria-pressed={false}\n onClick={props.onSettings}\n class=\"px-3 ltr:-ml-1 ltr:rounded-l-none rtl:-mr-1 rtl:rounded-r-none\"\n $aspect=\"square\"\n $size=\"lg\"\n $variant=\"secondary\"\n >\n <LucideSettings class=\"h-5 w-5 text-(--lv-text-muted)\" />\n </Button>\n </div>\n </div>\n );\n};\n","import { LucideQrCode } from \"lucide-solid\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\n\nexport const InfoScreen = () => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex flex-col space-y-2 px-4 text-start\">\n <div class=\"min-h-32 w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.scanQrCode\")}\n </div>\n <div class=\"flex justify-center items-center grow\">\n <LucideQrCode class=\"w-10 h-10\" />\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.approveOnDevice\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.youreConnected\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n </div>\n );\n};\n","import { type Accessor, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport interface PunchTransitionOptions {\n duration?: number;\n}\n\nexport const usePunchTransition = <T>(\n value: T | Accessor<T>,\n { duration = 200 }: PunchTransitionOptions = {},\n) => {\n const readValue: Accessor<T>\n = typeof value === \"function\" ? (value as Accessor<T>) : () => value;\n const initialValue = readValue();\n const [current, setCurrent] = createSignal<T>(initialValue);\n const [previous, setPrevious] = createSignal<T | undefined>(undefined);\n let timeoutRef: ReturnType<typeof setTimeout> | undefined;\n let lastValueRef = initialValue;\n\n createEffect(() => {\n const nextValue = readValue();\n\n if (Object.is(nextValue, lastValueRef)) return;\n\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n\n setPrevious(() => lastValueRef);\n setCurrent(() => nextValue);\n lastValueRef = nextValue;\n\n timeoutRef = globalThis.setTimeout(() => {\n setPrevious(() => undefined);\n timeoutRef = undefined;\n }, duration);\n\n onCleanup(() => {\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n });\n });\n\n return {\n current,\n previous,\n isTransitioning: () => previous() !== undefined,\n };\n};\n","import type {\n ProviderStorage,\n UserThemePreference,\n} from \"@openlv/provider/storage\";\nimport { createSignal } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../provider/dist/storage/version.js\";\nimport { useModalContext } from \"../context.js\";\nimport type { LanguageTag } from \"../utils/i18n.jsx\";\n\nexport const useSettings = () => {\n const { provider } = useModalContext();\n const [settings, setLocalSettings] = createSignal<ProviderStorage>(provider.storage.getSettings());\n\n const setSettings = (newSettings: ProviderStorage) => {\n setLocalSettings(newSettings);\n provider.storage.setSettings(newSettings);\n };\n\n const setLanguage = (language: LanguageTag) => {\n setSettings({ ...settings(), language });\n };\n\n const setThemeMode = (themeMode: UserThemePreference) => {\n setSettings({ ...settings(), theme: themeMode });\n };\n\n const setSignalingProtocol = (p: SignalingProtocol) => {\n setSettings({ ...settings(), signaling: { p, s: settings()?.signaling?.s ?? {} } });\n };\n\n const setSignalingOptions = (options: { url: string; }) => {\n const p = settings()?.signaling?.p;\n\n if (!p) return;\n\n const s = settings()?.signaling?.s ?? {};\n\n setSettings({ ...settings(), signaling: { p, s: { ...s, [p]: options.url } } });\n };\n\n const setRetainSessionHistory = (retain: boolean) => {\n setSettings({ ...settings(), retainHistory: retain });\n };\n\n const setAutoReconnect = (autoReconnect: boolean) => {\n setSettings({ ...settings(), autoReconnect });\n };\n\n return {\n settings,\n setSettings,\n setLanguage,\n setThemeMode,\n setSignalingProtocol,\n setSignalingOptions,\n setRetainSessionHistory,\n setAutoReconnect,\n };\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"./useSettings.js\";\n\nexport const useTheme = () => {\n const { settings } = useSettings();\n\n const theme = createMemo(() => settings().theme);\n const mode = createMemo(() => \"light\");\n\n return {\n theme,\n mode,\n };\n};\n","/**\n * OpenLV icon - 128x128 pixels, optimized WebP format\n * Best for larger UI elements, headers, prominent display\n */\nexport const OPENLV_ICON_128\n = \"data:image/webp;base64,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\";\n","import { createMemo, Show } from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport { useSession } from \"../../hooks/useSession.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\n\nexport const FooterStatus = () => {\n const { t } = useTranslation();\n const { status: sessionStatus } = useSession();\n const status = createMemo(() => {\n const sessionState = sessionStatus()?.status;\n const signalState = sessionStatus()?.signaling?.state as string | undefined;\n\n return match({ sessionState, signalState })\n .with({ sessionState: \"connected\" }, () => ({\n icon: \"✅\",\n text: t(\"status.connectedSuccessfully\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"standby\" }, () => ({\n icon: \"🫥\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"connecting\" }, () => ({\n icon: \"↗️\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"ready\" }, () => ({\n icon: \"👋\",\n text: t(\"status.ready\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"handshake\" }, () => ({\n icon: \"🤝\",\n text: t(\"status.handshakeClosed\"),\n }))\n .with(\n { sessionState: \"signaling\", signalState: \"handshake-partial\" },\n () => ({\n icon: \"🤝\",\n text: t(\"status.handshakePartial\"),\n }),\n )\n .with({ sessionState: \"signaling\", signalState: \"encrypted\" }, () => ({\n icon: \"🔒\",\n text: t(\"status.encrypted\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"error\" }, () => ({\n icon: \"❌\",\n text: t(\"status.signalError\"),\n }))\n .otherwise(() => undefined);\n });\n\n return (\n <Show when={status()}>\n {resolved => (\n <div class=\"group flex items-center gap-2 rounded-md px-2 py-2 hover:bg-(--lv-control-button-secondary-background)\">\n <div class=\"pointer-events-none whitespace-nowrap rounded-md text-xs opacity-0 group-hover:opacity-100\">\n {resolved().text}\n </div>\n <div>{resolved().icon}</div>\n </div>\n )}\n </Show>\n );\n};\n","import { OPENLV_ICON_128 } from \"../../assets/logo.js\";\nimport { FooterStatus } from \"./StatusIndicator.js\";\n\nexport const Footer = () => (\n <>\n <div class=\"h-11 w-full\"></div>\n <div class=\"absolute inset-x-0 bottom-0 flex items-end justify-between gap-2 px-3 py-2 text-(--lv-text-muted)\">\n <a\n href=\"https://github.com/v3xlabs/open-lavatory\"\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"flex items-center gap-2 p-1 font-semibold text-sm text-(--lv-text-muted)\"\n >\n <img\n src={OPENLV_ICON_128}\n alt=\"Open Lavatory Logo\"\n width={20}\n height={20}\n class=\"rounded\"\n data-openlv-brand-logo\n />\n <span>openlv</span>\n </a>\n <div class=\"text-sm text-(--lv-text-muted)\">\n <FooterStatus />\n </div>\n </div>\n </>\n);\n","import { LucideChevronLeft, LucideCircleQuestionMark, LucideX } from \"lucide-solid\";\n\nimport { Button } from \"../ui/Button.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport type { ModalView } from \"./ModalRoot.js\";\n\nexport const Header = (props: {\n title: string;\n view: ModalView;\n onClose: () => void;\n onBack?: () => void;\n setView: (view: ModalView) => void;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex items-center justify-between px-2 py-2\">\n {props.onBack\n ? (\n <Button\n onClick={props.onBack}\n aria-label={String(\n props.view === \"settings\"\n ? t(\"modal.backToQr\")\n : t(\"modal.closeModal\"),\n )}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideChevronLeft class=\"h-6 w-6 text-(--lv-text-muted) rtl:rotate-180\" />\n </Button>\n )\n : (\n <Button\n type=\"button\"\n onClick={() => props.setView(\"info\")}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideCircleQuestionMark class=\"h-5 w-5\" />\n </Button>\n )}\n <h2 class=\"flex items-center justify-center gap-2 font-semibold text-(--lv-text-primary) text-lg\">\n {props.title}\n </h2>\n <Button\n type=\"button\"\n aria-label={String(t(\"common.close\"))}\n aria-pressed={false}\n onClick={props.onClose}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideX class=\"h-6 w-6 text-(--lv-text-muted)\" />\n </Button>\n </div>\n );\n};\n","import type { Accessor } from \"solid-js\";\nimport { createMemo, createSignal } from \"solid-js\";\n\nimport { usePunchTransition } from \"./usePunchTransition.js\";\n\nexport interface UseNavigationStackOptions {\n transitionDuration?: number;\n}\n\nexport interface UseNavigationStackReturn<T> {\n screen: Accessor<T>;\n previousScreen: Accessor<T | undefined>;\n isTransitioning: Accessor<boolean>;\n navigate: (screen: T) => void;\n goBack: () => void;\n isAtRoot: Accessor<boolean>;\n}\n\nexport const useNavigationStack = <T>(\n initialScreen: T,\n { transitionDuration = 200 }: UseNavigationStackOptions = {},\n): UseNavigationStackReturn<T> => {\n const [stack, setStack] = createSignal<T[]>([initialScreen]);\n const [index, setIndex] = createSignal(0);\n const screen = createMemo<T>(() => stack()[index()] ?? initialScreen);\n const { current, previous, isTransitioning } = usePunchTransition(screen, {\n duration: transitionDuration,\n });\n\n const navigate = (nextScreen: T) => {\n const activeIndex = index();\n const activeStack = stack();\n const currentScreen = activeStack[activeIndex];\n\n if (Object.is(currentScreen, nextScreen)) return;\n\n const nextStack = activeStack.slice(0, activeIndex + 1);\n\n nextStack.push(nextScreen);\n setStack(nextStack);\n setIndex(nextStack.length - 1);\n };\n\n const goBack = () => {\n setIndex(currentIndex => Math.max(0, currentIndex - 1));\n };\n\n return {\n screen: current,\n previousScreen: previous,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot: () => index() === 0,\n };\n};\n","import classNames from \"classnames\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type TransitionContainerProps<T> = {\n current: T;\n previous: T | undefined;\n isTransitioning: boolean;\n render: (value: T) => JSX.Element;\n class?: string;\n};\n\nexport const TransitionContainer = <T = unknown>(\n props: TransitionContainerProps<T>,\n) => (\n <div class={classNames(\"modal-transition__container\", props.class)}>\n <Show when={props.previous !== undefined}>\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {props.render(props.previous as T)}\n </div>\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n props.isTransitioning && \"modal-transition__layer--incoming\",\n )}\n >\n {props.render(props.current)}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuGroupProps = ParentProps<{\n title: JSX.Element;\n right?: JSX.Element;\n}>;\n\nexport const MenuGroup = (props: MenuGroupProps) => (\n <div>\n <div class=\"flex items-end justify-between py-1 pl-2\">\n <div class=\"font-medium text-(--lv-text-primary) text-sm\">\n {props.title}\n </div>\n <div>{props.right}</div>\n </div>\n <div class=\"flex flex-col gap-1 rounded-md bg-(--lv-card-background)\">\n {props.children}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuItemProps = ParentProps<{\n label: JSX.Element;\n}>;\n\nexport const MenuItem = (props: MenuItemProps) => (\n <div class=\"flex items-baseline justify-between gap-2 px-2 py-1 first:pt-2 last:pb-2\">\n <div class=\"text-sm text-(--lv-text-secondary) text-start\">\n {props.label}\n </div>\n <div>{props.children}</div>\n </div>\n);\n","import { For, Show } from \"solid-js\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst buttonGroupStyles = tv({\n slots: {\n root: \"flex overflow-hidden rounded-md border border-(--lv-control-button-secondary-border)\",\n box: \"px-4 py-2 font-semibold text-xs transition border-l first:border-l-0 border-(--lv-control-button-secondary-border)\",\n },\n variants: {\n active: {\n on: {\n box: \"bg-(--lv-control-button-secondary-background) text-(--lv-text-primary)\",\n },\n off: {\n box: \"bg-transparent text-(--lv-text-secondary) cursor-pointer\",\n },\n },\n },\n defaultVariants: {\n active: \"off\",\n },\n});\n\nconst dropdownStyles = tv({\n base: \"w-full rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-3 py-2 font-semibold text-xs text-(--lv-text-primary) cursor-pointer focus:outline-none focus:ring-2 focus:ring-(--lv-control-button-primary-background) appearance-none bg-[url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')] bg-[length:14px] bg-[right_8px_center] bg-no-repeat pr-8\",\n});\n\nexport type SelectProps = {\n options: string[][];\n value: string;\n onChange: (value: string) => void;\n dropdownThreshold?: number;\n};\n\nexport const Select = (props: SelectProps) => {\n const dropdown = dropdownStyles();\n const { root, box } = buttonGroupStyles({});\n\n return (\n <Show\n when={props.options.length > (props.dropdownThreshold ?? 3)}\n fallback={(\n <div class={root()}>\n <For each={props.options}>\n {([slug, label]) => (\n <button\n type=\"button\"\n onClick={() => props.onChange(slug)}\n aria-pressed={slug === props.value}\n class={box({ active: slug === props.value ? \"on\" : \"off\" })}\n >\n {label}\n </button>\n )}\n </For>\n </div>\n )}\n >\n <select\n class={dropdown}\n value={props.value}\n onChange={event => props.onChange(event.currentTarget.value)}\n >\n <For each={props.options}>\n {([slug, label]) => <option value={slug}>{label}</option>}\n </For>\n </select>\n </Show>\n );\n};\n","import type { UserThemePreference } from \"@openlv/provider/storage\";\nimport { Show } from \"solid-js\";\n\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nexport const ThemeSettings = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const isUserConfigurable = () => theme.mode() === \"auto\";\n const userThemeMode = () => (theme.mode() === \"auto\" ? \"system\" : theme.mode());\n const updateThemePreference = (value: string) => {\n // theme.setMode(value as ThemeMode);\n };\n\n return (\n <Show when={isUserConfigurable()}>\n <MenuItem label={t(\"settings.theme.mode\") as string}>\n <Select\n options={[\n [\"light\", t(\"settings.theme.light\") as string],\n [\"dark\", t(\"settings.theme.dark\") as string],\n [\"system\", t(\"settings.theme.system\") as string],\n ]}\n value={userThemeMode()}\n onChange={value =>\n updateThemePreference(value as UserThemePreference)}\n />\n </MenuItem>\n </Show>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport {\n getLanguageScore,\n LANGUAGES,\n type LanguageTag,\n useTranslation,\n} from \"../../../utils/i18n.js\";\nimport { ThemeSettings } from \"./theme.js\";\n\nexport const LanguageSettings = () => {\n const { t, languageTag, setLanguageTag } = useTranslation();\n const { settings, setLanguage } = useSettings();\n\n const sortedLanguages = createMemo(() =>\n [...LANGUAGES].sort((a, b) => {\n const scoreA = getLanguageScore(a.tag);\n const scoreB = getLanguageScore(b.tag);\n\n return scoreB - scoreA;\n }),\n );\n\n const handleLanguageChange = (value: string) => {\n const newLang = value as LanguageTag;\n\n setLanguageTag(newLang);\n setLanguage(newLang);\n };\n\n return (\n <MenuGroup title={t(\"settings.appearance\")}>\n <MenuItem label={t(\"settings.language\")}>\n <Select\n options={sortedLanguages().map(lang => [lang.tag, lang.nativeName])}\n value={\n (settings()?.language as LanguageTag | undefined) || languageTag()\n }\n onChange={handleLanguageChange}\n />\n </MenuItem>\n <ThemeSettings />\n </MenuGroup>\n );\n};\n","import { LucideCircleQuestionMark } from \"lucide-solid\";\nimport { mergeProps, type ParentProps } from \"solid-js\";\nimport type { VariantProps } from \"tailwind-variants/lite\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { match } from \"ts-pattern\";\n\nconst styles = tv({\n slots: {\n root: \"group relative\",\n box: \"cursor-pointer rounded-md transition-colors flex items-center justify-center hover:[background-color:var(--lv-control-button-tertiary-hoverBackground)] text-(--lv-text-muted)\",\n popover:\n \"-translate-x-1/2 absolute top-full left-1/2 z-10 hidden rounded-md shadow-sm group-hover:block border border-(--lv-control-button-secondary-border) bg-(--lv-body-background) px-2 py-1.5 text-(--lv-text-primary) text-sm\",\n icon: \"\",\n },\n variants: {\n size: {\n sm: {\n box: \"h-5 w-5 p-1\",\n icon: \"h-3 w-3\",\n },\n md: {\n box: \"h-6 w-6 p-1\",\n icon: \"h-4 w-4\",\n },\n lg: {\n box: \"h-8 w-8 p-1.5\",\n icon: \"h-4 w-4\",\n },\n },\n variant: {\n icon: \"\",\n text: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\nexport type InfoTooltipProps = VariantProps<typeof styles>;\n\nexport const InfoTooltip = (rawProps: ParentProps<InfoTooltipProps>) => {\n const props = mergeProps(\n { variant: \"icon\" as const, size: \"lg\" as const },\n rawProps,\n );\n const { root, box, popover, icon } = styles({\n size: props.size,\n variant: props.variant,\n });\n\n return (\n <div class={root()}>\n <div class={box()}>\n {match(props.variant)\n .with(\"icon\", () => <LucideCircleQuestionMark class={icon()} />)\n .with(\"text\", () => <div>Text</div>)\n .exhaustive()}\n </div>\n <div class={popover()}>{props.children}</div>\n </div>\n );\n};\n","import { LucideChevronRight } from \"lucide-solid\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type MenuLinkProps = {\n label: JSX.Element;\n value?: JSX.Element;\n onClick: () => void;\n};\n\nexport const MenuLink = (props: MenuLinkProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-between gap-2 first:rounded-t-sm last:rounded-b-sm px-2 py-1 first:pt-1.5 last:pb-2 hover:bg-(--lv-control-button-tertiary-hoverBackground)\"\n >\n <div class=\"text-sm text-(--lv-text-secondary) flex items-center gap-1\">\n {props.label}\n </div>\n <div class=\"flex items-center gap-1\">\n <Show when={props.value}>\n <span class=\"text-sm text-(--lv-text-muted)\">{props.value}</span>\n </Show>\n <LucideChevronRight class=\"h-4 w-4 text-(--lv-text-muted) rtl:rotate-180\" />\n </div>\n </button>\n);\n","import type { JSX } from \"solid-js\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Select } from \"./Select.js\";\n\nexport type ToggleProps = {\n label: JSX.Element;\n value: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport const Toggle = (props: ToggleProps) => {\n const { t } = useTranslation();\n\n return (\n <Select\n options={[\n [\"true\", String(t(\"common.yes\"))],\n [\"false\", String(t(\"common.no\"))],\n ]}\n value={props.value ? \"true\" : \"false\"}\n onChange={value => props.onChange(value === \"true\")}\n />\n );\n};\n","import { For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { InfoTooltip } from \"../../../ui/InfoTooltip.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { MenuLink } from \"../../../ui/menu/MenuLink.js\";\nimport { Toggle } from \"../../../ui/Toggle.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\nimport type { SettingsScreen } from \"../index.js\";\n\nexport const ConnectionPreferences = (props: {\n onNavigate: (screen: SettingsScreen) => void;\n}) => {\n const { t } = useTranslation();\n const { settings, setRetainSessionHistory, setAutoReconnect } = useSettings();\n\n return (\n <MenuGroup title={t(\"settings.connectionPreferences.title\")}>\n <MenuLink\n label={(\n <>\n {t(\"settings.signaling.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.signaling.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"signaling\")}\n value={settings()?.signaling?.p}\n />\n <MenuLink\n label={(\n <>\n {t(\"settings.transport.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.transport.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"transport\")}\n value=\"WebRTC\"\n />\n <For\n each={\n [\n [\n t(\"settings.connectionPreferences.retainSessionHistory\"),\n settings()?.retainHistory ?? false,\n setRetainSessionHistory,\n ],\n [\n t(\"settings.connectionPreferences.autoReconnect\"),\n settings()?.autoReconnect ?? false,\n setAutoReconnect,\n ],\n ] as const\n }\n >\n {([label, value, onChange]) => (\n <MenuItem label={label}>\n <Toggle label={label} value={value} onChange={onChange} />\n </MenuItem>\n )}\n </For>\n </MenuGroup>\n );\n};\n","import { Index, mergeProps, splitProps } from \"solid-js\";\n\nconst labelClasses = \"font-semibold text-xs uppercase tracking-wide\";\nconst inputClasses\n = \"h-9 w-full rounded-lg border bg-white px-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 text-(--lv-text-primary) bg-(--lv-body-background) border-(--lv-control-input-border)\";\n\ntype LabelProps = {\n htmlFor?: string;\n children: string;\n};\n\nexport const Label = (props: LabelProps) => (\n <label\n class={`${labelClasses} text-(--lv-text-secondary)`}\n for={props.htmlFor}\n >\n {props.children}\n </label>\n);\n\ntype InputProps = {\n // eslint-disable-next-line no-restricted-syntax\n id?: string;\n value: string;\n placeholder?: string;\n ariaLabel?: string;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport const Input = (props: InputProps) => {\n const merged = mergeProps({ readOnly: true }, props);\n const [local] = splitProps(merged, [\n \"id\",\n \"value\",\n \"placeholder\",\n \"ariaLabel\",\n \"readOnly\",\n \"onChange\",\n ]);\n\n return (\n <input\n // eslint-disable-next-line no-restricted-syntax\n id={local.id}\n class={inputClasses}\n value={local.value}\n placeholder={local.placeholder}\n aria-label={local.ariaLabel}\n readOnly={local.readOnly}\n onInput={(e) => {\n local.onChange?.(e.currentTarget.value);\n }}\n />\n );\n};\n\ntype InputGroupProps = {\n label: string;\n values: readonly string[];\n placeholder?: string;\n inputIdPrefix?: string;\n};\n\nexport const InputGroup = (props: InputGroupProps) => (\n <div class=\"grid gap-2\">\n <Label>{props.label}</Label>\n <Index each={props.values}>\n {(value, index) => {\n // eslint-disable-next-line no-restricted-syntax\n const id = props.inputIdPrefix\n ? `${props.inputIdPrefix}-${index}`\n : undefined;\n const suffix = props.values.length > 1 ? ` ${index + 1}` : \"\";\n\n return (\n <Input\n // eslint-disable-next-line no-restricted-syntax\n id={id}\n value={value()}\n placeholder={props.placeholder}\n ariaLabel={`${props.label}${suffix}`}\n />\n );\n }}\n </Index>\n </div>\n);\n","import { createMemo } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../../../provider/dist/storage/version.js\";\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst AVAILABLE_PROTOCOLS = [\"mqtt\", \"ntfy\", \"gun\"];\n\nexport const SignalingSettings = () => {\n const { t } = useTranslation();\n const { settings, setSignalingProtocol, setSignalingOptions }\n = useSettings();\n const signalingProtocol = createMemo(() => settings()?.signaling?.p);\n const signalingServer = createMemo(() => {\n const activeProtocol = signalingProtocol();\n\n if (!activeProtocol) return \"\";\n\n return settings()?.signaling?.s?.[activeProtocol] ?? \"\";\n });\n\n return (\n <div>\n <MenuGroup title={t(\"settings.signaling.title\")}>\n <MenuItem label={t(\"common.protocol\")}>\n <Select\n options={AVAILABLE_PROTOCOLS.map(option => [\n option.toLowerCase(),\n option.toUpperCase(),\n ])}\n value={signalingProtocol() ?? \"\"}\n onChange={value => setSignalingProtocol(value as SignalingProtocol)}\n />\n </MenuItem>\n <MenuItem label={t(\"settings.signaling.server\")}>\n <Input\n id=\"server\"\n value={signalingServer()}\n onChange={value => setSignalingOptions({ url: value })}\n placeholder={String(t(\"settings.signaling.serverUrl\"))}\n ariaLabel={String(t(\"settings.signaling.serverUrl\"))}\n readOnly={false}\n />\n </MenuItem>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.signaling.description\")}\n </div>\n </div>\n );\n};\n","import type { TurnServer } from \"@openlv/provider/storage\";\nimport { LucidePlus, LucideTrash2 } from \"lucide-solid\";\nimport type { JSX } from \"solid-js\";\nimport { createSignal, For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst ServerListItem = (props: {\n children: JSX.Element;\n onRemove: () => void;\n}) => (\n <div class=\"flex items-center gap-2\">\n <div class=\"flex-1\">{props.children}</div>\n <Button\n onClick={props.onRemove}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"sm\"\n >\n <LucideTrash2 class=\"h-4 w-4 text-(--lv-text-muted)\" />\n </Button>\n </div>\n);\n\nconst AddServerButton = (props: {\n label: JSX.Element;\n onClick: () => void;\n}) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-center gap-1 rounded-md border border-dashed border-(--lv-control-input-border) py-2 text-sm text-(--lv-text-muted) hover:bg-(--lv-card-background)\"\n >\n <LucidePlus class=\"h-4 w-4\" />\n {props.label}\n </button>\n);\n\nexport const TransportSettings = () => {\n const { t } = useTranslation();\n const {\n settings,\n setSettings,\n } = useSettings();\n\n const [turnServers, setTurnServers] = createSignal<TurnServer[]>([]);\n const [stunServers, setStunServers] = createSignal<string[]>([]);\n\n const handleAddStun = () => {\n setStunServers([...stunServers(), \"\"]);\n };\n\n const handleRemoveStun = (index: number) => {\n setStunServers(stunServers().filter((_, i) => i !== index));\n };\n\n const handleStunChange = (index: number, value: string) => {\n setStunServers(stunServers().map((server, i) => (i === index ? value : server)));\n };\n\n const handleAddTurn = () => {\n setTurnServers([...turnServers(), { urls: \"\" }]);\n };\n\n const handleRemoveTurn = (index: number) => {\n setTurnServers(turnServers().filter((_, i) => i !== index));\n };\n\n const handleTurnChange = (index: number, field: keyof TurnServer, value: string) => {\n setTurnServers(turnServers().map((server, i) => (i === index ? { ...server, [field]: value } : server)));\n };\n\n // createEffect(() => {\n // setSettings({\n // ...settings(), transport: {\n // p: \"webrtc\",\n // s: {\n // webrtc: {\n // stun: stunServers(),\n // turn: turnServers(),\n // },\n // },\n // },\n // });\n // });\n\n return (\n <>\n <MenuGroup title={t(\"settings.transport.iceServers.stun\")}>\n <div class=\"flex flex-col gap-2 p-2\">\n <For each={stunServers()}>\n {(server, index) => (\n <ServerListItem onRemove={() => handleRemoveStun(index())}>\n <Input\n value={server}\n onChange={value => handleStunChange(index(), value)}\n placeholder=\"stun:stun.l.google.com:19302\"\n readOnly={false}\n />\n </ServerListItem>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addStun\")}\n onClick={handleAddStun}\n />\n </div>\n </MenuGroup>\n\n <MenuGroup title={t(\"settings.transport.iceServers.turn\")}>\n <div class=\"flex flex-col gap-3 p-2\">\n <For each={turnServers()}>\n {(server, index) => (\n <div class=\"flex flex-col gap-2 rounded-md border border-(--lv-control-input-border) p-2\">\n <ServerListItem onRemove={() => handleRemoveTurn(index())}>\n <Input\n value={server.urls}\n onChange={value =>\n handleTurnChange(index(), \"urls\", value)}\n placeholder=\"turn:relay.example.com:443\"\n readOnly={false}\n />\n </ServerListItem>\n <div class=\"grid grid-cols-2 gap-2\">\n <Input\n value={server.username ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"username\", value)}\n placeholder=\"Username\"\n readOnly={false}\n />\n <Input\n value={server.credential ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"credential\", value)}\n placeholder=\"Password\"\n readOnly={false}\n />\n </div>\n </div>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addTurn\")}\n onClick={handleAddTurn}\n />\n </div>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.transport.description\")}\n </div>\n </>\n );\n};\n","import { createEffect } from \"solid-js\";\n\nimport { useNavigationStack } from \"../../hooks/useNavigationStack.js\";\nimport { TransitionContainer } from \"../../ui/TransitionContainer.js\";\nimport { LanguageSettings } from \"./a11y/index.js\";\nimport { ConnectionPreferences } from \"./connection/index.js\";\nimport { SignalingSettings } from \"./connection/signaling.js\";\nimport { TransportSettings } from \"./connection/transport.js\";\n\nexport type SettingsScreen = \"main\" | \"signaling\" | \"transport\";\n\nexport interface SettingsNavigationRef {\n goBack: () => void;\n isAtRoot: boolean;\n}\n\nexport interface ModalSettingsProps {\n onTitleChange?: (titleKey: string) => void;\n navigationRef?: { current: SettingsNavigationRef | null; };\n}\n\nconst getSettingsTitleKey = (screen: SettingsScreen): string => {\n switch (screen) {\n case \"main\": {\n return \"settings.title\";\n }\n case \"signaling\": {\n return \"settings.signaling.title\";\n }\n case \"transport\": {\n return \"settings.transport.title\";\n }\n }\n};\n\nexport const ModalSettings = (props: ModalSettingsProps) => {\n const {\n screen,\n previousScreen,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot,\n } = useNavigationStack<SettingsScreen>(\"main\");\n\n const internalRef: SettingsNavigationRef = {\n goBack,\n get isAtRoot() {\n return isAtRoot();\n },\n };\n\n createEffect(() => {\n if (props.navigationRef) {\n props.navigationRef.current = internalRef;\n }\n });\n\n createEffect(() => {\n props.onTitleChange?.(getSettingsTitleKey(screen()));\n });\n\n const renderScreen = (s: SettingsScreen) => {\n switch (s) {\n case \"main\": {\n return (\n <>\n <ConnectionPreferences onNavigate={navigate} />\n <LanguageSettings />\n </>\n );\n }\n case \"signaling\": {\n return <SignalingSettings />;\n }\n case \"transport\": {\n return <TransportSettings />;\n }\n }\n };\n\n return (\n <div class=\"px-4 pb-2\">\n <TransitionContainer\n current={screen()}\n previous={previousScreen()}\n isTransitioning={isTransitioning()}\n render={renderScreen}\n />\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport classNames from \"classnames\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n onMount,\n Show,\n} from \"solid-js\";\nimport { match, P } from \"ts-pattern\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { ConnectionFlow } from \"../flow/ConnectionFlow.js\";\nimport { Disconnected } from \"../flow/disconnected/Disconnected.js\";\nimport { InfoScreen } from \"../flow/InfoScreen.js\";\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { usePunchTransition } from \"../hooks/usePunchTransition.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTheme } from \"../hooks/useTheme.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Footer } from \"./footer/Footer.js\";\nimport { Header } from \"./Header.js\";\nimport { ModalSettings, type SettingsNavigationRef } from \"./settings/index.js\";\nimport { UnknownState } from \"./UnknownState.js\";\n\nexport interface ModalRootProps {\n onClose?: () => void;\n onStartConnection?: () => void;\n onCopy?: (uri: string) => void;\n}\n\nexport type ModalView = \"start\" | \"settings\" | \"info\";\n\nconst useModalState = () => {\n const [view, setView] = createSignal<ModalView>(\"start\");\n const [copied, setCopied] = createSignal(false);\n\n createEffect(() => {\n if (!copied()) return;\n\n const timeout = globalThis.setTimeout(() => setCopied(false), 2000);\n\n onCleanup(() => globalThis.clearTimeout(timeout));\n });\n\n return {\n view,\n setView,\n copied,\n setCopied,\n };\n};\n\nconst useEscapeToClose = (handler: () => void) => {\n createEffect(() => {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const keyHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") handler();\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n onCleanup(() => document.removeEventListener(\"keydown\", keyHandler));\n });\n};\n\nconst useDynamicDialogHeight = () => {\n const [contentNode, setContentNode] = createSignal<HTMLDivElement>();\n const [height, setHeight] = createSignal(0);\n\n const measureHeight = (\n targetElement?: HTMLElement | null,\n useScrollHeight = false,\n ) => {\n const node = targetElement || contentNode();\n\n if (!node || !node.getBoundingClientRect) return;\n\n const nextHeight = useScrollHeight\n ? node.scrollHeight\n : node.getBoundingClientRect().height;\n\n if (nextHeight > 0) {\n setHeight(previousHeight =>\n (typeof previousHeight === \"number\"\n && Math.abs(previousHeight - nextHeight) < 0.5\n ? previousHeight\n : nextHeight),\n );\n }\n };\n\n createEffect(() => {\n const node = contentNode();\n\n if (!node || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(() => {\n measureHeight();\n });\n\n observer.observe(node);\n\n onCleanup(() => observer.disconnect());\n });\n\n const handleResize = () => measureHeight();\n\n createEffect(() => {\n if (globalThis.window === undefined) return;\n\n window.addEventListener(\"resize\", handleResize);\n\n onCleanup(() => window.removeEventListener(\"resize\", handleResize));\n });\n\n return {\n setContentRef: setContentNode,\n contentNode,\n height,\n measureHeight,\n };\n};\n\nexport const ModalRoot = (props: { onClose: () => void; }) => {\n const { view: modalView, setView, copied, setCopied } = useModalState();\n const { uri, status } = useSession();\n const { provider } = useModalContext();\n const { setContentRef, contentNode, height, measureHeight }\n = useDynamicDialogHeight();\n const {\n current: displayedModalView,\n previous: previousModalView,\n isTransitioning: isModalViewTransitioning,\n } = usePunchTransition(modalView);\n const {\n current: displayedStatus,\n previous: previousStatus,\n isTransitioning: isStatusTransitioning,\n } = usePunchTransition(status);\n const openSettings = () => setView(\"settings\");\n const { t, isRtl, languageTag } = useTranslation();\n const theme = useTheme();\n\n const settingsNavRef: { current: SettingsNavigationRef | null; } = {\n current: null,\n };\n const [settingsTitleKey, setSettingsTitleKey]\n = createSignal(\"settings.title\");\n\n const title = createMemo(() =>\n match(modalView())\n .with(\"start\", () => t(\"start.title\"))\n .with(\"settings\", () => t(settingsTitleKey()))\n .with(\"info\", () => t(\"info.title\"))\n .exhaustive(),\n );\n\n useEscapeToClose(props.onClose);\n\n createEffect(() => {\n if (status()?.status === PROVIDER_STATUS.CONNECTED) {\n props.onClose();\n }\n });\n\n const handleCopy = async () => {\n const sessionUri = uri();\n const success = sessionUri && (await copyToClipboard(sessionUri));\n\n if (success) setCopied(true);\n };\n\n let isInitialMount = true;\n let initialMeasureTimeout: ReturnType<typeof setTimeout> | undefined;\n let previousHeight: number | undefined;\n let overflowTimeout: ReturnType<typeof setTimeout> | undefined;\n const [shouldHideOverflow, setShouldHideOverflow] = createSignal(false);\n\n createEffect(() => {\n displayedStatus();\n displayedModalView();\n const node = contentNode();\n\n if (!node) return;\n\n if (isInitialMount) {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n\n initialMeasureTimeout = globalThis.setTimeout(() => {\n if (contentNode()) {\n measureHeight(undefined, true);\n isInitialMount = false;\n }\n }, 0);\n }\n else {\n measureHeight();\n }\n\n onCleanup(() => {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n });\n });\n\n createEffect(() => {\n const currentHeight = height();\n const isHeightChanging\n = previousHeight !== undefined\n && currentHeight !== previousHeight\n && currentHeight > 0\n && previousHeight > 0\n && Math.abs(currentHeight - previousHeight) > 0.5;\n\n if (isHeightChanging) {\n setShouldHideOverflow(true);\n\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n\n overflowTimeout = globalThis.setTimeout(() => {\n setShouldHideOverflow(false);\n overflowTimeout = undefined;\n }, 200);\n }\n\n previousHeight = currentHeight;\n\n onCleanup(() => {\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n });\n });\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n const shouldShowBack = createMemo(\n () => !(modalView() === \"start\" && providerStatus() === PROVIDER_STATUS.STANDBY),\n );\n\n const onBack = () => {\n match({ view: modalView(), status: providerStatus() })\n .with({ view: \"start\", status: PROVIDER_STATUS.STANDBY }, () => undefined)\n .with({ view: \"start\" }, () => {\n provider.closeSession();\n })\n .with({ view: \"settings\" }, () => {\n if (settingsNavRef.current && !settingsNavRef.current.isAtRoot) {\n settingsNavRef.current.goBack();\n }\n else {\n setView(\"start\");\n }\n })\n .with({ view: \"info\" }, () => {\n setView(\"start\");\n })\n .otherwise(() => {\n provider.closeSession();\n props.onClose();\n });\n };\n\n const renderDisconnectedView = (targetView: ModalView): JSX.Element =>\n match(targetView)\n .with(\"start\", () => <Disconnected onSettings={openSettings} />)\n .with(\"settings\", () => (\n <ModalSettings\n onTitleChange={setSettingsTitleKey}\n navigationRef={settingsNavRef}\n />\n ))\n .with(\"info\", () => <InfoScreen />)\n .otherwise(() => <UnknownState state={targetView} />);\n\n const renderDisconnectedSection = () => (\n <div class=\"modal-transition__container\">\n <Show when={previousModalView()}>\n {previousView => (\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {renderDisconnectedView(previousView())}\n </div>\n )}\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n isModalViewTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n {renderDisconnectedView(displayedModalView())}\n </div>\n </div>\n );\n\n const renderStatusSection = (\n targetStatus: ProviderStatus,\n ): JSX.Element =>\n match(targetStatus)\n .with(PROVIDER_STATUS.STANDBY, () => renderDisconnectedSection())\n .with(\n P.union(\n PROVIDER_STATUS.CREATING,\n PROVIDER_STATUS.CONNECTING,\n PROVIDER_STATUS.CONNECTED,\n ),\n () => (\n <ConnectionFlow onClose={props.onClose} onCopy={handleCopy} />\n ),\n )\n .otherwise(state => <UnknownState state={state || \"unknown status\"} />);\n\n // todo remove this styling approach\n const overlayStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-overlay-background, rgba(0,0,0,0.3))\",\n \"backdrop-filter\": \"var(--lv-overlay-backdrop-filter, blur(4px))\",\n };\n\n // todo remove this styling approach\n const cardStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-body-background)\",\n \"color\": \"var(--lv-body-color, var(--lv-text-primary))\",\n \"border-radius\": \"var(--lv-border-radius, 16px)\",\n \"box-shadow\": \"var(--lv-modal-shadow, 0px 12px 32px rgba(0,0,0,0.25))\",\n };\n\n return (\n <div\n class=\"fixed inset-0 z-10000 flex animate-[bg-in_0.15s_ease-in-out] items-end justify-center md:items-center lg:p-4\"\n onMouseUp={(e) => {\n if (e.target === e.currentTarget) props.onClose();\n }}\n role=\"presentation\"\n data-openlv-modal-root\n data-openlv-theme-mode={theme.mode()}\n lang={languageTag()}\n dir={isRtl() ? \"rtl\" : \"ltr\"}\n style={overlayStyle}\n >\n <div\n class={classNames(\n \"relative w-full max-w-[400px] animate-[fade-in_0.15s_ease-in-out] transition-[height] duration-200 ease-out\",\n shouldHideOverflow() || previousStatus()\n ? \"overflow-hidden\"\n : undefined,\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={String(title())}\n onClick={event => event.stopPropagation()}\n style={{\n ...(typeof height() === \"number\" && height() > 0\n ? { height: `${height()}px` }\n : {}),\n ...cardStyle,\n }}\n >\n <div ref={setContentRef}>\n <Header\n title={String(title())}\n view={modalView()}\n onClose={props.onClose}\n onBack={shouldShowBack() ? onBack : undefined}\n setView={setView}\n />\n <div class=\"modal-transition__container\">\n <div\n class={classNames(\n \"modal-transition__layer\",\n isStatusTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n <div class=\"flex flex-col text-center\">\n {renderStatusSection(providerStatus())}\n </div>\n </div>\n </div>\n <Footer />\n </div>\n\n <div\n class={classNames(\n \"absolute top-5 rounded-lg bg-blue-500 px-4 py-3 font-medium text-sm text-white transition-all ltr:right-5 rtl:left-5\",\n copied()\n ? \"translate-x-0 opacity-100\"\n : \"opacity-0 ltr:translate-x-full rtl:-translate-x-full\",\n )}\n >\n {t(\"modal.urlCopied\")}\n </div>\n </div>\n </div>\n );\n};\n","export const log = (...x: Parameters<typeof console.log>) =>\n console.log(\n \"%c[modal]%c\",\n \"color: yellow; font-weight: bold\",\n \"color: inherit; font-weight: normal\",\n ...x,\n );\n","\n/** biome-ignore-all lint/performance/noBarrelFile: package entrypoint */\n/** biome-ignore-all lint/performance/noReExportAll: package entrypoint */\n/** biome-ignore-all lint/suspicious/noConsole: temp */\n\nexport { ModalRoot } from \"./components/ModalRoot.js\";\nexport { default, OpenLVModalElement, type OpenLVModalElementProps } from \"./element.js\";\nexport type { ThemeConfig } from \"./theme/index.js\";\n\nimport OpenLVModalElementDefault, {\n type OpenLVModalElementProps,\n} from \"./element.js\";\nimport { log } from \"./utils/log.js\";\nexport { OPENLV_ICON_128 } from \"./assets/logo.js\";\n\nexport const registerOpenLVModal = (tagName = \"openlv-modal\") => {\n if (globalThis.window === undefined) {\n return tagName;\n }\n\n const registry = globalThis.customElements;\n\n if (!registry) {\n console.warn(\n \"OpenLV modal: custom elements are not supported in this environment.\",\n );\n\n return tagName;\n }\n\n if (!registry.get(tagName)) {\n registry.define(\n tagName,\n OpenLVModalElementDefault as unknown as CustomElementConstructor,\n );\n }\n\n return tagName;\n};\n\nexport const triggerOpenModal = (props: OpenLVModalElementProps) => {\n const modal = document.querySelector(\"openlv-modal\");\n\n if (modal) modal.remove();\n\n if (!modal) {\n registerOpenLVModal();\n const x = new OpenLVModalElementDefault({\n onClose() {\n log(\"modal closed\");\n x.remove();\n props.onClose?.();\n },\n provider: props.provider,\n theme: props.theme,\n });\n\n document.body.append(x);\n // x.showModal();\n }\n};\n\nexport type TriggerOpenModal = typeof triggerOpenModal;\n"],"names":["IS_DEV","equalFn","a","b","$PROXY","SUPPORTS_PROXY","$TRACK","signalOptions","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createRoot","fn","detachedOwner","listener","owner","unowned","current","root","updateFn","untrack","cleanNode","runUpdates","createSignal","value","options","s","setter","writeSignal","readSignal","createRenderEffect","c","createComputation","updateComputation","createEffect","runUserEffects","createMemo","onMount","onCleanup","createContext","defaultValue","id","createProvider","useContext","context","children","memo","resolveChildren","updates","lookUpstream","sSlot","node","isComp","i","o","TransitionRunning","markDownstream","time","runComputation","nextValue","err","handleError","init","pure","state","runTop","ancestors","wait","res","completeUpdates","e","queue","userLength","ignore","source","index","obs","n","castError","results","result","props","FALLBACK","dispose","d","mapArray","list","mapFn","items","mapped","disposers","len","indexes","newItems","newLen","j","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","createComponent","Comp","trueFn","propTraps","_","property","receiver","resolveSource","resolveSources","length","v","mergeProps","sources","proxy","keys","sourcesMap","defined","sourceKeys","key","desc","target","definedKeys","splitProps","blocked","k","objects","propName","keyIndex","narrowedError","name","For","fallback","Show","keyed","conditionValue","condition","child","Switch","chs","switchFunc","ch","mps","func","mp","prevFunc","sel","Match","booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","DelegatedEvents","SVGElements","SVGNamespace","reconcileArrays","parentNode","bLength","aEnd","bEnd","aStart","bStart","after","map","sequence","t","$$EVENTS","render","code","element","insert","template","html","isImportNode","isSVG","isMathML","create","delegateEvents","eventNames","document","l","eventHandler","setAttribute","setAttributeNS","namespace","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","toggleClassKey","classValue","style","nodeStyle","spread","skipChildren","prevProps","insertExpression","use","assign","arg","parent","accessor","marker","initial","skipRef","assignProp","toPropertyName","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","ns","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","is","createDynamic","component","cached","isSvg","Dynamic","others","OPENLV_PROTOCOL_VERSION","encodeConnectionURL","payload","params","has","prefix","Events","EE","once","addListener","emitter","event","evt","clearEvent","EventEmitter","names","events","handlers","ee","listeners","a1","a2","a3","a4","a5","args","module","r","u","y","f","g","m","p","S","K","O","E","x","A","N","P","T","B","W","$","z","I","L","M","R","F","SESSION_STATE","PROVIDER_STATUS","hasOwn","classes","appendClass","parseValue","newClass","importOrPassthrough","theme","then","simpleTheme","openlvTheme","Error","isPlainObject","Array","isArray","flattenToCssVars","obj","out","Object","entries","join","resolveMode","appThemeMode","userTheme","globalThis","matchMedia","matches","deepMerge","base","overlay","baseValue","overlayValue","buildTheme","config","resolvedMode","mode","variant","mergedVariant","common","flattened","updateStyles","shadowRoot","themeConfig","themeStr","cssContent","OpenLVModalElement","HTMLElement","constructor","parameters","shadow","renderRequested","themeCleanup","disposeRender","attachShadow","initialUserTheme","provider","storage","getSettings","connectedCallback","requestRender","setupThemeListener","disconnectedCallback","undefined","update","on","mediaQuery","off","removeEventListener","showModal","display","hideModal","queueMicrotask","performRender","_self$","_$createComponent","ModalProvider","_$mergeProps","LANGUAGES","tag","nativeName","rtl","isRtlLanguage","find","Set","getLanguageScore","navigator","languages","language","browserLang","toLowerCase","startsWith","baseLang","split","resolveNestedValue","segments","filter","Boolean","segment","interpolate","replaceAll","matchText","String","resolveTranslation","fromPrimary","primary","fromFallback","TranslationContext","loadLanguagePack","languageTag","match","with","Promise","resolve","default","exhaustive","TranslationProvider","useModalContext","initialLanguageTag","setLanguageTag","languagePack","setLanguagePack","isLoadingLanguagePack","setIsLoadingLanguagePack","cancelled","nextPack","run","translated","fallbackEnglish","lines","_$memo","line","_tmpl$","isRtl","contextValue","nextLanguageTag","Provider","useTranslation","ModalContext","ModalRoot","onClose","useSession","session","status","setStatus","handleStateChange","handshakeParameters","useSessionStart","currentSettings","UnknownState","uri","console","error","_el$","_el$2","firstChild","_el$4","nextSibling","_el$6","_$insert","JSON","stringify","copyToClipboard","text","textArea","generateQRCode","uriValue","QR","QRCode","qr","addData","make","createSvgTag","cellSize","margin","scalable","HandshakeOpen","handleCopy","sessionUri","_el$3","_el$5","when","_el$7","_tmpl$2","_el$8","$$click","_$effect","_p$","_v$","_v$2","_$setAttribute","innerHTML","_$delegateEvents","LoadingSpinner","Connecting","_tmpl$3","CREATED","SIGNALING","includes","READY","LINKING","_el$9","_el$0","ConnectionFlow","providerStatus","setProviderStatus","getState","_tmpl$5","CREATING","CONNECTING","CONNECTED","_el$1","ERROR","_el$10","_tmpl$4","_el$11","_el$12","_el$13","_el$14","_el$15","_$addEventListener","defaultAttributes","xmlns","width","height","viewBox","fill","stroke","defaultAttributes_default","Icon","localProps","rest","_$spread","size","color","absoluteStrokeWidth","Number","strokeWidth","mergeClasses","toKebabCase","toPascalCase","class","hasA11yProp","each","iconNode","elementName","attrs","Icon_default","ChevronLeft","chevron_left_default","ChevronRight","chevron_right_default","cx","cy","CircleQuestionMark","circle_question_mark_default","Plus","plus_default","rx","QrCode","qr_code_default","Settings","settings_default","Trash2","trash_2_default","X","x_default","SPACE_REGEX","removeExtraSpaces","str","classnames","buildClassString","input","type","falsyToString","isEmptyObject","isEqual","obj1","obj2","keys1","keys2","joinObjects","val2","flat","arr","flatMergeArrays","arrays","filtered","mergeObjects","val1","defaultConfig","createState","cachedTwMerge","cachedTwMergeConfig","didTwMergeConfigChange","getTailwindVariants","cn","tv","configProp","extend","slotProps","variantsProps","compoundVariantsProps","compoundSlots","defaultVariantsProps","variants","defaultVariants","isExtendedSlotsEmpty","componentSlots","slots","compoundVariants","getVariantValue","vrs","_slotKey","slotProps2","variantObj","variantProp","variantKey","defaultVariantProp","getVariantClassNames","getVariantClassNamesBySlotKey","slotKey","variantValue","propsWithoutUndefined","getCompleteProps","initialProp","getCompoundVariantsValue","cv","cvLength","tvClass","tvClassName","compoundVariantOptions","isValid","completeProps","completePropsValue","getCompoundVariantClassNamesBySlot","compoundClassNames","cnFn","slot","getCompoundSlotClassNameBySlot","slots2","slotClass","slotClassName","slotVariants","slotVariantValue","slotName","slotsFns","compoundVariantClasses","compoundSlotClasses","getVariantKeys","cnAdapter","_config","styles","$variant","secondary","tertiary","$size","sm","md","lg","$aspect","square","auto","Button","rawProps","local","href","onClick","dotCount","isApple","TabletGraphic","from","PhoneGraphic","ConnectionGraphic","Disconnected","onSettings","LucideSettings","InfoScreen","LucideQrCode","usePunchTransition","duration","readValue","initialValue","setCurrent","previous","setPrevious","timeoutRef","lastValueRef","useSettings","settings","setLocalSettings","setSettings","newSettings","themeMode","retain","autoReconnect","useTheme","OPENLV_ICON_128","FooterStatus","sessionStatus","sessionState","signalState","signaling","icon","otherwise","resolved","Footer","Header","_c$","onBack","view","LucideChevronLeft","setView","LucideCircleQuestionMark","title","LucideX","useNavigationStack","initialScreen","transitionDuration","stack","setStack","setIndex","screen","isTransitioning","nextScreen","activeIndex","activeStack","currentScreen","nextStack","currentIndex","TransitionContainer","_$className","MenuGroup","right","MenuItem","label","buttonGroupStyles","box","active","dropdownStyles","Select","dropdown","dropdownThreshold","slug","onChange","currentTarget","ThemeSettings","isUserConfigurable","userThemeMode","updateThemePreference","LanguageSettings","setLanguage","sortedLanguages","sort","scoreA","handleLanguageChange","newLang","lang","popover","InfoTooltip","_v$3","MenuLink","LucideChevronRight","Toggle","ConnectionPreferences","setRetainSessionHistory","setAutoReconnect","onNavigate","retainHistory","Input","merged","readOnly","$$input","placeholder","ariaLabel","_v$4","AVAILABLE_PROTOCOLS","SignalingSettings","setSignalingProtocol","setSignalingOptions","signalingProtocol","signalingServer","activeProtocol","option","toUpperCase","url","ServerListItem","onRemove","LucideTrash2","AddServerButton","LucidePlus","TransportSettings","turnServers","setTurnServers","stunServers","setStunServers","handleAddStun","handleRemoveStun","handleStunChange","server","handleAddTurn","urls","handleRemoveTurn","handleTurnChange","field","_tmpl$6","username","credential","getSettingsTitleKey","ModalSettings","previousScreen","navigate","goBack","isAtRoot","internalRef","navigationRef","onTitleChange","renderScreen","useModalState","copied","setCopied","timeout","setTimeout","clearTimeout","useEscapeToClose","keyHandler","useDynamicDialogHeight","contentNode","setContentNode","setHeight","measureHeight","targetElement","useScrollHeight","getBoundingClientRect","nextHeight","scrollHeight","previousHeight","Math","abs","ResizeObserver","observer","observe","disconnect","handleResize","window","setContentRef","modalView","displayedModalView","previousModalView","isModalViewTransitioning","displayedStatus","previousStatus","isStatusTransitioning","openSettings","settingsNavRef","settingsTitleKey","setSettingsTitleKey","isInitialMount","initialMeasureTimeout","overflowTimeout","shouldHideOverflow","setShouldHideOverflow","currentHeight","shouldShowBack","STANDBY","closeSession","renderDisconnectedView","targetView","renderDisconnectedSection","previousView","renderStatusSection","targetStatus","union","onCopy","overlayStyle","cardStyle","$$mouseup","_$style","stopPropagation","_$use","_v$5","_v$6","_v$7","_v$8","log","registerOpenLVModal","registry","OpenLVModalElementDefault","triggerOpenModal","modal"],"mappings":"wlBAiJMA,GAAS,GACTC,GAAU,CAACC,EAAGC,IAAMD,IAAMC,EAC1BC,GAAS,OAAO,aAAa,EAC7BC,GAAiB,OAAO,OAAU,WAClCC,GAAS,OAAO,aAAa,EAE7BC,GAAgB,CACpB,OAAQN,EACV,EAEA,IAAIO,GAAaC,GACjB,MAAMC,GAAQ,EACRC,GAAU,EACVC,GAAU,CACd,MAAO,KACP,SAAU,KACV,QAAS,KACT,MAAO,IACT,EAEA,IAAIC,EAAQ,KACZ,IAAIC,GAAa,KAEbC,GAAuB,KACvBC,EAAW,KACXC,EAAU,KACVC,GAAU,KACVC,GAAY,EAChB,SAASC,GAAWC,EAAIC,EAAe,CACrC,MAAMC,EAAWP,EACfQ,EAAQX,EACRY,EAAUJ,EAAG,SAAW,EACxBK,EAAUJ,IAAkB,OAAYE,EAAQF,EAChDK,EAAOF,EAAUb,GAAU,CACzB,MAAO,KACP,SAAU,KACV,QAASc,EAAUA,EAAQ,QAAU,KACrC,MAAOA,CACb,EACIE,EAAWH,EAAUJ,EAAK,IAAMA,EAAG,IAAMQ,EAAQ,IAAMC,GAAUH,CAAI,CAAC,CAAC,EACzEd,EAAQc,EACRX,EAAW,KACX,GAAI,CACF,OAAOe,GAAWH,EAAU,EAAI,CAClC,QAAC,CACCZ,EAAWO,EACXV,EAAQW,CACV,CACF,CACA,SAASQ,EAAaC,EAAOC,EAAS,CACpCA,EAAUA,EAAU,OAAO,OAAO,CAAA,EAAI3B,GAAe2B,CAAO,EAAI3B,GAChE,MAAM4B,EAAI,CACR,MAAAF,EACA,UAAW,KACX,cAAe,KACf,WAAYC,EAAQ,QAAU,MAClC,EACQE,EAASH,IACT,OAAOA,GAAU,aAC6EA,EAAQA,EAAME,EAAE,KAAK,GAEhHE,GAAYF,EAAGF,CAAK,GAE7B,MAAO,CAACK,GAAW,KAAKH,CAAC,EAAGC,CAAM,CACpC,CAKA,SAASG,EAAmBlB,EAAIY,EAAOC,EAAS,CAC9C,MAAMM,EAAIC,GAAkBpB,EAAIY,EAAO,GAAOvB,EAAK,EACqBgC,GAAkBF,CAAC,CAC7F,CACA,SAASG,GAAatB,EAAIY,EAAOC,EAAS,CACxC1B,GAAaoC,GACR,MAACJ,EAAIC,GAAkBpB,EAAIY,EAAO,GAAOvB,EAAK,EAGlB8B,EAAE,KAAO,GAC1CtB,GAAUA,GAAQ,KAAKsB,CAAC,EAAIE,GAAkBF,CAAC,CACjD,CAeA,SAASK,EAAWxB,EAAIY,EAAOC,EAAS,CACtCA,EAAUA,EAAU,OAAO,OAAO,CAAA,EAAI3B,GAAe2B,CAAO,EAAI3B,GAChE,MAAMiC,EAAIC,GAAkBpB,EAAIY,EAAO,GAAM,CAAC,EAC9C,OAAAO,EAAE,UAAY,KACdA,EAAE,cAAgB,KAClBA,EAAE,WAAaN,EAAQ,QAAU,OAI1BQ,GAAkBF,CAAC,EACnBF,GAAW,KAAKE,CAAC,CAC1B,CAkMA,SAASX,EAAQR,EAAI,CACnB,GAA6BL,IAAa,KAAM,OAAOK,EAAE,EACzD,MAAME,EAAWP,EACjBA,EAAW,KACX,GAAI,CAEF,OAAOK,EAAE,CACX,QAAC,CACCL,EAAWO,CACb,CACF,CAoBA,SAASuB,GAAQzB,EAAI,CACnBsB,GAAa,IAAMd,EAAQR,CAAE,CAAC,CAChC,CACA,SAAS0B,GAAU1B,EAAI,CACrB,OAAIR,IAAU,OAAgBA,EAAM,WAAa,KAAMA,EAAM,SAAW,CAACQ,CAAE,EAAOR,EAAM,SAAS,KAAKQ,CAAE,GACjGA,CACT,CA4EA,SAAS2B,GAAcC,EAAcf,EAAS,CAC5C,MAAMgB,EAAK,OAAO,SAAS,EAC3B,MAAO,CACL,GAAAA,EACA,SAAUC,GAAeD,CAAE,EAC3B,aAAAD,CACJ,CACA,CACA,SAASG,GAAWC,EAAS,CAC3B,IAAIpB,EACJ,OAAOpB,GAASA,EAAM,UAAYoB,EAAQpB,EAAM,QAAQwC,EAAQ,EAAE,KAAO,OAAYpB,EAAQoB,EAAQ,YACvG,CACA,SAASC,GAASjC,EAAI,CACpB,MAAMiC,EAAWT,EAAWxB,CAAE,EACxBkC,EAAOV,EAAW,IAAMW,GAAgBF,EAAQ,CAAE,CAAC,EACzD,OAAAC,EAAK,QAAU,IAAM,CACnB,MAAMf,EAAIe,EAAI,EACd,OAAO,MAAM,QAAQf,CAAC,EAAIA,EAAIA,GAAK,KAAO,CAACA,CAAC,EAAI,CAAA,CAClD,EACOe,CACT,CAgCA,SAASjB,IAAa,CAEpB,GAAI,KAAK,SAA8C,KAAK,MAC1D,GAAuC,KAAK,QAAW5B,GAAOgC,GAAkB,IAAI,MAAO,CACzF,MAAMe,EAAUxC,EAChBA,EAAU,KACVc,GAAW,IAAM2B,GAAa,IAAI,EAAG,EAAK,EAC1CzC,EAAUwC,CACZ,CAEF,GAAIzC,EAAU,CACZ,MAAM2C,EAAQ,KAAK,UAAY,KAAK,UAAU,OAAS,EAClD3C,EAAS,SAIZA,EAAS,QAAQ,KAAK,IAAI,EAC1BA,EAAS,YAAY,KAAK2C,CAAK,IAJ/B3C,EAAS,QAAU,CAAC,IAAI,EACxBA,EAAS,YAAc,CAAC2C,CAAK,GAK1B,KAAK,WAIR,KAAK,UAAU,KAAK3C,CAAQ,EAC5B,KAAK,cAAc,KAAKA,EAAS,QAAQ,OAAS,CAAC,IAJnD,KAAK,UAAY,CAACA,CAAQ,EAC1B,KAAK,cAAgB,CAACA,EAAS,QAAQ,OAAS,CAAC,EAKrD,CAEA,OAAO,KAAK,KACd,CACA,SAASqB,GAAYuB,EAAM3B,EAAO4B,EAAQ,CACxC,IAAInC,EAA2FkC,EAAK,MACpG,OAAI,CAACA,EAAK,YAAc,CAACA,EAAK,WAAWlC,EAASO,CAAK,KAQ9C2B,EAAK,MAAQ3B,EAChB2B,EAAK,WAAaA,EAAK,UAAU,QACnC7B,GAAW,IAAM,CACf,QAAS+B,EAAI,EAAGA,EAAIF,EAAK,UAAU,OAAQE,GAAK,EAAG,CACjD,MAAMC,EAAIH,EAAK,UAAUE,CAAC,EACpBE,EAAoBlD,IAAcA,GAAW,QAC/CkD,GAAqBlD,GAAW,SAAS,IAAIiD,CAAC,GAC9CC,EAAoB,CAACD,EAAE,OAAS,CAACA,EAAE,SACjCA,EAAE,KAAM9C,EAAQ,KAAK8C,CAAC,EAAO7C,GAAQ,KAAK6C,CAAC,EAC3CA,EAAE,WAAWE,GAAeF,CAAC,GAE9BC,IAAmBD,EAAE,MAAQrD,GACpC,CACA,GAAIO,EAAQ,OAAS,IACnB,MAAAA,EAAU,CAAA,EAEJ,IAAI,KAEd,EAAG,EAAK,GAGLgB,CACT,CACA,SAASS,GAAkBkB,EAAM,CAC/B,GAAI,CAACA,EAAK,GAAI,OACd9B,GAAU8B,CAAI,EACd,MAAMM,EAAO/C,GACbgD,GAAeP,EAAuFA,EAAK,MAAOM,CAAI,CAWxH,CACA,SAASC,GAAeP,EAAM3B,EAAOiC,EAAM,CACzC,IAAIE,EACJ,MAAM5C,EAAQX,EACZU,EAAWP,EACbA,EAAWH,EAAQ+C,EACnB,GAAI,CACFQ,EAAYR,EAAK,GAAG3B,CAAK,CAC3B,OAASoC,EAAK,CACZ,OAAIT,EAAK,OAMLA,EAAK,MAAQlD,GACbkD,EAAK,OAASA,EAAK,MAAM,QAAQ9B,EAAS,EAC1C8B,EAAK,MAAQ,MAGjBA,EAAK,UAAYM,EAAO,EACjBI,GAAYD,CAAG,CACxB,QAAC,CACCrD,EAAWO,EACXV,EAAQW,CACV,EACI,CAACoC,EAAK,WAAaA,EAAK,WAAaM,KACnCN,EAAK,WAAa,MAAQ,cAAeA,EAC3CvB,GAAYuB,EAAMQ,CAAe,EAI5BR,EAAK,MAAQQ,EACpBR,EAAK,UAAYM,EAErB,CACA,SAASzB,GAAkBpB,EAAIkD,EAAMC,EAAMC,EAAQ/D,GAAOwB,EAAS,CACjE,MAAMM,EAAI,CACR,GAAAnB,EACA,MAAOoD,EACP,UAAW,KACX,MAAO,KACP,QAAS,KACT,YAAa,KACb,SAAU,KACV,MAAOF,EACP,MAAO1D,EACP,QAASA,EAAQA,EAAM,QAAU,KACjC,KAAA2D,CACJ,EAKE,OAAI3D,IAAU,MAAgBA,IAAUD,KAI/BC,EAAM,MAA8BA,EAAM,MAAM,KAAK2B,CAAC,EAAzC3B,EAAM,MAAQ,CAAC2B,CAAC,GAgB/BA,CACT,CACA,SAASkC,GAAOd,EAAM,CAEpB,GAAuCA,EAAK,QAAW,EAAG,OAC1D,GAAuCA,EAAK,QAAWjD,GAAS,OAAO+C,GAAaE,CAAI,EACxF,GAAIA,EAAK,UAAY/B,EAAQ+B,EAAK,SAAS,UAAU,EAAG,OAAOA,EAAK,SAAS,QAAQ,KAAKA,CAAI,EAC9F,MAAMe,EAAY,CAACf,CAAI,EACvB,MAAQA,EAAOA,EAAK,SAAW,CAACA,EAAK,WAAaA,EAAK,UAAYzC,KAE3ByC,EAAK,OAAOe,EAAU,KAAKf,CAAI,EAEvE,QAASE,EAAIa,EAAU,OAAS,EAAGb,GAAK,EAAGA,IASzC,GARAF,EAAOe,EAAUb,CAAC,EAQqBF,EAAK,QAAWlD,GACrDgC,GAAkBkB,CAAI,UACsBA,EAAK,QAAWjD,GAAS,CACrE,MAAM8C,EAAUxC,EAChBA,EAAU,KACVc,GAAW,IAAM2B,GAAaE,EAAMe,EAAU,CAAC,CAAC,EAAG,EAAK,EACxD1D,EAAUwC,CACZ,CAEJ,CACA,SAAS1B,GAAWV,EAAIkD,EAAM,CAC5B,GAAItD,EAAS,OAAOI,EAAE,EACtB,IAAIuD,EAAO,GACNL,IAAMtD,EAAU,CAAA,GACjBC,GAAS0D,EAAO,GAAU1D,GAAU,CAAA,EACxCC,KACA,GAAI,CACF,MAAM0D,EAAMxD,EAAE,EACd,OAAAyD,GAAgBF,CAAI,EACbC,CACT,OAASR,EAAK,CACPO,IAAM1D,GAAU,MACrBD,EAAU,KACVqD,GAAYD,CAAG,CACjB,CACF,CACA,SAASS,GAAgBF,EAAM,CAK7B,GAJI3D,IAC6ER,GAASQ,CAAO,EAC/FA,EAAU,MAER2D,EAAM,OAmCV,MAAMG,EAAI7D,GACVA,GAAU,KACN6D,EAAE,QAAQhD,GAAW,IAAMvB,GAAWuE,CAAC,EAAG,EAAK,CAErD,CACA,SAAStE,GAASuE,EAAO,CACvB,QAASlB,EAAI,EAAGA,EAAIkB,EAAM,OAAQlB,IAAKY,GAAOM,EAAMlB,CAAC,CAAC,CACxD,CAkBA,SAASlB,GAAeoC,EAAO,CAC7B,IAAIlB,EACFmB,EAAa,EACf,IAAKnB,EAAI,EAAGA,EAAIkB,EAAM,OAAQlB,IAAK,CACjC,MAAMiB,EAAIC,EAAMlB,CAAC,EACZiB,EAAE,KAAqBC,EAAMC,GAAY,EAAIF,EAArCL,GAAOK,CAAC,CACvB,CAcA,IAAKjB,EAAI,EAAGA,EAAImB,EAAYnB,IAAKY,GAAOM,EAAMlB,CAAC,CAAC,CAClD,CACA,SAASJ,GAAaE,EAAMsB,EAAQ,CAEUtB,EAAK,MAAQ,EACzD,QAASE,EAAI,EAAGA,EAAIF,EAAK,QAAQ,OAAQE,GAAK,EAAG,CAC/C,MAAMqB,EAASvB,EAAK,QAAQE,CAAC,EAC7B,GAAIqB,EAAO,QAAS,CAClB,MAAMV,EAA4CU,EAAO,MACrDV,IAAU/D,GACRyE,IAAWD,IAAW,CAACC,EAAO,WAAaA,EAAO,UAAYhE,KAAYuD,GAAOS,CAAM,EAClFV,IAAU9D,IAAS+C,GAAayB,EAAQD,CAAM,CAC3D,CACF,CACF,CACA,SAASjB,GAAeL,EAAM,CAE5B,QAASE,EAAI,EAAGA,EAAIF,EAAK,UAAU,OAAQE,GAAK,EAAG,CACjD,MAAMC,EAAIH,EAAK,UAAUE,CAAC,EACWC,EAAE,QACUA,EAAE,MAAQpD,GACrDoD,EAAE,KAAM9C,EAAQ,KAAK8C,CAAC,EAAO7C,GAAQ,KAAK6C,CAAC,EAC/CA,EAAE,WAAaE,GAAeF,CAAC,EAEnC,CACF,CACA,SAASjC,GAAU8B,EAAM,CACvB,IAAIE,EACJ,GAAIF,EAAK,QACP,KAAOA,EAAK,QAAQ,QAAQ,CAC1B,MAAMuB,EAASvB,EAAK,QAAQ,IAAG,EAC7BwB,EAAQxB,EAAK,YAAY,IAAG,EAC5ByB,EAAMF,EAAO,UACf,GAAIE,GAAOA,EAAI,OAAQ,CACrB,MAAMC,EAAID,EAAI,IAAG,EACf,EAAIF,EAAO,cAAc,IAAG,EAC1BC,EAAQC,EAAI,SACdC,EAAE,YAAY,CAAC,EAAIF,EACnBC,EAAID,CAAK,EAAIE,EACbH,EAAO,cAAcC,CAAK,EAAI,EAElC,CACF,CAEF,GAAIxB,EAAK,OAAQ,CACf,IAAKE,EAAIF,EAAK,OAAO,OAAS,EAAGE,GAAK,EAAGA,IAAKhC,GAAU8B,EAAK,OAAOE,CAAC,CAAC,EACtE,OAAOF,EAAK,MACd,CAGO,GAAIA,EAAK,MAAO,CACrB,IAAKE,EAAIF,EAAK,MAAM,OAAS,EAAGE,GAAK,EAAGA,IAAKhC,GAAU8B,EAAK,MAAME,CAAC,CAAC,EACpEF,EAAK,MAAQ,IACf,CACA,GAAIA,EAAK,SAAU,CACjB,IAAKE,EAAIF,EAAK,SAAS,OAAS,EAAGE,GAAK,EAAGA,IAAKF,EAAK,SAASE,CAAC,EAAC,EAChEF,EAAK,SAAW,IAClB,CAC2DA,EAAK,MAAQ,CAC1E,CAUA,SAAS2B,GAAUlB,EAAK,CACtB,OAAIA,aAAe,MAAcA,EAC1B,IAAI,MAAM,OAAOA,GAAQ,SAAWA,EAAM,gBAAiB,CAChE,MAAOA,CACX,CAAG,CACH,CAQA,SAASC,GAAYD,EAAK7C,EAAQX,EAAO,CAG7B,MADI0E,GAAUlB,CAAG,CAQ7B,CACA,SAASb,GAAgBF,EAAU,CACjC,GAAI,OAAOA,GAAa,YAAc,CAACA,EAAS,OAAQ,OAAOE,GAAgBF,GAAU,EACzF,GAAI,MAAM,QAAQA,CAAQ,EAAG,CAC3B,MAAMkC,EAAU,CAAA,EAChB,QAAS1B,EAAI,EAAGA,EAAIR,EAAS,OAAQQ,IAAK,CACxC,MAAM2B,EAASjC,GAAgBF,EAASQ,CAAC,CAAC,EAC1C,MAAM,QAAQ2B,CAAM,EAAID,EAAQ,KAAK,MAAMA,EAASC,CAAM,EAAID,EAAQ,KAAKC,CAAM,CACnF,CACA,OAAOD,CACT,CACA,OAAOlC,CACT,CACA,SAASH,GAAeD,EAAIhB,EAAS,CACnC,OAAO,SAAkBwD,EAAO,CAC9B,IAAIb,EACJ,OAAAtC,EAAmB,IAAMsC,EAAMhD,EAAQ,KACrChB,EAAM,QAAU,CACd,GAAGA,EAAM,QACT,CAACqC,CAAE,EAAGwC,EAAM,KACpB,EACapC,GAAS,IAAMoC,EAAM,QAAQ,EACrC,EAAG,MAAS,EACNb,CACT,CACF,CAuEA,MAAMc,GAAW,OAAO,UAAU,EAClC,SAASC,GAAQC,EAAG,CAClB,QAAS/B,EAAI,EAAGA,EAAI+B,EAAE,OAAQ/B,IAAK+B,EAAE/B,CAAC,EAAC,CACzC,CACA,SAASgC,GAASC,EAAMC,EAAO9D,EAAU,CAAA,EAAI,CAC3C,IAAI+D,EAAQ,CAAA,EACVC,EAAS,CAAA,EACTC,EAAY,CAAA,EACZC,EAAM,EACNC,EAAUL,EAAM,OAAS,EAAI,CAAA,EAAK,KACpC,OAAAjD,GAAU,IAAM6C,GAAQO,CAAS,CAAC,EAC3B,IAAM,CACX,IAAIG,EAAWP,EAAI,GAAM,CAAA,EACvBQ,EAASD,EAAS,OAClBxC,EACA0C,EACF,OAAAF,EAAShG,EAAM,EACRuB,EAAQ,IAAM,CACnB,IAAI4E,EAAYC,EAAgBC,EAAMC,EAAeC,EAAaC,EAAOC,EAAKC,EAAQC,EACtF,GAAIV,IAAW,EACTH,IAAQ,IACVR,GAAQO,CAAS,EACjBA,EAAY,CAAA,EACZF,EAAQ,CAAA,EACRC,EAAS,CAAA,EACTE,EAAM,EACNC,IAAYA,EAAU,KAEpBnE,EAAQ,WACV+D,EAAQ,CAACN,EAAQ,EACjBO,EAAO,CAAC,EAAI9E,GAAW8F,KACrBf,EAAU,CAAC,EAAIe,GACRhF,EAAQ,SAAQ,EACxB,EACDkE,EAAM,WAGDA,IAAQ,EAAG,CAElB,IADAF,EAAS,IAAI,MAAMK,CAAM,EACpBC,EAAI,EAAGA,EAAID,EAAQC,IACtBP,EAAMO,CAAC,EAAIF,EAASE,CAAC,EACrBN,EAAOM,CAAC,EAAIpF,GAAW+F,CAAM,EAE/Bf,EAAMG,CACR,KAAO,CAIL,IAHAI,EAAO,IAAI,MAAMJ,CAAM,EACvBK,EAAgB,IAAI,MAAML,CAAM,EAChCF,IAAYQ,EAAc,IAAI,MAAMN,CAAM,GACrCO,EAAQ,EAAGC,EAAM,KAAK,IAAIX,EAAKG,CAAM,EAAGO,EAAQC,GAAOd,EAAMa,CAAK,IAAMR,EAASQ,CAAK,EAAGA,IAAQ,CACtG,IAAKC,EAAMX,EAAM,EAAGY,EAAST,EAAS,EAAGQ,GAAOD,GAASE,GAAUF,GAASb,EAAMc,CAAG,IAAMT,EAASU,CAAM,EAAGD,IAAOC,IAClHL,EAAKK,CAAM,EAAId,EAAOa,CAAG,EACzBH,EAAcI,CAAM,EAAIb,EAAUY,CAAG,EACrCV,IAAYQ,EAAYG,CAAM,EAAIX,EAAQU,CAAG,GAI/C,IAFAN,EAAa,IAAI,IACjBC,EAAiB,IAAI,MAAMM,EAAS,CAAC,EAChCR,EAAIQ,EAAQR,GAAKM,EAAON,IAC3BS,EAAOX,EAASE,CAAC,EACjB1C,EAAI2C,EAAW,IAAIQ,CAAI,EACvBP,EAAeF,CAAC,EAAI1C,IAAM,OAAY,GAAKA,EAC3C2C,EAAW,IAAIQ,EAAMT,CAAC,EAExB,IAAK1C,EAAIgD,EAAOhD,GAAKiD,EAAKjD,IACxBmD,EAAOhB,EAAMnC,CAAC,EACd0C,EAAIC,EAAW,IAAIQ,CAAI,EACnBT,IAAM,QAAaA,IAAM,IAC3BG,EAAKH,CAAC,EAAIN,EAAOpC,CAAC,EAClB8C,EAAcJ,CAAC,EAAIL,EAAUrC,CAAC,EAC9BuC,IAAYQ,EAAYL,CAAC,EAAIH,EAAQvC,CAAC,GACtC0C,EAAIE,EAAeF,CAAC,EACpBC,EAAW,IAAIQ,EAAMT,CAAC,GACjBL,EAAUrC,CAAC,EAAC,EAErB,IAAK0C,EAAIM,EAAON,EAAID,EAAQC,IACtBA,KAAKG,GACPT,EAAOM,CAAC,EAAIG,EAAKH,CAAC,EAClBL,EAAUK,CAAC,EAAII,EAAcJ,CAAC,EAC1BH,IACFA,EAAQG,CAAC,EAAIK,EAAYL,CAAC,EAC1BH,EAAQG,CAAC,EAAEA,CAAC,IAETN,EAAOM,CAAC,EAAIpF,GAAW+F,CAAM,EAEtCjB,EAASA,EAAO,MAAM,EAAGE,EAAMG,CAAM,EACrCN,EAAQK,EAAS,MAAM,CAAC,CAC1B,CACA,OAAOJ,CACT,CAAC,EACD,SAASiB,EAAOD,EAAU,CAExB,GADAf,EAAUK,CAAC,EAAIU,EACXb,EAAS,CACX,KAAM,CAAClE,EAAGiF,CAAG,EAAIpF,EAAawE,CAAC,EAC/B,OAAAH,EAAQG,CAAC,EAAIY,EACNpB,EAAMM,EAASE,CAAC,EAAGrE,CAAC,CAC7B,CACA,OAAO6D,EAAMM,EAASE,CAAC,CAAC,CAC1B,CACF,CACF,CAmEA,SAASa,EAAgBC,EAAM5B,EAAO,CAUpC,OAAO7D,EAAQ,IAAMyF,EAAK5B,GAAS,CAAA,CAAE,CAAC,CACxC,CACA,SAAS6B,IAAS,CAChB,MAAO,EACT,CACA,MAAMC,GAAY,CAChB,IAAIC,EAAGC,EAAUC,EAAU,CACzB,OAAID,IAAatH,GAAeuH,EACzBF,EAAE,IAAIC,CAAQ,CACvB,EACA,IAAID,EAAGC,EAAU,CACf,OAAIA,IAAatH,GAAe,GACzBqH,EAAE,IAAIC,CAAQ,CACvB,EACA,IAAKH,GACL,eAAgBA,GAChB,yBAAyBE,EAAGC,EAAU,CACpC,MAAO,CACL,aAAc,GACd,WAAY,GACZ,KAAM,CACJ,OAAOD,EAAE,IAAIC,CAAQ,CACvB,EACA,IAAKH,GACL,eAAgBA,EACtB,CACE,EACA,QAAQE,EAAG,CACT,OAAOA,EAAE,KAAI,CACf,CACF,EACA,SAASG,GAAczF,EAAG,CACxB,OAASA,EAAI,OAAOA,GAAM,WAAaA,IAAMA,GAAUA,EAAL,CAAA,CACpD,CACA,SAAS0F,IAAiB,CACxB,QAAS/D,EAAI,EAAGgE,EAAS,KAAK,OAAQhE,EAAIgE,EAAQ,EAAEhE,EAAG,CACrD,MAAMiE,EAAI,KAAKjE,CAAC,EAAC,EACjB,GAAIiE,IAAM,OAAW,OAAOA,CAC9B,CACF,CACA,SAASC,KAAcC,EAAS,CAC9B,IAAIC,EAAQ,GACZ,QAASpE,EAAI,EAAGA,EAAImE,EAAQ,OAAQnE,IAAK,CACvC,MAAM3B,EAAI8F,EAAQnE,CAAC,EACnBoE,EAAQA,GAAS,CAAC,CAAC/F,GAAK/B,MAAU+B,EAClC8F,EAAQnE,CAAC,EAAI,OAAO3B,GAAM,YAAc+F,EAAQ,GAAMrF,EAAWV,CAAC,GAAKA,CACzE,CACA,GAAI9B,IAAkB6H,EACpB,OAAO,IAAI,MAAM,CACf,IAAIR,EAAU,CACZ,QAAS5D,EAAImE,EAAQ,OAAS,EAAGnE,GAAK,EAAGA,IAAK,CAC5C,MAAMiE,EAAIH,GAAcK,EAAQnE,CAAC,CAAC,EAAE4D,CAAQ,EAC5C,GAAIK,IAAM,OAAW,OAAOA,CAC9B,CACF,EACA,IAAIL,EAAU,CACZ,QAAS5D,EAAImE,EAAQ,OAAS,EAAGnE,GAAK,EAAGA,IACvC,GAAI4D,KAAYE,GAAcK,EAAQnE,CAAC,CAAC,EAAG,MAAO,GAEpD,MAAO,EACT,EACA,MAAO,CACL,MAAMqE,EAAO,CAAA,EACb,QAASrE,EAAI,EAAGA,EAAImE,EAAQ,OAAQnE,IAAKqE,EAAK,KAAK,GAAG,OAAO,KAAKP,GAAcK,EAAQnE,CAAC,CAAC,CAAC,CAAC,EAC5F,MAAO,CAAC,GAAG,IAAI,IAAIqE,CAAI,CAAC,CAC1B,CACN,EAAOX,EAAS,EAEd,MAAMY,EAAa,CAAA,EACbC,EAAU,OAAO,OAAO,IAAI,EAClC,QAASvE,EAAImE,EAAQ,OAAS,EAAGnE,GAAK,EAAGA,IAAK,CAC5C,MAAMqB,EAAS8C,EAAQnE,CAAC,EACxB,GAAI,CAACqB,EAAQ,SACb,MAAMmD,EAAa,OAAO,oBAAoBnD,CAAM,EACpD,QAASrB,EAAIwE,EAAW,OAAS,EAAGxE,GAAK,EAAGA,IAAK,CAC/C,MAAMyE,EAAMD,EAAWxE,CAAC,EACxB,GAAIyE,IAAQ,aAAeA,IAAQ,cAAe,SAClD,MAAMC,EAAO,OAAO,yBAAyBrD,EAAQoD,CAAG,EACxD,GAAI,CAACF,EAAQE,CAAG,EACdF,EAAQE,CAAG,EAAIC,EAAK,IAAM,CACxB,WAAY,GACZ,aAAc,GACd,IAAKX,GAAe,KAAKO,EAAWG,CAAG,EAAI,CAACC,EAAK,IAAI,KAAKrD,CAAM,CAAC,CAAC,CAC5E,EAAYqD,EAAK,QAAU,OAAYA,EAAO,WACjC,CACL,MAAMP,EAAUG,EAAWG,CAAG,EAC1BN,IACEO,EAAK,IAAKP,EAAQ,KAAKO,EAAK,IAAI,KAAKrD,CAAM,CAAC,EAAWqD,EAAK,QAAU,QAAWP,EAAQ,KAAK,IAAMO,EAAK,KAAK,EAEtH,CACF,CACF,CACA,MAAMC,EAAS,CAAA,EACTC,EAAc,OAAO,KAAKL,CAAO,EACvC,QAASvE,EAAI4E,EAAY,OAAS,EAAG5E,GAAK,EAAGA,IAAK,CAChD,MAAMyE,EAAMG,EAAY5E,CAAC,EACvB0E,EAAOH,EAAQE,CAAG,EAChBC,GAAQA,EAAK,IAAK,OAAO,eAAeC,EAAQF,EAAKC,CAAI,EAAOC,EAAOF,CAAG,EAAIC,EAAOA,EAAK,MAAQ,MACxG,CACA,OAAOC,CACT,CACA,SAASE,GAAWjD,KAAUyC,EAAM,CAClC,MAAM/B,EAAM+B,EAAK,OACjB,GAAI9H,IAAkBD,MAAUsF,EAAO,CACrC,MAAMkD,EAAUxC,EAAM,EAAI+B,EAAK,KAAI,EAAKA,EAAK,CAAC,EACxCtD,EAAMsD,EAAK,IAAIU,GACZ,IAAI,MAAM,CACf,IAAInB,EAAU,CACZ,OAAOmB,EAAE,SAASnB,CAAQ,EAAIhC,EAAMgC,CAAQ,EAAI,MAClD,EACA,IAAIA,EAAU,CACZ,OAAOmB,EAAE,SAASnB,CAAQ,GAAKA,KAAYhC,CAC7C,EACA,MAAO,CACL,OAAOmD,EAAE,OAAOnB,GAAYA,KAAYhC,CAAK,CAC/C,CACR,EAAS8B,EAAS,CACb,EACD,OAAA3C,EAAI,KAAK,IAAI,MAAM,CACjB,IAAI6C,EAAU,CACZ,OAAOkB,EAAQ,SAASlB,CAAQ,EAAI,OAAYhC,EAAMgC,CAAQ,CAChE,EACA,IAAIA,EAAU,CACZ,OAAOkB,EAAQ,SAASlB,CAAQ,EAAI,GAAQA,KAAYhC,CAC1D,EACA,MAAO,CACL,OAAO,OAAO,KAAKA,CAAK,EAAE,OAAOmD,GAAK,CAACD,EAAQ,SAASC,CAAC,CAAC,CAC5D,CACN,EAAOrB,EAAS,CAAC,EACN3C,CACT,CACA,MAAMiE,EAAU,CAAA,EAChB,QAAShF,EAAI,EAAGA,GAAKsC,EAAKtC,IACxBgF,EAAQhF,CAAC,EAAI,CAAA,EAEf,UAAWiF,KAAY,OAAO,oBAAoBrD,CAAK,EAAG,CACxD,IAAIsD,EAAW5C,EACf,QAAStC,EAAI,EAAGA,EAAIqE,EAAK,OAAQrE,IAC/B,GAAIqE,EAAKrE,CAAC,EAAE,SAASiF,CAAQ,EAAG,CAC9BC,EAAWlF,EACX,KACF,CAEF,MAAM0E,EAAO,OAAO,yBAAyB9C,EAAOqD,CAAQ,EACtC,CAACP,EAAK,KAAO,CAACA,EAAK,KAAOA,EAAK,YAAcA,EAAK,UAAYA,EAAK,aACzEM,EAAQE,CAAQ,EAAED,CAAQ,EAAIP,EAAK,MAAQ,OAAO,eAAeM,EAAQE,CAAQ,EAAGD,EAAUP,CAAI,CACpH,CACA,OAAOM,CACT,CAyCA,MAAMG,GAAgBC,GAAQ,oBAAoBA,CAAI,KACtD,SAASC,GAAIzD,EAAO,CAClB,MAAM0D,EAAW,aAAc1D,GAAS,CACtC,SAAU,IAAMA,EAAM,QAC1B,EACE,OAAO7C,EAAWiD,GAAS,IAAMJ,EAAM,KAAMA,EAAM,SAAU0D,GAAY,MAAS,CAAC,CACrF,CAOA,SAASC,GAAK3D,EAAO,CACnB,MAAM4D,EAAQ5D,EAAM,MACd6D,EAAiB1G,EAAW,IAAM6C,EAAM,KAAM,OAAW,MAAS,EAClE8D,EAAYF,EAAQC,EAAiB1G,EAAW0G,EAAgB,OAAW,CAC/E,OAAQ,CAACrJ,EAAGC,IAAM,CAACD,GAAM,CAACC,CAC9B,CAAG,EACD,OAAO0C,EAAW,IAAM,CACtB,MAAML,EAAIgH,EAAS,EACnB,GAAIhH,EAAG,CACL,MAAMiH,EAAQ/D,EAAM,SAEpB,OADW,OAAO+D,GAAU,YAAcA,EAAM,OAAS,EAC7C5H,EAAQ,IAAM4H,EAAMH,EAAQ9G,EAAI,IAAM,CAChD,GAAI,CAACX,EAAQ2H,CAAS,EAAG,MAAMP,GAAc,MAAM,EACnD,OAAOM,EAAc,CACvB,CAAC,CAAC,EAAIE,CACR,CACA,OAAO/D,EAAM,QACf,EAAG,OAAW,MAAS,CACzB,CACA,SAASgE,GAAOhE,EAAO,CACrB,MAAMiE,EAAMrG,GAAS,IAAMoC,EAAM,QAAQ,EACnCkE,EAAa/G,EAAW,IAAM,CAClC,MAAMgH,EAAKF,EAAG,EACRG,EAAM,MAAM,QAAQD,CAAE,EAAIA,EAAK,CAACA,CAAE,EACxC,IAAIE,EAAO,IAAA,GACX,QAASjG,EAAI,EAAGA,EAAIgG,EAAI,OAAQhG,IAAK,CACnC,MAAMsB,EAAQtB,EACRkG,EAAKF,EAAIhG,CAAC,EACVmG,EAAWF,EACXR,EAAiB1G,EAAW,IAAMoH,EAAQ,EAAK,OAAYD,EAAG,KAAM,OAAW,MAAS,EACxFR,EAAYQ,EAAG,MAAQT,EAAiB1G,EAAW0G,EAAgB,OAAW,CAClF,OAAQ,CAACrJ,EAAGC,IAAM,CAACD,GAAM,CAACC,CAClC,CAAO,EACD4J,EAAO,IAAME,EAAQ,IAAOT,EAAS,EAAK,CAACpE,EAAOmE,EAAgBS,CAAE,EAAI,OAC1E,CACA,OAAOD,CACT,CAAC,EACD,OAAOlH,EAAW,IAAM,CACtB,MAAMqH,EAAMN,IAAY,EACxB,GAAI,CAACM,EAAK,OAAOxE,EAAM,SACvB,KAAM,CAACN,EAAOmE,EAAgBS,CAAE,EAAIE,EAC9BT,EAAQO,EAAG,SAEjB,OADW,OAAOP,GAAU,YAAcA,EAAM,OAAS,EAC7C5H,EAAQ,IAAM4H,EAAMO,EAAG,MAAQT,EAAc,EAAK,IAAM,CAClE,GAAI1H,EAAQ+H,CAAU,MAAM,CAAC,IAAMxE,EAAO,MAAM6D,GAAc,OAAO,EACrE,OAAOM,EAAc,CACvB,CAAC,CAAC,EAAIE,CACR,EAAG,OAAW,MAAS,CACzB,CACA,SAASU,GAAMzE,EAAO,CACpB,OAAOA,CACT,CCl+CA,MAAM0E,GAAW,CAAC,kBAAmB,QAAS,QAC9C,YACA,WAAY,UAAW,WAAY,UAAW,WAAY,iBAAkB,SAC5E,gBAAiB,QACjB,QAAS,OAAQ,WAAY,QAAS,WAAY,aAAc,OAAQ,cAAe,WAAY,WAAY,WAAY,WAC3H,WAAY,mBACZ,iBACA,iBACA,iBAAkB,eAAgB,kBAAmB,QAAS,0BAA2B,wBAAyB,iBAClH,qBAAsB,kCACtB,2BAA4B,yBAC5B,uBACA,EACMC,GAA0B,IAAI,IAAI,CACxC,YAAa,QACb,WAAY,aAAc,iBAAkB,QAAS,WAAY,cAAe,mBAChF,kBAAmB,iBACnB,iBAAkB,eAAgB,kBAAmB,0BAA2B,wBAAyB,iBAAkB,qBAAsB,kCACjJ,2BAA4B,yBAC5B,wBACA,GAAGD,EAAQ,CAAC,EACNE,GAA+B,IAAI,IAAI,CAAC,YAAa,cAAe,YAAa,UAAU,CAAC,EAC5FC,GAAuB,OAAO,OAAO,OAAO,OAAO,IAAI,EAAG,CAC9D,UAAW,QACX,QAAS,KACX,CAAC,EACKC,GAA2B,OAAO,OAAO,OAAO,OAAO,IAAI,EAAG,CAClE,MAAO,YACP,WAAY,CACV,EAAG,aACH,KAAM,CACV,EACE,eAAgB,CACd,EAAG,iBACH,OAAQ,EACR,MAAO,CACX,EACE,MAAO,CACL,EAAG,QACH,IAAK,CACT,EACE,SAAU,CACR,EAAG,WACH,OAAQ,CACZ,EACE,YAAa,CACX,EAAG,cACH,MAAO,CACX,EACE,SAAU,CACR,EAAG,WACH,MAAO,EACP,SAAU,CACd,EACE,iBAAkB,CAChB,EAAG,mBACH,OAAQ,CACZ,EACE,gBAAiB,CACf,EAAG,kBACH,OAAQ,CACZ,EACE,eAAgB,CACd,EAAG,iBACH,IAAK,CACT,EACE,eAAgB,CACd,EAAG,iBACH,MAAO,CACX,EACE,aAAc,CACZ,EAAG,eACH,MAAO,EACP,MAAO,CACX,EACE,gBAAiB,CACf,EAAG,kBACH,OAAQ,CACZ,EACE,wBAAyB,CACvB,EAAG,0BACH,MAAO,CACX,EACE,sBAAuB,CACrB,EAAG,wBACH,MAAO,EACP,MAAO,CACX,EACE,eAAgB,CACd,EAAG,iBACH,MAAO,EACP,MAAO,CACX,EACE,mBAAoB,CAClB,EAAG,qBACH,SAAU,CACd,EACE,yBAA0B,CACxB,EAAG,2BACH,SAAU,CACd,EACE,uBAAwB,CACtB,EAAG,yBACH,SAAU,CACd,EACE,sBAAuB,CACrB,EAAG,wBACH,OAAQ,EACR,IAAK,CACT,CACA,CAAC,EACD,SAASC,GAAaC,EAAMC,EAAS,CACnC,MAAMzK,EAAIsK,GAAYE,CAAI,EAC1B,OAAO,OAAOxK,GAAM,SAAWA,EAAEyK,CAAO,EAAIzK,EAAE,EAAO,OAAYA,CACnE,CACA,MAAM0K,GAA+B,IAAI,IAAI,CAAC,cAAe,QAAS,WAAY,cAAe,UAAW,WAAY,QAAS,UAAW,QAAS,YAAa,YAAa,WAAY,YAAa,UAAW,cAAe,cAAe,aAAc,cAAe,YAAa,WAAY,YAAa,YAAY,CAAC,EAC3TC,GAA2B,IAAI,IAAI,CACzC,WAAY,cAAe,eAAgB,UAAW,eAAgB,gBAAiB,mBAAoB,SAAU,WAAY,gBAAiB,SAAU,OAAQ,OAAQ,UAAW,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,eAAgB,SAAU,OAAQ,YAAa,mBAAoB,iBAAkB,gBAAiB,gBAAiB,gBAAiB,IAAK,QAAS,WAAY,QAAS,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,gBAAiB,QAAS,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OACp2B,MAAO,OACP,MAAO,SAAU,SAAU,OAAQ,WACnC,OAAQ,QAAS,MAAO,OAAQ,OAAO,CAAC,EAClCC,GAAe,CACnB,MAAO,+BACP,IAAK,sCACP,EAKMvH,GAAOlC,GAAMwB,EAAW,IAAMxB,EAAE,CAAE,EAExC,SAAS0J,GAAgBC,EAAY9K,EAAGC,EAAG,CACzC,IAAI8K,EAAU9K,EAAE,OACd+K,EAAOhL,EAAE,OACTiL,EAAOF,EACPG,EAAS,EACTC,EAAS,EACTC,EAAQpL,EAAEgL,EAAO,CAAC,EAAE,YACpBK,EAAM,KACR,KAAOH,EAASF,GAAQG,EAASF,GAAM,CACrC,GAAIjL,EAAEkL,CAAM,IAAMjL,EAAEkL,CAAM,EAAG,CAC3BD,IACAC,IACA,QACF,CACA,KAAOnL,EAAEgL,EAAO,CAAC,IAAM/K,EAAEgL,EAAO,CAAC,GAC/BD,IACAC,IAEF,GAAID,IAASE,EAAQ,CACnB,MAAMxH,EAAOuH,EAAOF,EAAUI,EAASlL,EAAEkL,EAAS,CAAC,EAAE,YAAclL,EAAEgL,EAAOE,CAAM,EAAIC,EACtF,KAAOD,EAASF,GAAMH,EAAW,aAAa7K,EAAEkL,GAAQ,EAAGzH,CAAI,CACjE,SAAWuH,IAASE,EAClB,KAAOD,EAASF,IACV,CAACK,GAAO,CAACA,EAAI,IAAIrL,EAAEkL,CAAM,CAAC,IAAGlL,EAAEkL,CAAM,EAAE,OAAM,EACjDA,YAEOlL,EAAEkL,CAAM,IAAMjL,EAAEgL,EAAO,CAAC,GAAKhL,EAAEkL,CAAM,IAAMnL,EAAEgL,EAAO,CAAC,EAAG,CACjE,MAAMtH,EAAO1D,EAAE,EAAEgL,CAAI,EAAE,YACvBF,EAAW,aAAa7K,EAAEkL,GAAQ,EAAGnL,EAAEkL,GAAQ,EAAE,WAAW,EAC5DJ,EAAW,aAAa7K,EAAE,EAAEgL,CAAI,EAAGvH,CAAI,EACvC1D,EAAEgL,CAAI,EAAI/K,EAAEgL,CAAI,CAClB,KAAO,CACL,GAAI,CAACI,EAAK,CACRA,EAAM,IAAI,IACV,IAAIzH,EAAIuH,EACR,KAAOvH,EAAIqH,GAAMI,EAAI,IAAIpL,EAAE2D,CAAC,EAAGA,GAAG,CACpC,CACA,MAAMsB,EAAQmG,EAAI,IAAIrL,EAAEkL,CAAM,CAAC,EAC/B,GAAIhG,GAAS,KACX,GAAIiG,EAASjG,GAASA,EAAQ+F,EAAM,CAClC,IAAIrH,EAAIsH,EACNI,EAAW,EACXC,EACF,KAAO,EAAE3H,EAAIoH,GAAQpH,EAAIqH,GAClB,GAAAM,EAAIF,EAAI,IAAIrL,EAAE4D,CAAC,CAAC,IAAM,MAAQ2H,IAAMrG,EAAQoG,IACjDA,IAEF,GAAIA,EAAWpG,EAAQiG,EAAQ,CAC7B,MAAMzH,EAAO1D,EAAEkL,CAAM,EACrB,KAAOC,EAASjG,GAAO4F,EAAW,aAAa7K,EAAEkL,GAAQ,EAAGzH,CAAI,CAClE,MAAOoH,EAAW,aAAa7K,EAAEkL,GAAQ,EAAGnL,EAAEkL,GAAQ,CAAC,CACzD,MAAOA,SACFlL,EAAEkL,GAAQ,EAAE,OAAM,CAC3B,CACF,CACF,CAEA,MAAMM,GAAW,gBACjB,SAASC,GAAOC,EAAMC,EAAStH,EAAMrC,EAAU,CAAA,EAAI,CACjD,IAAIgF,EACJ,OAAA9F,GAAWwE,GAAW,CACpBsB,EAAWtB,EACXiG,IAAY,SAAWD,EAAI,EAAKE,EAAOD,EAASD,EAAI,EAAIC,EAAQ,WAAa,KAAO,OAAWtH,CAAI,CACrG,EAAGrC,EAAQ,KAAK,EACT,IAAM,CACXgF,EAAQ,EACR2E,EAAQ,YAAc,EACxB,CACF,CACA,SAASE,EAASC,EAAMC,EAAcC,EAAOC,EAAU,CACrD,IAAIvI,EACJ,MAAMwI,EAAS,IAAM,CACnB,MAAMX,EAAIU,EAAW,SAAS,gBAAgB,qCAAsC,UAAU,EAAI,SAAS,cAAc,UAAU,EACnI,OAAAV,EAAE,UAAYO,EACPE,EAAQT,EAAE,QAAQ,WAAW,WAAaU,EAAWV,EAAE,WAAaA,EAAE,QAAQ,UACvF,EACMpK,EAAK4K,EAAe,IAAMpK,EAAQ,IAAM,SAAS,WAAW+B,IAASA,EAAOwI,EAAM,GAAK,EAAI,CAAC,EAAI,KAAOxI,IAASA,EAAOwI,EAAM,IAAK,UAAU,EAAI,EACtJ,OAAA/K,EAAG,UAAYA,EACRA,CACT,CACA,SAASgL,GAAeC,EAAYC,EAAW,OAAO,SAAU,CAC9D,MAAMxH,EAAIwH,EAASb,EAAQ,IAAMa,EAASb,EAAQ,EAAI,IAAI,KAC1D,QAAS5H,EAAI,EAAG0I,EAAIF,EAAW,OAAQxI,EAAI0I,EAAG1I,IAAK,CACjD,MAAMoF,EAAOoD,EAAWxI,CAAC,EACpBiB,EAAE,IAAImE,CAAI,IACbnE,EAAE,IAAImE,CAAI,EACVqD,EAAS,iBAAiBrD,EAAMuD,EAAY,EAEhD,CACF,CAWA,SAASC,EAAa9I,EAAMsF,EAAMjH,EAAO,CAEnCA,GAAS,KAAM2B,EAAK,gBAAgBsF,CAAI,EAAOtF,EAAK,aAAasF,EAAMjH,CAAK,CAClF,CACA,SAAS0K,GAAe/I,EAAMgJ,EAAW1D,EAAMjH,EAAO,CAEhDA,GAAS,KAAM2B,EAAK,kBAAkBgJ,EAAW1D,CAAI,EAAOtF,EAAK,eAAegJ,EAAW1D,EAAMjH,CAAK,CAC5G,CACA,SAAS4K,GAAiBjJ,EAAMsF,EAAMjH,EAAO,CAE3CA,EAAQ2B,EAAK,aAAasF,EAAM,EAAE,EAAItF,EAAK,gBAAgBsF,CAAI,CACjE,CACA,SAAS4D,EAAUlJ,EAAM3B,EAAO,CAE1BA,GAAS,KAAM2B,EAAK,gBAAgB,OAAO,EAAOA,EAAK,UAAY3B,CACzE,CACA,SAAS8K,GAAiBnJ,EAAMsF,EAAM8D,EAASC,EAAU,CACvD,GAAIA,EACE,MAAM,QAAQD,CAAO,GACvBpJ,EAAK,KAAKsF,CAAI,EAAE,EAAI8D,EAAQ,CAAC,EAC7BpJ,EAAK,KAAKsF,CAAI,MAAM,EAAI8D,EAAQ,CAAC,GAC5BpJ,EAAK,KAAKsF,CAAI,EAAE,EAAI8D,UAClB,MAAM,QAAQA,CAAO,EAAG,CACjC,MAAME,EAAYF,EAAQ,CAAC,EAC3BpJ,EAAK,iBAAiBsF,EAAM8D,EAAQ,CAAC,EAAIjI,GAAKmI,EAAU,KAAKtJ,EAAMoJ,EAAQ,CAAC,EAAGjI,CAAC,CAAC,CACnF,MAAOnB,EAAK,iBAAiBsF,EAAM8D,EAAS,OAAOA,GAAY,YAAcA,CAAO,CACtF,CACA,SAASG,GAAUvJ,EAAM3B,EAAOmL,EAAO,CAAA,EAAI,CACzC,MAAMC,EAAY,OAAO,KAAKpL,GAAS,CAAA,CAAE,EACvCqL,EAAW,OAAO,KAAKF,CAAI,EAC7B,IAAI,EAAGhH,EACP,IAAK,EAAI,EAAGA,EAAMkH,EAAS,OAAQ,EAAIlH,EAAK,IAAK,CAC/C,MAAMmC,EAAM+E,EAAS,CAAC,EAClB,CAAC/E,GAAOA,IAAQ,aAAetG,EAAMsG,CAAG,IAC5CgF,GAAe3J,EAAM2E,EAAK,EAAK,EAC/B,OAAO6E,EAAK7E,CAAG,EACjB,CACA,IAAK,EAAI,EAAGnC,EAAMiH,EAAU,OAAQ,EAAIjH,EAAK,IAAK,CAChD,MAAMmC,EAAM8E,EAAU,CAAC,EACrBG,EAAa,CAAC,CAACvL,EAAMsG,CAAG,EACtB,CAACA,GAAOA,IAAQ,aAAe6E,EAAK7E,CAAG,IAAMiF,GAAc,CAACA,IAChED,GAAe3J,EAAM2E,EAAK,EAAI,EAC9B6E,EAAK7E,CAAG,EAAIiF,EACd,CACA,OAAOJ,CACT,CACA,SAASK,GAAM7J,EAAM3B,EAAOmL,EAAM,CAChC,GAAI,CAACnL,EAAO,OAAOmL,EAAOV,EAAa9I,EAAM,OAAO,EAAI3B,EACxD,MAAMyL,EAAY9J,EAAK,MACvB,GAAI,OAAO3B,GAAU,SAAU,OAAOyL,EAAU,QAAUzL,EAC1D,OAAOmL,GAAS,WAAaM,EAAU,QAAUN,EAAO,QACxDA,IAASA,EAAO,IAChBnL,IAAUA,EAAQ,IAClB,IAAI8F,EAAG5F,EACP,IAAKA,KAAKiL,EACRnL,EAAME,CAAC,GAAK,MAAQuL,EAAU,eAAevL,CAAC,EAC9C,OAAOiL,EAAKjL,CAAC,EAEf,IAAKA,KAAKF,EACR8F,EAAI9F,EAAME,CAAC,EACP4F,IAAMqF,EAAKjL,CAAC,IACduL,EAAU,YAAYvL,EAAG4F,CAAC,EAC1BqF,EAAKjL,CAAC,EAAI4F,GAGd,OAAOqF,CACT,CAIA,SAASO,GAAO/J,EAAM8B,EAAQ,CAAA,EAAIwG,EAAO0B,EAAc,CACrD,MAAMC,EAAY,CAAA,EAClB,OAAKD,GACHrL,EAAmB,IAAMsL,EAAU,SAAWC,GAAiBlK,EAAM8B,EAAM,SAAUmI,EAAU,QAAQ,CAAC,EAE1GtL,EAAmB,IAAM,OAAOmD,EAAM,KAAQ,YAAcqI,GAAIrI,EAAM,IAAK9B,CAAI,CAAC,EAChFrB,EAAmB,IAAMyL,GAAOpK,EAAM8B,EAAOwG,EAAO,GAAM2B,EAAW,EAAI,CAAC,EACnEA,CACT,CAWA,SAASE,GAAI1M,EAAIwK,EAASoC,EAAK,CAC7B,OAAOpM,EAAQ,IAAMR,EAAGwK,EAASoC,CAAG,CAAC,CACvC,CACA,SAASnC,EAAOoC,EAAQC,EAAUC,EAAQC,EAAS,CAEjD,GADID,IAAW,QAAa,CAACC,IAASA,EAAU,CAAA,GAC5C,OAAOF,GAAa,WAAY,OAAOL,GAAiBI,EAAQC,EAAUE,EAASD,CAAM,EAC7F7L,EAAmBb,GAAWoM,GAAiBI,EAAQC,EAAQ,EAAIzM,EAAS0M,CAAM,EAAGC,CAAO,CAC9F,CACA,SAASL,GAAOpK,EAAM8B,EAAOwG,EAAO0B,EAAcC,EAAY,CAAA,EAAIS,EAAU,GAAO,CACjF5I,IAAUA,EAAQ,IAClB,UAAWgF,KAAQmD,EACjB,GAAI,EAAEnD,KAAQhF,GAAQ,CACpB,GAAIgF,IAAS,WAAY,SACzBmD,EAAUnD,CAAI,EAAI6D,GAAW3K,EAAM8G,EAAM,KAAMmD,EAAUnD,CAAI,EAAGwB,EAAOoC,EAAS5I,CAAK,CACvF,CAEF,UAAWgF,KAAQhF,EAAO,CACxB,GAAIgF,IAAS,WAEX,SAEF,MAAMzI,EAAQyD,EAAMgF,CAAI,EACxBmD,EAAUnD,CAAI,EAAI6D,GAAW3K,EAAM8G,EAAMzI,EAAO4L,EAAUnD,CAAI,EAAGwB,EAAOoC,EAAS5I,CAAK,CACxF,CACF,CAgFA,SAAS8I,GAAetF,EAAM,CAC5B,OAAOA,EAAK,YAAW,EAAG,QAAQ,YAAa,CAACzB,EAAGgH,IAAMA,EAAE,aAAa,CAC1E,CACA,SAASlB,GAAe3J,EAAM2E,EAAKtG,EAAO,CACxC,MAAMyM,EAAanG,EAAI,KAAI,EAAG,MAAM,KAAK,EACzC,QAASzE,EAAI,EAAG6K,EAAUD,EAAW,OAAQ5K,EAAI6K,EAAS7K,IAAKF,EAAK,UAAU,OAAO8K,EAAW5K,CAAC,EAAG7B,CAAK,CAC3G,CACA,SAASsM,GAAW3K,EAAM8G,EAAMzI,EAAOmL,EAAMlB,EAAOoC,EAAS5I,EAAO,CAClE,IAAIkJ,EAAMC,EAAQC,EAAaC,EAAWC,EAC1C,GAAItE,IAAS,QAAS,OAAO+C,GAAM7J,EAAM3B,EAAOmL,CAAI,EACpD,GAAI1C,IAAS,YAAa,OAAOyC,GAAUvJ,EAAM3B,EAAOmL,CAAI,EAC5D,GAAInL,IAAUmL,EAAM,OAAOA,EAC3B,GAAI1C,IAAS,MACN4D,GAASrM,EAAM2B,CAAI,UACf8G,EAAK,MAAM,EAAG,CAAC,IAAM,MAAO,CACrC,MAAM3F,EAAI2F,EAAK,MAAM,CAAC,EACtB0C,GAAQxJ,EAAK,oBAAoBmB,EAAGqI,EAAM,OAAOA,GAAS,YAAcA,CAAI,EAC5EnL,GAAS2B,EAAK,iBAAiBmB,EAAG9C,EAAO,OAAOA,GAAU,YAAcA,CAAK,CAC/E,SAAWyI,EAAK,MAAM,EAAG,EAAE,IAAM,aAAc,CAC7C,MAAM3F,EAAI2F,EAAK,MAAM,EAAE,EACvB0C,GAAQxJ,EAAK,oBAAoBmB,EAAGqI,EAAM,EAAI,EAC9CnL,GAAS2B,EAAK,iBAAiBmB,EAAG9C,EAAO,EAAI,CAC/C,SAAWyI,EAAK,MAAM,EAAG,CAAC,IAAM,KAAM,CACpC,MAAMxB,EAAOwB,EAAK,MAAM,CAAC,EAAE,YAAW,EAChCuC,EAAWrC,GAAgB,IAAI1B,CAAI,EACzC,GAAI,CAAC+D,GAAYG,EAAM,CACrB,MAAM6B,EAAI,MAAM,QAAQ7B,CAAI,EAAIA,EAAK,CAAC,EAAIA,EAC1CxJ,EAAK,oBAAoBsF,EAAM+F,CAAC,CAClC,EACIhC,GAAYhL,KACd8K,GAAiBnJ,EAAMsF,EAAMjH,EAAOgL,CAAQ,EAC5CA,GAAYZ,GAAe,CAACnD,CAAI,CAAC,EAErC,SAAWwB,EAAK,MAAM,EAAG,CAAC,IAAM,QAC9BgC,EAAa9I,EAAM8G,EAAK,MAAM,CAAC,EAAGzI,CAAK,UAC9ByI,EAAK,MAAM,EAAG,CAAC,IAAM,QAC9BmC,GAAiBjJ,EAAM8G,EAAK,MAAM,CAAC,EAAGzI,CAAK,WACjC+M,EAAYtE,EAAK,MAAM,EAAG,CAAC,IAAM,WAAaoE,EAAcxE,GAAgB,IAAII,CAAI,IAAM,CAACwB,KAAW6C,EAAYtE,GAAaC,EAAM9G,EAAK,OAAO,KAAOiL,EAASxE,GAAW,IAAIK,CAAI,MAAQkE,EAAOhL,EAAK,SAAS,SAAS,GAAG,GAAK,OAAQ8B,GAChPsJ,IACFtE,EAAOA,EAAK,MAAM,CAAC,EACnBmE,EAAS,IAEPnE,IAAS,SAAWA,IAAS,YAAaoC,EAAUlJ,EAAM3B,CAAK,EAAW2M,GAAQ,CAACC,GAAU,CAACC,EAAalL,EAAK4K,GAAe9D,CAAI,CAAC,EAAIzI,EAAW2B,EAAKmL,GAAarE,CAAI,EAAIzI,MAC5K,CACL,MAAMiN,EAAKhD,GAASxB,EAAK,QAAQ,GAAG,EAAI,IAAMI,GAAaJ,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EACzEwE,EAAIvC,GAAe/I,EAAMsL,EAAIxE,EAAMzI,CAAK,EAAOyK,EAAa9I,EAAM2G,GAAQG,CAAI,GAAKA,EAAMzI,CAAK,CACpG,CACA,OAAOA,CACT,CACA,SAASwK,GAAa,EAAG,CAIvB,IAAI7I,EAAO,EAAE,OACb,MAAM2E,EAAM,KAAK,EAAE,IAAI,GACjB4G,EAAY,EAAE,OACdC,EAAmB,EAAE,cACrBC,EAAWpN,GAAS,OAAO,eAAe,EAAG,SAAU,CAC3D,aAAc,GACd,MAAAA,CACJ,CAAG,EACKqN,EAAa,IAAM,CACvB,MAAMtC,EAAUpJ,EAAK2E,CAAG,EACxB,GAAIyE,GAAW,CAACpJ,EAAK,SAAU,CAC7B,MAAM2L,EAAO3L,EAAK,GAAG2E,CAAG,MAAM,EAE9B,GADAgH,IAAS,OAAYvC,EAAQ,KAAKpJ,EAAM2L,EAAM,CAAC,EAAIvC,EAAQ,KAAKpJ,EAAM,CAAC,EACnE,EAAE,aAAc,MACtB,CACA,OAAAA,EAAK,MAAQ,OAAOA,EAAK,MAAS,UAAY,CAACA,EAAK,KAAK,QAAUA,EAAK,SAAS,EAAE,MAAM,GAAKyL,EAASzL,EAAK,IAAI,EACzG,EACT,EACM4L,EAAa,IAAM,CACvB,KAAOF,EAAU,IAAO1L,EAAOA,EAAK,QAAUA,EAAK,YAAcA,EAAK,OAAM,CAC9E,EAQA,GAPA,OAAO,eAAe,EAAG,gBAAiB,CACxC,aAAc,GACd,KAAM,CACJ,OAAOA,GAAQ,QACjB,CACJ,CAAG,EAEG,EAAE,aAAc,CAClB,MAAM6L,EAAO,EAAE,aAAY,EAC3BJ,EAASI,EAAK,CAAC,CAAC,EAChB,QAAS3L,EAAI,EAAGA,EAAI2L,EAAK,OAAS,IAChC7L,EAAO6L,EAAK3L,CAAC,EACT,EAACwL,EAAU,GAFoBxL,IAAK,CAGxC,GAAIF,EAAK,OAAQ,CACfA,EAAOA,EAAK,OACZ4L,EAAU,EACV,KACF,CACA,GAAI5L,EAAK,aAAewL,EACtB,KAEJ,CACF,MACKI,EAAU,EACfH,EAASF,CAAS,CACpB,CACA,SAASrB,GAAiBI,EAAQjM,EAAOP,EAAS0M,EAAQsB,EAAa,CAWrE,KAAO,OAAOhO,GAAY,YAAYA,EAAUA,EAAO,EACvD,GAAIO,IAAUP,EAAS,OAAOA,EAC9B,MAAM+J,EAAI,OAAOxJ,EACf0N,EAAQvB,IAAW,OAErB,GADAF,EAASyB,GAASjO,EAAQ,CAAC,GAAKA,EAAQ,CAAC,EAAE,YAAcwM,EACrDzC,IAAM,UAAYA,IAAM,SAAU,CAEpC,GAAIA,IAAM,WACRxJ,EAAQA,EAAM,SAAQ,EAClBA,IAAUP,GAAS,OAAOA,EAEhC,GAAIiO,EAAO,CACT,IAAI/L,EAAOlC,EAAQ,CAAC,EAChBkC,GAAQA,EAAK,WAAa,EAC5BA,EAAK,OAAS3B,IAAU2B,EAAK,KAAO3B,GAC/B2B,EAAO,SAAS,eAAe3B,CAAK,EAC3CP,EAAUkO,GAAc1B,EAAQxM,EAAS0M,EAAQxK,CAAI,CACvD,MACMlC,IAAY,IAAM,OAAOA,GAAY,SACvCA,EAAUwM,EAAO,WAAW,KAAOjM,EAC9BP,EAAUwM,EAAO,YAAcjM,CAE1C,SAAWA,GAAS,MAAQwJ,IAAM,UAEhC/J,EAAUkO,GAAc1B,EAAQxM,EAAS0M,CAAM,MAC1C,IAAI3C,IAAM,WACf,OAAAlJ,EAAmB,IAAM,CACvB,IAAIwF,EAAI9F,EAAK,EACb,KAAO,OAAO8F,GAAM,YAAYA,EAAIA,EAAC,EACrCrG,EAAUoM,GAAiBI,EAAQnG,EAAGrG,EAAS0M,CAAM,CACvD,CAAC,EACM,IAAM1M,EACR,GAAI,MAAM,QAAQO,CAAK,EAAG,CAC/B,MAAM4N,EAAQ,CAAA,EACRC,EAAepO,GAAW,MAAM,QAAQA,CAAO,EACrD,GAAIqO,GAAuBF,EAAO5N,EAAOP,EAASgO,CAAW,EAC3D,OAAAnN,EAAmB,IAAMb,EAAUoM,GAAiBI,EAAQ2B,EAAOnO,EAAS0M,EAAQ,EAAI,CAAC,EAClF,IAAM1M,EAWf,GAAImO,EAAM,SAAW,GAEnB,GADAnO,EAAUkO,GAAc1B,EAAQxM,EAAS0M,CAAM,EAC3CuB,EAAO,OAAOjO,OACToO,EACLpO,EAAQ,SAAW,EACrBsO,GAAY9B,EAAQ2B,EAAOzB,CAAM,EAC5BrD,GAAgBmD,EAAQxM,EAASmO,CAAK,GAE7CnO,GAAWkO,GAAc1B,CAAM,EAC/B8B,GAAY9B,EAAQ2B,CAAK,GAE3BnO,EAAUmO,CACZ,SAAW5N,EAAM,SAAU,CAEzB,GAAI,MAAM,QAAQP,CAAO,EAAG,CAC1B,GAAIiO,EAAO,OAAOjO,EAAUkO,GAAc1B,EAAQxM,EAAS0M,EAAQnM,CAAK,EACxE2N,GAAc1B,EAAQxM,EAAS,KAAMO,CAAK,CAC5C,MAAWP,GAAW,MAAQA,IAAY,IAAM,CAACwM,EAAO,WACtDA,EAAO,YAAYjM,CAAK,EACnBiM,EAAO,aAAajM,EAAOiM,EAAO,UAAU,EACnDxM,EAAUO,CACZ,EACA,OAAOP,CACT,CACA,SAASqO,GAAuBE,EAAYJ,EAAOnO,EAASwO,EAAQ,CAClE,IAAIC,EAAU,GACd,QAAS,EAAI,EAAG/J,EAAMyJ,EAAM,OAAQ,EAAIzJ,EAAK,IAAK,CAChD,IAAIa,EAAO4I,EAAM,CAAC,EAChBzC,EAAO1L,GAAWA,EAAQuO,EAAW,MAAM,EAC3CxE,EACF,GAAI,EAAAxE,GAAQ,MAAQA,IAAS,IAAQA,IAAS,IAAc,IAAKwE,EAAI,OAAOxE,IAAU,UAAYA,EAAK,SACrGgJ,EAAW,KAAKhJ,CAAI,UACX,MAAM,QAAQA,CAAI,EAC3BkJ,EAAUJ,GAAuBE,EAAYhJ,EAAMmG,CAAI,GAAK+C,UACnD1E,IAAM,WACf,GAAIyE,EAAQ,CACV,KAAO,OAAOjJ,GAAS,YAAYA,EAAOA,EAAI,EAC9CkJ,EAAUJ,GAAuBE,EAAY,MAAM,QAAQhJ,CAAI,EAAIA,EAAO,CAACA,CAAI,EAAG,MAAM,QAAQmG,CAAI,EAAIA,EAAO,CAACA,CAAI,CAAC,GAAK+C,CAC5H,MACEF,EAAW,KAAKhJ,CAAI,EACpBkJ,EAAU,OAEP,CACL,MAAMlO,EAAQ,OAAOgF,CAAI,EACrBmG,GAAQA,EAAK,WAAa,GAAKA,EAAK,OAASnL,EAAOgO,EAAW,KAAK7C,CAAI,EAAO6C,EAAW,KAAK,SAAS,eAAehO,CAAK,CAAC,CACnI,CACF,CACA,OAAOkO,CACT,CACA,SAASH,GAAY9B,EAAQ2B,EAAOzB,EAAS,KAAM,CACjD,QAAStK,EAAI,EAAGsC,EAAMyJ,EAAM,OAAQ/L,EAAIsC,EAAKtC,IAAKoK,EAAO,aAAa2B,EAAM/L,CAAC,EAAGsK,CAAM,CACxF,CACA,SAASwB,GAAc1B,EAAQxM,EAAS0M,EAAQgC,EAAa,CAC3D,GAAIhC,IAAW,OAAW,OAAOF,EAAO,YAAc,GACtD,MAAMtK,EAAOwM,GAAe,SAAS,eAAe,EAAE,EACtD,GAAI1O,EAAQ,OAAQ,CAClB,IAAI2O,EAAW,GACf,QAASvM,EAAIpC,EAAQ,OAAS,EAAGoC,GAAK,EAAGA,IAAK,CAC5C,MAAMwM,EAAK5O,EAAQoC,CAAC,EACpB,GAAIF,IAAS0M,EAAI,CACf,MAAMC,EAAWD,EAAG,aAAepC,EAC/B,CAACmC,GAAY,CAACvM,EAAGyM,EAAWrC,EAAO,aAAatK,EAAM0M,CAAE,EAAIpC,EAAO,aAAatK,EAAMwK,CAAM,EAAOmC,GAAYD,EAAG,OAAM,CAC9H,MAAOD,EAAW,EACpB,CACF,MAAOnC,EAAO,aAAatK,EAAMwK,CAAM,EACvC,MAAO,CAACxK,CAAI,CACd,CAiDA,MAAM4M,GAAgB,6BACtB,SAASC,GAAc9F,EAASuB,EAAQ,GAAOwE,EAAK,OAAW,CAC7D,OAAOxE,EAAQ,SAAS,gBAAgBsE,GAAe7F,CAAO,EAAI,SAAS,cAAcA,EAAS,CAChG,GAAA+F,CACJ,CAAG,CACH,CA4CA,SAASC,GAAcC,EAAWlL,EAAO,CACvC,MAAMmL,EAAShO,EAAW+N,CAAS,EACnC,OAAO/N,EAAW,IAAM,CACtB,MAAM+N,EAAYC,EAAM,EACxB,OAAQ,OAAOD,EAAS,CACtB,IAAK,WACH,OAAO/O,EAAQ,IAAM+O,EAAUlL,CAAK,CAAC,EACvC,IAAK,SACH,MAAMoL,EAAQjG,GAAY,IAAI+F,CAAS,EACjCN,EAA+CG,GAAcG,EAAWE,EAAOjP,EAAQ,IAAM6D,EAAM,EAAE,CAAC,EAC5G,OAAAiI,GAAO2C,EAAI5K,EAAOoL,CAAK,EAChBR,CACf,CACE,CAAC,CACH,CACA,SAASS,GAAQrL,EAAO,CACtB,KAAM,CAAA,CAAGsL,CAAM,EAAIrI,GAAWjD,EAAO,CAAC,WAAW,CAAC,EAClD,OAAOiL,GAAc,IAAMjL,EAAM,UAAWsL,CAAM,CACpD,CChwBO,MAAMC,GAA0B,EAC1BC,GAAuBC,GAAY,CAC5C,MAAMC,EAAS,IAAI,gBACnB,OAAAA,EAAO,IAAI,IAAKD,EAAQ,CAAC,EACzBC,EAAO,IAAI,IAAKD,EAAQ,CAAC,EACrBA,EAAQ,GACRC,EAAO,IAAI,IAAKD,EAAQ,CAAC,EAEzBA,EAAQ,GACRC,EAAO,IAAI,IAAKD,EAAQ,CAAC,EAEtB,YAAYA,EAAQ,SAAS,IAAIF,EAAuB,IAAIG,EAAO,SAAQ,CAAE,EACxF,0KCVA,IAAIC,EAAM,OAAO,UAAU,eACvBC,EAAS,IASb,SAASC,GAAS,CAAA,CASd,OAAO,SACTA,EAAO,UAAY,OAAO,OAAO,IAAI,EAMhC,IAAIA,EAAM,EAAG,YAAWD,EAAS,KAYxC,SAASE,EAAGnQ,EAAIgC,EAASoO,EAAM,CAC7B,KAAK,GAAKpQ,EACV,KAAK,QAAUgC,EACf,KAAK,KAAOoO,GAAQ,EACtB,CAaA,SAASC,EAAYC,EAASC,EAAOvQ,EAAIgC,EAASoO,EAAM,CACtD,GAAI,OAAOpQ,GAAO,WAChB,MAAM,IAAI,UAAU,iCAAiC,EAGvD,IAAIE,EAAW,IAAIiQ,EAAGnQ,EAAIgC,GAAWsO,EAASF,CAAI,EAC9CI,EAAMP,EAASA,EAASM,EAAQA,EAEpC,OAAKD,EAAQ,QAAQE,CAAG,EACdF,EAAQ,QAAQE,CAAG,EAAE,GAC1BF,EAAQ,QAAQE,CAAG,EAAI,CAACF,EAAQ,QAAQE,CAAG,EAAGtQ,CAAQ,EADxBoQ,EAAQ,QAAQE,CAAG,EAAE,KAAKtQ,CAAQ,GAD1CoQ,EAAQ,QAAQE,CAAG,EAAItQ,EAAUoQ,EAAQ,gBAI7DA,CACT,CASA,SAASG,EAAWH,EAASE,EAAK,CAC5B,EAAEF,EAAQ,eAAiB,EAAGA,EAAQ,QAAU,IAAIJ,EACnD,OAAOI,EAAQ,QAAQE,CAAG,CACjC,CASA,SAASE,GAAe,CACtB,KAAK,QAAU,IAAIR,EACnB,KAAK,aAAe,CACtB,CASAQ,EAAa,UAAU,WAAa,UAAsB,CACxD,IAAIC,EAAQ,CAAA,EACRC,EACA/I,EAEJ,GAAI,KAAK,eAAiB,EAAG,OAAO8I,EAEpC,IAAK9I,KAAS+I,EAAS,KAAK,QACtBZ,EAAI,KAAKY,EAAQ/I,CAAI,GAAG8I,EAAM,KAAKV,EAASpI,EAAK,MAAM,CAAC,EAAIA,CAAI,EAGtE,OAAI,OAAO,sBACF8I,EAAM,OAAO,OAAO,sBAAsBC,CAAM,CAAC,EAGnDD,CACT,EASAD,EAAa,UAAU,UAAY,SAAmBH,EAAO,CAC3D,IAAIC,EAAMP,EAASA,EAASM,EAAQA,EAChCM,EAAW,KAAK,QAAQL,CAAG,EAE/B,GAAI,CAACK,EAAU,MAAO,CAAA,EACtB,GAAIA,EAAS,GAAI,MAAO,CAACA,EAAS,EAAE,EAEpC,QAASpO,EAAI,EAAG0I,EAAI0F,EAAS,OAAQC,EAAK,IAAI,MAAM3F,CAAC,EAAG1I,EAAI0I,EAAG1I,IAC7DqO,EAAGrO,CAAC,EAAIoO,EAASpO,CAAC,EAAE,GAGtB,OAAOqO,CACT,EASAJ,EAAa,UAAU,cAAgB,SAAuBH,EAAO,CACnE,IAAIC,EAAMP,EAASA,EAASM,EAAQA,EAChCQ,EAAY,KAAK,QAAQP,CAAG,EAEhC,OAAKO,EACDA,EAAU,GAAW,EAClBA,EAAU,OAFM,CAGzB,EASAL,EAAa,UAAU,KAAO,SAAcH,EAAOS,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACrE,IAAIZ,EAAMP,EAASA,EAASM,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQC,CAAG,EAAG,MAAO,GAE/B,IAAIO,EAAY,KAAK,QAAQP,CAAG,EAC5BzL,EAAM,UAAU,OAChBsM,EACA5O,EAEJ,GAAIsO,EAAU,GAAI,CAGhB,OAFIA,EAAU,MAAM,KAAK,eAAeR,EAAOQ,EAAU,GAAI,OAAW,EAAI,EAEpEhM,EAAG,CACT,IAAK,GAAG,OAAOgM,EAAU,GAAG,KAAKA,EAAU,OAAO,EAAG,GACrD,IAAK,GAAG,OAAOA,EAAU,GAAG,KAAKA,EAAU,QAASC,CAAE,EAAG,GACzD,IAAK,GAAG,OAAOD,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,CAAE,EAAG,GAC7D,IAAK,GAAG,OAAOF,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,CAAE,EAAG,GACjE,IAAK,GAAG,OAAOH,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,GACrE,IAAK,GAAG,OAAOJ,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,EAC/E,CAEI,IAAK3O,EAAI,EAAG4O,EAAO,IAAI,MAAMtM,EAAK,CAAC,EAAGtC,EAAIsC,EAAKtC,IAC7C4O,EAAK5O,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3BsO,EAAU,GAAG,MAAMA,EAAU,QAASM,CAAI,CAC9C,KAAS,CACL,IAAI5K,EAASsK,EAAU,OACnB5L,EAEJ,IAAK1C,EAAI,EAAGA,EAAIgE,EAAQhE,IAGtB,OAFIsO,EAAUtO,CAAC,EAAE,MAAM,KAAK,eAAe8N,EAAOQ,EAAUtO,CAAC,EAAE,GAAI,OAAW,EAAI,EAE1EsC,EAAG,CACT,IAAK,GAAGgM,EAAUtO,CAAC,EAAE,GAAG,KAAKsO,EAAUtO,CAAC,EAAE,OAAO,EAAG,MACpD,IAAK,GAAGsO,EAAUtO,CAAC,EAAE,GAAG,KAAKsO,EAAUtO,CAAC,EAAE,QAASuO,CAAE,EAAG,MACxD,IAAK,GAAGD,EAAUtO,CAAC,EAAE,GAAG,KAAKsO,EAAUtO,CAAC,EAAE,QAASuO,EAAIC,CAAE,EAAG,MAC5D,IAAK,GAAGF,EAAUtO,CAAC,EAAE,GAAG,KAAKsO,EAAUtO,CAAC,EAAE,QAASuO,EAAIC,EAAIC,CAAE,EAAG,MAChE,QACE,GAAI,CAACG,EAAM,IAAKlM,EAAI,EAAGkM,EAAO,IAAI,MAAMtM,EAAK,CAAC,EAAGI,EAAIJ,EAAKI,IACxDkM,EAAKlM,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3B4L,EAAUtO,CAAC,EAAE,GAAG,MAAMsO,EAAUtO,CAAC,EAAE,QAAS4O,CAAI,CAC1D,CAEA,CAEE,MAAO,EACT,EAWAX,EAAa,UAAU,GAAK,SAAYH,EAAOvQ,EAAIgC,EAAS,CAC1D,OAAOqO,EAAY,KAAME,EAAOvQ,EAAIgC,EAAS,EAAK,CACpD,EAWA0O,EAAa,UAAU,KAAO,SAAcH,EAAOvQ,EAAIgC,EAAS,CAC9D,OAAOqO,EAAY,KAAME,EAAOvQ,EAAIgC,EAAS,EAAI,CACnD,EAYA0O,EAAa,UAAU,eAAiB,SAAwBH,EAAOvQ,EAAIgC,EAASoO,EAAM,CACxF,IAAII,EAAMP,EAASA,EAASM,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQC,CAAG,EAAG,OAAO,KAC/B,GAAI,CAACxQ,EACH,OAAAyQ,EAAW,KAAMD,CAAG,EACb,KAGT,IAAIO,EAAY,KAAK,QAAQP,CAAG,EAEhC,GAAIO,EAAU,GAEVA,EAAU,KAAO/Q,IAChB,CAACoQ,GAAQW,EAAU,QACnB,CAAC/O,GAAW+O,EAAU,UAAY/O,IAEnCyO,EAAW,KAAMD,CAAG,MAEjB,CACL,QAAS/N,EAAI,EAAGmO,EAAS,CAAA,EAAInK,EAASsK,EAAU,OAAQtO,EAAIgE,EAAQhE,KAEhEsO,EAAUtO,CAAC,EAAE,KAAOzC,GACnBoQ,GAAQ,CAACW,EAAUtO,CAAC,EAAE,MACtBT,GAAW+O,EAAUtO,CAAC,EAAE,UAAYT,IAErC4O,EAAO,KAAKG,EAAUtO,CAAC,CAAC,EAOxBmO,EAAO,OAAQ,KAAK,QAAQJ,CAAG,EAAII,EAAO,SAAW,EAAIA,EAAO,CAAC,EAAIA,EACpEH,EAAW,KAAMD,CAAG,CAC7B,CAEE,OAAO,IACT,EASAE,EAAa,UAAU,mBAAqB,SAA4BH,EAAO,CAC7E,IAAIC,EAEJ,OAAID,GACFC,EAAMP,EAASA,EAASM,EAAQA,EAC5B,KAAK,QAAQC,CAAG,GAAGC,EAAW,KAAMD,CAAG,IAE3C,KAAK,QAAU,IAAIN,EACnB,KAAK,aAAe,GAGf,IACT,EAKAQ,EAAa,UAAU,IAAMA,EAAa,UAAU,eACpDA,EAAa,UAAU,YAAcA,EAAa,UAAU,GAK5DA,EAAa,SAAWT,EAKxBS,EAAa,aAAeA,EAM1BY,UAAiBZ,yBC9UnB,MAAMtG,EAAE,OAAO,IAAI,qBAAqB,EAAE1G,GAAE,OAAO,IAAI,wBAAwB,EAAEO,GAAE,mCAAmCsN,GAAEnH,GAAG,GAAQA,GAAa,OAAOA,GAAjB,UAAoB3H,GAAE,GAAG,GAAG,CAAC,CAAC,EAAE2H,CAAC,EAAE1H,EAAE,CAACuB,EAAEnD,EAAEK,IAAI,CAAC,GAAGsB,GAAEwB,CAAC,EAAE,CAAC,MAAMP,EAAEO,EAAEmG,CAAC,EAAC,EAAG,CAAC,QAAQmH,EAAE,WAAW,CAAC,EAAE7N,EAAE,MAAM5C,CAAC,EAAE,OAAOyQ,GAAG,GAAG,OAAO,KAAK,CAAC,EAAE,QAAQnH,GAAGjJ,EAAEiJ,EAAE,EAAEA,CAAC,CAAC,CAAC,EAAEmH,CAAC,CAAC,GAAGA,GAAEtN,CAAC,EAAE,CAAC,GAAG,CAACsN,GAAEzQ,CAAC,EAAE,SAAS,GAAG,MAAM,QAAQmD,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,QAAQnD,CAAC,EAAE,MAAM,GAAG,IAAIsJ,EAAE,CAAA,EAAGmH,EAAE,CAAA,EAAGC,EAAE,CAAA,EAAG,UAAU9O,KAAKuB,EAAE,KAAI,EAAG,CAAC,MAAMnD,EAAEmD,EAAEvB,CAAC,EAAED,GAAE3B,CAAC,GAAGA,EAAE4C,EAAC,EAAE8N,EAAE,KAAK1Q,CAAC,EAAE0Q,EAAE,OAAOD,EAAE,KAAKzQ,CAAC,EAAEsJ,EAAE,KAAKtJ,CAAC,CAAC,CAAC,GAAG0Q,EAAE,OAAO,CAAC,GAAGA,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM,0FAA0F,EAAE,GAAG1Q,EAAE,OAAOsJ,EAAE,OAAOmH,EAAE,OAAO,SAAS,MAAM7N,EAAE5C,EAAE,MAAM,EAAEsJ,EAAE,MAAM,EAAEnG,EAAMsN,EAAE,SAAN,EAAa,CAAA,EAAGzQ,EAAE,MAAM,CAACyQ,EAAE,MAAM,EAAE9O,EAAE3B,EAAE,MAAMsJ,EAAE,OAAWmH,EAAE,SAAN,EAAa,IAAS,CAACA,EAAE,MAAM,EAAE,OAAOnH,EAAE,MAAM,CAACA,EAAEnG,IAAIvB,EAAE0H,EAAE1G,EAAEO,CAAC,EAAE9C,CAAC,CAAC,GAAGoQ,EAAE,MAAM,CAACnH,EAAE1G,IAAIhB,EAAE0H,EAAEnG,EAAEP,CAAC,EAAEvC,CAAC,CAAC,IAAQqQ,EAAE,SAAN,GAAc9O,EAAE8O,EAAE,CAAC,EAAE/O,EAAEtB,CAAC,EAAE,CAAC,OAAO8C,EAAE,SAASnD,EAAE,QAAQmD,EAAE,MAAM,CAACmG,EAAE1G,IAAIhB,EAAE0H,EAAEtJ,EAAE4C,CAAC,EAAEvC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,QAAQ8C,CAAC,EAAE,MAAMP,GAAG,CAAC,MAAM6N,EAAEtN,EAAEP,CAAC,EAAE,OAAOA,KAAK5C,GAAG2B,GAAE+O,EAAED,CAAC,GAAgBC,EAAEpH,CAAC,EAAC,EAAG,cAApB,aAAkC1H,EAAE6O,EAAEzQ,EAAE4C,CAAC,EAAEvC,CAAC,EAAE,IAAIqQ,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,GAAG1Q,EAAEmD,CAAC,CAAC,EAAEnD,EAAE,GAAG,CAAC,IAAImD,EAAEvB,EAAE8O,EAAE,OAAOD,GAAE,CAAC,EAAE9O,GAAE,CAAC,GAASwB,GAASvB,GAAG8O,EAAE,EAAEpH,CAAC,EAAC,GAAI,mBAApB,KAAsC,OAAO1H,EAAE,KAAK8O,CAAC,IAA9D,KAAiEvN,EAAE,CAAA,EAAG,MAAM,QAAQ,CAAC,EAAE9C,GAAE,EAAEL,CAAC,EAAEK,GAAE,OAAO,OAAO,CAAC,EAAEL,CAAC,EAAE,CAAA,CAAE,EAAEK,GAAE,CAACiJ,EAAE1G,IAAI0G,EAAE,OAAO,CAACA,EAAE,IAAIA,EAAE,OAAO1G,EAAE,CAAC,CAAC,EAAE,CAAA,CAAE,EAAE,SAAS8N,MAAKpH,EAAE,CAAC,GAAOA,EAAE,SAAN,EAAa,CAAC,KAAK,CAAC1G,CAAC,EAAE0G,EAAE,OAAOA,GAAG1H,EAAEgB,EAAE0G,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAOA,EAAE,SAAN,EAAa,CAAC,KAAK,CAAC1G,EAAEO,CAAC,EAAEmG,EAAE,OAAO1H,EAAEgB,EAAEO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,oFAAoFmG,EAAE,MAAM,GAAG,CAAC,CAAC,SAASvL,EAAEuL,EAAE,CAAC,OAAO,OAAO,OAAOA,EAAE,CAAC,SAAS,IAAIwD,GAAExD,CAAC,EAAE,IAAI1G,GAAGc,EAAE4F,EAAE1G,CAAC,EAAE,GAAGA,GAAG+N,GAAErH,EAAE1G,CAAC,EAAE,OAAOA,GAAYA,IAAT,OAAWgD,GAAE0D,CAAC,EAAE1D,GAAEhD,EAAE0G,CAAC,CAAC,CAAC,CAAC,CAAC,SAASe,GAAEf,EAAE,CAAC,OAAO,OAAO,QAAQ,GAAG,OAAO,OAAO,EAAE,CAAC,CAAC,OAAO,QAAQ,GAAG,CAAC,IAAInG,EAAE,EAAE,MAAMsN,EAAE,CAAC,CAAC,MAAM,OAAO,OAAO,EAAE,CAAC,CAAC7N,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI0G,EAAE,OAAcA,EAAEmH,EAAEtN,GAAG,IAAd,KAAiBmG,EAAEmH,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGnH,CAAC,EAAE,CAAC,SAAS,IAAIe,GAAEyC,GAAExD,CAAC,CAAC,EAAE,OAAO1G,GAAGyH,GAAWzH,IAAT,OAAWgD,GAAE0D,CAAC,EAAE1D,GAAEhD,EAAE0G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAASwD,GAAE,EAAE,CAAC,OAAO/O,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,IAAInG,EAAE,CAAA,EAAG,MAAMsN,EAAE,CAACnH,EAAE1G,IAAI,CAACO,EAAEmG,CAAC,EAAE1G,CAAC,EAAE,OAAgB,IAAT,QAAY5C,EAAE,CAAC,EAAE,QAAQsJ,GAAGmH,EAAEnH,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,GAAG,WAAWnG,CAAC,GAAG,CAAC,QAAQvB,EAAE,EAAE,EAAE6O,CAAC,EAAE,WAAWtN,CAAC,CAAC,EAAE,iBAAiB,IAAInD,EAAE,CAAC,EAAE,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM4Q,GAAE,CAACtH,EAAE1G,IAAI,CAAC,UAAUO,KAAKmG,EAAE,GAAG,CAAC1G,EAAEO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE0N,GAAE,CAACvH,EAAE1G,IAAI,CAAC,SAAS,CAACO,EAAEsN,CAAC,IAAInH,EAAE,QAAO,EAAG,GAAG,CAAC1G,EAAE6N,EAAEtN,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE2N,GAAE,CAACxH,EAAE1G,IAAI,CAAC,MAAMO,EAAE,QAAQ,QAAQmG,CAAC,EAAE,UAAUmH,KAAKtN,EAAE,GAAG,CAACP,EAAE6N,EAAEnH,EAAEmH,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS/M,KAAK,EAAE,CAAC,OAAO3F,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,IAAInG,EAAE,CAAA,EAAG,MAAMsN,EAAE,CAACnH,EAAE1G,IAAI,CAACO,EAAEmG,CAAC,EAAE1G,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAMA,GAAGhB,EAAEgB,EAAE,EAAE6N,CAAC,CAAC,EAAE,WAAWtN,CAAC,CAAC,EAAE,iBAAiB,IAAI9C,GAAE,EAAEL,CAAC,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS2Q,MAAK,EAAE,CAAC,OAAO5S,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,IAAInG,EAAE,CAAA,EAAG,MAAMsN,EAAE,CAACnH,EAAE1G,IAAI,CAACO,EAAEmG,CAAC,EAAE1G,CAAC,EAAE,OAAOvC,GAAE,EAAEL,CAAC,EAAE,QAAQsJ,GAAGmH,EAAEnH,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK1G,GAAGhB,EAAEgB,EAAE,EAAE6N,CAAC,CAAC,EAAE,WAAWtN,CAAC,CAAC,EAAE,iBAAiB,IAAI9C,GAAE,EAAEL,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS+Q,EAAE,EAAE,CAAC,MAAM,CAAC,CAACzH,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAQ,EAAE,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,SAAS1D,MAAK,EAAE,CAAC,MAAM6K,EAAY,OAAO,EAAE,CAAC,GAApB,SAAsB,EAAE,CAAC,EAAE,OAAO9O,EAAM,EAAE,SAAN,EAAa,EAAE,CAAC,EAAY,OAAO,EAAE,CAAC,GAApB,SAAsB,OAAO,EAAE,CAAC,EAAE,OAAO5D,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAMA,GAAG,CAAC,IAAI1G,EAAE,CAAC,CAAO6N,GAAItN,EAAC,EAAEmG,CAAC,EAAE,MAAM,CAAC,QAAiB3H,IAAT,QAAYC,EAAED,EAAE2H,EAAE,CAACA,EAAEnG,IAAI,CAACP,EAAE0G,CAAC,EAAEnG,CAAC,CAAC,EAAE,WAAWP,CAAC,CAAC,EAAE,iBAAiB,IAAI,CAAO6N,GAAItN,EAAC,EAAE,OAAgBxB,IAAT,OAAW,CAAA,EAAG3B,EAAE2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS3D,GAAEsL,EAAE,CAAC,QAAQ,CAAC,SAASgD,GAAEhD,EAAE,CAAC,OAAgB,OAAOA,GAAjB,QAAkB,CAAC,SAAS0H,GAAE1H,EAAE,CAAC,OAAgB,OAAOA,GAAjB,QAAkB,CAAC,SAASjF,GAAEiF,EAAE,CAAC,OAAgB,OAAOA,GAAjB,QAAkB,CAAC,MAAM2H,GAAElT,EAAEgT,EAAE/S,EAAC,CAAC,EAAEkT,GAAEnT,EAAEgT,EAAE/S,EAAC,CAAC,EAAEmT,GAAEF,GAAEG,GAAE9H,GAAG,OAAO,OAAOvL,EAAEuL,CAAC,EAAE,CAAC,WAAW1G,GAAG,CAAC,OAAOwO,GAAE1N,EAAE4F,GAAGnG,EAAEP,EAAEmO,EAAEzH,GAAG0H,GAAE1H,CAAC,GAAGA,EAAE,WAAWnG,CAAC,CAAC,EAAC,CAAE,EAAE,IAAIA,CAAC,EAAE,SAASP,GAAG,CAAC,OAAOwO,GAAE1N,EAAE4F,GAAGnG,EAAEP,EAAEmO,EAAEzH,GAAG0H,GAAE1H,CAAC,GAAGA,EAAE,SAASnG,CAAC,CAAC,EAAC,CAAE,EAAE,IAAIA,CAAC,EAAE,UAAUP,GAAGwO,GAAE1N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGoO,GAAEpO,CAAC,GAAGA,EAAE,QAAQ0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,OAAOA,GAAGwO,GAAE1N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGoO,GAAEpO,CAAC,GAAGA,EAAE,SAAS0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,UAAUA,GAAGwO,GAAE1N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGoO,GAAEpO,CAAC,GAAGA,EAAE,QAAQ0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,SAASA,GAAG,CAAC,OAAOwO,GAAE1N,EAAE4F,GAAGnG,EAAEP,EAAEmO,EAAEzH,GAAG0H,GAAE1H,CAAC,GAAGA,EAAE,SAASnG,CAAC,CAAC,EAAC,CAAE,EAAE,IAAIA,CAAC,EAAE,MAAMP,GAAG,CAAC,OAAOwO,GAAE1N,EAAE4F,GAAGnG,EAAEP,EAAEmO,EAAEzH,GAAG0H,GAAE1H,CAAC,GAAG,EAAQA,EAAE,MAAMnG,CAAC,CAAE,EAAC,CAAE,EAAE,IAAIA,CAAC,CAAC,CAAC,EAAEkO,GAAED,GAAEL,EAAEC,EAAC,CAAC,EAAEM,GAAEhI,GAAG,OAAO,OAAOvL,EAAEuL,CAAC,EAAE,CAAC,QAAQ,CAAC1G,EAAEO,IAAImO,GAAE5N,EAAE4F,GAAG,CAACA,EAAE1G,IAAImO,EAAE5N,GAAGmJ,GAAEnJ,CAAC,GAAGmG,GAAGnG,GAAGP,GAAGO,CAAC,GAAGP,EAAEO,CAAC,CAAC,CAAC,EAAE,GAAGP,GAAG0O,GAAE5N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAG0J,GAAE1J,CAAC,GAAGA,EAAE0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,GAAGA,GAAG0O,GAAE5N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAG0J,GAAE1J,CAAC,GAAGA,EAAE0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,IAAIA,GAAG0O,GAAE5N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAG0J,GAAE1J,CAAC,GAAGA,GAAG0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,IAAIA,GAAG0O,GAAE5N,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAG0J,GAAE1J,CAAC,GAAGA,GAAG0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI0O,GAAE5N,EAAE4F,EAAEyH,EAAE,GAAGzE,GAAE,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAIgF,GAAE5N,EAAE4F,EAAEyH,EAAE,GAAGzE,GAAE,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,IAAIgF,GAAE5N,EAAE4F,EAAEyH,EAAE,GAAGzE,GAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,IAAIgF,GAAE5N,EAAE4F,EAAEyH,EAAE,GAAGzE,GAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEiF,GAAED,GAAEP,EAAEzE,EAAC,CAAC,EAAE5F,GAAE4C,GAAG,OAAO,OAAOvL,EAAEuL,CAAC,EAAE,CAAC,QAAQ,CAAC1G,EAAEO,IAAIuD,GAAEhD,EAAE4F,GAAG,CAACA,EAAE1G,IAAImO,EAAE5N,GAAGkB,GAAElB,CAAC,GAAGmG,GAAGnG,GAAGP,GAAGO,CAAC,GAAGP,EAAEO,CAAC,CAAC,CAAC,EAAE,GAAGP,GAAG8D,GAAEhD,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGyB,GAAEzB,CAAC,GAAGA,EAAE0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,GAAGA,GAAG8D,GAAEhD,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGyB,GAAEzB,CAAC,GAAGA,EAAE0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,IAAIA,GAAG8D,GAAEhD,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGyB,GAAEzB,CAAC,GAAGA,GAAG0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,IAAIA,GAAG8D,GAAEhD,EAAE4F,GAAGA,GAAGyH,EAAEnO,GAAGyB,GAAEzB,CAAC,GAAGA,GAAG0G,CAAC,GAAG1G,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI8D,GAAEhD,EAAE4F,EAAEyH,EAAE,GAAG1M,GAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,IAAIqC,GAAEhD,EAAE4F,EAAEyH,EAAE,GAAG1M,GAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEmN,GAAE9K,GAAEqK,EAAE1M,EAAC,CAAC,EAAEoN,GAAE1T,EAAEgT,EAAE,SAASzH,EAAE,CAAC,OAAiB,OAAOA,GAAlB,SAAmB,CAAC,CAAC,EAAEhE,GAAEvH,EAAEgT,EAAE,SAASzH,EAAE,CAAC,OAAgB,OAAOA,GAAjB,QAAkB,CAAC,CAAC,EAAEoI,GAAE3T,EAAEgT,EAAE,SAASzH,EAAE,CAAC,OAAaA,GAAN,IAAO,CAAC,CAAC,EAAEqI,GAAE5T,EAAEgT,EAAE,SAASzH,EAAE,CAAC,OAAaA,GAAN,IAAO,CAAC,CAAC,EAAE,IAAIsI,GAAE,CAAC,UAAU,KAAK,QAAQtI,EAAE,SAASwD,GAAE,MAAM,YAAY,EAAE,CAAC,OAAOzC,GAAE,CAAC,CAACf,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAO,EAAE,SAAN,EAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAMnG,EAAE,EAAE,CAAC,EAAE,IAAIsN,EAAE,CAAA,EAAG,GAAO,EAAE,SAAN,EAAa,OAAOzQ,EAAEmD,CAAC,EAAE,QAAQmG,GAAG,CAACmH,EAAEnH,CAAC,EAAE,CAAA,CAAE,CAAC,EAAE,CAAC,QAAQ,GAAG,WAAWmH,CAAC,EAAE,MAAM9O,EAAE,CAAC2H,EAAE1G,IAAI,CAAC6N,EAAEnH,CAAC,GAAGmH,EAAEnH,CAAC,GAAG,CAAA,GAAI,OAAO,CAAC1G,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM0G,GAAG1H,EAAEuB,EAAEmG,EAAE3H,CAAC,CAAC,EAAE,WAAW8O,CAAC,CAAC,EAAE,iBAAiB,IAAQ,EAAE,SAAN,EAAa,CAAA,EAAGzQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC,OAAOjC,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAInG,EAAE,CAAA,EAAG,GAAO,EAAE,OAAN,EAAW,MAAM,CAAC,QAAQ,GAAG,WAAWA,CAAC,EAAE,GAAO,EAAE,SAAN,EAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAMsN,EAAE,CAACnH,EAAE1G,IAAI,CAACO,EAAEmG,CAAC,GAAGnG,EAAEmG,CAAC,GAAG,CAAA,GAAI,OAAO,CAAC1G,CAAC,CAAC,CAAC,EAAEjB,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQiP,GAAE,EAAEtH,GAAG1H,EAAED,EAAE2H,EAAEmH,CAAC,CAAC,EAAE,WAAWtN,CAAC,CAAC,EAAE,iBAAiB,IAAQ,EAAE,SAAN,EAAa,CAAA,EAAGnD,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC,OAAOjC,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAInG,EAAE,CAAA,EAAG,GAAO,EAAE,OAAN,EAAW,MAAM,CAAC,QAAQ,GAAG,WAAWA,CAAC,EAAE,MAAMsN,EAAE,CAACnH,EAAE1G,IAAI,CAACO,EAAEmG,CAAC,GAAGnG,EAAEmG,CAAC,GAAG,CAAA,GAAI,OAAO,CAAC1G,CAAC,CAAC,CAAC,EAAE,GAAO,EAAE,SAAN,EAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAIjB,EAAE,GAAO,EAAE,SAAN,EAAa,MAAM,IAAI,MAAM,6EAAmFA,EAAE,EAAE,CAAC,IAAZ,KAAe,OAAOA,EAAE,SAAQ,CAAE,EAAE,EAAE,KAAK,CAAC3B,EAAEK,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQwQ,GAAE,EAAE,CAACvH,EAAE1G,IAAI,CAAC,MAAMO,EAAEvB,EAAE5B,EAAE4C,EAAE6N,CAAC,EAAE9O,EAAEC,EAAEvB,EAAEiJ,EAAEmH,CAAC,EAAE,OAAOtN,GAAGxB,CAAC,CAAC,EAAE,WAAWwB,CAAC,CAAC,EAAE,iBAAiB,IAAQ,EAAE,SAAN,EAAa,CAAA,EAAG,CAAC,GAAGnD,EAAE,EAAE,CAAC,CAAC,EAAE,GAAGA,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,YAAY,EAAE,CAAC,OAAOjC,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAU,IAAP,MAAoB,OAAO,GAAjB,UAAoB,MAAM,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAInG,EAAE,GAAO,EAAE,SAAN,EAAa,MAAM,IAAI,MAAM,2FAAiGA,EAAE,EAAE,CAAC,IAAZ,KAAe,OAAOA,EAAE,SAAQ,CAAE,EAAE,EAAE,IAAIsN,EAAE,CAAA,EAAG,MAAM9O,EAAE,CAAC2H,EAAE1G,IAAI,CAAC6N,EAAEnH,CAAC,GAAGmH,EAAEnH,CAAC,GAAG,CAAA,GAAI,OAAO,CAAC1G,CAAC,CAAC,CAAC,EAAE,CAAC5C,EAAEK,CAAC,EAAM,EAAE,SAAN,EAAa,CAACgR,GAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQP,GAAE,EAAE,CAACxH,EAAE1G,IAAI,CAAC,MAAMO,EAAY,OAAOmG,GAAjB,UAAoB,OAAO,MAAM,OAAOA,CAAC,CAAC,EAAE,KAAK,OAAOA,CAAC,EAAEmH,EAAStN,IAAP,MAAUvB,EAAE5B,EAAEmD,EAAExB,CAAC,EAAE+O,EAAE9O,EAAE5B,EAAEsJ,EAAE3H,CAAC,EAAE5D,EAAE6D,EAAEvB,EAAEuC,EAAEjB,CAAC,EAAE,OAAO+O,GAAGD,IAAI1S,CAAC,CAAC,EAAE,WAAW0S,CAAC,CAAC,EAAE,iBAAiB,IAAQ,EAAE,SAAN,EAAa,CAAA,EAAG,CAAC,GAAGzQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAGA,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa0D,EAAE,MAAMiN,GAAE,IAAI,SAAS,EAAE,CAAC,OAAO5S,EAAE,CAAC,CAACuL,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC1H,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,IAAI,CAAA,EAAG,YAAY,KAAK,EAAE,CAAC,CAAC,EAAE,KAAKmP,EAAE,OAAOnL,GAAE,IAAIqL,GAAE,QAAQC,GAAE,EAAEC,GAAE,OAAOE,GAAE,OAAOE,GAAE,OAAOC,GAAE,QAAQC,GAAE,OAAOnM,GAAE,QAAQoM,GAAE,YAAYC,GAAE,WAAW,SAASrI,EAAE,CAAC,OAAOvL,EAAEgT,GAAE,SAAS,EAAE,CAAC,OAAOnO,GAAGA,aAAa,CAAC,GAAE0G,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,SAASA,EAAE,CAAC,OAAOvL,EAAEgT,EAAEL,GAAEpH,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAMuI,WAAU,KAAK,CAAC,YAAY,EAAE,CAAC,IAAIjP,EAAE,GAAG,CAACA,EAAE,KAAK,UAAU,CAAC,CAAC,MAAS,CAACA,EAAE,CAAC,CAAC,MAAM,oDAAoDA,CAAC,EAAE,EAAE,KAAK,MAAM,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAMkP,GAAE,CAAC,QAAQ,GAAG,MAAM,MAAM,EAAE,SAASC,GAAEzI,EAAE,CAAC,OAAO,IAAI0I,GAAE1I,EAAEwI,EAAC,CAAC,CAAC,MAAME,EAAC,CAAC,YAAY,EAAEpP,EAAE,CAAC,KAAK,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,EAAE,KAAK,MAAMA,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAMA,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE6N,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI9O,EAAM,EAAE,SAAN,GAA0B,OAAO,EAAE,CAAC,GAAtB,WAAwBA,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG8O,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,IAAIzQ,EAAE,GAAGK,EAAE,CAAA,EAAG,MAAMqQ,EAAE,CAACpH,EAAE1G,IAAI,CAAC5C,EAAE,GAAGK,EAAEiJ,CAAC,EAAE1G,CAAC,EAAE7E,EAAE,CAAC0S,EAAE,KAAKnH,GAAG1H,EAAE0H,EAAE,KAAK,MAAMoH,CAAC,CAAC,GAAG/O,GAAG,CAASA,EAAE,KAAK,KAAK,EAAGmQ,GAAE,CAAC,QAAQ,GAAG,MAAMlP,EAAE5C,EAAEmD,MAAK9C,EAAEA,EAAE8C,EAAC,EAAE9C,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC,EAAE,OAAO,IAAI2R,GAAE,KAAK,MAAMjU,CAAC,CAAC,CAAC,KAAK,EAAE6E,EAAE,CAAC,GAAG,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,EAAE,EAAQ,EAAE,KAAK,KAAK,EAAG,OAAO,IAAIoP,GAAE,KAAK,MAAM,EAAE,CAAC,QAAQ,GAAG,MAAMpP,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC,EAAEkP,EAAC,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,WAAW,EAAEG,GAAE,CAAC,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,WAAU,CAAE,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,SAASA,GAAE3I,EAAE,CAAC,MAAM,IAAIuI,GAAEvI,CAAC,CAAC,CCOx0P,MAAM4I,GAAgB,CACzB,QAAS,UACT,UAAW,YACX,MAAO,QACP,QAAS,SAGb,ECQaC,GAAkB,CAC3B,QAAS,UACT,SAAU,WACV,WAAY,aACZ,UAAW,YACX,MAAO,OACX,0ECrBC,UAAY,CAGZ,IAAIC,EAAS,CAAA,EAAG,eAEhB,SAAS7F,GAAc,CAGtB,QAFI8F,EAAU,GAEL1Q,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAC1C,IAAImK,EAAM,UAAUnK,CAAC,EACjBmK,IACHuG,EAAUC,EAAYD,EAASE,EAAWzG,CAAG,CAAC,EAElD,CAEE,OAAOuG,CACT,CAEC,SAASE,EAAYzG,EAAK,CACzB,GAAI,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,SAC7C,OAAOA,EAGR,GAAI,OAAOA,GAAQ,SAClB,MAAO,GAGR,GAAI,MAAM,QAAQA,CAAG,EACpB,OAAOS,EAAW,MAAM,KAAMT,CAAG,EAGlC,GAAIA,EAAI,WAAa,OAAO,UAAU,UAAY,CAACA,EAAI,SAAS,SAAQ,EAAG,SAAS,eAAe,EAClG,OAAOA,EAAI,SAAQ,EAGpB,IAAIuG,EAAU,GAEd,QAASjM,KAAO0F,EACXsG,EAAO,KAAKtG,EAAK1F,CAAG,GAAK0F,EAAI1F,CAAG,IACnCiM,EAAUC,EAAYD,EAASjM,CAAG,GAIpC,OAAOiM,CACT,CAEC,SAASC,EAAaxS,EAAO0S,EAAU,CACtC,OAAKA,EAID1S,EACIA,EAAQ,IAAM0S,EAGf1S,EAAQ0S,EAPP1S,CAQV,CAEsC0Q,EAAO,SAC3CjE,EAAW,QAAUA,EACrBiE,UAAiBjE,GAOjB,OAAO,WAAaA,CAEtB,mDC7DMkG,GAAsB,MAC1BC,GAC4B,CAC5B,GAAI,OAAOA,GAAU,SAAU,CAC7B,GAAIA,IAAU,SACZ,OAAO,MAAM,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,uBAAa,GAAEC,KAAK7B,GAAKA,EAAE8B,WAAW,EAC5D,GACSF,IAAU,SACjB,OAAO,MAAM,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,uBAAa,GAAEC,KAAK7B,GAAKA,EAAE+B,WAAW,EAG1D,MAAM,IAAIC,MAAM,kBAAkBJ,CAAK,EAAE,CAE7C,CAEA,OAAOA,CACT,EAOMK,GAAiBjT,GACrB,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAACkT,MAAMC,QAAQnT,CAAK,EAExDoT,GAAmB,CAC9BC,EACAhE,EAA4B,CAAA,EAC5BiE,EAAmB,CAAA,IACH,CAChB,SAAW,CAAChN,EAAKtG,CAAK,IAAKuT,OAAOC,QAAQH,CAAG,EAAG,CAC9C,MAAM7F,EAAO,CAAC,GAAG6B,EAAQ/I,CAAG,EAExB2M,GAAcjT,CAAK,EACrBoT,GAAiBpT,EAAOwN,EAAM8F,CAAG,EAGjCA,EAAI,QAAQ9F,EAAKiG,KAAK,GAAG,CAAC,EAAmB,EAAIzT,CAErD,CAEA,OAAOsT,CACT,EAEaI,GAAcA,CACzBC,EAA0B,OAC1BC,EAAiC,WAE7BD,IAAiB,SAAWA,IAAiB,OACxCA,EAGLC,IAAc,SACTC,WAAWC,WAAW,8BAA8B,EAAEC,QACzD,OACA,QAGCH,EAGHI,GAAYA,CAChBC,EACAC,IAC4B,CAC5B,MAAM1Q,EAAkC,CAAE,GAAGyQ,CAAAA,EAE7C,UAAW3N,KAAOiN,OAAOrN,KAAKgO,CAAO,EAAG,CACtC,MAAMC,EAAYF,EAAK3N,CAAG,EACpB8N,EAAeF,EAAQ5N,CAAG,EAEhC9C,EAAO8C,CAAG,EACN2M,GAAckB,CAAS,GAAKlB,GAAcmB,CAAY,EACpDJ,GAAUG,EAAWC,CAAY,EACjCA,CACR,CAEA,OAAO5Q,CACT,EAIa6Q,GAAa,MACxBC,EACAV,EAAiC,WAC9B,CACH,MAAMhB,EAAQ,MAAMD,GAAoB2B,EAAO1B,KAAK,EAE9C2B,EAAeb,GAAYY,EAAOE,KAAMZ,CAAS,EACjDa,EAAU7B,EAAM2B,CAAY,EAElC,GAAI,CAACE,EAAS,MAAO,GAErB,MAAMC,EAAgB9B,EAAM+B,OACxBX,GAAUpB,EAAM+B,OAAQF,CAAO,EAC/BA,EAEEG,EAAYxB,GAAiBsB,CAAa,EAEhD,OAAOnB,OAAOC,QAAQoB,CAAS,EAC5BtL,IAAI,CAAC,CAAChD,EAAKtG,CAAK,IAAM,GAAGsG,CAAG,KAAKtG,CAAK,GAAG,EACzCyT,KAAK;AAAA,CAAI,CACd,483BC5GaoB,GAAe,MAC1BC,EACAlC,EACAgB,EAAiC,WAC9B,CACH,IAAIpI,EAAQsJ,EAAW,cACrB,0BAAA,EAGGtJ,IACHA,EAAQ,SAAS,cAAc,OAAO,EACtCA,EAAM,QAAQ,YAAc,OAC5BsJ,EAAW,OAAOtJ,CAAK,GAGzB,MAAMuJ,EAAc,CAClB,GAAGnC,EACH,MAAOA,GAAO,OAAS,QAAA,EAGzB,GAAImC,EAAa,CACf,MAAMC,EAAW,MAAMX,GAAWU,EAAanB,CAAS,EAExDpI,EAAM,YAAc;AAAA,EAAmBwJ,CAAQ;AAAA;AAAA,EAAUC,EAC3D,MAEEzJ,EAAM,YAAcyJ,EAExB,ECzBO,MAAMC,WACHC,WAAY,CAOpBC,YAAYC,EAAqC,CAC/C,MAAA,EAPeC,GAAAA,eACTC,GAAAA,uBAAkB,IACTF,GAAAA,mBACTG,GAAAA,qBACAC,GAAAA,sBAIN,KAAKJ,WAAaA,EAElB,KAAKC,OAAS,KAAKI,aAAa,CAAElB,KAAM,MAAA,CAAQ,EAChD,MAAMmB,EACFN,EAAWO,SAASC,QAAQC,YAAAA,GAAelD,OAAS,SAEnDiC,GAAa,KAAKS,OAAQD,EAAWzC,MAAO+C,CAAgB,CACnE,CAEAI,mBAAoB,CAClB,KAAKC,cAAAA,EACL,KAAKR,eAAAA,EACL,KAAKS,mBAAAA,CACP,CAEAC,sBAAuB,CACrB,KAAKT,gBAAAA,EACL,KAAKA,cAAgBU,OACrB,KAAKX,eAAAA,CACP,CAEQS,oBAAqB,CAE3B,MAAMG,EAASA,IAAM,CACnB,MAAMxC,EACF,KAAKyB,WAAWO,SAASC,QAAQC,YAAAA,GAAelD,OAAS,SAExDiC,GAAa,KAAKS,OAAQ,KAAKD,WAAWzC,MAAOgB,CAAS,CACjE,EAEA,KAAKyB,WAAWO,SAASC,QAAQnG,QAAQ2G,GAAG,kBAAmBD,CAAM,EAErE,MAAME,EAAazC,WAAWC,WAAW,8BAA8B,EAEvEwC,EAAWxL,iBAAiB,SAAUsL,CAAM,EAE5C,KAAKZ,aAAe,IAAM,CACxB,KAAKH,WAAWO,SAASC,QAAQnG,QAAQ6G,IAAI,kBAAmBH,CAAM,EACtEE,EAAWE,oBAAoB,SAAUJ,CAAM,CACjD,CACF,CAEAK,WAAY,CACV,KAAKjL,MAAMkL,QAAU,OACvB,CAEAC,WAAY,CACV,KAAKnL,MAAMkL,QAAU,MACvB,CAEQV,eAAgB,CAClB,KAAKT,kBAIT,KAAKA,gBAAkB,GACvBqB,eAAe,IAAM,CACnB,KAAKrB,gBAAkB,GACvB,KAAKsB,cAAAA,CACP,CAAC,EACH,CAEQA,eAAgB,CACtB,KAAKpB,gBAAAA,EACL,KAAKA,cAAgB/L,GACnB,IAAA,CAAA,MAAAoN,EAAA,KAAA,OAAAC,EAAOC,GAAaC,EAAA,IAAKH,EAAKzB,UAAU,CAAA,CAAA,EACxC,KAAKC,MACP,CACF,CACF;qRC1DO,MAAM4B,GAA4B,CACvC,CAAEC,IAAK,KAAMlQ,KAAM,UAAWmQ,WAAY,SAAU,EACpD,CAAED,IAAK,KAAMlQ,KAAM,QAASmQ,WAAY,YAAa,EACrD,CAAED,IAAK,KAAMlQ,KAAM,UAAWmQ,WAAY,SAAU,EACpD,CAAED,IAAK,KAAMlQ,KAAM,UAAWmQ,WAAY,SAAU,EACpD,CAAED,IAAK,QAASlQ,KAAM,uBAAwBmQ,WAAY,MAAO,EACjE,CAAED,IAAK,KAAMlQ,KAAM,SAAUmQ,WAAY,UAAW,EACpD,CAAED,IAAK,KAAMlQ,KAAM,SAAUmQ,WAAY,UAAWC,IAAK,EAAK,EAC9D,CAAEF,IAAK,KAAMlQ,KAAM,SAAUmQ,WAAY,QAASC,IAAK,EAAK,EAC5D,CAAEF,IAAK,KAAMlQ,KAAM,UAAWmQ,WAAY,QAASC,IAAK,EAAK,CAAC,EAGnDC,GAAiBH,GACXD,GAAUK,KAAKhN,GAAKA,EAAE4M,MAAQA,CAAG,GAEjCE,KAAO,GAGM,IAAIG,IAAIN,GAAU5N,IAAIiB,GAAKA,EAAE4M,GAAG,CAAC,EAmC1D,MAAMM,GAAoBN,GAAwB,CACvD,GAAI,OAAOO,UAAc,IAAa,MAAO,GAE7C,MAAMC,EAAYD,UAAUC,WAAa,CAACD,UAAUE,QAAQ,EAE5D,QAAS/V,EAAI,EAAGA,EAAI8V,EAAU9R,OAAQhE,IAAK,CACzC,MAAMgW,EAAcF,EAAU9V,CAAC,EAAEiW,YAAAA,EAGjC,GAAID,IAAgBV,EAAK,OAAOQ,EAAU9R,OAAShE,EAAI,EAGvD,GAAIgW,EAAYE,WAAW,GAAGZ,CAAG,GAAG,GAAKA,EAAIY,WAAW,GAAGF,CAAW,GAAG,EACvE,OAAOF,EAAU9R,OAAShE,EAG5B,KAAM,CAACmW,CAAQ,EAAIH,EAAYI,MAAM,GAAG,EAExC,GAAID,IAAab,GAAOA,EAAIY,WAAW,GAAGC,CAAQ,GAAG,EACnD,OAAOL,EAAU9R,OAAShE,EAAI,EAClC,CAEA,MAAO,EACT,EASMqW,GAAqBA,CACzBhV,EACAoD,IACY,CACZ,GAAI,CAACpD,EAAQ,OAEb,MAAMiV,EAAW7R,EAAI2R,MAAM,GAAG,EAAEG,OAAOC,OAAO,EAE9C,GAAIF,EAAStS,SAAW,EAAG,OAE3B,IAAIpG,EAAmByD,EAEvB,UAAWoV,KAAWH,EAAU,CAC9B,GAAI,OAAO1Y,GAAY,UAAYA,IAAY,KAAM,OAErDA,EAAWA,EAAoC6Y,CAAO,CACxD,CAEA,OAAO7Y,CACT,EAEM8Y,GAAcA,CAClBzO,EACAqF,IAEKA,EAEErF,EAAS0O,WACd,aACA,CAACC,EAAmBnS,IAAwB,CAC1C,MAAMtG,EAAQmP,EAAO7I,CAAG,EAExB,OAAOtG,IAAUmW,OAAYsC,EAAYC,OAAO1Y,CAAK,CACvD,CACF,EAToB8J,EAYT6O,GAAsBtD,GAKrB,CACZ,MAAMuD,EAAcV,GAAmB7C,EAAWwD,QAASxD,EAAW/O,GAAG,EAEzE,GAAI,OAAOsS,GAAgB,SACzB,OAAOL,GAAYK,EAAavD,EAAWlG,MAAM,EAGnD,MAAM2J,EAAeZ,GAAmB7C,EAAWlO,SAAUkO,EAAW/O,GAAG,EAE3E,OAAI,OAAOwS,GAAiB,SACnBP,GAAYO,EAAczD,EAAWlG,MAAM,EAG7CkG,EAAW/O,GACpB,EAUayS,GAAqBhY,GAEhCoV,MAAS,EAEL6C,GAAmB,MACvBC,GAEAC,GAAMD,CAAW,EACdE,KAAK,KAAM,IAAMC,QAAQC,QAAQlD,MAAS,CAAC,EAC3CgD,KAAK,KAAM,SAAY,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,mBAAoB,GAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEH,KAAK,KAAM,SAAY,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,mBAAoB,GAAEtG,QAAU7B,EAAEsI,OAAO,CAAC,EACxEH,KAAK,KAAM,SAAY,mCAAO,mBAAoB,CAAA,EAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEH,KAAK,KAAM,SAAY,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,mBAAoB,CAAA,EAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEH,KAAK,QAAS,SACb,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,sBAAuB,CAAA,EAAEtG,QAAU7B,EAAEsI,OAAO,CACrD,EACCH,KAAK,KAAM,SAAY,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,mBAAoB,GAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEH,KAAK,KAAM,SAAY,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,mBAAoB,GAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEH,KAAK,KAAM,SAAY,mCAAO,mBAAoB,CAAA,EAAEtG,KAAK7B,GAAKA,EAAEsI,OAAO,CAAC,EACxEC,WAAAA,EAEQC,GAAwC/V,GAAU,CAC7D,KAAM,CAAEmS,SAAAA,CAAAA,EAAa6D,GAAAA,EACfC,EAAqB9D,EAASC,QAAQC,YAAAA,EAAc8B,SACpD,CAACqB,EAAaU,CAAc,EAAI5Z,EACpC2Z,GAAsB,IACxB,EACM,CAACE,EAAcC,CAAe,EAAI9Z,EAEtCoW,MAAS,EACL,CAAC2D,EAAuBC,CAAwB,EAAIha,EAAa,EAAK,EAE5EW,GAAa,IAAM,CACjB,IAAIsZ,EAAY,IAEJ,SAAY,CACtBD,EAAyB,EAAI,EAE7B,GAAI,CACF,MAAME,EAAW,MAAMjB,GAAiBC,GAAa,EAErD,GAAIe,EAAW,OAEfH,EAAgBI,CAAQ,CAC1B,QAAA,CAEOD,GAAWD,EAAyB,EAAK,CAChD,CACF,GAEKG,EAELpZ,GAAU,IAAM,CACdkZ,EAAY,EACd,CAAC,CACH,CAAC,EAED,MAAMxQ,EAAeA,CAAClD,EAAK6I,IAAW,CACpC,MAAMgL,EAAaxB,GAAmB,CACpCE,QAASe,EAAAA,EACTzS,SAAUiT,GACV9T,IAAAA,EACA6I,OAAAA,CAAAA,CACD,EACKkL,EAAQF,EAAWlC,MAAM;AAAA,CAAI,EAEnC,OAAIoC,EAAMxU,QAAU,EACXsU,EAGTG,GAAA,IAEKD,EAAM/Q,IAAI,CAACiR,EAAMpX,IAAK,CAElBoX,EAAID,GAAA,IACJA,GAAA,IAAAnX,EAAQkX,EAAMxU,OAAS,CAAC,EAAA,EAAA2U,KAAY,IAAI,EAE5C,CAAC,CAGR,EAEMC,EAAQ7Z,EAAW,IAAM0W,GAAc2B,EAAAA,CAAa,CAAC,EAKrDyB,EAAwC,CAC5CzB,YAAAA,EACAU,eANyBgB,GAAiC,CAC1DhB,EAAegB,CAAe,CAChC,EAKEb,sBAAAA,EACAW,MAAAA,EACAjR,EAAAA,CAAAA,EAGF,OAAAuN,EACGgC,GAAmB6B,SAAQ,CAAC5a,MAAO0a,EAAY,IAAArZ,UAAA,CAAA,OAC7CoC,EAAMpC,QAAQ,CAAA,CAAA,CAGrB,EAEawZ,EAAiBA,IAAM,CAClC,MAAMzZ,EAAUD,GAAW4X,EAAkB,EAE7C,GAAI,CAAC3X,EACH,MAAM,IAAI4R,MAAM,+BAA+B,EAGjD,OAAO5R,CACT,ECpRa0Z,GAAe/Z,GAC1BoV,MACF,EAEaa,GAAqDvT,GAAU,CAC1E,KAAM,CAAEmS,SAAAA,EAAUhD,MAAAA,CAAAA,EAAUnP,EAE5B,OAAAsT,EACG+D,GAAaF,SAAQ,CAAC5a,MAAO,CAAE4V,SAAAA,EAAUb,YAAanC,CAAAA,EAAO,IAAAvR,UAAA,CAAA,OAAA0V,EAC3DyC,GAAmB,CAAA,IAAAnY,UAAA,CAAA,OAAA0V,EACjBgE,GAAS,CAAA,IAACC,SAAO,CAAA,OAAEvX,EAAMuX,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIzC,EAEavB,GAAkBA,IAAM,CACnC,MAAMrY,EAAUD,GAAW2Z,EAAY,EAEvC,GAAI,CAAC1Z,EAAS,MAAM,IAAI4R,MAAM,yBAAyB,EAEvD,OAAO5R,CACT,ECnCa6Z,GAAa,IAAM,CAC9B,KAAM,CAAE,SAAArF,CAAA,EAAa6D,GAAA,EACfyB,EAAUta,EAAW,IAAMgV,EAAS,WAAA,EAAc,OAAW,CAAE,KAAM,UAAW,EAChF,CAACuF,EAAQC,CAAS,EAAIrb,EAA6Cmb,EAAA,GAAW,UAAU,EAE9F,QAAQ,IAAI,iBAAkBC,GAAQ,EAEtC,MAAME,EAAqB7Y,GAA+B,CACxD,QAAQ,IAAI,uBAAwBA,CAAK,EACzC4Y,EAAU5Y,CAAK,CACjB,EAEA3B,GAAQ,IAAM,CACZqa,EAAA,GAAW,QAAQ,GAAG,eAAgBG,CAAiB,CACzD,CAAC,EAEDva,GAAU,IAAM,CACdoa,EAAA,GAAW,QAAQ,IAAI,eAAgBG,CAAiB,CAC1D,CAAC,EAED,MAAMhG,EAAazU,EAAW,IAAMsa,EAAA,GAAW,wBAAwB,EASvE,MAAO,CACL,IATUta,EAAW,IAAM,CAC3B,MAAM0a,EAAsBjG,EAAA,EAE5B,OAAOiG,EACHrM,GAAoBqM,CAAmB,EACvC,MACN,CAAC,EAIC,OAAAH,CAAA,CAEJ,EAEaI,GAAkB,IAAM,CACnC,KAAM,CAAE,SAAA3F,CAAA,EAAa6D,GAAA,EAErB,MAAO,CACL,MAAO,IAAM,CACX,MAAM+B,EAAkB5F,EAAS,QAAQ,YAAA,EACnC3E,EAAIuK,GAAiB,WAAW,EAChCtb,EAAI+Q,EAAIuK,GAAiB,WAAW,IAAIvK,CAAC,EAAI,OAEnD,GAAI,CAACA,GAAK,CAAC/Q,EACT,MAAM,IAAI,MAAM,4BAA4B,EAG9C,OAAO0V,EAAS,cAAc,CAC5B,EAAA3E,EACA,EAAA/Q,CAAA,CACD,CACH,CAAA,CAEJ,4KC1DO,MAAMub,GAAgBhY,GAA+B,CAC1D,KAAM,CAAEiY,IAAAA,EAAKP,OAAAA,CAAAA,EAAWF,GAAAA,EAGxBU,eAAQC,MAAM,iBAAkB,CAC9BpZ,MAAOiB,EAAMjB,KAAAA,CACd,GAED,IAAA,CAAA,IAAAqZ,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAD,EAAAC,WAAAA,IAAAC,EAAAF,EAAAG,YAAAD,EAAAD,WAAAA,IAAAG,EAAAF,EAAAC,YAAAC,OAAAA,EAAAH,WAAAI,EAAAL,EAAA,IAIOM,KAAKC,UAAU5Y,EAAMjB,KAAK,EAAC,IAAA,EAAA2Z,EAAAH,EAI3BN,EAAG,IAAA,EAAAS,EAAAD,EAAA,IAIHE,KAAKC,UAAUlB,EAAAA,CAAQ,EAAC,IAAA,EAAAU,CAAA,GAAA,CAIjC,EC1BaS,GAAkB,MAAOC,GAAmC,CACvE,GAAI,CAACA,EAAM,MAAO,GAElB,GAAI,CACF,GAAI,WAAW,WAAW,UACxB,aAAM,UAAU,UAAU,UAAUA,CAAI,EAEjC,EAEX,OACOX,EAAO,CACZ,QAAQ,MAAM,8BAA+BA,CAAK,CACpD,CAEA,GAAI,CACF,MAAMY,EAAW,SAAS,cAAc,UAAU,EAElDA,EAAS,MAAQD,EACjBC,EAAS,MAAM,SAAW,QAC1BA,EAAS,MAAM,KAAO,YACtBA,EAAS,MAAM,IAAM,YACrB,SAAS,KAAK,OAAOA,CAAQ,EAC7BA,EAAS,MAAA,EACTA,EAAS,OAAA,EACT,MAAMhZ,EAAS,SAAS,YAAY,MAAM,EAE1C,OAAAgZ,EAAS,OAAA,EAEFhZ,CACT,MACM,CACJ,MAAO,EACT,CACF,04BC1BA,MAAMiZ,GAAkBC,GAAqB,CAG3C,MAAMC,EAAWC,GAAetD,QAE1BuD,EAAKF,EAAG,EAAG,GAAG,EAEpBE,OAAAA,EAAGC,QAAQJ,CAAQ,EACnBG,EAAGE,KAAAA,EAEIF,EAAGG,aAAa,CAAEC,SAAU,EAAGC,OAAQ,EAAGC,SAAU,EAAA,CAAM,CACnE,EAEaC,GAAgBA,IAAM,CACjC,KAAM,CAAE5T,EAAAA,CAAAA,EAAMqR,EAAAA,EACR,CAAEa,IAAAA,CAAAA,EAAQT,GAAAA,EAEVoC,EAAaA,IAAM,CACvB,MAAMC,EAAa5B,EAAAA,EAEf4B,GACFhB,GAAgBgB,CAAU,CAE9B,EAEA,OAAA,IAAA,CAAA,IAAAzB,EAAArB,KAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAC,WAAAC,EAAAuB,EAAAxB,WAAAyB,EAAA1B,EAAAG,YAAAC,EAAAsB,EAAAzB,WAAAI,OAAAA,EAAAL,EAAA/E,EAGO3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAE/B,EAAAA,CAAK,EAAAra,aACJ,IAAA,CAAA,IAAAqc,EAAAC,GAAAA,EAAAC,EAAAF,EAAA3B,WAAA6B,OAAAA,EAAAC,QAKIR,EAAUS,EAAAC,GAAA,CAAA,IAAAC,EACZtF,OAAOlP,EAAE,0BAA0B,CAAC,EAACyU,EACjCxB,GAAea,GAAY,EAACU,OAAAA,IAAAD,EAAAjb,GAAAob,EAAAN,EAAA,QAAAG,EAAAjb,EAAAkb,CAAA,EAAAC,IAAAF,EAAAvU,IAAAoU,EAAAO,UAAAJ,EAAAvU,EAAAyU,GAAAF,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,MAAAA,CAAA,EAAAuH,CAAA,GAAA,CAAA,CAG5C,EAAAH,CAAA,EAAAvB,EAAA6B,QAMUR,EAAUlB,EAAAH,EAAA,IAGlBxS,EAAE,6BAA6B,CAAC,EAAA2S,EAAAD,EAAA,IAK9B1S,EAAE,+BAA+B,CAAC,EAAAqS,CAAA,GAAA,CAIjD,EAAEuC,GAAA,CAAA,OAAA,CAAA,yWCzDF,MAAMC,GAAiBA,IAAA7D,GAAAA,EAMV8D,GAAaA,IAAM,CAC9B,KAAM,CAAEnD,OAAAA,CAAAA,EAAWF,GAAAA,EACb,CAAEzR,CAAAA,EAAMqR,EAAAA,EAEd,OAAA,IAAA,CAAA,IAAAiB,EAAAyC,GAAAA,EAAApC,OAAAA,EAAAL,EAAA/E,EAEKtP,GAAM,CAAA,IAAApG,UAAA,CAAA,MAAA,CAAA0V,EACJ7O,GAAK,CAAA,IAACuV,MAAI,CAAA,MAAG,CAACrL,GAAcoM,QAASpM,GAAcqM,SAAS,EAAeC,SAASvD,EAAAA,GAAUA,QAAU,EAAE,CAAC,EAAA,IAAA9Z,UAAA,CAAA,IAAAkc,EAAAI,KAAA3B,EAAAuB,EAAAxB,WAAAyB,EAAAxB,EAAAD,WAAAG,EAAAsB,EAAAvB,YAAAE,OAAAA,EAAAoB,EAAAxG,EAEvGsH,OAAcrC,CAAA,EAAAG,EAAAqB,EAAA,IAGVhU,EAAE,2BAA2B,CAAC,EAAA2S,EAAAD,EAAA,IAG9B1S,EAAE,kCAAkC,CAAC,EAAA+T,CAAA,CAAA,CAAA,EAAAxG,EAK7C7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEtC,EAAAA,GAAUA,SAAW/I,GAAcuM,KAAK,EAAA,IAAAtd,UAAA,CAAA,OAAA0V,EAClDqG,GAAa,EAAA,CAAA,CAAA,CAAA,EAAArG,EAEf7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEtC,EAAAA,GAAUA,SAAW/I,GAAcwM,OAAO,EAAA,IAAAvd,UAAA,CAAA,IAAAqc,EAAAC,KAAAC,EAAAF,EAAA3B,WAAA8C,EAAAjB,EAAA7B,WAAA+C,EAAAD,EAAA5C,YAAAE,OAAAA,EAAAuB,EAAA3G,EAElDsH,OAAcT,CAAA,EAAAzB,EAAA0C,EAAA,IAGVrV,EAAE,uCAAuC,CAAC,EAAA2S,EAAA2C,EAAA,IAG1CtV,EAAE,kCAAkC,CAAC,EAAAkU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA5B,CAAA,GAAA,CAQtD,+kCCjCA,MAAMuC,GAAiBA,IAAA7D,GAAAA,EAMVuE,GAAkBtb,GAA+B,CAC5D,KAAM,CAAE+F,CAAAA,EAAMqR,EAAAA,EACR,CAAEjF,SAAAA,CAAAA,EAAa6D,GAAAA,EAEf,CAACuF,EAAgBC,CAAiB,EAAIlf,EAA6B6V,EAASsJ,SAAAA,EAAW/D,MAAM,EAEnGta,OAAAA,GAAQ,IAAM,CACZ+U,EAASS,GAAG,gBAAiB4I,CAAiB,CAChD,CAAC,EACDne,GAAU,IAAM,CACd8U,EAASW,IAAI,gBAAiB0I,CAAiB,CACjD,CAAC,GAED,IAAA,CAAA,IAAAnD,EAAAqD,GAAAA,EAAAhD,OAAAA,EAAAL,EAAA/E,EAEKtP,GAAM,CAAA,IAACN,UAAQ,CAAA,OAAA4P,EAAG0E,GAAY,CAAA,IAACjZ,OAAK,CAAA,OAAEwc,EAAAA,CAAgB,CAAA,CAAA,CAAA,EAAA,IAAA3d,UAAA,CAAA,MAAA,CAAA0V,EACpD7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEuB,EAAAA,IAAqB3M,GAAgB+M,QAAQ,EAAA,IAAA/d,UAAA,CAAA,IAAAkc,EAAAI,KAAA3B,EAAAuB,EAAAxB,WAAAyB,EAAAxB,EAAAD,WAAAG,EAAAsB,EAAAvB,YAAAE,OAAAA,EAAAoB,EAAAxG,EAErDsH,OAAcrC,CAAA,EAAAG,EAAAqB,EAAA,IAGVhU,EAAE,oCAAoC,CAAC,EAAA2S,EAAAD,EAAA,IAGvC1S,EAAE,+BAA+B,CAAC,EAAA+T,CAAA,CAAA,CAAA,EAAAxG,EAK1C7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEuB,EAAAA,IAAqB3M,GAAgBgN,UAAU,EAAA,IAAAhe,UAAA,CAAA,OAAA0V,EACzDuH,GAAU,EAAA,CAAA,CAAA,CAAA,EAAAvH,EAEZ7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEuB,EAAAA,IAAqB3M,GAAgBiN,SAAS,EAAA,IAAAje,UAAA,CAAA,IAAAqc,EAAAa,GAAAA,EAAAX,EAAAF,EAAA3B,WAAA8C,EAAAjB,EAAA7B,WAAA+C,EAAAD,EAAA5C,YAAAsD,EAAAT,EAAA7C,YAAAE,OAAAA,EAAA2C,EAAA,IAKlDtV,EAAE,sCAAsC,CAAC,EAAA2S,EAAAoD,EAAA,IAGzC/V,EAAE,qCAAqC,CAAC,EAAAkU,CAAA,CAAA,CAAA,EAAA3G,EAKhD7O,GAAK,CAAA,IAACuV,MAAI,CAAA,OAAEuB,EAAAA,IAAqB3M,GAAgBmN,KAAK,EAAA,IAAAne,UAAA,CAAA,IAAAoe,EAAAC,KAAAC,EAAAF,EAAA1D,WAAA6D,EAAAD,EAAA5D,WAAA8D,EAAAD,EAAA3D,YAAA6D,EAAAD,EAAA5D,YAAA8D,EAAAJ,EAAA1D,YAAAE,OAAAA,EAAA0D,EAAA,IAK9CrW,EAAE,6BAA6B,CAAC,EAAA2S,EAAA2D,EAAA,IAGhCtW,EAAE,iCAAiC,CAAC,EAAAwW,GAAAD,EAAA,QAK9Btc,EAAMuX,QAAO,EAAA,EAAAmB,EAAA4D,EAAA,IAGrBvW,EAAE,cAAc,CAAC,EAAAiW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA3D,CAAA,GAAA,CAOhC,EAAEsC,GAAA,CAAA,OAAA,CAAA,EC1FF,IAAM6B,GAAmC,CACvCC,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,KAAM,OACNC,OAAQ,eACR,eAAgB,EAChB,iBAAkB,QAClB,kBAAmB,OACrB,EAEOC,GAAQP,oZCJTQ,GAAQhd,GAAmC,CAC/C,KAAM,CAACid,EAAYC,CAAI,EAAIja,GAAWjD,EAAO,CAC3C,QACA,OACA,cACA,WACA,QACA,OACA,WACA,qBAAA,CACD,EAED,OAAA,IAAA,CAAA,IAAAoY,EAAArB,GAAAA,EAAAoG,OAAAA,GAAA/E,EAAA5E,EAEQgJ,GAAA,CAAA,IACJE,OAAA,CAAA,OAAOO,EAAWG,MAAQZ,GAAkBE,KAAA,EAAA,IAC5CC,QAAA,CAAA,OAAQM,EAAWG,MAAQZ,GAAkBG,MAAA,EAAA,IAC7CG,QAAA,CAAA,OAAQG,EAAWI,OAASb,GAAkBM,MAAA,EAAA,GAAA,gBAAA,CAAA,OAE5CjG,GAAA,IAAA,CAAA,CAAAoG,EAAWK,mBAAA,EAAA,EACNC,OAAON,EAAWO,aAAehB,GAAkB,cAAc,CAAC,EAAI,GACvEe,OAAON,EAAWG,IAAI,EACtBG,OAAON,EAAWO,aAAehB,GAAkB,cAAc,CAAC,CAAA,EAAA,IAAA,OAAA,CAAA,OAEjEiB,GACL,SACA,cACA,GAAIR,EAAWzZ,MAAQ,KACnB,CACE,UAAUka,GAAYC,GAAaV,EAAWzZ,IAAI,CAAC,CAAC,GACpD,UAAUka,GAAYT,EAAWzZ,IAAI,CAAC,IAExC,GACJyZ,EAAWW,OAAS,KAAOX,EAAWW,MAAQ,EAChD,CAAA,EAAA,GAAA,eAAA,CAAA,MACa,CAACX,EAAWrf,UAAY,CAACigB,GAAYX,CAAI,EAAI,OAAS,MAAA,CAAA,EAC/DA,CAAA,EAAA,GAAA,EAAA,EAAAxE,EAAAN,EAAA9E,EAEH7P,GAAA,CAAA,IAAIqa,MAAA,CAAA,OAAMb,EAAWc,QAAA,EAAAngB,SACnBA,CAAC,CAACogB,EAAaC,CAAK,IACnB3K,EACGjI,GAAAmI,EAAA,CACCtI,UAAW8S,CAAAA,EACPC,CAAA,CAAA,CAGV,CAAA,CAAA,EAAA7F,CAAA,GAAA,CAIR,EAEO8F,GAAQlB,GC5DTe,GAAqB,CAAC,CAAC,OAAQ,CAAE5d,EAAG,iBAAkB0C,IAAK,QAAS,CAAC,CAAC,EAatEsb,GAAene,GAAAsT,EAClB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,cAAA,CAAA,CAAA,EAGhC4a,GAAQD,GCjBTJ,GAAqB,CAAC,CAAC,OAAQ,CAAE5d,EAAG,gBAAiB0C,IAAK,QAAS,CAAC,CAAC,EAarEwb,GAAgBre,GAAAsT,EACnB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,eAAA,CAAA,CAAA,EAGhC8a,GAAQD,GCjBTN,GAAqB,CACzB,CAAC,SAAU,CAAEQ,GAAI,KAAMC,GAAI,KAAMtR,EAAG,KAAMrK,IAAK,QAAS,CAAC,EACzD,CAAC,OAAQ,CAAE1C,EAAG,uCAAwC0C,IAAK,QAAS,CAAC,EACrE,CAAC,OAAQ,CAAE1C,EAAG,aAAc0C,IAAK,QAAS,CAAC,CAAA,EAcvC4b,GAAsBze,GAAAsT,EACzB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,sBAAA,CAAA,CAAA,EAGhCkb,GAAQD,GCrBTV,GAAqB,CACzB,CAAC,OAAQ,CAAE5d,EAAG,WAAY0C,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE1C,EAAG,WAAY0C,IAAK,QAAS,CAAC,CAAA,EAcrC8b,GAAQ3e,GAAAsT,EAAwB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,MAAA,CAAA,CAAA,EAEnEob,GAAQD,GClBTZ,GAAqB,CACzB,CAAC,OAAQ,CAAErB,MAAO,IAAKC,OAAQ,IAAK9O,EAAG,IAAKT,EAAG,IAAKyR,GAAI,IAAKhc,IAAK,QAAS,CAAC,EAC5E,CAAC,OAAQ,CAAE6Z,MAAO,IAAKC,OAAQ,IAAK9O,EAAG,KAAMT,EAAG,IAAKyR,GAAI,IAAKhc,IAAK,QAAS,CAAC,EAC7E,CAAC,OAAQ,CAAE6Z,MAAO,IAAKC,OAAQ,IAAK9O,EAAG,IAAKT,EAAG,KAAMyR,GAAI,IAAKhc,IAAK,QAAS,CAAC,EAC7E,CAAC,OAAQ,CAAE1C,EAAG,4BAA6B0C,IAAK,QAAS,CAAC,EAC1D,CAAC,OAAQ,CAAE1C,EAAG,aAAc0C,IAAK,QAAS,CAAC,EAC3C,CAAC,OAAQ,CAAE1C,EAAG,0BAA2B0C,IAAK,QAAS,CAAC,EACxD,CAAC,OAAQ,CAAE1C,EAAG,YAAa0C,IAAK,QAAS,CAAC,EAC1C,CAAC,OAAQ,CAAE1C,EAAG,YAAa0C,IAAK,QAAS,CAAC,EAC1C,CAAC,OAAQ,CAAE1C,EAAG,aAAc0C,IAAK,QAAS,CAAC,EAC3C,CAAC,OAAQ,CAAE1C,EAAG,WAAY0C,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE1C,EAAG,aAAc0C,IAAK,QAAS,CAAC,EAC3C,CAAC,OAAQ,CAAE1C,EAAG,YAAa0C,IAAK,QAAS,CAAC,CAAA,EActCic,GAAU9e,GAAAsT,EAAwB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,SAAA,CAAA,CAAA,EAErEub,GAAQD,GC5BTf,GAAqB,CACzB,CACE,OACA,CACE5d,EAAG,0UACH0C,IAAK,QACP,CAAA,EAEF,CAAC,SAAU,CAAE0b,GAAI,KAAMC,GAAI,KAAMtR,EAAG,IAAKrK,IAAK,QAAS,CAAC,CAAA,EAcpDmc,GAAYhf,GAAAsT,EAAwB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,UAAA,CAAA,CAAA,EAEvEyb,GAAQD,GCxBTjB,GAAqB,CACzB,CAAC,OAAQ,CAAE5d,EAAG,WAAY0C,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE1C,EAAG,WAAY0C,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE1C,EAAG,2CAA4C0C,IAAK,QAAS,CAAC,EACzE,CAAC,OAAQ,CAAE1C,EAAG,UAAW0C,IAAK,QAAS,CAAC,EACxC,CAAC,OAAQ,CAAE1C,EAAG,yCAA0C0C,IAAK,QAAS,CAAC,CAAA,EAcnEqc,GAAUlf,GAAAsT,EAAwB0J,GAAAxJ,EAASxT,EAAA,CAAA,SAAO+d,GAAoBva,KAAA,SAAA,CAAA,CAAA,EAErE2b,GAAQD,GCrBTnB,GAAqB,CACzB,CAAC,OAAQ,CAAE5d,EAAG,aAAc0C,IAAK,QAAS,CAAC,EAC3C,CAAC,OAAQ,CAAE1C,EAAG,aAAc0C,IAAK,QAAS,CAAC,CAAA,EAcvCuc,GAAKpf,GAAAsT,EAAwB0J,GAAAxJ,EAASxT,EAAA,CAAO+d,SAAAA,GAAoBva,KAAA,GAAA,CAAA,CAAA,EAEhE6b,GAAQD,GCpBXE,GAAc,OACdC,GAAqBC,GACnB,OAAOA,GAAQ,UAAY,CAACA,EAAYA,EACrCA,EAAI,QAAQF,GAAa,GAAG,EAAE,KAAI,EAEvCf,GAAK,IAAIkB,IAAe,CAC1B,MAAMhY,EAAY,CAAA,EACZiY,EAAoBC,GAAU,CAClC,GAAI,CAACA,GAASA,IAAU,GAAKA,IAAU,GAAI,OAC3C,GAAI,MAAM,QAAQA,CAAK,EAAG,CACxB,QAAS,EAAI,EAAGjf,EAAMif,EAAM,OAAQ,EAAIjf,EAAK,IAAKgf,EAAiBC,EAAM,CAAC,CAAC,EAC3E,MACF,CACA,MAAMC,EAAO,OAAOD,EACpB,GAAIC,IAAS,UAAYA,IAAS,UAAYA,IAAS,SAAU,CAC/D,GAAIA,IAAS,UAAYD,IAAUA,EAAO,OAC1ClY,EAAU,KAAK,OAAOkY,CAAK,CAAC,CAC9B,SAAWC,IAAS,SAAU,CAC5B,MAAMnd,EAAO,OAAO,KAAKkd,CAAK,EAC9B,QAASvhB,EAAI,EAAGsC,EAAM+B,EAAK,OAAQrE,EAAIsC,EAAKtC,IAAK,CAC/C,MAAMyE,EAAMJ,EAAKrE,CAAC,EACduhB,EAAM9c,CAAG,GAAG4E,EAAU,KAAK5E,CAAG,CACpC,CACF,CACF,EACA,QAASzE,EAAI,EAAGsC,EAAM+e,EAAW,OAAQrhB,EAAIsC,EAAKtC,IAAK,CACrD,MAAMtB,EAAI2iB,EAAWrhB,CAAC,EAClBtB,GAAM,MAAsB4iB,EAAiB5iB,CAAC,CACpD,CACA,OAAO2K,EAAU,OAAS,EAAI8X,GAAkB9X,EAAU,KAAK,GAAG,CAAC,EAAI,MACzE,EACIoY,GAAiBtjB,GAAUA,IAAU,GAAQ,QAAUA,IAAU,GAAO,OAASA,IAAU,EAAI,IAAMA,EACrGujB,EAAiBlQ,GAAQ,CAC3B,GAAI,CAACA,GAAO,OAAOA,GAAQ,SAAU,MAAO,GAC5C,UAAW7N,KAAK6N,EAAK,MAAO,GAC5B,MAAO,EACT,EACImQ,GAAU,CAACC,EAAMC,IAAS,CAC5B,GAAID,IAASC,EAAM,MAAO,GAC1B,GAAI,CAACD,GAAQ,CAACC,EAAM,MAAO,GAC3B,MAAMC,EAAQ,OAAO,KAAKF,CAAI,EACxBG,EAAQ,OAAO,KAAKF,CAAI,EAC9B,GAAIC,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAC1C,QAAS/hB,EAAI,EAAGA,EAAI8hB,EAAM,OAAQ9hB,IAAK,CACrC,MAAMyE,EAAMqd,EAAM9hB,CAAC,EAEnB,GADI,CAAC+hB,EAAM,SAAStd,CAAG,GACnBmd,EAAKnd,CAAG,IAAMod,EAAKpd,CAAG,EAAG,MAAO,EACtC,CACA,MAAO,EACT,EAEIud,GAAc,CAACJ,EAAMC,IAAS,CAChC,UAAWpd,KAAOod,EAChB,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAMpd,CAAG,EAAG,CACnD,MAAMwd,EAAOJ,EAAKpd,CAAG,EACjBA,KAAOmd,EACTA,EAAKnd,CAAG,EAAI0b,GAAGyB,EAAKnd,CAAG,EAAGwd,CAAI,EAE9BL,EAAKnd,CAAG,EAAIwd,CAEhB,CAEF,OAAOL,CACT,EACIM,GAAO,CAACC,EAAKxd,IAAW,CAC1B,QAAS3E,EAAI,EAAGA,EAAImiB,EAAI,OAAQniB,IAAK,CACnC,MAAMwM,EAAK2V,EAAIniB,CAAC,EACZ,MAAM,QAAQwM,CAAE,EAAG0V,GAAK1V,EAAI7H,CAAM,EAC7B6H,GAAI7H,EAAO,KAAK6H,CAAE,CAC7B,CACF,EAMI4V,GAAkB,IAAIC,IAAW,CACnC,MAAM1gB,EAAS,CAAA,EACfugB,GAAKG,EAAQ1gB,CAAM,EACnB,MAAM2gB,EAAW,CAAA,EACjB,QAAStiB,EAAI,EAAGA,EAAI2B,EAAO,OAAQ3B,IAC7B2B,EAAO3B,CAAC,GAAGsiB,EAAS,KAAK3gB,EAAO3B,CAAC,CAAC,EAExC,OAAOsiB,CACT,EACIC,GAAe,CAACX,EAAMC,IAAS,CACjC,MAAMlgB,EAAS,CAAA,EACf,UAAW8C,KAAOmd,EAAM,CACtB,MAAMY,EAAOZ,EAAKnd,CAAG,EACrB,GAAIA,KAAOod,EAAM,CACf,MAAMI,EAAOJ,EAAKpd,CAAG,EACjB,MAAM,QAAQ+d,CAAI,GAAK,MAAM,QAAQP,CAAI,EAC3CtgB,EAAO8C,CAAG,EAAI2d,GAAgBH,EAAMO,CAAI,EAC/B,OAAOA,GAAS,UAAY,OAAOP,GAAS,UAAYO,GAAQP,EACzEtgB,EAAO8C,CAAG,EAAI8d,GAAaC,EAAMP,CAAI,EAErCtgB,EAAO8C,CAAG,EAAIwd,EAAO,IAAMO,CAE/B,MACE7gB,EAAO8C,CAAG,EAAI+d,CAElB,CACA,UAAW/d,KAAOod,EACVpd,KAAOmd,IACXjgB,EAAO8C,CAAG,EAAIod,EAAKpd,CAAG,GAG1B,OAAO9C,CACT,EC1GI8gB,GAAgB,CAClB,QAAS,GACT,cAAe,CAAA,CACjB,EAGA,SAASC,IAAc,CACrB,IAAIC,EAAgB,KAChBC,EAAsB,CAAA,EACtBC,EAAyB,GAC7B,MAAO,CACL,IAAI,eAAgB,CAClB,OAAOF,CACT,EACA,IAAI,cAAcxkB,EAAO,CACvBwkB,EAAgBxkB,CAClB,EACA,IAAI,qBAAsB,CACxB,OAAOykB,CACT,EACA,IAAI,oBAAoBzkB,EAAO,CAC7BykB,EAAsBzkB,CACxB,EACA,IAAI,wBAAyB,CAC3B,OAAO0kB,CACT,EACA,IAAI,uBAAuB1kB,EAAO,CAChC0kB,EAAyB1kB,CAC3B,EACA,OAAQ,CACNwkB,EAAgB,KAChBC,EAAsB,CAAA,EACtBC,EAAyB,EAC3B,CACJ,CACA,CACA,IAAIliB,GAAQ+hB,GAAW,EAGnBI,GAAuBC,GAAO,CAChC,MAAMC,EAAK,CAAC5kB,EAAS6kB,IAAe,CAClC,KAAM,CACJ,OAAAC,EAAS,KACT,MAAOC,EAAY,CAAA,EACnB,SAAUC,EAAgB,CAAA,EAC1B,iBAAkBC,EAAwB,CAAA,EAC1C,cAAAC,EAAgB,CAAA,EAChB,gBAAiBC,EAAuB,CAAA,CAC9C,EAAQnlB,EACEqU,EAAS,CAAE,GAAGgQ,GAAe,GAAGQ,CAAU,EAC1C7Q,EAAO8Q,GAAQ,KAAO/C,GAAG+C,EAAO,KAAM9kB,GAAS,IAAI,EAAIA,GAAS,KAChEolB,EAAWN,GAAQ,UAAY,CAACxB,EAAcwB,EAAO,QAAQ,EAAIX,GAAaa,EAAeF,EAAO,QAAQ,EAAIE,EAChHK,EAAkBP,GAAQ,iBAAmB,CAACxB,EAAcwB,EAAO,eAAe,EAAI,CAAE,GAAGA,EAAO,gBAAiB,GAAGK,CAAoB,EAAKA,EACjJ,CAAC7B,EAAcjP,EAAO,aAAa,GAAK,CAACkP,GAAQlP,EAAO,cAAe9R,GAAM,mBAAmB,IAClGA,GAAM,uBAAyB,GAC/BA,GAAM,oBAAsB8R,EAAO,eAErC,MAAMiR,EAAuBhC,EAAcwB,GAAQ,KAAK,EAClDS,EAAkBjC,EAAcyB,CAAS,EAI3C,CAAA,EAJ+C,CAEjD,KAAMhD,GAAG/hB,GAAS,KAAMslB,GAAwBR,GAAQ,IAAI,EAC5D,GAAGC,CACT,EACUS,EAAQF,EAAuBC,EAAiB3B,GACpD,CAAE,GAAGkB,GAAQ,KAAK,EAClBxB,EAAciC,CAAc,EAAI,CAAE,KAAMvlB,GAAS,IAAI,EAAKulB,CAChE,EACUE,EAAmBnC,EAAcwB,GAAQ,gBAAgB,EAAIG,EAAwBjB,GAAgBc,GAAQ,iBAAkBG,CAAqB,EACpJvW,EAAalL,GAAU,CAC3B,GAAI8f,EAAc8B,CAAQ,GAAK9B,EAAcyB,CAAS,GAAKO,EACzD,OAAOX,EAAG3Q,EAAMxQ,GAAO,MAAOA,GAAO,SAAS,EAAE6Q,CAAM,EAExD,GAAIoR,GAAoB,CAAC,MAAM,QAAQA,CAAgB,EACrD,MAAM,IAAI,UACR,2DAA2D,OAAOA,CAAgB,EAC5F,EAEM,GAAIP,GAAiB,CAAC,MAAM,QAAQA,CAAa,EAC/C,MAAM,IAAI,UACR,wDAAwD,OAAOA,CAAa,EACtF,EAEM,MAAMQ,GAAkB,CAAClR,EAASmR,EAAMP,EAAUQ,EAAW,KAAMC,EAAa,OAAS,CACvF,MAAMC,EAAaH,EAAInR,CAAO,EAC9B,GAAI,CAACsR,GAAcxC,EAAcwC,CAAU,EACzC,OAAO,KAET,MAAMC,EAAcF,IAAarR,CAAO,GAAKhR,IAAQgR,CAAO,EAC5D,GAAIuR,IAAgB,KAAM,OAAO,KACjC,MAAMC,EAAa3C,GAAc0C,CAAW,EAC5C,GAAI,OAAOC,GAAe,SACxB,OAAO,KAET,MAAMC,GAAqBZ,IAAkB7Q,CAAO,EAC9CnO,EAAM2f,GAAkC3C,GAAc4C,EAAkB,EAE9E,OADcH,EAAWzf,GAAO,OAAO,CAEzC,EACM6f,GAAuB,IAAM,CACjC,GAAI,CAACd,EAAU,OAAO,KACtB,MAAMnf,EAAO,OAAO,KAAKmf,CAAQ,EAC3B7hB,EAAS,CAAA,EACf,QAAS3B,EAAI,EAAGA,EAAIqE,EAAK,OAAQrE,IAAK,CACpC,MAAM7B,EAAQ2lB,GAAgBzf,EAAKrE,CAAC,EAAGwjB,CAAQ,EAC3CrlB,GAAOwD,EAAO,KAAKxD,CAAK,CAC9B,CACA,OAAOwD,CACT,EACM4iB,GAAgC,CAACC,EAASP,IAAe,CAC7D,GAAI,CAACT,GAAY,OAAOA,GAAa,SAAU,OAAO,KACtD,MAAM7hB,EAAS,CAAA,EACf,UAAWiR,KAAW4Q,EAAU,CAC9B,MAAMiB,EAAeX,GAAgBlR,EAAS4Q,EAAUgB,EAASP,CAAU,EACrE9lB,EAAQqmB,IAAY,QAAU,OAAOC,GAAiB,SAAWA,EAAeA,GAAgBA,EAAaD,CAAO,EACtHrmB,GAAOwD,EAAO,KAAKxD,CAAK,CAC9B,CACA,OAAOwD,CACT,EACM+iB,GAAwB,CAAA,EAC9B,UAAW9d,KAAQhF,EAAO,CACxB,MAAMzD,EAAQyD,EAAMgF,CAAI,EACpBzI,IAAU,SAAQumB,GAAsB9d,CAAI,EAAIzI,EACtD,CACA,MAAMwmB,GAAmB,CAAClgB,EAAKwf,IAAe,CAC5C,MAAMW,EAAc,OAAOhjB,IAAQ6C,CAAG,GAAM,SAAW,CACrD,CAACA,CAAG,EAAG7C,EAAM6C,CAAG,GAAG,OAC7B,EAAY,CAAA,EACJ,MAAO,CACL,GAAGgf,EACH,GAAGiB,GACH,GAAGE,EACH,GAAGX,CACb,CACM,EACMY,GAA2B,CAACC,EAAK,CAAA,EAAIb,IAAe,CACxD,MAAMtiB,EAAS,CAAA,EACTojB,EAAWD,EAAG,OACpB,QAAS9kB,EAAI,EAAGA,EAAI+kB,EAAU/kB,IAAK,CACjC,KAAM,CAAE,MAAOglB,EAAS,UAAWC,EAAa,GAAGC,EAAsB,EAAKJ,EAAG9kB,CAAC,EAClF,IAAImlB,EAAU,GACd,MAAMC,GAAgBT,GAAiB,KAAMV,CAAU,EACvD,UAAWxf,MAAOygB,GAAwB,CACxC,MAAM/mB,GAAQ+mB,GAAuBzgB,EAAG,EAClC4gB,GAAqBD,GAAc3gB,EAAG,EAC5C,GAAI,MAAM,QAAQtG,EAAK,GACrB,GAAI,CAACA,GAAM,SAASknB,EAAkB,EAAG,CACvCF,EAAU,GACV,KACF,MACK,CACL,IAAKhnB,IAAS,MAAQA,KAAU,MAAWknB,IAAsB,MAAQA,KAAuB,IAC9F,SACF,GAAIA,KAAuBlnB,GAAO,CAChCgnB,EAAU,GACV,KACF,CACF,CACF,CACIA,IACEH,GAASrjB,EAAO,KAAKqjB,CAAO,EAC5BC,GAAatjB,EAAO,KAAKsjB,CAAW,EAE5C,CACA,OAAOtjB,CACT,EACM2jB,GAAsCrB,GAAe,CACzD,MAAMsB,EAAqBV,GAAyBhB,EAAkBI,CAAU,EAChF,GAAI,CAAC,MAAM,QAAQsB,CAAkB,EAAG,OAAOA,EAC/C,MAAM5jB,EAAS,CAAA,EACT6jB,EAAOzC,EACb,QAAS/iB,EAAI,EAAGA,EAAIulB,EAAmB,OAAQvlB,IAAK,CAClD,MAAMgJ,EAAYuc,EAAmBvlB,CAAC,EACtC,GAAI,OAAOgJ,GAAc,SACvBrH,EAAO,KAAO6jB,EAAK7jB,EAAO,KAAMqH,CAAS,EAAEyJ,CAAM,UACxC,OAAOzJ,GAAc,SAC9B,UAAWyc,KAAQzc,EACjBrH,EAAO8jB,CAAI,EAAID,EAAK7jB,EAAO8jB,CAAI,EAAGzc,EAAUyc,CAAI,CAAC,EAAEhT,CAAM,CAG/D,CACA,OAAO9Q,CACT,EACM+jB,GAAkCzB,GAAe,CACrD,GAAIX,EAAc,OAAS,EAAG,OAAO,KACrC,MAAM3hB,EAAS,CAAA,EACTyjB,EAAgBT,GAAiB,KAAMV,CAAU,EACvD,QAASjkB,EAAI,EAAGA,EAAIsjB,EAAc,OAAQtjB,IAAK,CAC7C,KAAM,CACJ,MAAO2lB,EAAS,CAAA,EAChB,MAAOC,EACP,UAAWC,EACX,GAAGC,EACf,EAAcxC,EAActjB,CAAC,EACnB,GAAI,CAAC0hB,EAAcoE,EAAY,EAAG,CAChC,IAAIX,EAAU,GACd,UAAW1gB,MAAOqhB,GAAc,CAC9B,MAAMT,GAAqBD,EAAc3gB,EAAG,EACtCshB,GAAmBD,GAAarhB,EAAG,EACzC,GAAI4gB,KAAuB,SAAW,MAAM,QAAQU,EAAgB,EAAI,CAACA,GAAiB,SAASV,EAAkB,EAAIU,KAAqBV,IAAqB,CACjKF,EAAU,GACV,KACF,CACF,CACA,GAAI,CAACA,EAAS,QAChB,CACA,QAASziB,EAAI,EAAGA,EAAIijB,EAAO,OAAQjjB,IAAK,CACtC,MAAMsjB,GAAWL,EAAOjjB,CAAC,EACpBf,EAAOqkB,EAAQ,IAAGrkB,EAAOqkB,EAAQ,EAAI,CAAA,GAC1CrkB,EAAOqkB,EAAQ,EAAE,KAAK,CAACJ,EAAWC,CAAa,CAAC,CAClD,CACF,CACA,OAAOlkB,CACT,EACA,GAAI,CAAC+f,EAAcyB,CAAS,GAAK,CAACO,EAAsB,CACtD,MAAMuC,EAAW,CAAA,EACjB,GAAI,OAAOrC,GAAU,UAAY,CAAClC,EAAckC,CAAK,EAAG,CACtD,MAAM4B,EAAOzC,EACb,UAAWyB,KAAWZ,EACpBqC,EAASzB,CAAO,EAAKP,GAAe,CAClC,MAAMiC,EAAyBZ,GAAmCrB,CAAU,EACtEkC,EAAsBT,GAA+BzB,CAAU,EACrE,OAAOuB,EACL5B,EAAMY,CAAO,EACbD,GAA8BC,EAASP,CAAU,EACjDiC,EAAyBA,EAAuB1B,CAAO,EAAI,OAC3D2B,EAAsBA,EAAoB3B,CAAO,EAAI,OACrDP,GAAY,MACZA,GAAY,SAC5B,EAAgBxR,CAAM,CACV,CAEJ,CACA,OAAOwT,CACT,CACA,OAAOlD,EACL3Q,EACAkS,GAAoB,EACpBO,GAAyBhB,CAAgB,EACzCjiB,GAAO,MACPA,GAAO,SACf,EAAQ6Q,CAAM,CACV,EACM2T,EAAiB,IAAM,CAC3B,GAAI,GAAC5C,GAAY,OAAOA,GAAa,UACrC,OAAO,OAAO,KAAKA,CAAQ,CAC7B,EACA,OAAA1W,EAAU,YAAcsZ,EAAc,EACtCtZ,EAAU,OAASoW,EACnBpW,EAAU,KAAOsF,EACjBtF,EAAU,MAAQ8W,EAClB9W,EAAU,SAAW0W,EACrB1W,EAAU,gBAAkB2W,EAC5B3W,EAAU,cAAgBwW,EAC1BxW,EAAU,iBAAmB+W,EACtB/W,CACT,EAIA,MAAO,CACL,GAAAkW,EACA,SALgBC,GACT,CAAC7kB,EAASqU,IAAWuQ,EAAG5kB,EAASqU,EAAS8P,GAAaU,EAAYxQ,CAAM,EAAIwQ,CAAU,CAKlG,CACA,ECpQIoD,GAAY,IAAIhF,IACViF,GACOnG,GAAGkB,CAAU,GACX,OAGf,CAAY,GAAA2B,EAAE,EAAKF,GAAoBuD,EAAS,2CCPpD,MAAME,GAASvD,GAAG,CAChB5Q,KAAM,yGACNoR,SAAU,CACRgD,SAAU,CACRxP,QACE,4lBACFyP,UACE,mpBACFC,SACE,mTAAA,EAEJC,MAAO,CACLC,GAAI,MACJC,GAAI,MACJC,GAAI,MAAA,EAENC,QAAS,CACPC,OAAQ,gBACRC,KAAM,EAAA,CACR,EAEFxD,gBAAiB,CACfkD,MAAO,KACPH,SAAU,UACVO,QAAS,MAAA,CAEb,CAAC,EAsBYG,GAAUC,GAA0B,CAC/C,KAAM,CAACC,EAAOxlB,CAAK,EAAIiD,GAAWsiB,EAAU,CAC1C,WACA,QACA,WACA,QACA,UACA,OACA,SAAS,CACV,EAED,OAAIC,EAAMC,MACR,IAAA,CAAA,IAAArN,EAAArB,GAAAA,EAAAoG,OAAAA,GAAA/E,EAAA5E,EAAA,CAAA,IAEIiS,MAAI,CAAA,OAAED,EAAMC,IAAI,EAAA,IAChBC,SAAO,CAAA,OACLF,EAAME,OAA+D,EAAA,IAAA,OAAA,CAAA,OAEhE1c,GACL2b,GAAO,CACLC,SAAUY,EAAMZ,SAChBG,MAAOS,EAAMT,MACbI,QAASK,EAAML,OAAAA,CAChB,EACDK,EAAM5H,KACR,CAAC,CAAA,EACI5d,CAAoD,EAAA,GAAA,EAAA,EAAA0Y,EAAAN,EAAA,IAExDoN,EAAM5nB,QAAQ,EAAAwa,CAAA,GAAA,GAKrB,IAAA,CAAA,IAAAC,EAAA6B,GAAAA,EAAAiD,OAAAA,GAAA9E,EAAA7E,EAAA,CAAA,IAGIkS,SAAO,CAAA,OACLF,EAAME,OAA+D,EAAA,IAAA,OAAA,CAAA,OAEhE1c,GACL2b,GAAO,CACLC,SAAUY,EAAMZ,SAChBG,MAAOS,EAAMT,MACbI,QAASK,EAAML,OAAAA,CAChB,EACDK,EAAM5H,KACR,CAAC,CAAA,EACI5d,CAAoD,EAAA,GAAA,EAAA,EAAA0Y,EAAAL,EAAA,IAExDmN,EAAM5nB,QAAQ,EAAAya,CAAA,GAAA,CAGrB,4yBCvGA,MAAMsN,GAAYC,GAAsBA,EAAU,EAAI,EAEhDC,GAAiB7lB,IAA4B,IAAA,CAAA,IAAAoY,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAG,YAAAE,OAAAA,EAAAoB,EAAAxG,EAM5C7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAErO,MAAMqW,KAAK,CAAE1jB,OAAQujB,GAAS3lB,EAAM4lB,OAAO,CAAA,CAAG,CAAC,EAAAhoB,SACvDA,IAAAsc,GAAAA,CAAA,CAEA,CAAA,EAAA9B,CAAA,GAAA,EAMH2N,GAAgB/lB,IAA4B,IAAA,CAAA,IAAA+Z,EAAAe,GAAAA,EAAArC,EAAAsB,EAAAzB,WAAA2B,EAAAxB,EAAAD,YAAAE,OAAAA,EAAAuB,EAAA3G,EAM3C7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAErO,MAAMqW,KAAK,CAAE1jB,OAAQujB,GAAS3lB,EAAM4lB,OAAO,CAAA,CAAG,CAAC,EAAAhoB,SACvDA,IAAAqe,GAAAA,CAAA,CAEA,CAAA,EAAAlC,CAAA,GAAA,EAMIiM,GAAoBA,KAS/B,IAAA,CAAA,IAAA5K,EAAAM,GAAAA,EAAAL,EAAAD,EAAA9C,WAAAwD,EAAAT,EAAA7C,YAAAE,OAAAA,EAAA2C,EAAA/H,EAGOuS,GAAa,CAACD,UAAAA,CAAgB,CAAA,EAAAlN,EAAAoD,EAAAxI,EAG9ByS,GAAY,CAACH,UAAAA,CAAgB,CAAA,EAAAxK,CAAA,GAAA,+KC1C/B,MAAM6K,GAAgBjmB,GAAuC,CAClE,KAAM,CAAE+F,CAAAA,EAAMqR,EAAAA,EACR,CAAEhW,MAAAA,CAAAA,EAAU0W,GAAAA,EAElB,OAAA,IAAA,CAAA,IAAAM,EAAArB,KAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAC,WAAAC,EAAAF,EAAAG,YAAAE,OAAAA,EAAAN,EAAA9E,EAEK0S,OAAiB3N,CAAA,EAAAK,EAAAoB,EAAA,IAGb/T,EAAE,qBAAqB,CAAC,EAAA2S,EAAAH,EAAAjF,EAI1BgS,GAAM,CACL1F,KAAI,SACJ8F,QAAStkB,EAAK,MAAA,iBAEdwjB,SAAQ,UACRG,MAAK,KAAA,IAAAnnB,UAAA,CAAA,OAEJmI,EAAE,yBAAyB,CAAC,CAAA,CAAA,EAAA,IAAA,EAAA2S,EAAAH,EAAAjF,EAE9BgS,GAAM,CACL1F,KAAI,SAAA,GAAA,cAAA,CAAA,OACQ3K,OAAOlP,EAAE,iCAAiC,CAAC,CAAC,EAAA,eAC1C,GAAK,IACnB2f,SAAO,CAAA,OAAE1lB,EAAMkmB,UAAU,EAAA,MAAA,iEAEzBf,QAAO,SACPJ,MAAK,KACLH,SAAQ,YAAA,IAAAhnB,UAAA,CAAA,OAAA0V,EAEP6S,GAAc,CAAA,MAAA,gCAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA/N,CAAA,GAAA,CAKzB,o1BCxCO,MAAMgO,GAAaA,IAAM,CAC9B,KAAM,CAAErgB,EAAAA,CAAAA,EAAMqR,EAAAA,EAEd,OAAA,IAAA,CAAA,IAAAgB,EAAArB,KAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAC,WAAAC,EAAAuB,EAAAtB,YAAAuB,EAAA1B,EAAAG,YAAAC,EAAAsB,EAAAzB,WAAA2B,EAAAF,EAAAvB,YAAA2B,EAAAF,EAAA3B,WAAAI,OAAAA,EAAAoB,EAAA,IAIS/T,EAAE,iBAAiB,CAAC,EAAA2S,EAAAH,EAAAjF,EAGpB+S,GAAY,CAAA,MAAA,WAAA,CAAA,CAAA,EAAA3N,EAAAD,EAAA,IAKZ1S,EAAE,sBAAsB,CAAC,EAAA2S,EAAAyB,EAAA,IAQzBpU,EAAE,qBAAqB,CAAC,EAAAqS,CAAA,GAAA,CAQnC,EC7BakO,GAAqB,CAChC/pB,EACA,CAAE,SAAAgqB,EAAW,GAAA,EAAgC,CAAA,IAC1C,CACH,MAAMC,EACF,OAAOjqB,GAAU,WAAcA,EAAwB,IAAMA,EAC3DkqB,EAAeD,EAAA,EACf,CAACxqB,EAAS0qB,CAAU,EAAIpqB,EAAgBmqB,CAAY,EACpD,CAACE,EAAUC,CAAW,EAAItqB,EAA4B,MAAS,EACrE,IAAIuqB,EACAC,EAAeL,EAEnB,OAAAxpB,GAAa,IAAM,CACjB,MAAMyB,EAAY8nB,EAAA,EAEd,OAAO,GAAG9nB,EAAWooB,CAAY,IAEjCD,GACF,WAAW,aAAaA,CAAU,EAGpCD,EAAY,IAAME,CAAY,EAC9BJ,EAAW,IAAMhoB,CAAS,EAC1BooB,EAAepoB,EAEfmoB,EAAa,WAAW,WAAW,IAAM,CACvCD,EAAY,IAAA,EAAe,EAC3BC,EAAa,MACf,EAAGN,CAAQ,EAEXlpB,GAAU,IAAM,CACVwpB,GACF,WAAW,aAAaA,CAAU,CAEtC,CAAC,EACH,CAAC,EAEM,CACL,QAAA7qB,EACA,SAAA2qB,EACA,gBAAiB,IAAMA,MAAe,MAAA,CAE1C,ECtCaI,GAAc,IAAM,CAC/B,KAAM,CAAE,SAAA5U,CAAA,EAAa6D,GAAA,EACf,CAACgR,EAAUC,CAAgB,EAAI3qB,EAA8B6V,EAAS,QAAQ,aAAa,EAE3F+U,EAAeC,GAAiC,CACpDF,EAAiBE,CAAW,EAC5BhV,EAAS,QAAQ,YAAYgV,CAAW,CAC1C,EAgCA,MAAO,CACL,SAAAH,EACA,YAAAE,EACA,YAjCmB/S,GAA0B,CAC7C+S,EAAY,CAAE,GAAGF,EAAA,EAAY,SAAA7S,EAAU,CACzC,EAgCE,aA9BoBiT,GAAmC,CACvDF,EAAY,CAAE,GAAGF,EAAA,EAAY,MAAOI,EAAW,CACjD,EA6BE,qBA3B4B5Z,GAAyB,CACrD0Z,EAAY,CAAE,GAAGF,IAAY,UAAW,CAAE,EAAAxZ,EAAG,EAAGwZ,EAAA,GAAY,WAAW,GAAK,CAAA,CAAC,EAAK,CACpF,EA0BE,oBAxB2BxqB,GAA8B,CACzD,MAAMgR,EAAIwZ,KAAY,WAAW,EAEjC,GAAI,CAACxZ,EAAG,OAER,MAAM/Q,EAAIuqB,EAAA,GAAY,WAAW,GAAK,CAAA,EAEtCE,EAAY,CAAE,GAAGF,EAAA,EAAY,UAAW,CAAE,EAAAxZ,EAAG,EAAG,CAAE,GAAG/Q,EAAG,CAAC+Q,CAAC,EAAGhR,EAAQ,GAAA,CAAI,EAAK,CAChF,EAiBE,wBAf+B6qB,GAAoB,CACnDH,EAAY,CAAE,GAAGF,EAAA,EAAY,cAAeK,EAAQ,CACtD,EAcE,iBAZwBC,GAA2B,CACnDJ,EAAY,CAAE,GAAGF,EAAA,EAAY,cAAAM,EAAe,CAC9C,CAUE,CAEJ,ECvDaC,GAAW,IAAM,CAC5B,KAAM,CAAE,SAAAP,CAAA,EAAaD,GAAA,EAEf5X,EAAQhS,EAAW,IAAM6pB,EAAA,EAAW,KAAK,EACzCjW,EAAO5T,EAAW,IAAM,OAAO,EAErC,MAAO,CACL,MAAAgS,EACA,KAAA4B,CAAA,CAEJ,ECVayW,GACT,8gMCCG,MAAMC,GAAeA,IAAM,CAChC,KAAM,CAAE1hB,EAAAA,CAAAA,EAAMqR,EAAAA,EACR,CAAEM,OAAQgQ,CAAAA,EAAkBlQ,GAAAA,EAC5BE,EAASva,EAAW,IAAM,CAC9B,MAAMwqB,EAAeD,KAAiBhQ,OAChCkQ,EAAcF,KAAiBG,WAAW9oB,MAEhD,OAAO0W,GAAM,CAAEkS,aAAAA,EAAcC,YAAAA,CAAAA,CAAa,EACvClS,KAAK,CAAEiS,aAAc,WAAA,EAAe,KAAO,CAC1CG,KAAM,IACNhP,KAAM/S,EAAE,8BAA8B,CAAA,EACtC,EACD2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,SAAA,EAAa,KAAO,CAClEE,KAAM,KACNhP,KAAM/S,EAAE,mBAAmB,CAAA,EAC3B,EACD2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,YAAA,EAAgB,KAAO,CACrEE,KAAM,KACNhP,KAAM/S,EAAE,mBAAmB,CAAA,EAC3B,EACD2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,OAAA,EAAW,KAAO,CAChEE,KAAM,KACNhP,KAAM/S,EAAE,cAAc,CAAA,EACtB,EACD2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,WAAA,EAAe,KAAO,CACpEE,KAAM,KACNhP,KAAM/S,EAAE,wBAAwB,CAAA,EAChC,EACD2P,KACC,CAAEiS,aAAc,YAAaC,YAAa,mBAAA,EAC1C,KAAO,CACLE,KAAM,KACNhP,KAAM/S,EAAE,yBAAyB,CAAA,EAErC,EACC2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,WAAA,EAAe,KAAO,CACpEE,KAAM,KACNhP,KAAM/S,EAAE,kBAAkB,CAAA,EAC1B,EACD2P,KAAK,CAAEiS,aAAc,YAAaC,YAAa,OAAA,EAAW,KAAO,CAChEE,KAAM,IACNhP,KAAM/S,EAAE,oBAAoB,CAAA,EAC5B,EACDgiB,UAAU,IAAA,EAAe,CAC9B,CAAC,EAED,OAAAzU,EACG3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAEtC,EAAAA,CAAQ,EAAA9Z,aACT,IAAA,CAAA,IAAAwa,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAG,YAAAE,OAAAA,EAAAL,EAAA,IAGF2P,EAAAA,EAAWlP,IAAI,EAAAJ,EAAAoB,EAAA,IAEZkO,EAAAA,EAAWF,IAAI,EAAA1P,CAAA,GAAA,CAAA,CAExB,CAGP,udC7DO,MAAM6P,GAASA,KAAAlR,GAAAA,GAAA,IAAA,CAAA,IAAAsB,EAAA6B,KAAAJ,EAAAzB,EAAAC,WAAAC,EAAAuB,EAAAxB,WAAAyB,EAAAD,EAAAtB,YAAAiC,OAAAA,EAAAlC,EAAA,MAWPiP,EAAe,EAAA9O,EAAAqB,EAAAzG,EAUrBmU,GAAY,CAAA,CAAA,CAAA,EAAApP,CAAA,IAAA,0KClBd,MAAM6P,GAAUloB,GAMjB,CACJ,KAAM,CAAE+F,CAAAA,EAAMqR,EAAAA,EAEd,OAAA,IAAA,CAAA,IAAAgB,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAI,OAAAA,EAAAN,GAAA,IAAA,CAAA,IAAA+P,EAAAtR,GAAA,IAAA,CAAA,CAEK7W,EAAMooB,MAAM,EAAA,MAAA,IAAZD,EAAAA,EAAA7U,EAEMgS,GAAM,CAAA,IACLI,SAAO,CAAA,OAAE1lB,EAAMooB,MAAM,EAAA,GAAA,cAAA,CAAA,OACTnT,OACVjV,EAAMqoB,OAAS,WACXtiB,EAAE,gBAAgB,EAClBA,EAAE,kBAAkB,CAC1B,CAAC,EACD6e,SAAQ,WACRO,QAAO,SACPJ,MAAK,KAAA,IAAAnnB,UAAA,CAAA,OAAA0V,EAEJgV,GAAiB,CAAA,MAAA,+CAAA,CAAA,CAAA,CAAA,CAAA,EAAAhV,EAInBgS,GAAM,CACL1F,KAAI,SACJ8F,QAASA,IAAM1lB,EAAMuoB,QAAQ,MAAM,EACnC3D,SAAQ,WACRO,QAAO,SACPJ,MAAK,KAAA,IAAAnnB,UAAA,CAAA,OAAA0V,EAEJkV,GAAwB,CAAA,MAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAE5B,GAAA,EAAAnQ,CAAA,EAAAK,EAAAL,EAAA,IAEFrY,EAAMyoB,KAAK,EAAA/P,EAAAN,EAAA9E,EAEbgS,GAAM,CACL1F,KAAI,SAAA,GAAA,cAAA,CAAA,OACQ3K,OAAOlP,EAAE,cAAc,CAAC,CAAC,EAAA,eACvB,GAAK,IACnB2f,SAAO,CAAA,OAAE1lB,EAAMuX,OAAO,EACtBqN,SAAQ,WACRO,QAAO,SACPJ,MAAK,KAAA,IAAAnnB,UAAA,CAAA,OAAA0V,EAEJoV,GAAO,CAAA,MAAA,gCAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAAtQ,CAAA,GAAA,CAIhB,EC1CauQ,GAAqB,CAChCC,EACA,CAAE,mBAAAC,EAAqB,GAAA,EAAmC,CAAA,IAC1B,CAChC,KAAM,CAACC,EAAOC,CAAQ,EAAIzsB,EAAkB,CAACssB,CAAa,CAAC,EACrD,CAAClpB,EAAOspB,CAAQ,EAAI1sB,EAAa,CAAC,EAClC2sB,EAAS9rB,EAAc,IAAM2rB,EAAA,EAAQppB,EAAA,CAAO,GAAKkpB,CAAa,EAC9D,CAAE,QAAA5sB,EAAS,SAAA2qB,EAAU,gBAAAuC,CAAA,EAAoB5C,GAAmB2C,EAAQ,CACxE,SAAUJ,CAAA,CACX,EAoBD,MAAO,CACL,OAAQ7sB,EACR,eAAgB2qB,EAChB,gBAAAuC,EACA,SAtBgBC,GAAkB,CAClC,MAAMC,EAAc1pB,EAAA,EACd2pB,EAAcP,EAAA,EACdQ,EAAgBD,EAAYD,CAAW,EAE7C,GAAI,OAAO,GAAGE,EAAeH,CAAU,EAAG,OAE1C,MAAMI,EAAYF,EAAY,MAAM,EAAGD,EAAc,CAAC,EAEtDG,EAAU,KAAKJ,CAAU,EACzBJ,EAASQ,CAAS,EAClBP,EAASO,EAAU,OAAS,CAAC,CAC/B,EAWE,OATa,IAAM,CACnBP,KAAyB,KAAK,IAAI,EAAGQ,EAAe,CAAC,CAAC,CACxD,EAQE,SAAU,IAAM9pB,MAAY,CAAA,CAEhC,yGC5CO,MAAM+pB,GACXzpB,IAAkC,IAAA,CAAA,IAAAoY,EAAA8B,GAAAA,EAAAJ,EAAA1B,EAAAE,WAAAI,OAAAA,EAAAN,EAAA9E,EAG/B3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAEha,EAAM2mB,WAAajU,MAAS,EAAA,IAAA9U,UAAA,CAAA,IAAAya,EAAAtB,GAAAA,EAAA2B,OAAAA,EAAAL,EAAA,IAEnCrY,EAAMiG,OAAOjG,EAAM2mB,QAAa,CAAC,EAAAtO,CAAA,CAAA,CAAA,EAAAyB,CAAA,EAAApB,EAAAoB,EAAA,IASnC9Z,EAAMiG,OAAOjG,EAAMhE,OAAO,CAAC,EAAAqe,EAAAC,GAAA,CAAA,IAAAC,EAZpBvR,GAAW,8BAA+BhJ,EAAM4d,KAAK,EAACpD,EAOvDxR,GACL,0BACAhJ,EAAMkpB,iBAAmB,mCAC3B,EAAC3O,OAAAA,IAAAD,EAAAjb,GAAAqqB,EAAAtR,EAAAkC,EAAAjb,EAAAkb,CAAA,EAAAC,IAAAF,EAAAvU,GAAA2jB,EAAA5P,EAAAQ,EAAAvU,EAAAyU,CAAA,EAAAF,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,MAAAA,CAAA,EAAA0F,CAAA,GAAA,iOCjBA,MAAMuR,GAAa3pB,IAAqB,IAAA,CAAA,IAAAoY,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAC,WAAAC,EAAAuB,EAAAtB,YAAAuB,EAAA1B,EAAAG,YAAAE,OAAAA,EAAAoB,EAAA,IAItC9Z,EAAMyoB,KAAK,EAAA/P,EAAAH,EAAA,IAERvY,EAAM4pB,KAAK,EAAAlR,EAAAqB,EAAA,IAGhB/Z,EAAMpC,QAAQ,EAAAwa,CAAA,GAAA,2KCVd,MAAMyR,GAAY7pB,IAAoB,IAAA,CAAA,IAAAoY,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAG,YAAAE,OAAAA,EAAAL,EAAA,IAGtCrY,EAAM8pB,KAAK,EAAApR,EAAAoB,EAAA,IAER9Z,EAAMpC,QAAQ,EAAAwa,CAAA,GAAA,mFCRxB,MAAM2R,GAAoB3I,GAAG,CAC3BY,MAAO,CACL/lB,KAAM,uFACN+tB,IAAK,oHAAA,EAEPpI,SAAU,CACRqI,OAAQ,CACNrX,GAAI,CACFoX,IAAK,wEAAA,EAEPlX,IAAK,CACHkX,IAAK,0DAAA,CACP,CACF,EAEFnI,gBAAiB,CACfoI,OAAQ,KAAA,CAEZ,CAAC,EAEKC,GAAiB9I,GAAG,CACxB5Q,KAAM,gpBACR,CAAC,EASY2Z,GAAUnqB,GAAuB,CAC5C,MAAMoqB,EAAWF,GAAAA,EACX,CAAEjuB,KAAAA,EAAM+tB,IAAAA,CAAAA,EAAQD,GAAkB,CAAA,CAAE,EAE1C,OAAAzW,EACG3P,GAAI,CAAA,IACHqW,MAAI,CAAA,OAAEha,EAAMxD,QAAQ4F,QAAUpC,EAAMqqB,mBAAqB,EAAE,EAAA,IAC3D3mB,UAAQ,CAAA,OAAA,IAAA,CAAA,IAAA2U,EAAA6B,GAAAA,EAAAxB,OAAAA,EAAAL,EAAA/E,EAEH7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAE9d,EAAMxD,OAAO,EAAAoB,SACrBA,CAAC,CAAC0sB,EAAMR,CAAK,KAAC,IAAA,CAAA,IAAAhQ,EAAAgB,GAAAA,EAAAhB,OAAAA,EAAAM,QAGF,IAAMpa,EAAMuqB,SAASD,CAAI,EAAC5R,EAAAoB,EAIlCgQ,CAAK,EAAAzP,EAAAC,GAAA,CAAA,IAAAC,EAHQ+P,IAAStqB,EAAMzD,MAAKie,EAC3BwP,EAAI,CAAEC,OAAQK,IAAStqB,EAAMzD,MAAQ,KAAO,KAAA,CAAO,EAACge,OAAAA,IAAAD,EAAAjb,GAAAob,EAAAX,EAAA,eAAAQ,EAAAjb,EAAAkb,CAAA,EAAAC,IAAAF,EAAAvU,GAAA2jB,EAAA5P,EAAAQ,EAAAvU,EAAAyU,CAAA,EAAAF,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,MAAAA,CAAA,EAAAoH,CAAA,GAAA,CAAA,CAI9D,CAAA,EAAAO,MAAAqP,EAAArR,EAXOpc,EAAAA,CAAM,CAAA,EAAAoc,CAAA,GAAA,CAAA,EAAA,IAAAza,UAAA,CAAA,IAAAwa,EAAArB,GAAAA,EAAAqB,OAAAA,EAAA/Q,iBAAA,SAmBR6E,GAASlM,EAAMuqB,SAASre,EAAMse,cAAcjuB,KAAK,CAAC,EAAAmtB,EAAAtR,EAFrDgS,CAAQ,EAAA1R,EAAAN,EAAA9E,EAId7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAE9d,EAAMxD,OAAO,EAAAoB,SACrBA,CAAC,CAAC0sB,EAAMR,CAAK,KAAC,IAAA,CAAA,IAAAvR,EAAA0D,GAAAA,EAAA1D,OAAAA,EAAAhc,MAAoB+tB,EAAI5R,EAAAH,EAAGuR,CAAK,EAAAvR,CAAA,GAAA,CAAA,CAAU,CAAA,EAAA8B,MAAAjC,EAAA7b,MAJpDyD,EAAMzD,KAAK,EAAA6b,CAAA,CAAA,CAAA,CAS1B,EAAEuC,GAAA,CAAA,OAAA,CAAA,EC7DK,MAAM8P,GAAgBA,IAAM,CACjC,KAAM,CAAE1kB,EAAAA,CAAAA,EAAMqR,EAAAA,EACRjI,EAAQoY,GAAAA,EAERmD,EAAqBA,IAAMvb,EAAM4B,KAAAA,IAAW,OAC5C4Z,EAAgBA,IAAOxb,EAAM4B,KAAAA,IAAW,OAAS,SAAW5B,EAAM4B,KAAAA,EAClE6Z,EAAyBruB,GAAkB,CAC/C,EAGF,OAAA+W,EACG3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAE0Q,EAAAA,CAAoB,EAAA,IAAA9sB,UAAA,CAAA,OAAA0V,EAC7BuW,GAAQ,CAAA,IAACC,OAAK,CAAA,OAAE/jB,EAAE,qBAAqB,CAAW,EAAA,IAAAnI,UAAA,CAAA,OAAA0V,EAChD6W,GAAM,CAAA,IACL3tB,SAAO,CAAA,MAAE,CACP,CAAC,QAASuJ,EAAE,sBAAsB,CAAW,EAC7C,CAAC,OAAQA,EAAE,qBAAqB,CAAW,EAC3C,CAAC,SAAUA,EAAE,uBAAuB,CAAW,CAAC,CACjD,EAAA,IACDxJ,OAAK,CAAA,OAAEouB,EAAAA,CAAe,EACtBJ,SAAUhuB,GACRquB,EAAkD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAK/D,ECpBaC,GAAmBA,IAAM,CACpC,KAAM,CAAE9kB,EAAAA,EAAGyP,YAAAA,EAAaU,eAAAA,CAAAA,EAAmBkB,EAAAA,EACrC,CAAE4P,SAAAA,EAAU8D,YAAAA,CAAAA,EAAgB/D,GAAAA,EAE5BgE,EAAkB5tB,EAAW,IACjC,CAAC,GAAGsW,EAAS,EAAEuX,KAAK,CAACxwB,EAAGC,IAAM,CAC5B,MAAMwwB,EAASjX,GAAiBxZ,EAAEkZ,GAAG,EAGrC,OAFeM,GAAiBvZ,EAAEiZ,GAAG,EAErBuX,CAClB,CAAC,CACH,EAEMC,EAAwB3uB,GAAkB,CAC9C,MAAM4uB,EAAU5uB,EAEhB2Z,EAAeiV,CAAO,EACtBL,EAAYK,CAAO,CACrB,EAEA,OAAA7X,EACGqW,GAAS,CAAA,IAAClB,OAAK,CAAA,OAAE1iB,EAAE,qBAAqB,CAAC,EAAA,IAAAnI,UAAA,CAAA,MAAA,CAAA0V,EACvCuW,GAAQ,CAAA,IAACC,OAAK,CAAA,OAAE/jB,EAAE,mBAAmB,CAAC,EAAA,IAAAnI,UAAA,CAAA,OAAA0V,EACpC6W,GAAM,CAAA,IACL3tB,SAAO,CAAA,OAAEuuB,EAAAA,EAAkBllB,IAAIulB,GAAQ,CAACA,EAAK1X,IAAK0X,EAAKzX,UAAU,CAAC,CAAC,EAAA,IACnEpX,OAAK,CAAA,OACFyqB,EAAAA,GAAY7S,UAAwCqB,EAAAA,CAAa,EAEpE+U,SAAUW,CAAAA,CAAoB,CAAA,CAAA,CAAA,EAAA5X,EAGjCmX,GAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGpB,sDC1CA,MAAM9F,GAASvD,GAAG,CAChBY,MAAO,CACL/lB,KAAM,iBACN+tB,IAAK,iLACLqB,QACE,6NACFvD,KAAM,EAAA,EAERlG,SAAU,CACRxE,KAAM,CACJ4H,GAAI,CACFgF,IAAK,cACLlC,KAAM,SAAA,EAER7C,GAAI,CACF+E,IAAK,cACLlC,KAAM,SAAA,EAER5C,GAAI,CACF8E,IAAK,gBACLlC,KAAM,SAAA,CACR,EAEF9W,QAAS,CACP8W,KAAM,GACNhP,KAAM,EAAA,CACR,EAEF+I,gBAAiB,CACfzE,KAAM,IAAA,CAEV,CAAC,EAIYkO,GAAe/F,GAA4C,CACtE,MAAMvlB,EAAQsC,EACZ,CAAE0O,QAAS,OAAiBoM,KAAM,IAAA,EAClCmI,CACF,EACM,CAAEtpB,KAAAA,EAAM+tB,IAAAA,EAAKqB,QAAAA,EAASvD,KAAAA,CAAAA,EAASnD,GAAO,CAC1CvH,KAAMpd,EAAMod,KACZpM,QAAShR,EAAMgR,OAAAA,CAChB,EAED,OAAA,IAAA,CAAA,IAAAoH,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAG,YAAAE,OAAAA,EAAAL,EAAA,IAGO5C,GAAMzV,EAAMgR,OAAO,EACjB0E,KAAK,OAAQ,IAAApC,EAAOkV,GAAwB,CAAA,IAAA,OAAA,CAAA,OAAQV,EAAAA,CAAM,CAAA,CAAA,CAAI,EAC9DpS,KAAK,OAAQ,IAAAwE,GAAAA,CAAqB,EAClCpE,YAAY,EAAA4C,EAAAoB,EAAA,IAEO9Z,EAAMpC,QAAQ,EAAAyc,EAAAC,GAAA,CAAA,IAAAC,EAP5Bte,IAAMue,EACJwP,EAAAA,EAAKuB,EAMLF,EAAAA,EAAS9Q,OAAAA,IAAAD,EAAAjb,GAAAqqB,EAAAtR,EAAAkC,EAAAjb,EAAAkb,CAAA,EAAAC,IAAAF,EAAAvU,GAAA2jB,EAAArR,EAAAiC,EAAAvU,EAAAyU,CAAA,EAAA+Q,IAAAjR,EAAA9f,GAAAkvB,EAAA5P,EAAAQ,EAAA9f,EAAA+wB,CAAA,EAAAjR,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,OAAAlY,EAAAkY,MAAAA,CAAA,EAAA0F,CAAA,GAAA,CAG3B,gZCrDO,MAAMoT,GAAYxrB,IAAoB,IAAA,CAAA,IAAAoY,EAAA8B,GAAAA,EAAA7B,EAAAD,EAAAE,WAAAwB,EAAAzB,EAAAG,YAAA+D,OAAAA,GAAAnE,EAAA,QAGhCpY,EAAM0lB,QAAO,EAAA,EAAAhN,EAAAL,EAAA,IAInBrY,EAAM8pB,KAAK,EAAApR,EAAAoB,EAAAxG,EAGX3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAEha,EAAMzD,KAAK,EAAA,IAAAqB,UAAA,CAAA,IAAA2a,EAAAxB,GAAAA,EAAA2B,OAAAA,EAAAH,EAAA,IACyBvY,EAAMzD,KAAK,EAAAgc,CAAA,CAAA,CAAA,EAAA,IAAA,EAAAG,EAAAoB,EAAAxG,EAE1DmY,GAAkB,CAAA,MAAA,+CAAA,CAAA,EAAA,IAAA,EAAArT,CAAA,GAAA,EAGvBuC,GAAA,CAAA,OAAA,CAAA,ECdK,MAAM+Q,GAAU1rB,GAAuB,CAC5C,KAAM,CAAE+F,CAAAA,EAAMqR,EAAAA,EAEd,OAAA9D,EACG6W,GAAM,CAAA,IACL3tB,SAAO,CAAA,MAAE,CACP,CAAC,OAAQyY,OAAOlP,EAAE,YAAY,CAAC,CAAC,EAChC,CAAC,QAASkP,OAAOlP,EAAE,WAAW,CAAC,CAAC,CAAC,CAClC,EAAA,IACDxJ,OAAK,CAAA,OAAEyD,EAAMzD,MAAQ,OAAS,OAAO,EACrCguB,SAAUhuB,GAASyD,EAAMuqB,SAAShuB,IAAU,MAAM,CAAA,CAAC,CAGzD,ECbaovB,GAAyB3rB,GAEhC,CACJ,KAAM,CAAE+F,CAAAA,EAAMqR,EAAAA,EACR,CAAE4P,SAAAA,EAAU4E,wBAAAA,EAAyBC,iBAAAA,CAAAA,EAAqB9E,GAAAA,EAEhE,OAAAzT,EACGqW,GAAS,CAAA,IAAClB,OAAK,CAAA,OAAE1iB,EAAE,sCAAsC,CAAC,EAAA,IAAAnI,UAAA,CAAA,MAAA,CAAA0V,EACxDkY,GAAQ,CAAA,IACP1B,OAAK,CAAA,MAAA,CAAAjT,OAEA9Q,EAAE,0BAA0B,CAAC,EAAAuN,EAC7BgY,GAAW,CAACta,QAAO,OAAA,IAAApT,UAAA,CAAA,OACjBmI,EAAE,gCAAgC,CAAC,CAAA,CAAA,CAAA,CAAA,EAI1C2f,QAASA,IAAM1lB,EAAM8rB,WAAW,WAAW,EAAC,IAC5CvvB,OAAK,CAAA,OAAEyqB,EAAAA,GAAYa,WAAWra,CAAC,CAAA,CAAA,EAAA8F,EAEhCkY,GAAQ,CAAA,IACP1B,OAAK,CAAA,MAAA,CAAAjT,OAEA9Q,EAAE,0BAA0B,CAAC,EAAAuN,EAC7BgY,GAAW,CAACta,QAAO,OAAA,IAAApT,UAAA,CAAA,OACjBmI,EAAE,gCAAgC,CAAC,CAAA,CAAA,CAAA,CAAA,EAI1C2f,QAASA,IAAM1lB,EAAM8rB,WAAW,WAAW,EAC3CvvB,MAAK,QAAA,CAAA,EAAA+W,EAEN7P,GAAG,CAAA,IACFqa,MAAI,CAAA,MACF,CACE,CACE/X,EAAE,qDAAqD,EACvDihB,EAAAA,GAAY+E,eAAiB,GAC7BH,CAAuB,EAEzB,CACE7lB,EAAE,8CAA8C,EAChDihB,EAAAA,GAAYM,eAAiB,GAC7BuE,CAAgB,CACjB,CACO,EAAAjuB,SAGXA,CAAC,CAACksB,EAAOvtB,EAAOguB,CAAQ,IAACjX,EACvBuW,GAAQ,CAACC,MAAAA,EAAY,IAAAlsB,UAAA,CAAA,OAAA0V,EACnBoY,GAAM,CAAC5B,MAAAA,EAAcvtB,MAAAA,EAAcguB,SAAAA,CAAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAEzD,CAAA,CAAA,CAAA,CAAA,CAIT,iPCrCO,MAAMyB,GAAShsB,GAAsB,CAC1C,MAAMisB,EAAS3pB,EAAW,CAAE4pB,SAAU,EAAA,EAAQlsB,CAAK,EAC7C,CAACwlB,CAAK,EAAIviB,GAAWgpB,EAAQ,CACjC,KACA,QACA,cACA,YACA,WACA,UAAU,CACX,EAED,OAAA,IAAA,CAAA,IAAA5T,EAAA6B,GAAAA,EAAA7B,OAAAA,EAAA8T,QASc9sB,GAAM,CACdmmB,EAAM+E,WAAWlrB,EAAEmrB,cAAcjuB,KAAK,CACxC,EAAC8d,EAAAC,GAAA,CAAA,IAAAC,EARGiL,EAAMhoB,GAAEgd,EAGCgL,EAAM4G,YAAWb,EAClB/F,EAAM6G,UAASC,EACjB9G,EAAM0G,SAAQ3R,OAAAA,IAAAD,EAAAjb,GAAAob,EAAApC,EAAA,KAAAiC,EAAAjb,EAAAkb,CAAA,EAAAC,IAAAF,EAAAvU,GAAA0U,EAAApC,EAAA,cAAAiC,EAAAvU,EAAAyU,CAAA,EAAA+Q,IAAAjR,EAAA9f,GAAAigB,EAAApC,EAAA,aAAAiC,EAAA9f,EAAA+wB,CAAA,EAAAe,IAAAhS,EAAAjc,IAAAga,EAAA6T,SAAA5R,EAAAjc,EAAAiuB,GAAAhS,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,OAAAlY,EAAAkY,OAAArU,EAAAqU,MAAAA,CAAA,EAAA2H,MAAAhC,EAAA9b,MAHjBipB,EAAMjpB,KAAK,EAAA8b,CAAA,GAAA,CASxB,EAgCEsC,GAAA,CAAA,OAAA,CAAA,mFC7EF,MAAM4R,GAAsB,CAAC,OAAQ,OAAQ,KAAK,EAErCC,GAAoBA,IAAM,CACrC,KAAM,CAAEzmB,EAAAA,CAAAA,EAAMqR,EAAAA,EACR,CAAE4P,SAAAA,EAAUyF,qBAAAA,EAAsBC,oBAAAA,CAAAA,EACpC3F,GAAAA,EACE4F,EAAoBxvB,EAAW,IAAM6pB,EAAAA,GAAYa,WAAWra,CAAC,EAC7Dof,EAAkBzvB,EAAW,IAAM,CACvC,MAAM0vB,EAAiBF,EAAAA,EAEvB,OAAKE,EAEE7F,EAAAA,GAAYa,WAAWprB,IAAIowB,CAAc,GAAK,GAFzB,EAG9B,CAAC,EAED,OAAA,IAAA,CAAA,IAAAzU,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAI,OAAAA,EAAAN,EAAA9E,EAEKqW,GAAS,CAAA,IAAClB,OAAK,CAAA,OAAE1iB,EAAE,0BAA0B,CAAC,EAAA,IAAAnI,UAAA,CAAA,MAAA,CAAA0V,EAC5CuW,GAAQ,CAAA,IAACC,OAAK,CAAA,OAAE/jB,EAAE,iBAAiB,CAAC,EAAA,IAAAnI,UAAA,CAAA,OAAA0V,EAClC6W,GAAM,CAAA,IACL3tB,SAAO,CAAA,OAAE+vB,GAAoB1mB,IAAIinB,GAAU,CACzCA,EAAOzY,cACPyY,EAAOC,YAAAA,CAAa,CACrB,CAAC,EAAA,IACFxwB,OAAK,CAAA,OAAEowB,KAAuB,EAAE,EAChCpC,SAAUhuB,GAASkwB,EAAqBlwB,CAA0B,CAAA,CAAC,CAAA,CAAA,CAAA,EAAA+W,EAGtEuW,GAAQ,CAAA,IAACC,OAAK,CAAA,OAAE/jB,EAAE,2BAA2B,CAAC,EAAA,IAAAnI,UAAA,CAAA,OAAA0V,EAC5C0Y,GAAK,CACJxuB,GAAE,SAAA,IACFjB,OAAK,CAAA,OAAEqwB,EAAAA,CAAiB,EACxBrC,YAAmBmC,EAAoB,CAAEM,IAAKzwB,CAAAA,CAAO,EAAC,IACtD6vB,aAAW,CAAA,OAAEnX,OAAOlP,EAAE,8BAA8B,CAAC,CAAC,EAAA,IACtDsmB,WAAS,CAAA,OAAEpX,OAAOlP,EAAE,8BAA8B,CAAC,CAAC,EACpDmmB,SAAU,EAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA7T,CAAA,EAAAK,EAAAL,EAAA,IAKlBtS,EAAE,gCAAgC,CAAC,EAAAqS,CAAA,GAAA,CAI5C,0lBC3CA,MAAM6U,GAAkBjtB,IAGvB,IAAA,CAAA,IAAAoY,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAI,OAAAA,EAAAL,EAAA,IAEwBrY,EAAMpC,QAAQ,EAAA8a,EAAAN,EAAA9E,EAClCgS,GAAM,CAAA,IACLI,SAAO,CAAA,OAAE1lB,EAAMktB,QAAQ,EACvBtI,SAAQ,WACRO,QAAO,SACPJ,MAAK,KAAA,IAAAnnB,UAAA,CAAA,OAAA0V,EAEJ6Z,GAAY,CAAA,MAAA,gCAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA/U,CAAA,GAAA,EAKbgV,GAAmBptB,IAGxB,IAAA,CAAA,IAAA8Z,EAAAI,GAAAA,EAAAqC,OAAAA,GAAAzC,EAAA,QAGY9Z,EAAM0lB,QAAO,EAAA,EAAAhN,EAAAoB,EAAAxG,EAGrB+Z,GAAU,CAAA,MAAA,SAAA,CAAA,EAAA,IAAA,EAAA3U,EAAAoB,EAAA,IACV9Z,EAAM8pB,MAAK,IAAA,EAAAhQ,CAAA,GAAA,EAIHwT,GAAoBA,IAAM,CACrC,KAAM,CAAEvnB,EAAAA,CAAAA,EAAMqR,EAAAA,EAIV2P,GAAAA,EAEJ,KAAM,CAACwG,EAAaC,CAAc,EAAIlxB,EAA2B,CAAA,CAAE,EAC7D,CAACmxB,EAAaC,CAAc,EAAIpxB,EAAuB,CAAA,CAAE,EAEzDqxB,EAAgBA,IAAM,CAC1BD,EAAe,CAAC,GAAGD,EAAAA,EAAe,EAAE,CAAC,CACvC,EAEMG,EAAoBluB,GAAkB,CAC1CguB,EAAeD,EAAAA,EAAc9Y,OAAO,CAAC5S,EAAG3D,IAAMA,IAAMsB,CAAK,CAAC,CAC5D,EAEMmuB,EAAmBA,CAACnuB,EAAenD,IAAkB,CACzDmxB,EAAeD,EAAAA,EAAc5nB,IAAI,CAACioB,EAAQ1vB,IAAOA,IAAMsB,EAAQnD,EAAQuxB,CAAO,CAAC,CACjF,EAEMC,EAAgBA,IAAM,CAC1BP,EAAe,CAAC,GAAGD,IAAe,CAAES,KAAM,EAAA,CAAI,CAAC,CACjD,EAEMC,EAAoBvuB,GAAkB,CAC1C8tB,EAAeD,EAAAA,EAAc5Y,OAAO,CAAC5S,EAAG3D,IAAMA,IAAMsB,CAAK,CAAC,CAC5D,EAEMwuB,EAAmBA,CAACxuB,EAAeyuB,EAAyB5xB,IAAkB,CAClFixB,EAAeD,IAAc1nB,IAAI,CAACioB,EAAQ1vB,IAAOA,IAAMsB,EAAQ,CAAE,GAAGouB,EAAQ,CAACK,CAAK,EAAG5xB,CAAAA,EAAUuxB,CAAO,CAAC,CACzG,EAgBA,MAAA,CAAAxa,EAEKqW,GAAS,CAAA,IAAClB,OAAK,CAAA,OAAE1iB,EAAE,oCAAoC,CAAC,EAAA,IAAAnI,UAAA,CAAA,IAAA2a,EAAAuC,GAAAA,EAAApC,OAAAA,EAAAH,EAAAjF,EAEpD7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAE2P,EAAAA,CAAa,EAAA7vB,SACrBA,CAACkwB,EAAQpuB,IAAK4T,EACZ2Z,GAAc,CAACC,SAAUA,IAAMU,EAAiBluB,GAAO,EAAC,IAAA9B,UAAA,CAAA,OAAA0V,EACtD0Y,GAAK,CACJzvB,MAAOuxB,EACPvD,SAAUhuB,GAASsxB,EAAiBnuB,EAAAA,EAASnD,CAAK,EAClD6vB,YAAW,+BACXF,SAAU,EAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAGpB,EAAA,IAAA,EAAAxT,EAAAH,EAAAjF,EAEF8Z,GAAe,CAAA,IACdtD,OAAK,CAAA,OAAE/jB,EAAE,uCAAuC,CAAC,EACjD2f,QAASiI,CAAAA,CAAa,EAAA,IAAA,EAAApV,CAAA,CAAA,CAAA,EAAAjF,EAK3BqW,GAAS,CAAA,IAAClB,OAAK,CAAA,OAAE1iB,EAAE,oCAAoC,CAAC,EAAA,IAAAnI,UAAA,CAAA,IAAAmc,EAAAkC,GAAAA,EAAAvD,OAAAA,EAAAqB,EAAAzG,EAEpD7P,GAAG,CAAA,IAACqa,MAAI,CAAA,OAAEyP,EAAAA,CAAa,EAAA3vB,SACrBA,CAACkwB,EAAQpuB,KAAK,IAAA,CAAA,IAAAua,EAAAmU,GAAAA,EAAAjU,EAAAF,EAAA3B,WAAAI,OAAAA,EAAAuB,EAAA3G,EAEV2Z,GAAc,CAACC,SAAUA,IAAMe,EAAiBvuB,GAAO,EAAC,IAAA9B,UAAA,CAAA,OAAA0V,EACtD0Y,GAAK,CAAA,IACJzvB,OAAK,CAAA,OAAEuxB,EAAOE,IAAI,EAClBzD,SAAUhuB,GACR2xB,EAAiBxuB,EAAAA,EAAS,OAAQnD,CAAK,EACzC6vB,YAAW,6BACXF,SAAU,EAAA,CAAK,CAAA,CAAA,CAAA,EAAA/R,CAAA,EAAAzB,EAAAyB,EAAA7G,EAIhB0Y,GAAK,CAAA,IACJzvB,OAAK,CAAA,OAAEuxB,EAAOO,UAAY,EAAE,EAC5B9D,SAAUhuB,GACR2xB,EAAiBxuB,EAAAA,EAAS,WAAYnD,CAAK,EAC7C6vB,YAAW,WACXF,SAAU,EAAA,CAAK,EAAA,IAAA,EAAAxT,EAAAyB,EAAA7G,EAEhB0Y,GAAK,CAAA,IACJzvB,OAAK,CAAA,OAAEuxB,EAAOQ,YAAc,EAAE,EAC9B/D,SAAUhuB,GACR2xB,EAAiBxuB,EAAAA,EAAS,aAAcnD,CAAK,EAC/C6vB,YAAW,WACXF,SAAU,EAAA,CAAK,EAAA,IAAA,EAAAjS,CAAA,GAAA,CAAA,CAItB,EAAA,IAAA,EAAAvB,EAAAqB,EAAAzG,EAEF8Z,GAAe,CAAA,IACdtD,OAAK,CAAA,OAAE/jB,EAAE,uCAAuC,CAAC,EACjD2f,QAASqI,CAAAA,CAAa,EAAA,IAAA,EAAAhU,CAAA,CAAA,CAAA,GAAA,IAAA,CAAA,IAAAtB,EAAAiD,GAAAA,EAAAhD,OAAAA,EAAAD,EAAA,IAKzB1S,EAAE,gCAAgC,CAAC,EAAA0S,CAAA,IAAA,CAI5C,EAAEkC,GAAA,CAAA,OAAA,CAAA,sCCxIF,MAAM4T,GAAuBtF,GAAmC,CAC9D,OAAQA,EAAAA,CACN,IAAK,OACH,MAAO,iBAET,IAAK,YACH,MAAO,2BAET,IAAK,YACH,MAAO,0BACT,CAEJ,EAEauF,GAAiBxuB,GAA8B,CAC1D,KAAM,CACJipB,OAAAA,EACAwF,eAAAA,EACAvF,gBAAAA,EACAwF,SAAAA,EACAC,OAAAA,EACAC,SAAAA,CAAAA,EACEjG,GAAmC,MAAM,EAEvCkG,EAAqC,CACzCF,OAAAA,EACA,IAAIC,UAAW,CACb,OAAOA,EAAAA,CACT,CAAA,EAGF3xB,GAAa,IAAM,CACb+C,EAAM8uB,gBACR9uB,EAAM8uB,cAAc9yB,QAAU6yB,EAElC,CAAC,EAED5xB,GAAa,IAAM,CACjB+C,EAAM+uB,gBAAgBR,GAAoBtF,EAAAA,CAAQ,CAAC,CACrD,CAAC,EAED,MAAM+F,EAAgBvyB,GAAsB,CAC1C,OAAQA,EAAAA,CACN,IAAK,OACH,MAAA,CAAA6W,EAEKqY,GAAqB,CAACG,WAAY4C,CAAAA,CAAQ,EAAApb,EAC1CuX,GAAgB,CAAA,CAAA,CAAA,EAIvB,IAAK,YACH,OAAAvX,EAAQkZ,GAAiB,EAAA,EAE3B,IAAK,YACH,OAAAlZ,EAAQga,GAAiB,EAAA,CAC3B,CAEJ,EAEA,OAAA,IAAA,CAAA,IAAAlV,EAAArB,GAAAA,EAAA2B,OAAAA,EAAAN,EAAA9E,EAEKmW,GAAmB,CAAA,IAClBztB,SAAO,CAAA,OAAEitB,EAAAA,CAAQ,EAAA,IACjBtC,UAAQ,CAAA,OAAE8H,EAAAA,CAAgB,EAAA,IAC1BvF,iBAAe,CAAA,OAAEA,EAAAA,CAAiB,EAClCjjB,OAAQ+oB,CAAAA,CAAY,CAAA,EAAA5W,CAAA,GAAA,CAI5B,4cCxDA,MAAM6W,GAAgBA,IAAM,CAC1B,KAAM,CAAC5G,EAAME,CAAO,EAAIjsB,EAAwB,OAAO,EACjD,CAAC4yB,EAAQC,CAAS,EAAI7yB,EAAa,EAAK,EAE9CW,OAAAA,GAAa,IAAM,CACjB,GAAI,CAACiyB,IAAU,OAEf,MAAME,EAAUhf,WAAWif,WAAW,IAAMF,EAAU,EAAK,EAAG,GAAI,EAElE9xB,GAAU,IAAM+S,WAAWkf,aAAaF,CAAO,CAAC,CAClD,CAAC,EAEM,CACL/G,KAAAA,EACAE,QAAAA,EACA2G,OAAAA,EACAC,UAAAA,CAAAA,CAEJ,EAEMI,GAAoBjoB,GAAwB,CAChDrK,GAAa,IAAM,CAEjB,MAAMuyB,EAActjB,GAAyB,CACvCA,EAAMrJ,MAAQ,UAAUyE,EAAAA,CAC9B,EAEAT,SAASQ,iBAAiB,UAAWmoB,CAAU,EAE/CnyB,GAAU,IAAMwJ,SAASkM,oBAAoB,UAAWyc,CAAU,CAAC,CACrE,CAAC,CACH,EAEMC,GAAyBA,IAAM,CACnC,KAAM,CAACC,EAAaC,CAAc,EAAIrzB,EAAAA,EAChC,CAACqgB,EAAQiT,CAAS,EAAItzB,EAAa,CAAC,EAEpCuzB,EAAgBA,CACpBC,EACAC,EAAkB,KACf,CACH,MAAM7xB,EAAO4xB,GAAiBJ,EAAAA,EAE9B,GAAI,CAACxxB,GAAQ,CAACA,EAAK8xB,sBAAuB,OAE1C,MAAMC,EAAaF,EACf7xB,EAAKgyB,aACLhyB,EAAK8xB,wBAAwBrT,OAE7BsT,EAAa,GACfL,EAAUO,GACP,OAAOA,GAAmB,UACtBC,KAAKC,IAAIF,EAAiBF,CAAU,EAAI,GACzCE,EACAF,CACN,CAEJ,EAEAhzB,GAAa,IAAM,CACjB,MAAMiB,EAAOwxB,EAAAA,EAEb,GAAI,CAACxxB,GAAQ,OAAOoyB,eAAmB,IAAa,OAEpD,MAAMC,EAAW,IAAID,eAAe,IAAM,CACxCT,EAAAA,CACF,CAAC,EAEDU,EAASC,QAAQtyB,CAAI,EAErBb,GAAU,IAAMkzB,EAASE,YAAY,CACvC,CAAC,EAED,MAAMC,EAAeA,IAAMb,EAAAA,EAE3B5yB,OAAAA,GAAa,IAAM,CACbmT,WAAWugB,SAAWje,SAE1Bie,OAAOtpB,iBAAiB,SAAUqpB,CAAY,EAE9CrzB,GAAU,IAAMszB,OAAO5d,oBAAoB,SAAU2d,CAAY,CAAC,EACpE,CAAC,EAEM,CACLE,cAAejB,EACfD,YAAAA,EACA/S,OAAAA,EACAkT,cAAAA,CAAAA,CAEJ,EAEavY,GAAatX,GAAoC,CAC5D,KAAM,CAAEqoB,KAAMwI,EAAWtI,QAAAA,EAAS2G,OAAAA,EAAQC,UAAAA,CAAAA,EAAcF,GAAAA,EAClD,CAAEhX,IAAAA,EAAKP,OAAAA,CAAAA,EAAWF,GAAAA,EAClB,CAAErF,SAAAA,CAAAA,EAAa6D,GAAAA,EACf,CAAE4a,cAAAA,EAAelB,YAAAA,EAAa/S,OAAAA,EAAQkT,cAAAA,CAAAA,EACxCJ,GAAAA,EACE,CACJzzB,QAAS80B,EACTnK,SAAUoK,EACV7H,gBAAiB8H,CAAAA,EACf1K,GAAmBuK,CAAS,EAC1B,CACJ70B,QAASi1B,EACTtK,SAAUuK,EACVhI,gBAAiBiI,CAAAA,EACf7K,GAAmB5O,CAAM,EACvB0Z,EAAeA,IAAM7I,EAAQ,UAAU,EACvC,CAAExiB,EAAAA,EAAGiR,MAAAA,EAAOxB,YAAAA,CAAAA,EAAgB4B,EAAAA,EAC5BjI,GAAQoY,GAAAA,EAER8J,GAA6D,CACjEr1B,QAAS,IAAA,EAEL,CAACs1B,GAAkBC,EAAmB,EACxCj1B,EAAa,gBAAgB,EAE3BmsB,GAAQtrB,EAAW,IACvBsY,GAAMob,EAAAA,CAAW,EACdnb,KAAK,QAAS,IAAM3P,EAAE,aAAa,CAAC,EACpC2P,KAAK,WAAY,IAAM3P,EAAEurB,GAAAA,CAAkB,CAAC,EAC5C5b,KAAK,OAAQ,IAAM3P,EAAE,YAAY,CAAC,EAClC+P,YACL,EAEAyZ,GAAiBvvB,EAAMuX,OAAO,EAE9Bta,GAAa,IAAM,CACbya,EAAAA,GAAUA,SAAW9I,GAAgBiN,WACvC7b,EAAMuX,QAAAA,CAEV,CAAC,EAED,MAAMqC,GAAa,SAAY,CAC7B,MAAMC,EAAa5B,EAAAA,EACH4B,GAAe,MAAMhB,GAAgBgB,CAAU,KAExC,EAAI,CAC7B,EAEA,IAAI2X,GAAiB,GACjBC,GACAtB,EACAuB,EACJ,KAAM,CAACC,EAAoBC,CAAqB,EAAIt1B,EAAa,EAAK,EAEtEW,GAAa,IAAM,CACjBg0B,EAAAA,EACAH,EAAAA,EACapB,EAAAA,IAIT8B,IACEC,IACFrhB,WAAWkf,aAAamC,EAAqB,EAG/CA,GAAwBrhB,WAAWif,WAAW,IAAM,CAC9CK,MACFG,EAAcnd,OAAW,EAAI,EAC7B8e,GAAiB,GAErB,EAAG,CAAC,GAGJ3B,EAAAA,EAGFxyB,GAAU,IAAM,CACVo0B,IACFrhB,WAAWkf,aAAamC,EAAqB,CAEjD,CAAC,EACH,CAAC,EAEDx0B,GAAa,IAAM,CACjB,MAAM40B,EAAgBlV,EAAAA,EAElBwT,IAAmBzd,QAChBmf,IAAkB1B,GAClB0B,EAAgB,GAChB1B,EAAiB,GACjBC,KAAKC,IAAIwB,EAAgB1B,CAAc,EAAI,KAGhDyB,EAAsB,EAAI,EAEtBF,GACFthB,WAAWkf,aAAaoC,CAAe,EAGzCA,EAAkBthB,WAAWif,WAAW,IAAM,CAC5CuC,EAAsB,EAAK,EAC3BF,EAAkBhf,MACpB,EAAG,GAAG,GAGRyd,EAAiB0B,EAEjBx0B,GAAU,IAAM,CACVq0B,GACFthB,WAAWkf,aAAaoC,CAAe,CAE3C,CAAC,CACH,CAAC,EAED,KAAM,CAACnW,EAAgBC,CAAiB,EAAIlf,EAA6B6V,EAASsJ,SAAAA,EAAW/D,MAAM,EAEnGta,GAAQ,IAAM,CACZ+U,EAASS,GAAG,gBAAiB4I,CAAiB,CAChD,CAAC,EAEDne,GAAU,IAAM,CACd8U,EAASW,IAAI,gBAAiB0I,CAAiB,CACjD,CAAC,EAED,MAAMsW,EAAiB30B,EACrB,IAAM,EAAE0zB,EAAAA,IAAgB,SAAWtV,EAAAA,IAAqB3M,GAAgBmjB,QAC1E,EAEM3J,GAASA,IAAM,CACnB3S,GAAM,CAAE4S,KAAMwI,EAAAA,EAAanZ,OAAQ6D,EAAAA,CAAe,CAAG,EAClD7F,KAAK,CAAE2S,KAAM,QAAS3Q,OAAQ9I,GAAgBmjB,OAAAA,EAAW,IAAA,EAAe,EACxErc,KAAK,CAAE2S,KAAM,OAAA,EAAW,IAAM,CAC7BlW,EAAS6f,aAAAA,CACX,CAAC,EACAtc,KAAK,CAAE2S,KAAM,UAAA,EAAc,IAAM,CAC5BgJ,GAAer1B,SAAW,CAACq1B,GAAer1B,QAAQ4yB,SACpDyC,GAAer1B,QAAQ2yB,OAAAA,EAGvBpG,EAAQ,OAAO,CAEnB,CAAC,EACA7S,KAAK,CAAE2S,KAAM,MAAA,EAAU,IAAM,CAC5BE,EAAQ,OAAO,CACjB,CAAC,EACAR,UAAU,IAAM,CACf5V,EAAS6f,aAAAA,EACThyB,EAAMuX,QAAAA,CACR,CAAC,CACL,EAEM0a,EAA0BC,GAC9Bzc,GAAMyc,CAAU,EACbxc,KAAK,QAAS,IAAApC,EAAO2S,GAAY,CAACC,WAAYkL,CAAAA,CAAY,CAAI,EAC9D1b,KAAK,WAAY,IAAApC,EACfkb,GAAa,CACZO,cAAewC,GACfzC,cAAeuC,EAAAA,CAAc,CAEhC,EACA3b,KAAK,OAAQ,IAAApC,EAAO8S,GAAU,CAAA,CAAA,CAAG,EACjC2B,UAAU,IAAAzU,EAAO0E,GAAY,CAACjZ,MAAOmzB,CAAAA,CAAU,CAAI,EAElDC,GAA4BA,KAAA,IAAA,CAAA,IAAA/Z,EAAArB,GAAAA,EAAAsB,EAAAD,EAAAE,WAAAI,OAAAA,EAAAN,EAAA9E,EAE7B3P,GAAI,CAAA,IAACqW,MAAI,CAAA,OAAE+W,EAAAA,CAAmB,EAAAnzB,cAChB,IAAA,CAAA,IAAAkc,GAAAI,GAAAA,EAAAxB,OAAAA,EAAAoB,GAAA,IAERmY,EAAuBG,GAAAA,CAAc,CAAC,EAAAtY,EAAA,GAAA,CAAA,CAE1C,EAAAzB,CAAA,EAAAK,EAAAL,EAAA,IAQA4Z,EAAuBnB,EAAAA,CAAoB,CAAC,EAAAzW,EAAA,IAAAqP,EAAArR,EALtCrP,GACL,0BACAgoB,EAAAA,GAA8B,mCAChC,CAAC,CAAA,EAAA5Y,CAAA,GAAA,EAODia,GACJC,GAEA7c,GAAM6c,CAAY,EACf5c,KAAK9G,GAAgBmjB,QAAS,IAAMI,IAA2B,EAC/Dzc,KACC1H,GAAEukB,MACA3jB,GAAgB+M,SAChB/M,GAAgBgN,WAChBhN,GAAgBiN,SAClB,EACA,IAAAvI,EACGgI,GAAc,CAAA,IAAC/D,SAAO,CAAA,OAAEvX,EAAMuX,OAAO,EAAEib,OAAQ5Y,EAAAA,CAAU,CAE9D,EACCmO,UAAUhpB,GAAKuU,EAAK0E,GAAY,CAACjZ,MAAOA,GAAS,gBAAA,CAAgB,CAAI,EAGpE0zB,GAAkC,CACtC,WAAc,gDACd,kBAAmB,8CAAA,EAIfC,GAA+B,CACnC,WAAc,4BACd,MAAS,+CACT,gBAAiB,gCACjB,aAAc,wDAAA,EAGhB,OAAA,IAAA,CAAA,IAAAna,EAAAuC,GAAAA,EAAAf,EAAAxB,EAAAD,WAAAG,GAAAsB,EAAAzB,WAAA2B,GAAAxB,GAAAH,WAAA6B,GAAAF,GAAA3B,WAAA8C,GAAAjB,GAAA7B,WAAA+C,GAAA5C,GAAAD,YAAAD,OAAAA,EAAAoa,UAGgBtzB,GAAM,CACZA,EAAE0D,SAAW1D,EAAEmrB,iBAAqBjT,QAAAA,CAC1C,EAACqb,GAAAra,EAMMka,EAAY,EAAA1Y,EAAAK,QAYRlO,GAASA,EAAM2mB,gBAAAA,EAAiBC,GAQ/BlC,EAAanY,EAAA,EAAAC,EAAAD,GAAAnF,EACpB4U,GAAM,CAAA,IACLO,OAAK,CAAA,OAAExT,OAAOwT,IAAO,CAAC,EAAA,IACtBJ,MAAI,CAAA,OAAEwI,EAAAA,CAAW,EAAA,IACjBtZ,SAAO,CAAA,OAAEvX,EAAMuX,OAAO,EAAA,IACtB6Q,QAAM,CAAA,OAAE0J,EAAAA,EAAmB1J,GAAS1V,MAAS,EAC7C6V,QAAAA,CAAAA,CAAgB,EAAAtO,EAAA,EAAAvB,EAAA0C,GAAA,IAUXiX,GAAoB9W,EAAAA,CAAgB,CAAC,EAAA7C,EAAAD,GAAAnF,EAI3C2U,GAAM,CAAA,CAAA,EAAA,IAAA,EAAAvP,EAAA2C,GAAA,IAWNtV,EAAE,iBAAiB,CAAC,EAAAsU,EAAAC,GAAA,CAAA,IAAAC,GAtDDpL,GAAM4B,KAAAA,EAAMyJ,GAC9BhF,IAAa+V,GACdvU,EAAAA,EAAU,MAAQ,MAAKsV,GAInBtjB,GACL,8GACA2oB,EAAAA,GAAwBT,EAAAA,EACpB,kBACAxe,MACN,EAACqgB,GAGW9d,OAAOwT,GAAAA,CAAO,EAACuK,GAEpB,CACL,GAAI,OAAOrW,EAAAA,GAAa,UAAYA,EAAAA,EAAW,EAC3C,CAAEA,OAAQ,GAAGA,EAAAA,CAAQ,IAAA,EACrB,CAAA,EACJ,GAAG+V,EAAAA,EACJO,GAYYjqB,GACL,0BACAmoB,KAA2B,mCAC7B,EAAC+B,GAWElqB,GACL,uHACAkmB,EAAAA,EACI,4BACA,sDACN,EAAC3U,OAAAA,KAAAD,EAAAjb,GAAAob,EAAAlC,EAAA,yBAAA+B,EAAAjb,EAAAkb,EAAA,EAAAC,KAAAF,EAAAvU,GAAA0U,EAAAlC,EAAA,OAAA+B,EAAAvU,EAAAyU,EAAA,EAAA+Q,KAAAjR,EAAA9f,GAAAigB,EAAAlC,EAAA,MAAA+B,EAAA9f,EAAA+wB,EAAA,EAAAe,KAAAhS,EAAAjc,GAAAqrB,EAAA3P,EAAAO,EAAAjc,EAAAiuB,EAAA,EAAAyG,KAAAzY,EAAAlc,GAAAqc,EAAAV,EAAA,aAAAO,EAAAlc,EAAA20B,EAAA,EAAAzY,EAAA1a,EAAAgzB,GAAA7Y,EAAAiZ,GAAA1Y,EAAA1a,CAAA,EAAAqzB,KAAA3Y,EAAA7d,GAAAitB,EAAAvP,GAAAG,EAAA7d,EAAAw2B,EAAA,EAAAC,KAAA5Y,EAAA/Q,GAAAmgB,EAAArO,GAAAf,EAAA/Q,EAAA2pB,EAAA,EAAA5Y,CAAA,EAAA,CAAAjb,EAAAqT,OAAA3M,EAAA2M,OAAAlY,EAAAkY,OAAArU,EAAAqU,OAAAtU,EAAAsU,OAAA9S,EAAA8S,OAAAjW,EAAAiW,OAAAnJ,EAAAmJ,MAAAA,CAAA,EAAA6F,CAAA,GAAA,CAOX,EAAEoC,GAAA,CAAA,UAAA,OAAA,CAAA,ECzZK,MAAMwY,GAAM,IAAItlB,IACrB,QAAQ,IACN,cACA,mCACA,sCACA,GAAGA,CACL,ECSWulB,GAAsB,CAACnuB,EAAU,iBAAmB,CAC/D,GAAI,WAAW,SAAW,OACxB,OAAOA,EAGT,MAAMouB,EAAW,WAAW,eAE5B,OAAKA,GAQAA,EAAS,IAAIpuB,CAAO,GACvBouB,EAAS,OACPpuB,EACAquB,EAAA,EAIGruB,IAdL,QAAQ,KACN,sEAAA,EAGKA,EAWX,EAEasuB,GAAoBvzB,GAAmC,CAClE,MAAMwzB,EAAQ,SAAS,cAAc,cAAc,EAInD,GAFIA,KAAa,OAAA,EAEb,CAACA,EAAO,CACVJ,GAAA,EACA,MAAMvlB,EAAI,IAAIylB,GAA0B,CACtC,SAAU,CACRH,GAAI,cAAc,EAClBtlB,EAAE,OAAA,EACF7N,EAAM,UAAA,CACR,EACA,SAAUA,EAAM,SAChB,MAAOA,EAAM,KAAA,CACd,EAED,SAAS,KAAK,OAAO6N,CAAC,CAExB,CACF","x_google_ignoreList":[0,1,3,4,7,19,20,21,22,23,24,25,26,27,28,29,30,31]}