@askrjs/askr 0.0.4 → 0.0.6

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.
Files changed (80) hide show
  1. package/dist/{index.d.cts → component-BBGWJdqJ.d.ts} +42 -33
  2. package/dist/foundations/index.d.ts +32 -0
  3. package/dist/{chunk-WTFWRSHB.js → foundations/index.js} +76 -28
  4. package/dist/foundations/index.js.map +1 -0
  5. package/dist/fx/index.js +295 -77
  6. package/dist/fx/index.js.map +1 -1
  7. package/dist/index.d.ts +4 -134
  8. package/dist/index.js +3709 -42
  9. package/dist/index.js.map +1 -1
  10. package/dist/{jsx/jsx-dev-runtime.d.ts → jsx-dev-runtime.d.ts} +3 -3
  11. package/dist/jsx-dev-runtime.js +17 -0
  12. package/dist/jsx-dev-runtime.js.map +1 -0
  13. package/dist/jsx-runtime.d.ts +14 -0
  14. package/dist/{chunk-SALJX5PZ.js → jsx-runtime.js} +6 -9
  15. package/dist/jsx-runtime.js.map +1 -0
  16. package/dist/layout-D5MqtW_q.d.ts +14 -0
  17. package/dist/resources/index.d.ts +3 -0
  18. package/dist/resources/index.js +753 -239
  19. package/dist/resources/index.js.map +1 -1
  20. package/dist/router/index.d.ts +2 -14
  21. package/dist/router/index.js +3115 -19
  22. package/dist/router/index.js.map +1 -1
  23. package/dist/ssr/index.js +3363 -103
  24. package/dist/ssr/index.js.map +1 -1
  25. package/dist/{types-CZHOAiC1.d.ts → types-uOPfcrdz.d.ts} +3 -1
  26. package/dist/vite/index.d.ts +17 -0
  27. package/dist/vite/index.js +2306 -0
  28. package/dist/vite/index.js.map +1 -0
  29. package/package.json +21 -23
  30. package/dist/chunk-64C7W2AE.js +0 -43
  31. package/dist/chunk-64C7W2AE.js.map +0 -1
  32. package/dist/chunk-6FLMH4EL.js +0 -124
  33. package/dist/chunk-6FLMH4EL.js.map +0 -1
  34. package/dist/chunk-FJUXFA72.js +0 -16
  35. package/dist/chunk-FJUXFA72.js.map +0 -1
  36. package/dist/chunk-SALJX5PZ.js.map +0 -1
  37. package/dist/chunk-VRAEBIJ3.js +0 -82
  38. package/dist/chunk-VRAEBIJ3.js.map +0 -1
  39. package/dist/chunk-WTFWRSHB.js.map +0 -1
  40. package/dist/chunk-XHKZGJE3.js +0 -2907
  41. package/dist/chunk-XHKZGJE3.js.map +0 -1
  42. package/dist/chunk-Z5ZSTLYF.js +0 -420
  43. package/dist/chunk-Z5ZSTLYF.js.map +0 -1
  44. package/dist/fx/index.cjs +0 -1193
  45. package/dist/fx/index.cjs.map +0 -1
  46. package/dist/fx/index.d.cts +0 -186
  47. package/dist/index.cjs +0 -4035
  48. package/dist/index.cjs.map +0 -1
  49. package/dist/jsx/jsx-dev-runtime.cjs +0 -46
  50. package/dist/jsx/jsx-dev-runtime.cjs.map +0 -1
  51. package/dist/jsx/jsx-dev-runtime.d.cts +0 -12
  52. package/dist/jsx/jsx-dev-runtime.js +0 -19
  53. package/dist/jsx/jsx-dev-runtime.js.map +0 -1
  54. package/dist/jsx/jsx-runtime.cjs +0 -54
  55. package/dist/jsx/jsx-runtime.cjs.map +0 -1
  56. package/dist/jsx/jsx-runtime.d.cts +0 -21
  57. package/dist/jsx/jsx-runtime.d.ts +0 -21
  58. package/dist/jsx/jsx-runtime.js +0 -16
  59. package/dist/jsx/jsx-runtime.js.map +0 -1
  60. package/dist/jsx-AzPM8gMS.d.cts +0 -35
  61. package/dist/navigate-LUVYHYZZ.js +0 -17
  62. package/dist/navigate-LUVYHYZZ.js.map +0 -1
  63. package/dist/resources/index.cjs +0 -1200
  64. package/dist/resources/index.cjs.map +0 -1
  65. package/dist/resources/index.d.cts +0 -21
  66. package/dist/route-BCND6MPK.js +0 -32
  67. package/dist/route-BCND6MPK.js.map +0 -1
  68. package/dist/router/index.cjs +0 -3247
  69. package/dist/router/index.cjs.map +0 -1
  70. package/dist/router/index.d.cts +0 -64
  71. package/dist/router-DaGtH1Sq.d.cts +0 -36
  72. package/dist/ssr/index.cjs +0 -4059
  73. package/dist/ssr/index.cjs.map +0 -1
  74. package/dist/ssr/index.d.cts +0 -123
  75. package/dist/types-CZ5sWur5.d.cts +0 -23
  76. package/src/jsx/index.ts +0 -4
  77. package/src/jsx/jsx-dev-runtime.ts +0 -23
  78. package/src/jsx/jsx-runtime.ts +0 -48
  79. package/src/jsx/types.ts +0 -33
  80. package/src/jsx/utils.ts +0 -19
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/boot/index.ts","../src/runtime/derive.ts"],"sourcesContent":["/**\n * App bootstrap and mount\n */\n\nimport {\n createComponentInstance,\n mountComponent,\n cleanupComponent,\n type ComponentFunction,\n type ComponentInstance,\n} from '../runtime/component';\nimport { globalScheduler } from '../runtime/scheduler';\nimport { logger } from '../dev/logger';\nimport { registerAppInstance, initializeNavigation } from '../router/navigate';\nimport { assertExecutionModel } from '../runtime/execution-model';\n\nconst HAS_ROUTES_KEY = Symbol.for('__ASKR_HAS_ROUTES__');\n\nlet componentIdCounter = 0;\n\n// Track instances by root element to support multiple createIsland calls on same root\nconst instancesByRoot = new WeakMap<Element, ComponentInstance>();\n\n// Symbol for storing cleanup on elements\nconst CLEANUP_SYMBOL = Symbol.for('__tempoCleanup__');\n\n// Type for elements that have cleanup functions attached\ninterface ElementWithCleanup extends Element {\n [CLEANUP_SYMBOL]?: () => void;\n}\n\nexport interface AppConfig {\n root: Element | string;\n component: ComponentFunction;\n // Opt-in: surface cleanup errors during teardown for this app instance\n cleanupStrict?: boolean;\n}\n\nfunction attachCleanupForRoot(\n rootElement: Element,\n instance: ComponentInstance\n) {\n (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL] = () => {\n // Attempt to remove listeners and cleanup instances under the root.\n // In non-strict mode we preserve previous behavior by swallowing errors\n // (but logging in dev); in strict mode we aggregate and re-throw.\n const errors: unknown[] = [];\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n errors.push(e);\n }\n\n // Manually traverse descendants and attempt to cleanup their instances.\n // Avoids import cycles by using local traversal and existing cleanupComponent.\n try {\n const descendants = rootElement.querySelectorAll('*');\n for (const d of Array.from(descendants)) {\n try {\n const inst = (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n if (inst) {\n try {\n cleanupComponent(inst);\n } catch (err) {\n errors.push(err);\n }\n try {\n delete (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (e) {\n errors.push(e);\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n errors.push(e);\n }\n\n if (errors.length > 0) {\n if (instance.cleanupStrict) {\n throw new AggregateError(errors, `cleanup failed for app root`);\n } else if (process.env.NODE_ENV !== 'production') {\n for (const err of errors) logger.warn('[Askr] cleanup error:', err);\n }\n }\n };\n\n try {\n const descriptor =\n Object.getOwnPropertyDescriptor(rootElement, 'innerHTML') ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(rootElement),\n 'innerHTML'\n ) ||\n Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n\n if (descriptor && (descriptor.get || descriptor.set)) {\n Object.defineProperty(rootElement, 'innerHTML', {\n get: descriptor.get\n ? function (this: Element) {\n return descriptor.get!.call(this);\n }\n : undefined,\n set: function (this: Element, value: string) {\n if (value === '' && instancesByRoot.get(this) === instance) {\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] cleanup error:', e);\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] cleanup error:', e);\n }\n }\n if (descriptor.set) {\n return descriptor.set.call(this, value);\n }\n },\n configurable: true,\n });\n }\n } catch {\n // If Object.defineProperty fails, ignore\n }\n}\n\n/**\n * Explicitly teardown an app mounted on `root` if present. This is the\n * recommended API for deterministic cleanup rather than relying on overriding\n * `innerHTML` setter behavior.\n */\nexport function teardownApp(_root: Element | string) {\n throw new Error(\n 'The `teardownApp` alias has been removed. Use `cleanupApp(root)` instead.'\n );\n}\n\nimport { Fragment, ELEMENT_TYPE } from '../jsx';\nimport { DefaultPortal } from '../foundations/portal';\n\nfunction mountOrUpdate(\n rootElement: Element,\n componentFn: ComponentFunction,\n options?: { cleanupStrict?: boolean }\n) {\n // Ensure root component always includes a DefaultPortal host by wrapping it.\n const wrappedFn: ComponentFunction = (props, ctx) => {\n const out = componentFn(props, ctx);\n const portalVNode = {\n $$typeof: ELEMENT_TYPE,\n type: DefaultPortal,\n props: {},\n key: '__default_portal',\n } as unknown;\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: {\n children:\n out === undefined || out === null\n ? [portalVNode]\n : [out, portalVNode],\n },\n } as unknown as ReturnType<ComponentFunction>;\n };\n // Preserve the original component name for debugging/dev warnings\n Object.defineProperty(wrappedFn, 'name', {\n value: componentFn.name || 'Component',\n });\n\n // Clean up existing cleanup function before mounting new one\n const existingCleanup = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (existingCleanup) existingCleanup();\n\n let instance = instancesByRoot.get(rootElement);\n\n if (instance) {\n removeAllListeners(rootElement);\n try {\n cleanupComponent(instance);\n } catch (e) {\n // If previous cleanup threw in strict mode, log but continue mounting new instance\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] prior cleanup threw:', e);\n }\n\n instance.fn = wrappedFn;\n instance.evaluationGeneration++;\n instance.mounted = false;\n instance.expectedStateIndices = [];\n instance.firstRenderComplete = false;\n instance.isRoot = true;\n // Update strict flag if provided\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n } else {\n const componentId = String(++componentIdCounter);\n instance = createComponentInstance(componentId, wrappedFn, {}, rootElement);\n instancesByRoot.set(rootElement, instance);\n instance.isRoot = true;\n // Initialize strict flag from options\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n }\n\n attachCleanupForRoot(rootElement, instance);\n mountComponent(instance);\n globalScheduler.flush();\n}\n\n// New strongly-typed init functions\nimport type { Route } from '../common/router';\nimport { removeAllListeners } from '../renderer';\n\nexport type IslandConfig = {\n root: Element | string;\n component: ComponentFunction;\n // Optional: surface cleanup errors during teardown for this island\n cleanupStrict?: boolean;\n // Explicitly disallow routes on islands at type level\n routes?: never;\n};\n\nexport type IslandsConfig = {\n islands: IslandConfig[];\n};\n\nexport type SPAConfig = {\n root: Element | string;\n routes: Route[]; // routes are required\n // Optional: surface cleanup errors during teardown for this SPA\n cleanupStrict?: boolean;\n component?: never;\n};\n\nexport type HydrateSPAConfig = {\n root: Element | string;\n routes: Route[];\n // Optional: surface cleanup errors during teardown for this SPA\n cleanupStrict?: boolean;\n};\n\n/**\n * createIsland: Enhances existing DOM (no router, mounts once)\n */\nexport function createIsland(config: IslandConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIsland requires a config object');\n }\n if (typeof config.component !== 'function') {\n throw new Error('createIsland: component must be a function');\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Islands must not initialize router or routes\n if ('routes' in config) {\n throw new Error(\n 'createIsland does not accept routes; use createSPA for routed apps'\n );\n }\n\n // Routes are never supported with islands.\n // If routes were registered (even at module load time), fail fast to avoid\n // surprising partial router behavior.\n try {\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n if (g[HAS_ROUTES_KEY]) {\n throw new Error(\n 'Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.'\n );\n }\n } catch {\n // ignore\n }\n\n mountOrUpdate(rootElement, config.component, {\n cleanupStrict: config.cleanupStrict,\n });\n}\n\n/**\n * createIslands: Enhances one or more existing DOM roots (no router).\n * The only public islands constructor.\n */\nexport function createIslands(config: IslandsConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIslands requires a config object');\n }\n if (!Array.isArray(config.islands) || config.islands.length === 0) {\n throw new Error('createIslands requires a non-empty islands array');\n }\n for (const island of config.islands) {\n createIsland(island);\n }\n}\n\n/**\n * createSPA: Initializes router and mounts the app with provided route table\n */\nexport async function createSPA(config: SPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('createSPA requires a config object');\n }\n if (!Array.isArray(config.routes) || config.routes.length === 0) {\n throw new Error(\n 'createSPA requires a route table. If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Register routes at startup (clear previous registrations to avoid surprises)\n const { clearRoutes, route, lockRouteRegistration, resolveRoute } =\n await import('../router/route');\n\n clearRoutes();\n for (const r of config.routes) {\n // Using typed Route from router; allow handler functions\n route(r.path, r.handler, r.namespace);\n }\n // Lock registration in production to prevent late registration surprises\n if (process.env.NODE_ENV === 'production') lockRouteRegistration();\n\n // Mount the currently-resolved route handler (if any)\n const path = typeof window !== 'undefined' ? window.location.pathname : '/';\n const resolved = resolveRoute(path);\n if (!resolved) {\n // If no route currently matches, mount an empty placeholder and continue.\n // This supports cases where routes are registered but the current URL is\n // not one of them (common in router tests that navigate programmatically).\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(\n `createSPA: no route found for current path (${path}). Mounting empty placeholder; navigation will activate routes when requested.`\n );\n }\n\n // Mount a no-op component until navigation occurs\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: false,\n });\n\n // Still register app instance and initialize navigation so future navigations work\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n return;\n }\n\n // Mount resolved handler as the root component\n // Convert resolved.handler to a ComponentFunction-compatible shape\n mountOrUpdate(rootElement, resolved.handler as ComponentFunction, {\n cleanupStrict: false,\n });\n\n // Register for navigation and wire up history handling\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n}\n\n/**\n * hydrateSPA: Hydrate server-rendered HTML with explicit routes\n */\nexport async function hydrateSPA(config: HydrateSPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('hydrateSPA requires a config object');\n }\n if (!Array.isArray(config.routes) || config.routes.length === 0) {\n throw new Error(\n 'hydrateSPA requires a route table. If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Capture server HTML for mismatch detection\n const serverHTML = rootElement.innerHTML;\n\n // Register routes for hydration and set server location for deterministic route()\n const {\n clearRoutes,\n route,\n setServerLocation,\n lockRouteRegistration,\n resolveRoute,\n } = await import('../router/route');\n\n clearRoutes();\n for (const r of config.routes) {\n route(r.path, r.handler, r.namespace);\n }\n // Set server location so route() reflects server URL during SSR checks\n const path = typeof window !== 'undefined' ? window.location.pathname : '/';\n setServerLocation(path);\n if (process.env.NODE_ENV === 'production') lockRouteRegistration();\n\n // Resolve handler for current path\n const resolved = resolveRoute(path);\n if (!resolved) {\n throw new Error(`hydrateSPA: no route found for current path (${path}).`);\n }\n\n // Synchronously render expected HTML using SSR helper\n const { renderToStringSync } = await import('../ssr');\n // renderToStringSync takes a zero-arg component factory; wrap the handler to pass params\n const expectedHTML = renderToStringSync(() => {\n const out = resolved.handler(resolved.params);\n return (out ?? {\n type: 'div',\n children: [],\n }) as ReturnType<ComponentFunction>;\n });\n\n // Prefer a DOM-based comparison to avoid false positives from attribute order\n // or whitespace differences between server and expected HTML.\n const serverContainer = document.createElement('div');\n serverContainer.innerHTML = serverHTML;\n const expectedContainer = document.createElement('div');\n expectedContainer.innerHTML = expectedHTML;\n\n if (!serverContainer.isEqualNode(expectedContainer)) {\n throw new Error(\n '[Askr] Hydration mismatch detected. Server HTML does not match expected server-render output.'\n );\n }\n\n // Proceed to mount the client SPA (this will attach listeners and start navigation)\n // Reuse createSPA path but we already registered routes and set server location, so just mount\n // Mount resolved handler\n mountOrUpdate(rootElement, resolved.handler as ComponentFunction, {\n cleanupStrict: false,\n });\n\n // Register navigation and instance\n const { registerAppInstance, initializeNavigation } =\n await import('../router/navigate');\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n}\n\nexport async function hydrate(_config: AppConfig): Promise<void> {\n throw new Error(\n 'The legacy `hydrate` API is removed. Use `hydrateSPA({ root, routes })` for SSR hydration with an explicit route table.'\n );\n}\n\n/**\n * Cleanup an app mounted on a root element (element or id).\n * Safe to call multiple times — no-op when nothing is mounted.\n */\nexport function cleanupApp(root: Element | string): void {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return;\n\n const cleanupFn = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (typeof cleanupFn === 'function') {\n cleanupFn();\n }\n\n instancesByRoot.delete(rootElement);\n}\n\n/**\n * Check whether an app is mounted on the given root\n */\nexport function hasApp(root: Element | string): boolean {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return false;\n return instancesByRoot.has(rootElement);\n}\n","import type { ComponentInstance } from './component';\nimport { getCurrentComponentInstance } from './component';\n\nconst deriveCaches = new WeakMap<ComponentInstance, Map<unknown, unknown>>();\n\nfunction getDeriveCache(instance: ComponentInstance): Map<unknown, unknown> {\n let cache = deriveCaches.get(instance);\n if (!cache) {\n cache = new Map();\n deriveCaches.set(instance, cache);\n }\n return cache;\n}\n\n// Short-form overload: accept a single function that returns the derived value\nexport function derive<TOut>(fn: () => TOut): TOut | null;\n\n// Normal-form overload: derive(source, map)\nexport function derive<TIn, TOut>(\n source:\n | { value: TIn | null; pending?: boolean; error?: Error | null }\n | TIn\n | (() => TIn),\n map: (value: TIn) => TOut\n): TOut | null;\n\nexport function derive<TIn, TOut>(\n source:\n | { value: TIn | null; pending?: boolean; error?: Error | null }\n | TIn\n | (() => TIn),\n map?: (value: TIn) => TOut\n): TOut | null {\n // Short-form: derive(() => someExpression)\n if (map === undefined && typeof source === 'function') {\n const value = (source as () => TOut)();\n if (value == null) return null;\n\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return value as TOut;\n }\n\n const cache = getDeriveCache(instance);\n if (cache.has(value as unknown)) return cache.get(value as unknown) as TOut;\n\n cache.set(value as unknown, value as unknown);\n return value as TOut;\n }\n\n // Normal form: derive(source, map)\n // Extract the actual value\n let value: TIn;\n if (typeof source === 'function' && !('value' in source)) {\n // It's a function (not a binding object with value property)\n value = (source as () => TIn)();\n } else {\n value = (source as { value?: TIn | null })?.value ?? (source as TIn);\n }\n if (value == null) return null;\n\n // Get or create memoization cache for this component\n const instance = getCurrentComponentInstance();\n if (!instance) {\n // No component context - just compute eagerly\n return (map as (v: TIn) => TOut)(value as TIn);\n }\n\n const cache = getDeriveCache(instance);\n\n // Check if we already have a cached result for this source value\n if (cache.has(value as unknown)) {\n return cache.get(value as unknown) as TOut;\n }\n\n // Compute and cache the result\n const result = (map as (v: TIn) => TOut)(value as TIn);\n cache.set(value as unknown, result as unknown);\n return result;\n}\n"],"mappings":"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","names":["instance","value","instance","cache"]}
1
+ {"version":3,"sources":["../src/dev/invariant.ts","../src/dev/logger.ts","../src/runtime/scheduler.ts","../src/runtime/context.ts","../src/renderer/diag/index.ts","../src/renderer/utils.ts","../src/renderer/keyed.ts","../src/common/jsx.ts","../src/runtime/dev-namespace.ts","../src/runtime/fastlane.ts","../src/common/vnode.ts","../src/renderer/types.ts","../src/renderer/cleanup.ts","../src/jsx/types.ts","../src/jsx/jsx-runtime.ts","../src/renderer/dom.ts","../src/renderer/fastpath.ts","../src/renderer/reconcile.ts","../src/renderer/evaluate.ts","../src/renderer/index.ts","../src/runtime/component.ts","../src/router/match.ts","../src/runtime/execution-model.ts","../src/router/route.ts","../src/router/navigate.ts","../src/jsx/index.ts","../src/foundations/portal.tsx","../src/boot/index.ts","../src/runtime/state.ts","../src/runtime/derive.ts"],"names":["state","isBulkCommitActive","evaluate","init_types","tagNamesEqualIgnoreCase","updateElementChildren","applyPropsToElement","finalizeReadSubscriptions","e","getSpecificity","currentInstance","init_jsx","HostFallback","HAS_ROUTES_KEY","clearRoutes","route","lockRouteRegistration","resolveRoute","instance","value","cache"],"mappings":";;;;;;;;;;;AAYO,SAAS,SAAA,CACd,SAAA,EACA,OAAA,EACA,OAAA,EACmB;AACnB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,UAAA,GAAiE,EAAA;AACvE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,EAAG,UAAU,CAAA,CAAE,CAAA;AAAA,EAC5D;AACF;AA0GO,SAAS,4BAAA,CACd,WACA,gBAAA,EACmB;AACnB,EAAA,SAAA,CAAU,SAAA,EAAW,CAAA,yBAAA,EAA4B,gBAAgB,CAAA,CAAE,CAAA;AACrE;AApIA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sBAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACOA,SAAS,WAAA,CAAY,QAAgB,IAAA,EAAuB;AAC1D,EAAA,MAAM,CAAA,GAAI,OAAO,OAAA,KAAY,WAAA,GAAe,OAAA,GAAsB,MAAA;AAClE,EAAA,IAAI,CAAC,CAAA,EAAG;AACR,EAAA,MAAM,EAAA,GAAM,EAA8B,MAAM,CAAA;AAChD,EAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC5B,IAAA,IAAI;AACF,MAAC,EAAA,CAAoC,KAAA,CAAM,OAAA,EAAS,IAAiB,CAAA;AAAA,IACvE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAlBA,IAoBa,MAAA;AApBb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAoBO,IAAM,MAAA,GAAS;AAAA,MACpB,KAAA,EAAO,IAAI,IAAA,KAAoB;AAC7B,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC3C,QAAA,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,MAC3B,CAAA;AAAA,MAEA,IAAA,EAAM,IAAI,IAAA,KAAoB;AAC5B,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC3C,QAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,MAC1B,CAAA;AAAA,MAEA,IAAA,EAAM,IAAI,IAAA,KAAoB;AAC5B,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC3C,QAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,MAC1B,CAAA;AAAA,MAEA,KAAA,EAAO,IAAI,IAAA,KAAoB;AAC7B,QAAA,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,MAC3B;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrBA,SAAS,kBAAA,GAA8B;AACrC,EAAA,IAAI;AACF,IAAA,MAAM,KACJ,UAAA,CAGA,eAAA;AACF,IAAA,OAAO,OAAO,IAAI,kBAAA,KAAuB,UAAA,GACrC,CAAC,CAAC,EAAA,CAAG,oBAAmB,GACxB,KAAA;AAAA,EACN,SAAS,CAAA,EAAG;AAEV,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAiUO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,OAAO,gBAAgB,WAAA,EAAY;AACrC;AAnWA,IAcM,iBAoBO,SAAA,EA6TA,eAAA;AA/Vb,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AAWA,IAAA,cAAA,EAAA;AAGA,IAAM,eAAA,GAAkB,EAAA;AAoBjB,IAAM,YAAN,MAAgB;AAAA,MAAhB,WAAA,GAAA;AACL,QAAA,IAAA,CAAQ,IAAY,EAAC;AACrB,QAAA,IAAA,CAAQ,IAAA,GAAO,CAAA;AAEf,QAAA,IAAA,CAAQ,OAAA,GAAU,KAAA;AAClB,QAAA,IAAA,CAAQ,SAAA,GAAY,KAAA;AACpB,QAAA,IAAA,CAAQ,KAAA,GAAQ,CAAA;AAChB,QAAA,IAAA,CAAQ,cAAA,GAAiB,CAAA;AAGzB;AAAA;AAAA,QAAA,IAAA,CAAQ,YAAA,GAAe,CAAA;AAGvB;AAAA,QAAA,IAAA,CAAQ,aAAA,GAAgB,KAAA;AAGxB;AAAA,QAAA,IAAA,CAAQ,iBAAA,GAAoB,KAAA;AAG5B;AAAA,QAAA,IAAA,CAAQ,UAKH,EAAC;AAGN;AAAA,QAAA,IAAA,CAAQ,SAAA,GAAY,CAAA;AAAA,MAAA;AAAA,MAEpB,QAAQ,IAAA,EAAkB;AACxB,QAAA,4BAAA;AAAA,UACE,OAAO,IAAA,KAAS,UAAA;AAAA,UAChB;AAAA,SACF;AAGA,QAAA,IAAI,kBAAA,EAAmB,IAAK,CAAC,IAAA,CAAK,iBAAA,EAAmB;AACnD,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,YAAA,MAAM,IAAI,KAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAGA,QAAA,IAAA,CAAK,CAAA,CAAE,KAAK,IAAI,CAAA;AAChB,QAAA,IAAA,CAAK,SAAA,EAAA;AAGL,QAAA,IACE,CAAC,IAAA,CAAK,OAAA,IACN,CAAC,IAAA,CAAK,aAAA,IACN,CAAC,IAAA,CAAK,SAAA,IACN,CAAC,kBAAA,EAAmB,EACpB;AACA,UAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,YAAA,IAAI,KAAK,OAAA,EAAS;AAClB,YAAA,IAAI,oBAAmB,EAAG;AAC1B,YAAA,IAAI;AACF,cAAA,IAAA,CAAK,KAAA,EAAM;AAAA,YACb,SAAS,GAAA,EAAK;AACZ,cAAA,UAAA,CAAW,MAAM;AACf,gBAAA,MAAM,GAAA;AAAA,cACR,CAAC,CAAA;AAAA,YACH;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,MAEA,KAAA,GAAc;AACZ,QAAA,SAAA;AAAA,UACE,CAAC,IAAA,CAAK,OAAA;AAAA,UACN;AAAA,SACF;AAGA,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,IAAI,kBAAA,EAAmB,IAAK,CAAC,IAAA,CAAK,iBAAA,EAAmB;AACnD,YAAA,MAAM,IAAI,KAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,QAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,QAAA,IAAI,KAAA,GAAiB,IAAA;AAErB,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,CAAA,CAAE,MAAA,EAAQ;AAChC,YAAA,IAAA,CAAK,KAAA,EAAA;AACL,YAAA,IACE,QAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IACzB,IAAA,CAAK,QAAQ,eAAA,EACb;AACA,cAAA,MAAM,IAAI,KAAA;AAAA,gBACR,yCAAyC,eAAe,CAAA,+BAAA;AAAA,eAC1D;AAAA,YACF;AAEA,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,CAAA;AAC/B,YAAA,IAAI;AACF,cAAA,IAAA,CAAK,cAAA,EAAA;AACL,cAAA,IAAA,EAAK;AACL,cAAA,IAAA,CAAK,cAAA,EAAA;AAAA,YACP,SAAS,GAAA,EAAK;AAEZ,cAAA,IAAI,IAAA,CAAK,cAAA,GAAiB,CAAA,EAAG,IAAA,CAAK,cAAA,GAAiB,CAAA;AACnD,cAAA,KAAA,GAAQ,GAAA;AACR,cAAA;AAAA,YACF;AAGA,YAAA,IAAI,IAAA,CAAK,SAAA,GAAY,CAAA,EAAG,IAAA,CAAK,SAAA,EAAA;AAAA,UAC/B;AAAA,QACF,CAAA,SAAE;AACA,UAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,UAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,UAAA,IAAA,CAAK,cAAA,GAAiB,CAAA;AAGtB,UAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,CAAA,CAAE,MAAA,EAAQ;AAC9B,YAAA,IAAA,CAAK,EAAE,MAAA,GAAS,CAAA;AAChB,YAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AAAA,UACd,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG;AACxB,YAAA,MAAM,SAAA,GAAY,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,IAAA;AAEvC,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,cAAA,IAAA,CAAK,EAAE,CAAC,CAAA,GAAI,KAAK,CAAA,CAAE,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,YAClC;AACA,YAAA,IAAA,CAAK,EAAE,MAAA,GAAS,SAAA;AAChB,YAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AAAA,UACd;AAGA,UAAA,IAAA,CAAK,YAAA,EAAA;AACL,UAAA,IAAA,CAAK,cAAA,EAAe;AAAA,QACtB;AAEA,QAAA,IAAI,OAAO,MAAM,KAAA;AAAA,MACnB;AAAA,MAEA,oBAAuB,EAAA,EAAgB;AACrC,QAAA,MAAM,OAAO,IAAA,CAAK,iBAAA;AAClB,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAEzB,QAAA,MAAM,CAAA,GAAI,UAAA;AAIV,QAAA,MAAM,qBAAqB,CAAA,CAAE,cAAA;AAC7B,QAAA,MAAM,iBAAiB,CAAA,CAAE,UAAA;AAEzB,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,CAAA,CAAE,iBAAiB,MAAM;AACvB,YAAA,MAAM,IAAI,KAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF,CAAA;AACA,UAAA,CAAA,CAAE,aAAa,MAAM;AACnB,YAAA,MAAM,IAAI,KAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF,CAAA;AAAA,QACF;AAGA,QAAA,MAAM,eAAe,IAAA,CAAK,YAAA;AAE1B,QAAA,IAAI;AACF,UAAA,MAAM,MAAM,EAAA,EAAG;AAGf,UAAA,IAAI,CAAC,KAAK,OAAA,IAAW,IAAA,CAAK,EAAE,MAAA,GAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AAClD,YAAA,IAAA,CAAK,KAAA,EAAM;AAAA,UACb;AAEA,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,YAAA,IAAI,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AACjC,cAAA,MAAM,IAAI,KAAA;AAAA,gBACR;AAAA,eACF;AAAA,YACF;AAAA,UACF;AAEA,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,SAAE;AAEA,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,YAAA,CAAA,CAAE,cAAA,GAAiB,kBAAA;AACnB,YAAA,CAAA,CAAE,UAAA,GAAa,cAAA;AAAA,UACjB;AAKA,UAAA,IAAI;AACF,YAAA,IAAI,IAAA,CAAK,iBAAiB,YAAA,EAAc;AACtC,cAAA,IAAA,CAAK,YAAA,EAAA;AACL,cAAA,IAAA,CAAK,cAAA,EAAe;AAAA,YACtB;AAAA,UACF,SAAS,CAAA,EAAG;AACL,UACP;AAEA,UAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,YAAA,CAAa,aAAA,EAAwB,SAAA,GAAY,GAAA,EAAqB;AACpE,QAAA,MAAM,SACJ,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,KAAK,YAAA,GAAe,CAAA;AAC1E,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,OAAO,QAAQ,OAAA,EAAQ;AAExD,QAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,UAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,YAAA,MAAM,EAAA,GAEF,UAAA,CAGA,QAAA,IAAY,EAAC;AACjB,YAAA,MAAM,IAAA,GAAO;AAAA,cACX,cAAc,IAAA,CAAK,YAAA;AAAA,cACnB,QAAA,EAAU,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,IAAA;AAAA,cAC/B,SAAS,IAAA,CAAK,OAAA;AAAA,cACd,WAAW,IAAA,CAAK,SAAA;AAAA,cAChB,MAAM,kBAAA,EAAmB;AAAA,cACzB,SAAA,EAAW;AAAA,aACb;AACA,YAAA,MAAA;AAAA,cACE,IAAI,KAAA;AAAA,gBACF,wBAAwB,SAAS,CAAA,IAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA;AAC9D,aACF;AAAA,UACF,GAAG,SAAS,CAAA;AAEZ,UAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,QACtD,CAAC,CAAA;AAAA,MACH;AAAA,MAEA,QAAA,GAAW;AAET,QAAA,OAAO;AAAA,UACL,WAAA,EAAa,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,IAAA;AAAA,UAClC,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,cAAc,IAAA,CAAK,YAAA;AAAA;AAAA,UAEnB,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,mBAAmB,IAAA,CAAK;AAAA,SAC1B;AAAA,MACF;AAAA,MAEA,aAAa,CAAA,EAAY;AACvB,QAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AAAA,MACnB;AAAA,MAEA,WAAA,GAAuB;AACrB,QAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACd;AAAA,MAEA,WAAA,GAAuB;AACrB,QAAA,OAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,cAAA,GAAiB,CAAA;AAAA,MAC/C;AAAA;AAAA,MAGA,qBAAA,GAAgC;AAC9B,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,IAAA;AACvC,QAAA,IAAI,SAAA,IAAa,GAAG,OAAO,CAAA;AAE3B,QAAA,IAAI,KAAK,OAAA,EAAS;AAChB,UAAA,IAAA,CAAK,CAAA,CAAE,SAAS,IAAA,CAAK,IAAA;AACrB,UAAA,IAAA,CAAK,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,YAAY,SAAS,CAAA;AACvD,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,IAAI;AACF,cAAA,IAAA,CAAK,YAAA,EAAA;AACL,cAAA,IAAA,CAAK,cAAA,EAAe;AAAA,YACtB,SAAS,CAAA,EAAG;AACL,YACP;AAAA,UACF,CAAC,CAAA;AACD,UAAA,OAAO,SAAA;AAAA,QACT;AAEA,QAAA,IAAA,CAAK,EAAE,MAAA,GAAS,CAAA;AAChB,QAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,QAAA,IAAA,CAAK,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,YAAY,SAAS,CAAA;AACvD,QAAA,IAAA,CAAK,YAAA,EAAA;AACL,QAAA,IAAA,CAAK,cAAA,EAAe;AACpB,QAAA,OAAO,SAAA;AAAA,MACT;AAAA,MAEQ,cAAA,GAAiB;AACvB,QAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC/B,QAAA,MAAM,QAA2B,EAAC;AAClC,QAAA,MAAM,YAAiC,EAAC;AAExC,QAAA,KAAA,MAAW,CAAA,IAAK,KAAK,OAAA,EAAS;AAC5B,UAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,CAAA,CAAE,MAAA,EAAQ;AACjC,YAAA,IAAI,CAAA,CAAE,KAAA,EAAO,YAAA,CAAa,CAAA,CAAE,KAAK,CAAA;AACjC,YAAA,KAAA,CAAM,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,UACtB,CAAA,MAAO;AACL,YAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,UAClB;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,OAAA,GAAU,SAAA;AACf,QAAA,KAAA,MAAW,CAAA,IAAK,OAAO,CAAA,EAAE;AAAA,MAC3B;AAAA,KACF;AAEO,IAAM,eAAA,GAAkB,IAAI,SAAA,EAAU;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7QtC,SAAS,WAAA,CAAe,OAA4B,EAAA,EAAgB;AACzE,EAAA,MAAM,QAAA,GAAW,mBAAA;AACjB,EAAA,mBAAA,GAAsB,KAAA;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,EAAA,EAAG;AAAA,EACZ,CAAA,SAAE;AACA,IAAA,mBAAA,GAAsB,QAAA;AAAA,EACxB;AACF;AAqOO,SAAS,sBAAA,GAA8C;AAC5D,EAAA,OAAO,mBAAA;AACT;AAjUA,IA4Da,oBAAA,EAIT,mBAAA;AAhEJ,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AA4DO,IAAM,oBAAA,0BAA8B,uBAAuB,CAAA;AAIlE,IAAI,mBAAA,GAA2C,IAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9D/C,SAAS,UAAA,GAAsB;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,UAAA;AAGb,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,cAAc,EAAC;AAC3C,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd,SAAS,CAAA,EAAG;AAEV,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEO,SAAS,UAAA,CAAW,KAAa,KAAA,EAAsB;AAC5D,EAAA,IAAI;AACF,IAAA,MAAM,IAAI,UAAA,EAAW;AACrB,IAAC,CAAA,CAAc,GAAG,CAAA,GAAI,KAAA;AACtB,IAAA,IAAI;AAIF,MAAA,MAAM,IAAA,GAAO,UAAA;AAGb,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,WAAW,EAAC,CAAA;AAC9C,QAAA,IAAI;AACF,UAAA,EAAA,CAAG,GAAG,CAAA,GAAI,KAAA;AAAA,QACZ,SAAS,CAAA,EAAG;AACV,UAAA,KAAK,CAAA;AAAA,QACP;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,KAAK,CAAA;AAAA,MACP;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAAA,EACF,SAAS,CAAA,EAAG;AACL,EACP;AACF;AAEO,SAAS,kBAAkB,GAAA,EAAmB;AACnD,EAAA,IAAI;AACF,IAAA,MAAM,IAAI,UAAA,EAAW;AACrB,IAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,GAAG,MAAM,QAAA,GAAY,CAAA,CAAE,GAAG,CAAA,GAAe,CAAA;AAC/D,IAAA,MAAM,OAAO,IAAA,GAAO,CAAA;AACpB,IAAC,CAAA,CAAc,GAAG,CAAA,GAAI,IAAA;AACtB,IAAA,IAAI;AAEF,MAAA,MAAM,IAAA,GAAO,UAAA;AAGb,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,WAAW,EAAC,CAAA;AAC9C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,OAAO,EAAA,CAAG,GAAG,MAAM,QAAA,GAAY,EAAA,CAAG,GAAG,CAAA,GAAe,CAAA;AACnE,QAAA,EAAA,CAAG,GAAG,IAAI,MAAA,GAAS,CAAA;AAAA,MACrB,SAAS,CAAA,EAAG;AACV,QAAA,KAAK,CAAA;AAAA,MACP;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAAA,EACF,SAAS,CAAA,EAAG;AACL,EACP;AACF;AApEA,IAAA,SAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC0BO,SAAS,eAAe,QAAA,EAAiC;AAC9D,EAAA,IAAI,CAAC,SAAS,UAAA,CAAW,IAAI,KAAK,QAAA,CAAS,MAAA,IAAU,GAAG,OAAO,IAAA;AAC/D,EAAA,OACE,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY;AAE9E;AAKO,SAAS,kBACd,SAAA,EACqC;AACrC,EAAA,IACE,cAAc,OAAA,IACd,SAAA,KAAc,YACd,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAC5B;AACA,IAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,oBAAA,CACd,OAAA,EACA,UAAA,GAAa,KAAA,EACE;AACf,EAAA,OAAO,CAAC,KAAA,KAAiB;AACvB,IAAA,eAAA,CAAgB,aAAa,IAAI,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAAA,IACnD,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,aAAa,KAAK,CAAA;AAClC,MAAA,IAAI,UAAA,EAAY;AAGd,QAAA,MAAMA,MAAAA,GAAQ,gBAAgB,QAAA,EAAS;AACvC,QAAA,IAAA,CAAKA,OAAM,WAAA,IAAe,CAAA,IAAK,CAAA,IAAK,CAACA,OAAM,OAAA,EAAS;AAClD,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,IAAI;AACF,cAAA,IAAI,CAAC,eAAA,CAAgB,WAAA,EAAY,kBAAmB,KAAA,EAAM;AAAA,YAC5D,SAAS,GAAA,EAAK;AACZ,cAAA,cAAA,CAAe,MAAM;AACnB,gBAAA,MAAM,GAAA;AAAA,cACR,CAAC,CAAA;AAAA,YACH;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAOO,SAAS,cAAc,GAAA,EAAsB;AAClD,EAAA,OAAO,GAAA,KAAQ,cAAc,GAAA,KAAQ,KAAA;AACvC;AAGO,SAAS,wBAAwB,GAAA,EAAsB;AAC5D,EAAA,IAAI,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,KAAA,EAAO,OAAO,IAAA;AAChD,EAAA,IAAI,IAAI,UAAA,CAAW,IAAI,KAAK,GAAA,CAAI,MAAA,GAAS,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,IAAA;AACpC,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,cAAA,CACd,EAAA,EACA,GAAA,EACA,KAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,WAAA,EAAa;AAC1C,MAAA,OAAO,EAAA,CAAG,SAAA,KAAc,MAAA,CAAO,KAAK,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,SAAA,EAAW;AACxC,MAAA,OAAQ,EAAA,CAA6C,GAAG,CAAA,KAAM,KAAA;AAAA,IAChE;AACA,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,GAAG,CAAA;AAChC,IAAA,IAAI,KAAA,KAAU,KAAA,CAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAC5D,MAAA,OAAO,IAAA,KAAS,IAAA;AAAA,IAClB;AACA,IAAA,OAAO,MAAA,CAAO,KAAK,CAAA,KAAM,IAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKO,SAAS,mBAAmB,KAAA,EAAyC;AAC1E,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,IAAA,IAAI,uBAAA,CAAwB,CAAC,CAAA,EAAG;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,gBAAA,CACd,IACA,KAAA,EACS;AACT,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,IAAA,IAAI,uBAAA,CAAwB,CAAC,CAAA,EAAG;AAChC,IAAA,IAAI,eAAe,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACnC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,WAAW,KAAA,EAA6C;AACtE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,MAAM,MAAA,GACJ,GAAA,CAAI,GAAA,IAAQ,GAAA,CAAI,KAAA,EAA+C,GAAA;AACjE,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,GACrB,MAAA,CAAO,MAAM,CAAA,GACZ,MAAA;AACP;AAKO,SAAS,wBACd,MAAA,EAC+B;AAC/B,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA8B;AAC9C,EAAA,KAAA,IAAS,KAAK,MAAA,CAAO,iBAAA,EAAmB,EAAA,EAAI,EAAA,GAAK,GAAG,kBAAA,EAAoB;AACtE,IAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA;AACpC,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,CAAA;AACb,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,IAAI,CAAC,OAAO,KAAA,CAAM,CAAC,GAAG,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,IACrC;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AASO,SAAS,iBAAiB,MAAA,EAAsB;AACrD,EAAA,IAAI;AACF,IAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACvC,IAAA,UAAA,CAAW,4BAA4B,MAAM,CAAA,CAAA,EAAI,IAAI,KAAA,GAAQ,KAAK,CAAA;AAAA,EACpE,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAKO,SAAS,mBAAA,CACd,OACA,WAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,UAAA,CAAW,yBAAyB,KAAK,CAAA;AACzC,IAAA,UAAA,CAAW,gCAAgC,CAAC,CAAA;AAC5C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,iBAAA,CAAkB,WAAW,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAKO,SAAS,gBAAA,CACd,OAAA,EACA,WAAA,EACA,IAAA,EACM;AACN,EAAA,IACE,QAAQ,GAAA,CAAI,mBAAA,KAAwB,OACpC,OAAA,CAAQ,GAAA,CAAI,wBAAwB,MAAA,EACpC;AACA,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAI,aAAa,IAAI,CAAA;AAAA,IAC9D,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAW;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3C;AAAA,EACF;AACF;AASO,SAAS,GAAA,GAAc;AAC5B,EAAA,OAAO,OAAO,gBAAgB,WAAA,IAAe,WAAA,CAAY,MACrD,WAAA,CAAY,GAAA,EAAI,GAChB,IAAA,CAAK,GAAA,EAAI;AACf;AAhQA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAKA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,SAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACcO,SAAS,oBAAoB,EAAA,EAAa;AAC/C,EAAA,OAAO,aAAA,CAAc,IAAI,EAAE,CAAA;AAC7B;AAMO,SAAS,yBAAyB,MAAA,EAAuB;AAC9D,EAAA,IAAI;AACF,IAAA,IAAI,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA,EAAG;AAE/B,IAAA,IAAI,MAAA,GAAS,wBAAwB,MAAM,CAAA;AAG3C,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAA,uBAAa,GAAA,EAAI;AACjB,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAC3C,MAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,QAAA,MAAM,IAAA,GAAA,CAAQ,EAAA,CAAG,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AACzC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAA,CAAO,GAAA,CAAI,MAAM,EAAE,CAAA;AACnB,UAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,UAAA,IAAI,CAAC,OAAO,KAAA,CAAM,CAAC,GAAG,MAAA,CAAO,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,GAAO,CAAA,EAAG,aAAA,CAAc,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAmBA,SAAS,mBAAmB,WAAA,EAAoC;AAC9D,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,IAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAA,EAAK,KAAA,EAAO,OAAO,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,iBAAiB,SAAA,EAA6B;AACrD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,IAAI,QAAQ,EAAA,EAAI;AAChB,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,IAAI,KAAK,KAAA,CAAM,MAAA;AACf,IAAA,OAAO,KAAK,EAAA,EAAI;AACd,MAAA,MAAM,GAAA,GAAO,KAAK,EAAA,IAAO,CAAA;AACzB,MAAA,IAAI,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA,OAAU,GAAA,GAAM,CAAA;AAAA,WAC5B,EAAA,GAAK,GAAA;AAAA,IACZ;AACA,IAAA,IAAI,EAAA,KAAO,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,SAClC,KAAA,CAAM,EAAE,CAAA,GAAI,GAAA;AAAA,EACnB;AACA,EAAA,OAAO,KAAA,CAAM,MAAA;AACf;AAKA,SAAS,qBAAqB,WAAA,EAAoC;AAChE,EAAA,KAAA,MAAW,EAAE,KAAA,EAAM,IAAK,WAAA,EAAa;AACnC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AACjD,IAAA,MAAM,QAAA,GAAW,KAAA;AACjB,IAAA,IAAI,QAAA,CAAS,KAAA,IAAS,kBAAA,CAAmB,QAAA,CAAS,KAAK,CAAA,EAAG;AACxD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,qBAAA,CACP,aACA,SAAA,EACS;AACT,EAAA,KAAA,MAAW,EAAE,GAAA,EAAK,KAAA,EAAM,IAAK,WAAA,EAAa;AACxC,IAAA,MAAM,EAAA,GAAK,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,IAAI,CAAC,EAAA,IAAM,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,EAAM;AACxD,IAAA,MAAM,QAAA,GAAW,KAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,IAAS,EAAC;AACjC,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,MAAA,IAAI,uBAAA,CAAwB,CAAC,CAAA,EAAG;AAChC,MAAA,IAAI,eAAe,EAAA,EAAI,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,8BAAA,CACd,MAAA,EACA,WAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,WAAA,GAAc,mBAAmB,WAAW,CAAA;AAClD,EAAA,MAAM,aAAa,WAAA,CAAY,MAAA;AAC/B,EAAA,MAAM,cAAc,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,WAAA,GAAc,YAAY,KAAA,CAAM,IAAA,CAAK,UAAU,IAAA,EAAM,IAAI,EAAC;AAGhE,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,CAAA,GAAI,YAAY,CAAC,CAAA;AACvB,IAAA,IAAI,CAAA,IAAK,WAAA,CAAY,MAAA,IAAU,WAAA,CAAY,CAAC,CAAA,KAAM,CAAA,IAAK,CAAC,SAAA,EAAW,GAAA,CAAI,CAAC,CAAA,EAAG;AACzE,MAAA,SAAA,EAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,uBAAA,GAA0B,EAAA;AAChC,EAAA,MAAM,uBAAA,GAA0B,GAAA;AAChC,EAAA,MAAM,mBACJ,UAAA,IAAc,GAAA,IACd,YAAY,MAAA,GAAS,CAAA,IACrB,YACE,IAAA,CAAK,GAAA;AAAA,IACH,uBAAA;AAAA,IACA,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,uBAAuB;AAAA,GACjD;AAGJ,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,cAAc,GAAA,EAAK;AACrB,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AACjD,IAAA,MAAM,YAAY,WAAA,CAAY,GAAA,CAAI,CAAC,EAAE,KAAI,KAAM;AAC7C,MAAA,MAAM,EAAA,GAAK,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC7B,MAAA,OAAO,IAAI,aAAA,KAAkB,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,EAAE,CAAA,GAAI,EAAA;AAAA,IACrE,CAAC,CAAA;AACD,IAAA,MAAA,GAAS,iBAAiB,SAAS,CAAA;AACnC,IAAA,UAAA,GAAa,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,GAAG,CAAA;AAAA,EACnD;AAGA,EAAA,MAAM,eAAA,GAAkB,qBAAqB,WAAW,CAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,WAAA,EAAa,SAAS,CAAA;AAEnE,EAAA,MAAM,WAAA,GAAA,CACH,gBAAA,IAAoB,UAAA,KAAe,CAAC,kBAAkB,CAAC,eAAA;AAE1D,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAxMA,IAaa,aAAA,EA6CA,0BAAA;AA1Db,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AACA,IAAA,UAAA,EAAA;AAYO,IAAM,aAAA,uBAAoB,OAAA,EAG/B;AA0CK,IAAM,0BAAA,uBAAiC,OAAA,EAAiB;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC1D/D,IAMa,YAAA,EACA,QAAA;AAPb,IAAA,QAAA,GAAA,KAAA,CAAA;AAAA,EAAA,mBAAA,GAAA;AAMO,IAAM,YAAA,mBAAe,MAAA,CAAO,GAAA,CAAI,cAAc,CAAA;AAC9C,IAAM,QAAA,mBAAW,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACM3C,SAAS,eAAA,GAAgC;AAC9C,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,SAAqB,EAAC;AACnD,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,UAAA;AACV,IAAA,IAAI,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,WAAW,EAAC;AAC/B,IAAA,OAAO,CAAA,CAAE,QAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAKO,SAAS,WAAA,CAAY,KAAa,KAAA,EAAsB;AAC7D,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC3C,EAAA,IAAI;AACF,IAAA,eAAA,EAAgB,CAAE,GAAG,CAAA,GAAI,KAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAKO,SAAS,YAAe,GAAA,EAA4B;AACzD,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,OAAO,MAAA;AAClD,EAAA,IAAI;AACF,IAAA,OAAO,eAAA,GAAkB,GAAG,CAAA;AAAA,EAC9B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AA9CA,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,8BAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACcO,SAAS,eAAA,GAAwB;AACtC,EAAA,iBAAA,GAAoB,IAAA;AAEpB,EAAA,eAAA,uBAAsB,OAAA,EAAiB;AAIvC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,qBAAA,IAAwB,IAAK,CAAA;AAC7D,IAAA,WAAA,CAAY,iCAAiC,OAAO,CAAA;AAAA,EACtD,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,MAAM,GAAA;AAAA,EACnD;AACF;AAEO,SAAS,cAAA,GAAuB;AACrC,EAAA,iBAAA,GAAoB,KAAA;AAEpB,EAAA,eAAA,GAAkB,IAAA;AACpB;AAEO,SAASC,mBAAAA,GAA8B;AAC5C,EAAA,OAAO,iBAAA;AACT;AAIO,SAAS,oBAAoB,MAAA,EAAuB;AACzD,EAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,EAAA,IAAI;AACF,IAAA,eAAA,CAAgB,IAAI,MAAM,CAAA;AAAA,EAC5B,SAAS,CAAA,EAAG;AACL,EACP;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA0B;AAC1D,EAAA,OAAO,CAAC,EAAE,eAAA,IAAmB,eAAA,CAAgB,IAAI,MAAM,CAAA,CAAA;AACzD;AAEA,SAAS,0BAA0B,QAAA,EAAmC;AACpE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,kBAAA,oBAAsB,IAAI,GAAA,EAAI;AACtD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,eAAA,oBAAmB,IAAI,GAAA,EAAI;AACnD,EAAA,MAAM,QAAQ,QAAA,CAAS,mBAAA;AAEvB,EAAA,IAAI,UAAU,MAAA,EAAW;AAGzB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG;AAClB,MAAA,MAAM,UAAW,CAAA,CACd,QAAA;AACH,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,QAAA,CAAS,eAAA,GAAkB,KAAA;AAG3B,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,UAAW,CAAA,CAAoD,QAAA;AACnE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,uBAAc,GAAA,EAAI;AAClB,MAAC,EAAoD,QAAA,GAAW,OAAA;AAAA,IAClE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,eAAA,IAAmB,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,QAAA,CAAS,eAAA,GAAkB,MAAA;AAC3B,EAAA,QAAA,CAAS,kBAAA,uBAAyB,GAAA,EAAI;AACtC,EAAA,QAAA,CAAS,mBAAA,GAAsB,MAAA;AACjC;AAcA,SAAS,0BAA0B,KAAA,EAAyB;AAC1D,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA,KAAU,YAAY,EAAE,MAAA,IAAU,QAAQ,OAAO,KAAA;AACtE,EAAA,MAAM,CAAA,GAAI,KAAA;AAMV,EAAA,IACE,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,KACjB,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,KAAM,uBAAA,CAAA,EAC3C;AACA,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,KAAA,EAAO,QAAA;AACxC,IAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAElD,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,QAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,KAAA,EAAO;AACzD,UAAA,MAAM,CAAA,GAAI,KAAA;AACV,UAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,EAAU;AAC9B,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAA,CAAe,UAA6B,MAAA,EAAiB;AAO3E,EAAA,MAAM,eAAA,GAAkB,0BAA0B,MAAM,CAAA;AAExD,EAAA,IACE,CAAC,eAAA,IACD,OAAO,eAAA,KAAoB,QAAA,IAC3B,EAAE,MAAA,IAAU,eAAA,CAAA;AAEZ,IAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAY;AAEnD,EAAA,MAAM,KAAA,GAAQ,eAAA;AAKd,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA;AACzC,IAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,eAAA,EAAgB;AAEvD,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,QAAQ,SAAA,EAAU;AAE5D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AACpC,EAAA,IAAI,CAAC,UAAA,EAAY,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,QAAQ,gBAAA,EAAiB;AACvE,EAAA,IAAI,UAAA,CAAW,QAAQ,WAAA,EAAY,KAAM,OAAO,KAAA,CAAM,IAAI,EAAE,WAAA,EAAY;AACtE,IAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,mBAAA,EAAoB;AAE3D,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,KAAA,EAAO,QAAA;AAChD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AACzB,IAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,mBAAA,EAAoB;AAG3D,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IACE,OAAO,CAAA,KAAM,QAAA,IACb,CAAA,KAAM,IAAA,IACN,UAAU,CAAA,IACV,OAAQ,CAAA,CAAyB,IAAA,KAAS,UAAA,EAC1C;AACA,MAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,yBAAA,EAA0B;AAAA,IACjE;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,gBAAgB,MAAA,GAAS,CAAA;AACpC,IAAA,OAAO,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,gBAAA,EAAiB;AAIxD,EAAA,IAAI;AACF,IAAA,wBAAA,CAAyB,UAAU,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,SAAA,GAAY,oBAAoB,UAAU,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,8BAAA;AAAA,IACf,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,QAAA,CAAS,WAAA,IAAe,QAAA,CAAS,UAAA,GAAa,GAAA;AACjD,IAAA,OAAO,EAAE,GAAG,QAAA,EAAU,WAAA,EAAa,KAAA,EAAO,QAAQ,mBAAA,EAAoB;AAExE,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,WAAA,EAAa,IAAA,EAAK;AAC1C;AAEO,SAAS,iBAAA,CACd,UACA,MAAA,EACS;AAET,EAAA,MAAMC,SAAAA,GACJ,WAKA,eAAA,EAAiB,QAAA;AAEnB,EAAA,IAAI,OAAOA,cAAa,UAAA,EAAY;AAClC,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,KACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cACJ,OAAA,CAAQ,GAAA,CAAI,aAAa,YAAA,GAAe,eAAA,CAAgB,UAAS,GAAI,IAAA;AAEvE,EAAA,eAAA,EAAgB;AAEhB,EAAA,IAAI;AACF,IAAA,eAAA,CAAgB,oBAAoB,MAAM;AACxC,MAAAA,SAAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA;AAGhC,MAAA,IAAI;AACF,QAAA,yBAAA,CAA0B,QAAQ,CAAA;AAAA,MACpC,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,MAAM,CAAA;AAAA,MACnD;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,qBAAA,IAAwB,IAAK,CAAA;AAClE,IAAA,WAAA,CAAY,4BAA4B,YAAY,CAAA;AAGpD,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,0BAAA,CAA2B,UAAU,WAAW,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,cAAA,EAAe;AAAA,EACjB;AAEA,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,IAAID,qBAAmB,EAAG;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,0BAAA,CACP,UACA,WAAA,EACM;AACN,EAAA,MAAM,WAAA,GAAc,WAAA,CAAoB,8BAA8B,CAAA,IAAK,CAAA;AAC3E,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,WAAA;AAAA,IACA,QAAA,EAAU,SAAS,eAAA,CAAgB,MAAA;AAAA,IACnC,UAAA,EAAY,SAAS,UAAA,CAAW;AAAA,GAClC;AACA,EAAA,WAAA,CAAY,8BAA8B,UAAU,CAAA;AAEpD,EAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,6BAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACC,UAAA,CAAuC;AAAA,KAC1C;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,aAAa,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAgB,QAAA,EAAS;AAC5C,EAAA,IACE,WAAA,IACA,UAAA,IACA,UAAA,CAAW,SAAA,GAAY,YAAY,SAAA,EACnC;AACA,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,oCAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,yBAAA,EAA2B,WAAA,CAAY,gBAAgB,CAAC,CAAA;AACtE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,GAAa,gBAAgB,QAAA,EAAS;AAC1C,EAAA,MAAM,SAAA,GAAY,gBAAgB,WAAA,EAAY;AAC9C,EAAA,IAAI,mBAAmB,IAAA,CAAK,GAAA;AAAA,IAC1B,CAAA;AAAA,IACA,UAAA,CAAW,SAAA,IAAa,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,GAC1C;AAEA,EAAA,IAAI,qBAAqB,CAAA,EAAG;AAE1B,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,OAAO,WAAW,CAAA,EAAG;AACnB,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,qBAAA,IAAwB,IAAK,CAAA;AAC7D,MAAA,IAAI,YAAY,CAAA,EAAG;AACnB,MAAA,QAAA,EAAA;AAAA,IACF;AACA,IAAA,UAAA,GAAa,gBAAgB,QAAA,EAAS;AACtC,IAAA,gBAAA,GAAmB,IAAA,CAAK,GAAA;AAAA,MACtB,CAAA;AAAA,MACA,UAAA,CAAW,SAAA,IAAa,eAAA,CAAgB,WAAA,KAAgB,CAAA,GAAI,CAAA;AAAA,KAC9D;AACA,IAAA,IAAI,qBAAqB,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,sCAAA;AAAA,QACA,YAAY,gBAAgB;AAAA,OAC9B;AACA,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,4BAAA;AAAA,QACA,YAAY,0BAA0B,CAAA;AAAA,QACtC,YAAY,0BAA0B;AAAA,OACxC;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4CAAA,EAA+C,WAAW,SAAS,CAAA,6BAAA;AAAA,OACrE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,sBAAA,CACd,UACA,MAAA,EACS;AACT,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,QAAA,EAAU,MAAM,CAAA;AAC3C,EAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AAEpB,IAAA,WAAA,CAAY,yBAAyB,MAAS,CAAA;AAC9C,IAAA,WAAA,CAAY,gCAAgC,CAAC,CAAA;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,iBAAA,CAAkB,UAAU,MAAM,CAAA;AAAA,EAC3C,SAAS,GAAA,EAAK;AAEZ,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,MAAM,GAAA;AACjD,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAtXA,IAWI,iBAAA,EACA,eAAA;AAZJ,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAEA,IAAA,UAAA,EAAA;AAKA,IAAA,QAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AAEA,IAAI,iBAAA,GAAoB,KAAA;AACxB,IAAI,eAAA,GAA2C,IAAA;AA6W/C,IAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACrC,MAAC,WAAuC,eAAA,GAAkB;AAAA,QACxD,kBAAA,EAAAA,mBAAAA;AAAA,QACA,eAAA;AAAA,QACA,cAAA;AAAA,QACA,sBAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9WO,SAAS,cAAc,IAAA,EAAmC;AAC/D,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,QAAQ,MAAA,IAAU,IAAA;AAChE;AAtBA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AACA,IAAA,UAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACSA,SAAS,qBAAA,CACP,IAAA,EACA,MAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,OAAO,IAAA,CAAK,eAAA;AAClB,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,IAAI;AACF,IAAA,gBAAA,CAAiB,IAAyB,CAAA;AAAA,EAC5C,SAAS,GAAA,EAAK;AACZ,IACK,MAAA,CAAO,IAAA,CAAK,iCAAA,EAAmC,GAAG,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd,SAAS,CAAA,EAAG;AACgB,EAC5B;AACF;AAIA,SAAS,wBAAA,CAAyB,MAAe,KAAA,EAA8B;AAE7E,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,IAAA,CAAK,aAAA;AACjB,IAAA,MAAM,mBAAmB,GAAA,EAAK,gBAAA;AAC9B,IAAA,IAAI,OAAO,qBAAqB,UAAA,EAAY;AAE1C,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,MAAM,CAAC,CAAA;AACjD,MAAA,IAAI,CAAA,GAAI,OAAO,UAAA,EAAW;AAC1B,MAAA,OAAO,CAAA,EAAG;AACR,QAAA,KAAA,CAAM,CAAY,CAAA;AAClB,QAAA,CAAA,GAAI,OAAO,QAAA,EAAS;AAAA,MACtB;AACA,MAAA;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA;AAC7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,KAAA,CAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,EACtB;AACF;AAUO,SAAS,wBAAA,CACd,MACA,IAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,IAAQ,EAAE,IAAA,YAAgB,OAAA,CAAA,EAAU;AAEzC,EAAA,MAAM,MAAA,GAAyB,KAAA;AAC/B,EAAA,MAAM,MAAA,GAAyC,IAAA;AAG/C,EAAA,IAAI;AACF,IAAA,qBAAA,CAAsB,IAAA,EAAsB,QAAQ,MAAM,CAAA;AAAA,EAC5D,SAAS,GAAA,EAAK;AACZ,IACK,MAAA,CAAO,IAAA,CAAK,yCAAA,EAA2C,GAAG,CAAA;AAAA,EACjE;AAGA,EAAA,IAAI;AACF,IAAA,wBAAA,CAAyB,IAAA,EAAM,CAAC,CAAA,KAAM;AACpC,MAAA,IAAI;AACF,QAAA,qBAAA,CAAsB,CAAA,EAAmB,QAAQ,MAAM,CAAA;AAAA,MACzD,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,MAAA,EAAQ;AAAgB;AAE1B,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,4DAAA;AAAA,YACA;AAAA,WACF;AAAA,MACJ;AAAA,IACF,CAAC,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAEE,MAAA,CAAO,IAAA;AAAA,QACL,0DAAA;AAAA,QACA;AAAA,OACF;AAAA,EACJ;AAKF;AAKO,SAAS,qBAAA,CACd,MACA,IAAA,EACM;AACN,EAAA,wBAAA,CAAyB,IAAU,CAAA;AACrC;AAaO,SAAS,uBAAuB,OAAA,EAAwB;AAC7D,EAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,GAAA,CAAI,OAAO,CAAA;AACxC,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,KAAK,CAAA,IAAK,GAAA,EAAK;AAEpC,MAAA,IAAI,MAAM,OAAA,KAAY,MAAA;AACpB,QAAA,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,WAChE,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA;AAAA,IAC3D;AACA,IAAA,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,EACjC;AACF;AAEO,SAAS,mBAAmB,IAAA,EAA4B;AAC7D,EAAA,IAAI,CAAC,IAAA,EAAM;AAGX,EAAA,sBAAA,CAAuB,IAAI,CAAA;AAG3B,EAAA,wBAAA,CAAyB,MAAM,sBAAsB,CAAA;AACvD;AA3JA,IAiIa,gBAAA;AAjIb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAEA,IAAA,WAAA,EAAA;AA+HO,IAAM,gBAAA,uBAAuB,OAAA,EAGlC;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpIF,IAAAE,WAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kBAAA,GAAA;AAaA,IAAA,QAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACbA,IAAA,gBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAKA,IAAAA,WAAAA,EAAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC+CA,SAAS,kBAAA,CACP,EAAA,EACA,SAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,OAAA,EAAS,IAAI,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,kBAAkB,SAAS,CAAA;AAE3C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,EAAA,CAAG,gBAAA,CAAiB,SAAA,EAAW,cAAA,EAAgB,OAAO,CAAA;AAAA,EACxD,CAAA,MAAO;AACL,IAAA,EAAA,CAAG,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AAC7B,IAAA,gBAAA,CAAiB,GAAA,CAAI,EAAA,kBAAI,IAAI,GAAA,EAAK,CAAA;AAAA,EACpC;AACA,EAAA,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,CAAG,GAAA,CAAI,SAAA,EAAW;AAAA,IACvC,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV;AAAA,GACD,CAAA;AACH;AAKA,SAAS,mBAAA,CACP,EAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,IAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACxB,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAE9D,IAAA,MAAM,SAAA,GAAY,eAAe,GAAG,CAAA;AACpC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,kBAAA,CAAmB,EAAA,EAAI,WAAW,KAAsB,CAAA;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,WAAA,EAAa;AAC1C,MAAA,EAAA,CAAG,SAAA,GAAY,OAAO,KAAK,CAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,SAAA,EAAW;AAC/C,MAAA,oBAAA,CAAqB,EAAA,EAAI,GAAA,EAAK,KAAA,EAAO,OAAO,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACpC;AAAA,EACF;AACF;AAKA,SAAS,oBAAA,CACP,EAAA,EACA,GAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,IACE,uBAAA,CAAwB,OAAA,EAAS,OAAO,CAAA,IACxC,uBAAA,CAAwB,OAAA,EAAS,UAAU,CAAA,IAC3C,uBAAA,CAAwB,OAAA,EAAS,QAAQ,CAAA,EACzC;AACA,MAAC,EAAA,CAAgC,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA;AACrD,MAAA,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACxC;AAAA,EACF,CAAA,MAAA,IAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,IAAI,uBAAA,CAAwB,OAAA,EAAS,OAAO,CAAA,EAAG;AAC7C,MAAC,EAAA,CAAgC,OAAA,GAAU,OAAA,CAAQ,KAAK,CAAA;AACxD,MAAA,EAAA,CAAG,aAAa,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,aAAa,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA;AAAA,IACnD;AAAA,EACF;AACF;AAKA,SAAS,cAAA,CACP,EAAA,EACA,KAAA,EACA,KAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,IAAO,KAAA,EAAO,GAAA;AACrC,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,EAAA,CAAG,YAAA,CAAa,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EAC9C;AACF;AASA,SAAS,gBAAgB,QAAA,EAA2B;AAClD,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAE3C,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,IAAQ,UAAU,IAAA,EAAM;AAC/D,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,MAAM,MAAA,GACH,IAAA,CAAoB,GAAA,IACnB,IAAA,CAAoB,KAAA,EAClB,GAAA;AACN,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,OAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,IAAe,CAAC,OAAA,EAAS;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,kBAAA,EAAmB;AAChC,MAAA,MAAM,IAAA,GAAO,IAAA,EAAM,EAAA,EAAI,IAAA,IAAQ,aAAA;AAC/B,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,oCAAoC,IAAI,CAAA,uDAAA;AAAA,OAC1C;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AASO,SAAS,cAAc,IAAA,EAA4B;AAExD,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,KAAK,oDAAoD,CAAA;AAAA,MAClE,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,QAAA,CAAS,eAAe,IAAI,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,QAAA,CAAS,cAAA,CAAe,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EAC7C;AAGA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AACjD,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,MAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,MAAA,IAAI,GAAA,EAAK,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,IAAQ,UAAU,IAAA,EAAM;AAC/D,IAAA,MAAM,OAAQ,IAAA,CAAoB,IAAA;AAClC,IAAA,MAAM,KAAA,GAAU,IAAA,CAAoB,KAAA,IAAS,EAAC;AAG9C,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,OAAO,sBAAA,CAAuB,IAAA,EAAoB,IAAA,EAAM,KAAK,CAAA;AAAA,IAC/D;AAGA,IAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,OAAO,sBAAA,CAAuB,IAAA,EAA4B,IAAA,EAAM,KAAK,CAAA;AAAA,IACvE;AAGA,IAAA,IACE,OAAO,SAAS,QAAA,KACf,IAAA,KAAS,YAAY,MAAA,CAAO,IAAI,MAAM,kBAAA,CAAA,EACvC;AACA,MAAA,OAAO,qBAAA,CAAsB,MAAoB,KAAK,CAAA;AAAA,IACxD;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,sBAAA,CACP,IAAA,EACA,IAAA,EACA,KAAA,EACS;AACT,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AAGtC,EAAA,cAAA,CAAe,EAAA,EAAI,MAAM,KAAK,CAAA;AAG9B,EAAA,mBAAA,CAAoB,EAAA,EAAI,OAAO,IAAI,CAAA;AAGnC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,QAAA;AACxC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,MAAA,eAAA,CAAgB,QAAQ,CAAA;AACxB,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,QAAA,IAAI,GAAA,EAAK,EAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,GAAA,GAAM,cAAc,QAAQ,CAAA;AAClC,MAAA,IAAI,GAAA,EAAK,EAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,OAAO,EAAA;AACT;AAKA,SAAS,sBAAA,CACP,IAAA,EACA,IAAA,EACA,KAAA,EACM;AAEN,EAAA,MAAM,KAAA,GAAQ,KAAK,oBAAoB,CAAA;AACvC,EAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AAEjD,EAAA,MAAM,WAAA,GAAc,IAAA;AACpB,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,WAAA,CAAY,IAAA,KAAS,eAAA;AAEjD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,gBAAgB,IAAA,CAAK,UAAA;AACzB,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,aAAA,GAAgB,uBAAA;AAAA,MACd,CAAA,KAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MAC9C,WAAA;AAAA,MACA,SAAS,EAAC;AAAA,MACV;AAAA,KACF;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,aAAA;AAAA,EACpB;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,aAAA,CAAc,UAAA,GAAa,QAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IAAY,QAAA;AAAA,IAAU,MACnC,sBAAsB,aAAa;AAAA,GACrC;AAEA,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAM,WAAA,CAAY,QAAA,EAAU,MAAM,aAAA,CAAc,MAAM,CAAC,CAAA;AAE7D,EAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,IAAA,mBAAA,CAAoB,eAAe,GAAG,CAAA;AACtC,IAAA,OAAO,GAAA;AAAA,EACT;AAKA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,EAAE,CAAA;AAE7C,IAAA,aAAA,CAAc,YAAA,GAAe,WAAA;AAC7B,IAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AAExB,IAAA,aAAA,CAAc,eAAe,aAAA,CAAc,WAAA;AAC3C,IAAA,OAAO,WAAA;AAAA,EACT;AAGA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACzC,EAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AACpB,EAAA,mBAAA,CAAoB,eAAe,IAAI,CAAA;AACvC,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,qBAAA,CACP,MACA,KAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AACjD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,QAAA;AACxC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,QAAA,IAAI,GAAA,EAAK,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AAAA,MACnC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,GAAA,GAAM,cAAc,QAAQ,CAAA;AAClC,MAAA,IAAI,GAAA,EAAK,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AASO,SAAS,sBAAA,CACd,EAAA,EACA,KAAA,EACA,cAAA,GAAiB,IAAA,EACX;AACN,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAS,KAAA,CAAM,KAAA,IAAS,EAAC;AAG/B,EAAA,cAAA,CAAe,EAAA,EAAI,OAAO,KAAK,CAAA;AAG/B,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA;AAGjD,EAAA,IAAI,iBAAA,GAAwC,IAAA;AAE5C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,IAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AAExB,IAAA,MAAM,SAAA,GAAY,eAAe,GAAG,CAAA;AAGpC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAC5D,MAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,WAAA,EAAa;AAC1C,QAAA,EAAA,CAAG,SAAA,GAAY,EAAA;AAAA,MACjB,CAAA,MAAA,IAAW,SAAA,IAAa,iBAAA,EAAmB,GAAA,CAAI,SAAS,CAAA,EAAG;AACzD,QAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA;AAC7C,QAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QAChE,CAAA,MAAO;AACL,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA;AAAA,QACjD;AACA,QAAA,iBAAA,CAAkB,OAAO,SAAS,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,EAAA,CAAG,gBAAgB,GAAG,CAAA;AAAA,MACxB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,WAAA,EAAa;AAC1C,MAAA,EAAA,CAAG,SAAA,GAAY,OAAO,KAAK,CAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,SAAA,EAAW;AAC/C,MAAC,EAAA,CAA6C,GAAG,CAAA,GAAI,KAAA;AAAA,IACvD,WAAW,SAAA,EAAW;AACpB,MAAA,IAAI,iBAAA,IAAqB,iBAAA,CAAkB,IAAA,GAAO,CAAA,EAAG;AACnD,QAAA,CAAC,iBAAA,qBAAsB,IAAI,GAAA,EAAI,EAAG,IAAI,SAAS,CAAA;AAAA,MACjD;AAEA,MAAA,MAAM,QAAA,GAAW,iBAAA,EAAmB,GAAA,CAAI,SAAS,CAAA;AAEjD,MAAA,IAAI,QAAA,IAAY,QAAA,CAAS,QAAA,KAAa,KAAA,EAAO;AAC3C,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,QAAA,CAAS,YAAY,MAAA,EAAW;AAClC,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,QAAA,CAAS,OAAA,EAAS,SAAS,OAAO,CAAA;AAAA,QACtE,CAAA,MAAO;AACL,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA;AAAA,QACpD;AAAA,MACF;AAGA,MAAA,MAAM,cAAA,GAAiB,oBAAA;AAAA,QACrB,KAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,OAAA,GAAU,kBAAkB,SAAS,CAAA;AAE3C,MAAA,IAAI,YAAY,MAAA,EAAW;AACzB,QAAA,EAAA,CAAG,gBAAA,CAAiB,SAAA,EAAW,cAAA,EAAgB,OAAO,CAAA;AAAA,MACxD,CAAA,MAAO;AACL,QAAA,EAAA,CAAG,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AAC7B,QAAA,gBAAA,CAAiB,GAAA,CAAI,EAAA,kBAAI,IAAI,GAAA,EAAK,CAAA;AAAA,MACpC;AACA,MAAA,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,CAAG,GAAA,CAAI,SAAA,EAAW;AAAA,QACvC,OAAA,EAAS,cAAA;AAAA,QACT,QAAA,EAAU,KAAA;AAAA,QACV;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACpC;AAAA,EACF;AAGA,EAAA,IAAI,iBAAA,IAAqB,iBAAA,CAAkB,IAAA,GAAO,CAAA,EAAG;AAEnD,IAAA,IAAI,sBAAsB,IAAA,EAAM;AAC9B,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,KAAK,CAAA,IAAK,iBAAA,EAAmB;AAClD,QAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QAChE,CAAA,MAAO;AACL,UAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA;AAAA,QACjD;AAAA,MACF;AACA,MAAA,gBAAA,CAAiB,OAAO,EAAE,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,KAAK,CAAA,IAAK,iBAAA,EAAmB;AAClD,QAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA,EAAG;AACrC,UAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,YAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,UAChE,CAAA,MAAO;AACL,YAAA,EAAA,CAAG,mBAAA,CAAoB,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA;AAAA,UACjD;AACA,UAAA,iBAAA,CAAkB,OAAO,SAAS,CAAA;AAAA,QACpC;AAAA,MACF;AACA,MAAA,IAAI,iBAAA,CAAkB,IAAA,KAAS,CAAA,EAAG,gBAAA,CAAiB,OAAO,EAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AAGA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,QAAA,GACJ,KAAA,CAAM,QAAA,IAAa,KAAA,CAAM,QAAA;AAC3B,IAAA,qBAAA,CAAsB,IAAI,QAAQ,CAAA;AAAA,EACpC;AACF;AAEO,SAAS,qBAAA,CACd,IACA,QAAA,EACM;AACN,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,EAAA,CAAG,WAAA,GAAc,EAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,KACtB,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,CAAA,EACrD;AACA,IAAA,IAAI,GAAG,UAAA,CAAW,MAAA,KAAW,KAAK,EAAA,CAAG,UAAA,EAAY,aAAa,CAAA,EAAG;AAC/D,MAAC,EAAA,CAAG,UAAA,CAAoB,IAAA,GAAO,MAAA,CAAO,QAAQ,CAAA;AAAA,IAChD,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,WAAA,GAAc,OAAO,QAAQ,CAAA;AAAA,IAClC;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,qBAAA,CAAsB,IAAI,QAAqB,CAAA;AAC/C,IAAA;AAAA,EACF;AAEA,EAAA,EAAA,CAAG,WAAA,GAAc,EAAA;AACjB,EAAA,MAAM,GAAA,GAAM,cAAc,QAAQ,CAAA;AAClC,EAAA,IAAI,GAAA,EAAK,EAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AAC7B;AAEO,SAAS,qBAAA,CACd,QACA,WAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAI3C,EAAA,IACE,WAAA,CAAY,WAAW,CAAA,IACvB,QAAA,CAAS,WAAW,CAAA,IACpB,MAAA,CAAO,UAAA,CAAW,MAAA,KAAW,CAAA,EAC7B;AACA,IAAA,MAAM,aAAA,GAAgB,YAAY,CAAC,CAAA;AACnC,IAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,IAAA,IAAA,CACG,OAAO,kBAAkB,QAAA,IACxB,OAAO,kBAAkB,QAAA,KAC3B,aAAA,EAAe,aAAa,CAAA,EAC5B;AACA,MAAC,aAAA,CAAuB,IAAA,GAAO,MAAA,CAAO,aAAa,CAAA;AACnD,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,WAAA,GAAc,EAAA;AAAA,EACvB;AACA,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,YAAY,MAAM,CAAA;AAExD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAG1B,IAAA,IAAI,IAAA,KAAS,UAAa,OAAA,EAAS;AAEjC,MAAA,wBAAA,CAAyB,OAAO,CAAA;AAChC,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,OAAA,IAAW,IAAA,KAAS,MAAA,EAAW;AAClC,MAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,MAAA,IAAI,GAAA,EAAK,MAAA,CAAO,WAAA,CAAY,GAAG,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,OAAA,IAAW,IAAA,KAAS,MAAA,EAAW;AAGpC,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACxD,MAAA,OAAA,CAAQ,WAAA,GAAc,OAAO,IAAI,CAAA;AAAA,IACnC,CAAA,MAAA,IAAW,aAAA,CAAc,IAAI,CAAA,EAAG;AAC9B,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AAEjC,QAAA,IAAI,mBAAA,CAAoB,OAAA,CAAQ,OAAA,EAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACnD,UAAA,sBAAA,CAAuB,SAAS,IAAI,CAAA;AAAA,QACtC,CAAA,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,IAAI,OAAA,YAAmB,OAAA,EAAS,kBAAA,CAAmB,OAAO,CAAA;AAC1D,YAAA,wBAAA,CAAyB,OAAO,CAAA;AAChC,YAAA,MAAA,CAAO,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,UAClC;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,IAAI,OAAA,YAAmB,OAAA,EAAS,kBAAA,CAAmB,OAAO,CAAA;AAC1D,UAAA,wBAAA,CAAyB,OAAO,CAAA;AAChC,UAAA,MAAA,CAAO,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,OAAA,YAAmB,OAAA,EAAS,kBAAA,CAAmB,OAAO,CAAA;AAC1D,QAAA,wBAAA,CAAyB,OAAO,CAAA;AAChC,QAAA,MAAA,CAAO,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,oCAAA,CACd,QACA,WAAA,EACA;AACA,EAAA,MAAM,QAAQ,WAAA,CAAY,MAAA;AAC1B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,MAAM,KAAK,GAAA,EAAI;AACf,EAAA,MAAM,gBACJ,OAAA,CAAQ,GAAA,CAAI,wBAAwB,GAAA,IACpC,OAAA,CAAQ,IAAI,mBAAA,KAAwB,MAAA;AAEtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,YAAY,CAAC,CAAA;AACpC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAE5B,IAAA,IACE,MACA,aAAA,CAAc,KAAK,KACnB,OAAQ,KAAA,CAAqB,SAAS,QAAA,EACtC;AACA,MAAA,MAAM,YAAa,KAAA,CAAqB,IAAA;AAExC,MAAA,IAAI,mBAAA,CAAoB,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA,EAAG;AAC9C,QAAA,MAAM,QAAA,GACH,KAAA,CAAqB,QAAA,IACrB,KAAA,CAAqB,KAAA,EAAO,QAAA;AAE/B,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,gBAAA,CAAiB,kBAAkB,CAAA,EAAG;AAAA,YACpC,OAAO,EAAA,CAAG,OAAA;AAAA,YACV,SAAA;AAAA,YACA,YAAA,EAAc,GAAG,UAAA,CAAW,MAAA;AAAA,YAC5B,cAAc,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,UAAU,OAAO;AAAA,WAC1D,CAAA;AAAA,QACH;AAEA,QAAA,iBAAA,CAAkB,EAAA,EAAI,UAAU,KAAmB,CAAA;AACnD,QAAA,UAAA,CAAW,EAAA,EAAI,GAAA,EAAK,MAAM,WAAA,EAAa,CAAA;AACvC,QAAA,MAAA,EAAA;AACA,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,gBAAA,CAAiB,2BAA2B,CAAA,EAAG;AAAA,YAC7C,OAAO,EAAA,CAAG,OAAA;AAAA,YACV;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,gBAAA,CAAiB,iCAAiC,CAAA,EAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAA;AAAA,MACnE;AAAA,IACF;AAGA,IAAA,qBAAA,CAAsB,MAAA,EAAQ,GAAG,KAAK,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,CAAA,GAAI,KAAI,GAAI,EAAA;AAClB,EAAA,sBAAA,CAAuB,QAAQ,WAAW,CAAA;AAE1C,EAAA,MAAM,QAAQ,EAAE,CAAA,EAAG,KAAA,EAAO,MAAA,EAAQ,aAAa,CAAA,EAAE;AACjD,EAAA,mBAAA,CAAoB,OAAO,yBAAyB,CAAA;AAEpD,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,iBAAA,CACP,EAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAChE,IAAA,eAAA,CAAgB,EAAA,EAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EACtC,WACE,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IACtB,SAAS,MAAA,KAAW,CAAA,KACnB,OAAO,QAAA,CAAS,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,QAAA,CAAS,CAAC,MAAM,QAAA,CAAA,EAC3D;AACA,IAAA,eAAA,CAAgB,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,EACzC,CAAA,MAAO;AAGL,IAAA,IAAI,CAAC,4BAAA,CAA6B,EAAA,EAAI,KAAK,CAAA,EAAG;AAC5C,MAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA;AAAA,IAClC;AAAA,EACF;AACF;AAKA,SAAS,4BAAA,CACP,UACA,KAAA,EACS;AACT,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,KAAA,EAAO,QAAA;AACrD,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,aAAa,KAAK,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,KAAA;AAExE,EAAA,MAAM,EAAA,GAAK,cAAc,CAAC,CAAA;AAC1B,EAAA,MAAM,EAAA,GAAK,cAAc,CAAC,CAAA;AAC1B,EAAA,IAAI,CAAC,cAAc,EAAE,CAAA,IAAK,CAAC,aAAA,CAAc,EAAE,GAAG,OAAO,KAAA;AACrD,EAAA,IAAI,OAAO,GAAG,IAAA,KAAS,QAAA,IAAY,OAAO,EAAA,CAAG,IAAA,KAAS,UAAU,OAAO,KAAA;AAEvE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAC/B,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAK,OAAO,KAAA;AAEzB,EAAA,IAAI,CAAC,mBAAA,CAAoB,GAAA,CAAI,SAAS,EAAA,CAAG,IAAI,GAAG,OAAO,KAAA;AACvD,EAAA,IAAI,CAAC,mBAAA,CAAoB,GAAA,CAAI,SAAS,EAAA,CAAG,IAAI,GAAG,OAAO,KAAA;AAEvD,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,QAAA,IAAY,EAAA,CAAG,KAAA,EAAO,QAAA;AACrC,EAAA,MAAM,EAAA,GAAM,EAAA,CAAG,QAAA,IAAY,EAAA,CAAG,KAAA,EAAO,QAAA;AAErC,EAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,OAAO,QAAA,EAAU;AACpD,IAAA,eAAA,CAAgB,GAAA,EAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACjC,WACE,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,IAChB,GAAG,MAAA,KAAW,CAAA,KACb,OAAO,EAAA,CAAG,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,EAAA,CAAG,CAAC,MAAM,QAAA,CAAA,EAC/C;AACA,IAAA,eAAA,CAAgB,GAAA,EAAK,MAAA,CAAO,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,EACpC,CAAA,MAAO;AACL,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,OAAO,QAAA,EAAU;AACpD,IAAA,eAAA,CAAgB,GAAA,EAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACjC,WACE,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,IAChB,GAAG,MAAA,KAAW,CAAA,KACb,OAAO,EAAA,CAAG,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,EAAA,CAAG,CAAC,MAAM,QAAA,CAAA,EAC/C;AACA,IAAA,eAAA,CAAgB,GAAA,EAAK,MAAA,CAAO,EAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAAA,EACpC,CAAA,MAAO;AACL,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,eAAA,CAAgB,IAAa,IAAA,EAAoB;AACxD,EAAA,IAAI,GAAG,UAAA,CAAW,MAAA,KAAW,KAAK,EAAA,CAAG,UAAA,EAAY,aAAa,CAAA,EAAG;AAC/D,IAAC,EAAA,CAAG,WAAoB,IAAA,GAAO,IAAA;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,EAAA,CAAG,WAAA,GAAc,IAAA;AAAA,EACnB;AACF;AAGA,SAAS,UAAA,CACP,EAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,OAAO,GAAG,CAAA;AACvB,IAAA,IAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA,KAAM,IAAA,EAAM;AAC1C,IAAA,EAAA,CAAG,YAAA,CAAa,YAAY,IAAI,CAAA;AAChC,IAAA,KAAA,EAAM;AAAA,EACR,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,mBAAmB,GAAA,EAA4B;AAEtD,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,GAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,GAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,uBAAA,CAAwB,GAAW,CAAA,EAAoB;AAC9D,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,MAAM,MAAM,CAAA,CAAE,MAAA;AACd,EAAA,IAAI,GAAA,KAAQ,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAE7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACzB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAEzB,IAAA,IAAI,OAAO,EAAA,EAAI;AAGf,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,IAAI,EAAA,KAAO,IAAI,OAAO,KAAA;AAAA,EACxB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,mBAAA,CACP,gBACA,SAAA,EACS;AACT,EAAA,MAAM,WAAA,GAAc,mBAAmB,SAAS,CAAA;AAChD,EAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,cAAA,KAAmB,WAAA,EAAa,OAAO,IAAA;AAEnE,EAAA,OAAO,uBAAA,CAAwB,gBAAgB,SAAS,CAAA;AAC1D;AAGA,SAAS,qBAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACM;AACN,EAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AACtC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,wBAAA,CAAyB,QAAQ,CAAA;AACjC,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,YAAY,GAAG,CAAA;AAAA,IACxB;AAAA,EACF;AACF;AAGA,SAAS,sBAAA,CACP,QACA,WAAA,EACM;AACN,EAAA,IAAI;AAEF,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACzC,IAAA,MAAM,YAAY,QAAA,IACb,QAAA,CAAS,OAAM,EAAG,QAAA,wBACf,GAAA,EAA8B;AACtC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,CAAE,GAAA;AACzB,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,EAAA,EAAI,SAAA,CAAU,GAAA,CAAI,CAAA,EAAG,EAAE,CAAA;AAAA,IAC7B;AACA,IAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,SAAS,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEO,SAAS,sBAAA,CAAuB,QAAiB,WAAA,EAAsB;AAC5E,EAAA,MAAM,KAAK,GAAA,EAAI;AACf,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAC7C,EAAA,MAAM,aAAqB,EAAC;AAC5B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,MAAA,GAAS,iBAAiB,WAAA,CAAY,CAAC,GAAG,QAAA,CAAS,CAAC,GAAG,UAAU,CAAA;AACvE,IAAA,IAAI,WAAW,QAAA,EAAU,MAAA,EAAA;AAAA,SAAA,IAChB,WAAW,SAAA,EAAW,OAAA,EAAA;AAAA,EACjC;AAEA,EAAA,MAAM,MAAA,GAAS,KAAI,GAAI,EAAA;AACvB,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,MAAA,EAAQ,UAAU,CAAA;AAGpD,EAAA,aAAA,CAAc,OAAO,MAAM,CAAA;AAE3B,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,WAAA,CAAY,MAAA;AAAA,IACf,MAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,mBAAA,CAAoB,KAAK,CAAA;AAEzB,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,gBAAA,CACP,KAAA,EACA,YAAA,EACA,UAAA,EACkC;AAClC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAA,EAAG,cAAc,UAAU,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClE,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,YAAA,EAAc,UAAU,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,SAAA;AACT;AAGA,SAAS,gBAAA,CACP,IAAA,EACA,YAAA,EACA,UAAA,EACsB;AACtB,EAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,QAAA,KAAa,CAAA,EAAG;AAC/C,IAAC,aAAsB,IAAA,GAAO,IAAA;AAC9B,IAAA,UAAA,CAAW,KAAK,YAAY,CAAA;AAC5B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,IAAI,CAAC,CAAA;AAC7C,EAAA,OAAO,SAAA;AACT;AAGA,SAAS,mBAAA,CACP,KAAA,EACA,YAAA,EACA,UAAA,EACkC;AAClC,EAAA,MAAM,QAAA,GAAW,KAAA;AAEjB,EAAA,IAAI,OAAO,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,MAAM,QAAA,CAAS,IAAA;AACrB,IAAA,IACE,YAAA,IACA,aAAa,QAAA,KAAa,CAAA,IAC1B,oBAAqB,YAAA,CAAyB,OAAA,EAAS,GAAG,CAAA,EAC1D;AACA,MAAA,sBAAA,CAAuB,cAAyB,KAAK,CAAA;AACrD,MAAA,UAAA,CAAW,KAAK,YAAY,CAAA;AAC5B,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AACnB,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA;AACT;AAIA,SAAS,iBAAA,CAAkB,QAAiB,KAAA,EAAuB;AACjE,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AACjD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,QAAA,CAAS,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC/B;AAKA,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,UAAA,EAAY,CAAA,IAAK;AACnC,MAAA,MAAM,OAAO,CAAA,CAAE,WAAA;AACf,MAAA,IAAI,CAAA,YAAa,OAAA,EAAS,kBAAA,CAAmB,CAAC,CAAA;AAC9C,MAAA,wBAAA,CAAyB,CAAC,CAAA;AAC1B,MAAA,CAAA,GAAI,IAAA;AAAA,IACN;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,gBAAA,CAAiB,mBAAmB,CAAA;AACpC,EAAA,MAAA,CAAO,gBAAgB,QAAQ,CAAA;AAC/B,EAAA,OAAO,IAAA,CAAK,KAAI,GAAI,SAAA;AACtB;AAGA,SAAS,oBAAoB,KAAA,EAMpB;AACP,EAAA,IAAI;AACF,IAAA,UAAA,CAAW,mCAAmC,KAAK,CAAA;AACnD,IAAA,UAAA,CAAW,yBAAyB,KAAK,CAAA;AACzC,IAAA,UAAA,CAAW,gCAAgC,CAAC,CAAA;AAC5C,IAAA,iBAAA,CAAkB,sBAAsB,CAAA;AAAA,EAC1C,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAUO,SAAS,0BAAA,CACd,QACA,WAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,wBAAwB,CAAA,IAAK,IAAA;AAClE,EAAA,MAAM,gBAAA,GAAmB,GAAA;AAEzB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,YAAY,MAAA,GAAS,CAAA;AAEhE,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,cAAA,CAAe;AAAA,MACb,KAAA,EAAO,uBAAA;AAAA,MACP,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,oBAAoB,WAAW,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,mBAAmB,MAAA,EAAW;AACvC,IAAA,cAAA,CAAe;AAAA,MACb,KAAA,EAAO,uBAAA;AAAA,MACP,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAO,MAAA,CAAO;AAAA,KACf,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,MAAA,GAAS,KAAA;AACjC,EAAA,MAAM,QAAA,GACJ,QAAA,IAAY,gBAAA,IAAoB,MAAA,CAAO,WAAW,MAAA,IAAU,KAAA;AAE9D,EAAA,cAAA,CAAe;AAAA,IACb,KAAA,EAAO,uBAAA;AAAA,IACP,KAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,QAAA;AACT;AAGA,SAAS,oBAAoB,QAAA,EAG3B;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AAEpB,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,MAAA,MAAA,EAAA;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA,IAAQ,UAAU,CAAA,EAAG;AACtD,MAAA,MAAM,EAAA,GAAK,CAAA;AAGX,MAAA,IAAI,OAAO,EAAA,CAAG,IAAA,KAAS,UAAA,EAAY;AACjC,QAAA,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,CAAA,EAAE;AAAA,MACrC;AAEA,MAAA,IAAI,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,IAAY,eAAA,CAAgB,EAAE,CAAA,EAAG;AACtD,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAGA,SAAS,gBAAgB,EAAA,EAAyB;AAChD,EAAA,MAAM,QAAA,GAAW,EAAA,CAAG,QAAA,IAAY,EAAA,CAAG,KAAA,EAAO,QAAA;AAE1C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAChE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,MAAM,OAAA,CAAQ,QAAQ,CAAA,IACtB,QAAA,CAAS,WAAW,CAAA,KACnB,OAAO,QAAA,CAAS,CAAC,MAAM,QAAA,IAAY,OAAO,QAAA,CAAS,CAAC,MAAM,QAAA,CAAA,EAC3D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,eAAe,IAAA,EAAqC;AAC3D,EAAA,IACE,QAAQ,GAAA,CAAI,QAAA,KAAa,gBACzB,OAAA,CAAQ,GAAA,CAAI,wBAAwB,GAAA,EACpC;AACA,IAAA,IAAI;AACF,MAAA,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAtpCA,IA2Ca,gBAAA;AA3Cb,IAAA,QAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,IAAA,WAAA,EAAA;AAEA,IAAA,gBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AAMA,IAAA,cAAA,EAAA;AAUA,IAAA,YAAA,EAAA;AAKA,IAAA,SAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,UAAA,EAAA;AAgBO,IAAM,gBAAA,GAAmB,OAAO,QAAA,KAAa,WAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC5B7C,SAAS,qBAAA,CACd,MAAA,EACA,WAAA,EACA,SAAA,EACA,aAAA,EACsC;AAEtC,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAE5C,EAAA,MAAM,aAAa,WAAA,CAAY,MAAA;AAC/B,EAAA,IAAI,UAAA,KAAe,CAAA,KAAM,CAAC,aAAA,IAAiB,cAAc,MAAA,KAAW,CAAA,CAAA;AAClE,IAAA,OAAO,IAAA;AAGT,EAAA,IAAI,CAAC,sBAAqB,EAAG;AAC3B,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,iBAAA;AACJ,EAAA,IAAI,cAAA;AAEJ,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,MAAA,CAAO,QAAA;AAClB,MAAA,iBAAA,GAAoB,IAAI,KAAA,CAAM,EAAA,CAAG,MAAM,CAAA;AACvC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,MAAA,EAAQ,CAAA,EAAA;AAC7B,QAAA,iBAAA,CAAkB,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AAAA,IAC/B,SAAS,CAAA,EAAG;AACV,MAAA,iBAAA,GAAoB,MAAA;AACf,IACP;AAAA,EACF,CAAA,MAAO;AACL,IAAA,cAAA,uBAAqB,GAAA,EAA8B;AACnD,IAAA,IAAI;AACF,MAAA,KAAA,IAAS,KAAK,MAAA,CAAO,iBAAA,EAAmB,EAAA,EAAI,EAAA,GAAK,GAAG,kBAAA,EAAoB;AACtE,QAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA;AACpC,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA,cAAA,CAAe,GAAA,CAAI,GAAG,EAAE,CAAA;AACxB,UAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,UAAA,IAAI,CAAC,OAAO,KAAA,CAAM,CAAC,GAAG,cAAA,CAAe,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,QAChD;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,cAAA,GAAiB,MAAA;AACZ,IACP;AAAA,EACF;AAEA,EAAA,MAAM,aAAqB,EAAC;AAC5B,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,YAAY,CAAC,CAAA;AACpC,IAAA,UAAA,EAAA;AAEA,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,UAAA,IAAc,MAAM,iBAAA,EAAmB;AACzC,MAAA,MAAM,EAAA,GAAK,OAAO,GAAG,CAAA;AACrB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAA,EAAK;AACjD,QAAA,MAAM,EAAA,GAAK,kBAAkB,CAAC,CAAA;AAC9B,QAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA;AACpC,QAAA,IAAI,MAAM,IAAA,KAAS,CAAA,KAAM,MAAM,MAAA,CAAO,CAAC,MAAO,GAAA,CAAA,EAAiB;AAC7D,UAAA,EAAA,GAAK,EAAA;AACL,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,EAAA,EAAI,EAAA,GAAK,SAAA,EAAW,IAAI,GAAG,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,EAAA,GAAK,gBAAgB,GAAA,CAAI,GAAsB,CAAA,IAAK,SAAA,EAAW,IAAI,GAAG,CAAA;AAAA,IACxE;AAEA,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,UAAA,CAAW,KAAK,EAAE,CAAA;AAClB,MAAA,WAAA,EAAA;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,GAAQ,cAAc,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AACrB,QAAA,YAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,aAAA,IAAiB,cAAc,MAAA,EAAQ;AACzC,IAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,MAAA,MAAM,KAAA,GAAQ,cAAc,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AACrB,QAAA,YAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,cAAA,GAAiB,KAAK,GAAA,EAAI;AAChC,IAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AACjD,IAAA,IAAI,mBAAA,GAAsB,CAAA;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,QAAA,CAAS,WAAA,CAAY,UAAA,CAAW,CAAC,CAAC,CAAA;AAClC,MAAA,mBAAA,EAAA;AAAA,IACF;AAGA,IAAA,IAAI;AAGF,MAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,UAAA,EAAY,CAAA,IAAK;AACnC,QAAA,MAAM,OAAO,CAAA,CAAE,WAAA;AACf,QAAA,IAAI,CAAA,YAAa,OAAA,EAAS,kBAAA,CAAmB,CAAC,CAAA;AAC9C,QAAA,wBAAA,CAAyB,CAAC,CAAA;AAC1B,QAAA,CAAA,GAAI,IAAA;AAAA,MACN;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAEA,IAAA,IAAI;AACF,MAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACvC,MAAA,UAAA,CAAW,mCAAA,EAAqC,IAAI,KAAA,EAAM,CAAE,KAAK,CAAA;AAAA,IACnE,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAEA,IAAA,MAAA,CAAO,gBAAgB,QAAQ,CAAA;AAG/B,IAAA,IAAI;AACF,MAAA,UAAA,CAAW,gCAAgC,CAAC,CAAA;AAAA,IAC9C,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAGA,IAAA,IAAI;AACF,MAAA,IAAIF,mBAAAA,EAAmB,EAAG,mBAAA,CAAoB,MAAM,CAAA;AAAA,IACtD,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAGA,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAA8B;AACpD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAC,CAAA,CAAE,GAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,MAAA,IAAI,IAAA,YAAgB,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,KAAK,IAAe,CAAA;AAAA,IACjE;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,CAAA,EAAG,UAAA;AAAA,QACH,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,cAAA;AAAA,QACzB,QAAA,EAAU,CAAA;AAAA,QACV,aAAA,EAAe,CAAA;AAAA,QACf,mBAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACrC,QAAA,UAAA,CAAW,yBAAyB,KAAK,CAAA;AACzC,QAAA,UAAA,CAAW,wBAAA,EAA0B,cAAc,CAAC,CAAA;AACpD,QAAA,iBAAA,CAAkB,qBAAqB,CAAA;AAAA,MACzC;AACA,MAAA,IACE,QAAQ,GAAA,CAAI,mBAAA,KAAwB,OACpC,OAAA,CAAQ,GAAA,CAAI,wBAAwB,MAAA,EACpC;AACA,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,kBAAA;AAAA,UACA,KAAK,SAAA,CAAU,EAAE,GAAG,UAAA,EAAY,YAAA,EAAc,aAAa;AAAA,SAC7D;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAGA,IAAA,IAAI;AACF,MAAA,0BAAA,CAA2B,IAAI,MAAM,CAAA;AAAA,IACvC,SAAS,CAAA,EAAG;AACV,MAAA,KAAK,CAAA;AAAA,IACP;AAEA,IAAA,OAAO,SAAA;AAAA,EACT,SAAS,CAAA,EAAG;AAEV,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAtNA,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AACA,IAAA,QAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,SAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,aAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACoBA,SAASG,wBAAAA,CAAwB,GAAW,CAAA,EAAoB;AAC9D,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACzB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACzB,IAAA,IAAI,OAAO,EAAA,EAAI;AAEf,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,IAAI,EAAA,KAAO,IAAI,OAAO,KAAA;AAAA,EACxB;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,sBAAA,CACd,MAAA,EACA,WAAA,EACA,SAAA,EAC+B;AAC/B,EAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAc,GAAI,kBAAkB,WAAW,CAAA;AAGpE,EAAA,MAAM,cAAA,GAAiB,YAAA;AAAA,IACrB,MAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAG3B,EAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAa,SAAS,CAAA;AAC9E;AAGA,SAAS,kBAAkB,WAAA,EAGzB;AACA,EAAA,MAAM,cAA6D,EAAC;AACpE,EAAA,MAAM,gBAAyB,EAAC;AAEhC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,GAAA,EAAK,KAAA,EAAO,OAAO,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,aAAa,aAAA,EAAc;AACtC;AAGA,SAAS,YAAA,CACP,MAAA,EACA,WAAA,EACA,WAAA,EACA,eACA,SAAA,EACsC;AACtC,EAAA,IAAI;AAEF,IAAA,MAAM,cAAA,GAAiB,mBAAA;AAAA,MACrB,MAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAG3B,IAAA,MAAM,gBAAA,GAAmB,uBAAA,CAAwB,MAAA,EAAQ,WAAW,CAAA;AACpE,IAAA,IAAI,kBAAkB,OAAO,gBAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,mBAAA,CACP,MAAA,EACA,WAAA,EACA,WAAA,EACA,eACA,SAAA,EACsC;AACtC,EAAA,MAAM,QAAA,GAAW,8BAAA;AAAA,IACf,MAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IACG,SAAS,WAAA,IAAe,WAAA,CAAY,MAAA,IAAU,GAAA,IAC/CH,qBAAmB,EACnB;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,qBAAA;AAAA,QACV,MAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,GAAG,CAAA;AAC7B,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,uBAAA,CACP,QACA,WAAA,EACsC;AACtC,EAAA,MAAM,QAAQ,WAAA,CAAY,MAAA;AAC1B,EAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,IAAA;AAEvB,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,MAAA,EAAQ,WAAW,CAAA;AAG7D,EAAA,IAAI,UAAA,GAAa,KAAA,GAAQ,GAAA,EAAK,OAAO,IAAA;AAGrC,EAAA,IAAI,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA,EAAG,OAAO,IAAA;AAG1D,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,oCAAA,CAAqC,MAAA,EAAQ,WAAW,CAAA;AACtE,IAAA,mBAAA,CAAoB,OAAO,yBAAyB,CAAA;AAEpD,IAAA,eAAA,CAAgB,MAAM,CAAA;AACtB,IAAA,OAAO,aAAA,CAAc,IAAI,MAAM,CAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGA,SAAS,sBAAA,CACP,QACA,WAAA,EACQ;AACR,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,CAAC,CAAA,CAAE,KAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,UAAU,QAAA,IAAY,OAAO,MAAM,IAAA,KAAS,QAAA;AAC/D,QAAA;AAEF,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,EAAA,EAAI;AAET,MAAA,IAAIG,wBAAAA,CAAwB,EAAA,CAAG,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AACnD,QAAA,UAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,UAAA;AACT;AAGA,SAAS,wBAAA,CACP,QACA,WAAA,EACS;AACT,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,CAAC,CAAA,CAAE,KAAA;AAC7B,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,EAAA,IAAM,CAAC,KAAA,IAAS,OAAO,UAAU,QAAA,EAAU;AAEhD,MAAA,IAAI,iBAAiB,EAAA,EAAI,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC3C,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,gBAAgB,MAAA,EAAuB;AAC9C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA8B;AAC9C,IAAA,KAAA,IAAS,KAAK,MAAA,CAAO,iBAAA,EAAmB,EAAA,EAAI,EAAA,GAAK,GAAG,kBAAA,EAAoB;AACtE,MAAA,MAAM,CAAA,GAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA;AACpC,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,CAAA;AACb,QAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,QAAA,IAAI,CAAC,OAAO,KAAA,CAAM,CAAC,GAAG,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,GAAG,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGA,SAAS,yBAAA,CACP,MAAA,EACA,WAAA,EACA,WAAA,EACA,SAAA,EAC+B;AAC/B,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA8B;AACpD,EAAA,MAAM,aAAqB,EAAC;AAC5B,EAAA,MAAM,UAAA,uBAAiB,OAAA,EAAc;AAErC,EAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,MAAA,EAAQ,SAAA,EAAW,UAAU,CAAA;AAG1E,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,oBAAA;AAAA,MACX,KAAA;AAAA,MACA,CAAA;AAAA,MACA,MAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,IAAA,EAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAAA,EAChC;AAGA,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,SAAA;AAE5C,EAAA,oBAAA,CAAqB,QAAQ,UAAU,CAAA;AACvC,EAAA,aAAA,CAAc,OAAO,MAAM,CAAA;AAE3B,EAAA,OAAO,SAAA;AACT;AAGA,SAAS,mBAAA,CACP,MAAA,EACA,SAAA,EACA,UAAA,EAC6C;AAC7C,EAAA,OAAO,CAAC,CAAA,KAAuB;AAC7B,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AAGvB,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA;AAC9B,IAAA,IAAI,MAAA,IAAU,CAAC,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA,EAAG;AACrC,MAAA,UAAA,CAAW,IAAI,MAAM,CAAA;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA;AAChC,IAAA,IAAI,QAAA,IAAY,CAAC,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzC,MAAA,UAAA,CAAW,IAAI,QAAQ,CAAA;AACvB,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACpB,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA;AAC7B,MAAA,IAAI,KAAA,IAAS,CAAC,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;AACnC,QAAA,UAAA,CAAW,IAAI,KAAK,CAAA;AACpB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,OAAO,mBAAA,CAAoB,MAAA,EAAQ,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAA,EACrD,CAAA;AACF;AAGA,SAAS,mBAAA,CACP,MAAA,EACA,CAAA,EACA,MAAA,EACA,UAAA,EACqB;AACrB,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,KAAK,MAAA,CAAO,iBAAA,EAAmB,EAAA,EAAI,EAAA,GAAK,GAAG,kBAAA,EAAoB;AACtE,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,MAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA;AACvC,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,UAAA,CAAW,IAAI,EAAE,CAAA;AACjB,QAAA,OAAO,EAAA;AAAA,MACT;AACA,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,QAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,IAAK,YAAa,CAAA,EAAc;AACvD,UAAA,UAAA,CAAW,IAAI,EAAE,CAAA;AACjB,UAAA,OAAO,EAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,qBACP,KAAA,EACA,KAAA,EACA,MAAA,EACA,gBAAA,EACA,YACA,SAAA,EACa;AAEb,EAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,kBAAkB,SAAS,CAAA;AAAA,EAC5E;AAGA,EAAA,OAAO,qBAAA,CAAsB,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC/D;AAGA,SAAS,mBAAA,CACP,KAAA,EACA,GAAA,EACA,MAAA,EACA,kBACA,SAAA,EACa;AACb,EAAA,MAAM,EAAA,GAAK,iBAAiB,GAAG,CAAA;AAE/B,EAAA,IAAI,EAAA,IAAM,EAAA,CAAG,aAAA,KAAkB,MAAA,EAAQ;AAGrC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,KAAA;AACjB,MAAA,IACE,YACA,OAAO,QAAA,KAAa,YACpB,OAAO,QAAA,CAAS,SAAS,QAAA,EACzB;AACA,QAAA,IAAIA,wBAAAA,CAAwB,EAAA,CAAG,OAAA,EAAS,QAAA,CAAS,IAAI,CAAA,EAAG;AACtD,UAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA;AAChC,UAAA,SAAA,CAAU,GAAA,CAAI,KAAK,EAAE,CAAA;AACrB,UAAA,OAAO,EAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI,GAAA,YAAe,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AAClD,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,qBAAA,CACP,KAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACa;AACb,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AAGtC,IAAA,IACE,QAAA,KACC,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,CAAA,IAC/C,QAAA,CAAS,QAAA,KAAa,CAAA,EACtB;AACA,MAAA,QAAA,CAAS,WAAA,GAAc,OAAO,KAAK,CAAA;AACnC,MAAA,UAAA,CAAW,IAAI,QAAQ,CAAA;AACvB,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,IAAI,eAAA,CAAgB,QAAA,EAAU,KAAK,CAAA,EAAG;AACpC,MAAA,sBAAA,CAAuB,UAAW,KAAK,CAAA;AACvC,MAAA,UAAA,CAAW,IAAI,QAAS,CAAA;AACxB,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,KAAA,GAAQ,2BAAA,CAA4B,MAAA,EAAQ,UAAU,CAAA;AAC5D,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,KAAA,EAAO,KAAA,EAAO,UAAU,CAAA;AAC5D,MAAA,IAAI,aAAa,OAAO,WAAA;AAAA,IAC1B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,eAAA,CAAgB,UAA+B,KAAA,EAAuB;AAC7E,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,EAAE,MAAA,IAAU,KAAA,CAAA;AAC7D,IAAA,OAAO,KAAA;AAET,EAAA,MAAM,QAAA,GAAW,KAAA;AACjB,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,MAAA;AAEzD,EAAA,OACE,QAAA,IACA,OAAO,QAAA,CAAS,IAAA,KAAS,YACzBA,wBAAAA,CAAwB,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,IAAI,CAAA;AAE3D;AAGA,SAAS,2BAAA,CACP,QACA,UAAA,EACqB;AACrB,EAAA,KAAA,IAAS,KAAK,MAAA,CAAO,iBAAA,EAAmB,EAAA,EAAI,EAAA,GAAK,GAAG,kBAAA,EAAoB;AACtE,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,IAAA,IAAI,EAAA,CAAG,YAAA,CAAa,UAAU,CAAA,KAAM,MAAM,OAAO,EAAA;AAAA,EACnD;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,eAAA,CACP,KAAA,EACA,KAAA,EACA,UAAA,EACa;AACb,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,KAAA,CAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,IAAA,UAAA,CAAW,IAAI,KAAK,CAAA;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClE,IAAA,MAAM,QAAA,GAAW,KAAA;AACjB,IAAA,IACE,OAAO,SAAS,IAAA,KAAS,QAAA,IACzBA,yBAAwB,KAAA,CAAM,OAAA,EAAS,QAAA,CAAS,IAAI,CAAA,EACpD;AACA,MAAA,sBAAA,CAAuB,OAAO,KAAK,CAAA;AACnC,MAAA,UAAA,CAAW,IAAI,KAAK,CAAA;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,oBAAA,CAAqB,QAAiB,UAAA,EAA0B;AACvE,EAAA,MAAM,QAAA,GAAW,SAAS,sBAAA,EAAuB;AACjD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,IAAA,QAAA,CAAS,WAAA,CAAY,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,EACpC;AAGA,EAAA,IAAI;AAEF,IAAA,KAAA,IAAS,CAAA,GAAI,MAAA,CAAO,UAAA,EAAY,CAAA,IAAK;AACnC,MAAA,MAAM,OAAO,CAAA,CAAE,WAAA;AACf,MAAA,IAAI,CAAA,YAAa,OAAA,EAAS,kBAAA,CAAmB,CAAC,CAAA;AAC9C,MAAA,wBAAA,CAAyB,CAAC,CAAA;AAC1B,MAAA,CAAA,GAAI,IAAA;AAAA,IACN;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAGR;AAEA,EAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,EAAA,MAAA,CAAO,gBAAgB,QAAQ,CAAA;AACjC;AAjhBA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,2BAAA,GAAA;AACA,IAAA,QAAA,EAAA;AAKA,IAAA,UAAA,EAAA;AAKA,IAAA,YAAA,EAAA;AACA,IAAA,aAAA,EAAA;AAEA,IAAA,aAAA,EAAA;AACA,IAAA,UAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACqCA,SAASA,wBAAAA,CAAwB,GAAW,CAAA,EAAoB;AAC9D,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACzB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACzB,IAAA,IAAI,OAAO,EAAA,EAAI;AACf,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,MAAM,KAAK,EAAA,IAAM,EAAA,IAAM,EAAA,IAAM,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA;AAC5C,IAAA,IAAI,EAAA,KAAO,IAAI,OAAO,KAAA;AAAA,EACxB;AACA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,gBAAgB,aAAA,EAAyC;AAChE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AACjC,IAAA,IACE,OAAO,aAAA,KAAkB,QAAA,IACzB,OAAO,kBAAkB,QAAA,EACzB;AACA,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,aAAa,CAAA,EAAE;AAAA,IACvD;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,cAAc,CAAC,CAAA;AAC7B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,EAAE,UAAU,KAAA,EAAM;AAC3B;AAMA,SAAS,oBAAA,CAAqB,SAAkB,IAAA,EAAuB;AACrE,EAAA,IACE,QAAQ,UAAA,CAAW,MAAA,KAAW,KAC9B,OAAA,CAAQ,UAAA,EAAY,aAAa,CAAA,EACjC;AACA,IAAC,OAAA,CAAQ,WAAoB,IAAA,GAAO,IAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,mBAAmB,MAAA,EAAgD;AAC1E,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA8B;AACjD,EAAA,KAAA,IACM,QAAQ,MAAA,CAAO,iBAAA,EACnB,KAAA,EACA,KAAA,GAAQ,MAAM,kBAAA,EACd;AACA,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,UAAU,CAAA;AACvC,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAA,CAAO,GAAA,CAAI,GAAG,KAAK,CAAA;AACnB,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,IAAI,CAAC,OAAO,KAAA,CAAM,CAAC,GAAG,MAAA,CAAO,GAAA,CAAI,GAAG,KAAK,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,iBACP,MAAA,EAC2C;AAC3C,EAAA,IAAI,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,mBAAmB,MAAM,CAAA;AAClC,IAAA,IAAI,MAAA,CAAO,OAAO,CAAA,EAAG;AACnB,MAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,IAClC;AAAA,EACF;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,GAAO,CAAA,GAAI,MAAA,GAAS,MAAA;AACpC;AAKA,SAAS,iBAAiB,QAAA,EAA8B;AACtD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,IAAI,WAAW,QAAA,CAAS,CAAC,CAAC,CAAA,KAAM,QAAW,OAAO,IAAA;AAAA,EACpD;AACA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,mBACP,KAAA,EACM;AACN,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,IAAI;AACF,MAAA,UAAA,CAAW,mCAAmC,KAAK,CAAA;AACnD,MAAA,iBAAA,CAAkB,cAAc,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAKA,SAAS,iBAAA,GAA0B;AACjC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,IAAI;AACF,MAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AASA,SAAS,cAAA,CACP,MAAA,EACA,QAAA,EACA,SAAA,EACM;AAEN,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,wBAAA,KAA6B,GAAA,EAAK;AAChD,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,MAAA,EAAQ,QAAQ,CAAA;AACtD,IAAA,IAAI,MAAA,EAAQ;AAAA,EACd;AAGA,EAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,MAAA,EAAQ,QAAA,EAAU,SAAS,CAAA;AACpE,EAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,SAAS,CAAA;AACrC;AAMA,SAAS,sBAAA,CAAuB,QAAiB,QAAA,EAA4B;AAC3E,EAAA,IAAI;AACF,IAAA,MAAM,cAA6D,EAAC;AACpE,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI,aAAA,CAAc,KAAK,CAAA,IAAM,KAAA,CAAqB,QAAQ,KAAA,CAAA,EAAW;AACnE,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,KAAM,KAAA,CAAqB,GAAA;AAAA,UAC3B,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,IAAI,YAAY,MAAA,KAAW,CAAA,IAAK,WAAA,CAAY,MAAA,KAAW,SAAS,MAAA,EAAQ;AACtE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IACE,QAAQ,GAAA,CAAI,mBAAA,KAAwB,OACpC,OAAA,CAAQ,GAAA,CAAI,wBAAwB,MAAA,EACpC;AACA,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,oCAAA,CAAqC,MAAA,EAAQ,WAAW,CAAA;AAEtE,IAAA,IACE,QAAQ,GAAA,CAAI,QAAA,KAAa,gBACzB,OAAA,CAAQ,GAAA,CAAI,wBAAwB,GAAA,EACpC;AACA,MAAA,IAAI;AACF,QAAA,UAAA,CAAW,yBAAyB,KAAK,CAAA;AACzC,QAAA,UAAA,CAAW,gCAAgC,CAAC,CAAA;AAC5C,QAAA,iBAAA,CAAkB,2BAA2B,CAAA;AAAA,MAC/C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,mBAAmB,MAAM,CAAA;AACxC,IAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,MAAM,CAAA;AAChC,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,IACE,QAAQ,GAAA,CAAI,mBAAA,KAAwB,OACpC,OAAA,CAAQ,GAAA,CAAI,wBAAwB,MAAA,EACpC;AACA,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,wDAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKA,SAAS,gBAAA,CAAiB,QAAiB,QAAA,EAAyB;AAClE,EAAA,IAAI,0BAAA,CAA2B,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,MAAA,EAAQ,QAAQ,CAAA;AACrD,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,EAC1B,CAAA,MAAO;AACL,IAAA,iBAAA,EAAkB;AAClB,IAAA,qBAAA,CAAsB,QAAQ,QAAQ,CAAA;AAAA,EACxC;AACA,EAAA,aAAA,CAAc,OAAO,MAAM,CAAA;AAC7B;AAKA,SAASC,sBAAAA,CAAsB,SAAkB,aAAA,EAA8B;AAC7E,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAA,CAAQ,WAAA,GAAc,EAAA;AACtB,IAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAC5B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AACjC,IAAA,OAAA,CAAQ,WAAA,GAAc,EAAA;AACtB,IAAA,MAAM,GAAA,GAAM,cAAc,aAAa,CAAA;AACvC,IAAA,IAAI,GAAA,EAAK,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AAChC,IAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAC5B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,aAAa,CAAA,EAAG;AACnC,IAAA,MAAM,SAAA,GAAY,iBAAiB,OAAO,CAAA;AAC1C,IAAA,IAAI;AACF,MAAA,cAAA,CAAe,OAAA,EAAS,eAAe,SAAS,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AAEN,MAAA,MAAM,SAAA,GAAY,sBAAA;AAAA,QAChB,OAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,aAAA,CAAc,GAAA,CAAI,SAAS,SAAS,CAAA;AAAA,IACtC;AAAA,EACF,CAAA,MAAO;AACL,IAAA,gBAAA,CAAiB,SAAS,aAAa,CAAA;AAAA,EACzC;AACF;AAMA,SAAS,kBAAA,CAAmB,SAAkB,KAAA,EAAyB;AACrE,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,KAAA,EAAO,QAAA;AACrD,EAAA,MAAM,SAAA,GAAY,gBAAgB,aAAa,CAAA;AAE/C,EAAA,IAAI,UAAU,QAAA,IAAY,oBAAA,CAAqB,OAAA,EAAS,SAAA,CAAU,IAAI,CAAA,EAAG,CAEzE,MAAO;AACL,IAAAA,sBAAAA,CAAsB,SAAS,aAAa,CAAA;AAAA,EAC9C;AAEA,EAAA,sBAAA,CAAuB,OAAA,EAAS,OAAO,KAAK,CAAA;AAC9C;AAKA,SAAS,uBAAA,CAAwB,QAAiB,UAAA,EAA6B;AAG7E,EAAA,IAAI,eAA+B,MAAA,CAAO,iBAAA;AAE1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,UAAA,GAAa,WAAW,CAAC,CAAA;AAC/B,IAAA,MAAM,YAAA,GAAe,YAAA,GAAe,YAAA,CAAa,kBAAA,GAAqB,IAAA;AAGtE,IAAA,IACE,gBACA,aAAA,CAAc,UAAU,KACxB,OAAQ,UAAA,CAA0B,SAAS,QAAA,IAC3CD,wBAAAA;AAAA,MACE,YAAA,CAAa,OAAA;AAAA,MACZ,UAAA,CAA0B;AAAA,KAC7B,EACA;AAEA,MAAA,kBAAA,CAAmB,cAAc,UAAwB,CAAA;AACzD,MAAA,YAAA,GAAe,YAAA;AACf,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,cAAc,UAAU,CAAA;AACvC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAA,CAAO,YAAA,CAAa,QAAQ,YAAY,CAAA;AAAA,MAC1C,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,YAAA,GAAe,YAAA;AAAA,EACjB;AAGA,EAAA,OAAO,YAAA,EAAc;AACnB,IAAA,MAAM,OAAO,YAAA,CAAa,kBAAA;AAC1B,IAAA,MAAA,CAAO,YAAY,YAAY,CAAA;AAC/B,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB;AACF;AAKA,SAASE,oBAAAA,CAAoB,IAAa,KAAA,EAAoB;AAC5D,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,KAAA,EAAO;AACzC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAE9D,IAAA,MAAM,SAAA,GAAY,eAAe,GAAG,CAAA;AACpC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,cAAA,GAAiB,oBAAA;AAAA,QACrB,KAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,OAAA,GAAU,kBAAkB,SAAS,CAAA;AAE3C,MAAA,IAAI,OAAA,KAAY,MAAA;AACd,QAAA,EAAA,CAAG,gBAAA,CAAiB,SAAA,EAAW,cAAA,EAAgB,OAAO,CAAA;AAAA,WACnD,EAAA,CAAG,gBAAA,CAAiB,SAAA,EAAW,cAAc,CAAA;AAElD,MAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,mBAAoB,GAAA,CAAI,EAAA,kBAAI,IAAI,GAAA,EAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,CAAG,GAAA,CAAI,SAAA,EAAW;AAAA,QACvC,OAAA,EAAS,cAAA;AAAA,QACT,QAAA,EAAU,KAAA;AAAA,QACV;AAAA,OACD,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,WAAA,EAAa;AAC1C,MAAA,EAAA,CAAG,SAAA,GAAY,OAAO,KAAK,CAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,SAAA,EAAW;AAC/C,MAAC,EAAA,CAA2B,GAAG,CAAA,GAAI,KAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,EAAA,CAAG,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACpC;AAAA,EACF;AACF;AAMA,SAAS,2BAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,QAAQ,KAAK,CAAC,gBAAA,CAAiB,QAAQ,CAAA,EAAG;AAC3D,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,IAAc,CAAA;AACtD,EAAA,MAAA,CAAO,YAAY,EAAE,CAAA;AAErB,EAAAA,oBAAAA,CAAoB,EAAA,EAAI,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAEzC,EAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,EAAA,EAAI,QAAA,EAAU,MAAS,CAAA;AAChE,EAAA,aAAA,CAAc,GAAA,CAAI,IAAI,SAAS,CAAA;AAC/B,EAAA,OAAO,IAAA;AACT;AASA,SAAS,WAAW,KAAA,EAAqC;AACvD,EAAA,OACE,aAAA,CAAc,KAAK,CAAA,IACnB,OAAQ,KAAA,CAAqB,IAAA,KAAS,QAAA,KACpC,KAAA,CAAqB,IAAA,KAAS,QAAA,IAC9B,MAAA,CAAQ,KAAA,CAAqB,IAAI,CAAA,KAAM,uBAAA,CAAA;AAE7C;AAKA,SAAS,oBAAoB,KAAA,EAA8B;AACzD,EAAA,MAAM,mBAAmB,KAAA,CAAM,KAAA,EAAO,QAAA,IAAY,KAAA,CAAM,YAAY,EAAC;AACrE,EAAA,OAAO,MAAM,OAAA,CAAQ,gBAAgB,CAAA,GACjC,gBAAA,GACA,CAAC,gBAAgB,CAAA;AACvB;AAEO,SAAS,QAAA,CACd,IAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,IAAI;AAIF,QAAA,OAAA,CAAQ,KAAK,yDAAyD,CAAA;AAAA,MACxE,SAAS,CAAA,EAAG;AACL,MACP;AAAA,IACF;AACA,IAAA;AAAA,EACF;AAKA,EAAA,IAAI,OAAA,IAAW,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AAEnC,IAAA,IAAI,OAAA,GAAU,MAAM,KAAA,CAAM,WAAA;AAC1B,IAAA,OAAO,OAAA,IAAW,OAAA,KAAY,KAAA,CAAM,GAAA,EAAK;AACvC,MAAA,MAAM,OAAO,OAAA,CAAQ,WAAA;AACrB,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AAEA,IAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAA,CAAO,YAAA,CAAa,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA;AAAA,IACpC;AAAA,EACF,WAAW,OAAA,EAAS;AAElB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,iBAAiB,CAAA;AACtD,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,eAAe,CAAA;AAClD,IAAA,MAAA,CAAO,YAAY,KAAK,CAAA;AACxB,IAAA,MAAA,CAAO,YAAY,GAAG,CAAA;AACtB,IAAA,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAErC,IAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,MAAO;AAML,IAAA,IAAI,KAAA,GAAQ,IAAA;AAKZ,IAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,MAAA,MAAM,UAAA,GAAa,oBAAoB,KAAmB,CAAA;AAG1D,MAAA,IACE,UAAA,CAAW,MAAA,KAAW,CAAA,IACtB,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,IAC3B,OAAQ,UAAA,CAAW,CAAC,CAAA,CAAiB,SAAS,QAAA,EAC9C;AACA,QAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAAA,MACtB,CAAA,MAAO;AAEL,QAAA,uBAAA,CAAwB,QAAQ,UAAU,CAAA;AAC1C,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAEpC,IAAA,IACE,UAAA,IACA,aAAA,CAAc,KAAK,CAAA,IACnB,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,IACtBF,wBAAAA,CAAwB,UAAA,CAAW,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA,EACtD;AAEA,MAAA,kBAAA,CAAmB,YAAY,KAAmB,CAAA;AAAA,IACpD,CAAA,MAAO;AAEL,MAAA,MAAA,CAAO,WAAA,GAAc,EAAA;AAGrB,MAAA,IACE,aAAA,CAAc,KAAK,CAAA,IACnB,OAAO,KAAA,CAAM,SAAS,QAAA,IACtB,2BAAA,CAA4B,MAAA,EAAQ,KAAmB,CAAA,EACvD;AACA,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,GAAA,GAAM,cAAc,KAAK,CAAA;AAC/B,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAA,CAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AACF;AA9jBA,IAkCM,SAAA;AAlCN,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AAAA,IAAA,WAAA,EAAA;AAEA,IAAA,YAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,QAAA,EAAA;AAQA,IAAA,SAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,IAAA,UAAA,EAAA;AAkBA,IAAM,SAAA,uBAAgB,OAAA,EAA0B;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClChD,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,uBAAA,GAAA;AAIA,IAAA,UAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,IAAA,aAAA,EAAA;AAEA,IAAA,aAAA,EAAA;AACA,IAAA,UAAA,EAAA;AAGA,IAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACrC,MAAA,MAAM,EAAA,GAAK,UAAA;AACX,MAAA,EAAA,CAAG,eAAA,GAAkB;AAAA,QACnB,QAAA;AAAA,QACA,8BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACqCO,SAAS,uBAAA,CACd,EAAA,EACA,EAAA,EACA,KAAA,EACA,MAAA,EACmB;AACnB,EAAA,MAAM,QAAA,GAA8B;AAAA,IAClC,EAAA;AAAA,IACA,EAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,IACT,eAAA,EAAiB,IAAI,eAAA,EAAgB;AAAA;AAAA,IACrC,aAAa,EAAC;AAAA,IACd,oBAAA,EAAsB,CAAA;AAAA,IACtB,YAAA,EAAc,IAAA;AAAA;AAAA,IAEd,iBAAA,EAAmB,MAAA;AAAA,IACnB,eAAA,EAAiB,MAAA;AAAA,IACjB,WAAA,EAAa,MAAA;AAAA,IACb,eAAA,EAAiB,EAAA;AAAA,IACjB,sBAAsB,EAAC;AAAA,IACvB,mBAAA,EAAqB,KAAA;AAAA,IACrB,iBAAiB,EAAC;AAAA,IAClB,YAAY,EAAC;AAAA,IACb,gBAAA,EAAkB,KAAA;AAAA,IAClB,UAAA,EAAY,IAAA;AAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,aAAA,EAAe,KAAA;AAAA,IACf,MAAA,EAAQ,KAAA;AAAA;AAAA,IAGR,mBAAA,EAAqB,MAAA;AAAA,IACrB,eAAA,EAAiB,CAAA;AAAA,IACjB,kBAAA,sBAAwB,GAAA,EAAI;AAAA,IAC5B,eAAA,sBAAqB,GAAA;AAAI,GAC3B;AAGA,EAAA,QAAA,CAAS,kBAAkB,MAAM;AAE/B,IAAA,QAAA,CAAS,gBAAA,GAAmB,KAAA;AAE5B,IAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,QAAA,CAAS,cAAc,MAAM;AAC3B,IAAA,IAAI,CAAC,SAAS,gBAAA,EAAkB;AAC9B,MAAA,QAAA,CAAS,gBAAA,GAAmB,IAAA;AAE5B,MAAA,eAAA,CAAgB,OAAA,CAAQ,SAAS,eAAgB,CAAA;AAAA,IACnD;AAAA,EACF,CAAA;AAEA,EAAA,QAAA,CAAS,oBAAoB,MAAM;AAEjC,IAAA,QAAA,CAAS,gBAAA,GAAmB,KAAA;AAE5B,IAAA,QAAA,CAAS,WAAA,IAAc;AAAA,EACzB,CAAA;AAEA,EAAA,OAAO,QAAA;AACT;AAMO,SAAS,2BAAA,GAAwD;AACtE,EAAA,OAAO,eAAA;AACT;AAwCA,SAAS,uBAAuB,QAAA,EAAmC;AAIjE,EAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AAEtB,EAAA,KAAA,MAAW,SAAA,IAAa,SAAS,eAAA,EAAiB;AAChD,IAAA,MAAM,SAAS,SAAA,EAAU;AACzB,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,OAAA,KAAY;AACvB,QAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,UAAA,QAAA,CAAS,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,UAAA,EAAY;AACvC,MAAA,QAAA,CAAS,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,QAAA,CAAS,kBAAkB,EAAC;AAC9B;AAEO,SAAS,mBAAA,CACd,UACA,MAAA,EACM;AACN,EAAA,QAAA,CAAS,MAAA,GAAS,MAAA;AAGlB,EAAA,IAAI;AACF,IAAA,IAAI,MAAA,YAAkB,OAAA;AACpB,MACE,OACA,eAAA,GAAkB,QAAA;AAAA,EACxB,SAAS,GAAA,EAAK;AACP,EACP;AAKA,EAAA,QAAA,CAAS,eAAe,QAAA,CAAS,WAAA;AAEjC,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,CAAS,OAAA;AAChC,EAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,EAAA,IAAI,aAAA,IAAiB,QAAA,CAAS,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACxD,IAAA,sBAAA,CAAuB,QAAQ,CAAA;AAAA,EACjC;AACF;AAWA,SAAS,aAAa,QAAA,EAAmC;AAIvD,EAAA,QAAA,CAAS,eAAe,QAAA,CAAS,WAAA;AAGjC,EAAA,QAAA,CAAS,sBAAsB,EAAE,oBAAA;AACjC,EAAA,QAAA,CAAS,kBAAA,uBAAyB,GAAA,EAAI;AAGtC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,OAAO,SAAA,GAAY,EAAA;AAElE,EAAA,MAAM,MAAA,GAAS,qBAAqB,QAAQ,CAAA;AAC5C,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAG7B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF,CAAA,MAAO;AAIL,IAAA,MAAM,iBACJ,UAAA,CAQA,eAAA;AACF,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,cAAA,EAAgB,sBAAA,GAAyB,QAAA,EAAU,MAAM,CAAA;AACtE,MAAA,IAAI,IAAA,EAAM;AAAA,IACZ,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc,MAAM,GAAA;AAAA,IACnD;AAGA,IAAA,eAAA,CAAgB,QAAQ,MAAM;AAI5B,MAAA,IAAI,CAAC,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,YAAA,EAAc;AAE7C,QAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAE3C,UAAAG,2BAA0B,QAAQ,CAAA;AAClC,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,cAAc,QAAA,CAAS,YAAA;AAC7B,QAAA,MAAM,SAAS,WAAA,CAAY,UAAA;AAC3B,QAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,UAAA,MAAA,CAAO,IAAA;AAAA,YACL;AAAA,WACF;AACA,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAGzC,QAAA,MAAM,WAAA,GAAc,eAAA;AACpB,QAAA,eAAA,GAAkB,QAAA;AAClB,QAAA,IAAI;AACF,UAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAGrB,UAAA,MAAA,CAAO,YAAA,CAAa,MAAM,WAAW,CAAA;AAGrC,UAAA,QAAA,CAAS,MAAA,GAAS,IAAA;AAClB,UAAA,QAAA,CAAS,YAAA,GAAe,KAAA,CAAA;AACxB,UACE,KACA,eAAA,GAAkB,QAAA;AAEpB,UAAAA,2BAA0B,QAAQ,CAAA;AAAA,QACpC,CAAA,SAAE;AACA,UAAA,eAAA,GAAkB,WAAA;AAAA,QACpB;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAS,MAAA,EAAQ;AAInB,QAAA,IAAI,cAAsB,EAAC;AAC3B,QAAA,IAAI;AACF,UAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,CAAS,OAAA;AAKhC,UAAA,MAAM,WAAA,GAAc,eAAA;AACpB,UAAA,eAAA,GAAkB,QAAA;AAIlB,UAAA,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA;AAEnD,UAAA,IAAI;AACF,YAAA,QAAA,CAAS,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,UAClC,SAAS,CAAA,EAAG;AAGV,YAAA,IAAI;AACF,cAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,OAAO,UAAU,CAAA;AACzD,cAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,gBAAA,IAAI;AACF,kBAAA,qBAAA,CAAsB,CAAC,CAAA;AAAA,gBACzB,SAAS,GAAA,EAAK;AACZ,kBAAA,MAAA,CAAO,IAAA;AAAA,oBACL,kDAAA;AAAA,oBACA;AAAA,mBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF,SAAS,IAAA,EAAM;AACb,cAAA,KAAK,IAAA;AAAA,YACP;AAIA,YAAA,IAAI;AACF,cAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACvC,cAAA,UAAA;AAAA,gBACE,4CAAA;AAAA,gBACA,IAAI,OAAM,CAAE;AAAA,eACd;AAAA,YACF,SAASC,EAAAA,EAAG;AACV,cAAA,KAAKA,EAAAA;AAAA,YACP;AACA,YAAA,QAAA,CAAS,MAAA,CAAO,eAAA,CAAgB,GAAG,WAAW,CAAA;AAC9C,YAAA,MAAM,CAAA;AAAA,UACR,CAAA,SAAE;AACA,YAAA,eAAA,GAAkB,WAAA;AAAA,UACpB;AAKA,UAAAD,2BAA0B,QAAQ,CAAA;AAElC,UAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAGnB,UAAA,IAAI,aAAA,IAAiB,QAAA,CAAS,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACxD,YAAA,sBAAA,CAAuB,QAAQ,CAAA;AAAA,UACjC;AAAA,QACF,SAAS,WAAA,EAAa;AAGpB,UAAA,IAAI;AACF,YAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,OAAO,UAAU,CAAA;AAC7D,YAAA,KAAA,MAAW,KAAK,eAAA,EAAiB;AAC/B,cAAA,IAAI;AACF,gBAAA,qBAAA,CAAsB,CAAC,CAAA;AAAA,cACzB,SAAS,GAAA,EAAK;AACZ,gBAAA,MAAA,CAAO,IAAA;AAAA,kBACL,4DAAA;AAAA,kBACA;AAAA,iBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,SAAS,IAAA,EAAM;AACR,UACP;AAEA,UAAA,IAAI;AACF,YAAA,IAAI;AACF,cAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACvC,cAAA,UAAA;AAAA,gBACE,6CAAA;AAAA,gBACA,IAAI,OAAM,CAAE;AAAA,eACd;AAAA,YACF,SAAS,CAAA,EAAG;AACV,cAAA,KAAK,CAAA;AAAA,YACP;AACA,YAAA,QAAA,CAAS,MAAA,CAAO,eAAA,CAAgB,GAAG,WAAW,CAAA;AAAA,UAChD,CAAA,CAAA,MAAQ;AAEN,YAAA,QAAA,CAAS,OAAO,SAAA,GAAY,WAAA;AAAA,UAC9B;AAEA,UAAA,MAAM,WAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;AAOO,SAAS,sBACd,QAAA,EAC4B;AAM5B,EAAA,MAAM,QAAA,GAAW,SAAS,mBAAA,KAAwB,MAAA;AAClD,EAAA,MAAM,YAAY,QAAA,CAAS,mBAAA;AAC3B,EAAA,MAAM,mBAAmB,QAAA,CAAS,kBAAA;AAClC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,CAAS,sBAAsB,EAAE,oBAAA;AACjC,IAAA,QAAA,CAAS,kBAAA,uBAAyB,GAAA,EAAI;AAAA,EACxC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,qBAAqB,QAAQ,CAAA;AAI5C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAAA,2BAA0B,QAAQ,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,SAAE;AAEA,IAAA,QAAA,CAAS,mBAAA,GAAsB,SAAA;AAC/B,IAAA,QAAA,CAAS,kBAAA,GAAqB,gBAAA,oBAAoB,IAAI,GAAA,EAAI;AAAA,EAC5D;AACF;AAEA,SAAS,qBACP,QAAA,EAC4B;AAE5B,EAAA,QAAA,CAAS,eAAA,GAAkB,EAAA;AAG3B,EAAA,KAAA,MAAWP,MAAAA,IAAS,SAAS,WAAA,EAAa;AACxC,IAAA,IAAIA,MAAAA,EAAO;AACT,MAAAA,OAAM,YAAA,GAAe,KAAA;AAAA,IACvB;AAAA,EACF;AAGA,EAAA,QAAA,CAAS,kBAAA,uBAAyB,GAAA,EAAI;AAEtC,EAAA,eAAA,GAAkB,QAAA;AAClB,EAAA,UAAA,GAAa,CAAA;AAEb,EAAA,IAAI;AAEF,IAAA,MAAM,kBACJ,OAAA,CAAQ,GAAA,CAAI,aAAa,YAAA,GAAe,IAAA,CAAK,KAAI,GAAI,CAAA;AAGvD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,MAAA,EAAQ,SAAS,eAAA,CAAgB;AAAA,KACnC;AAOA,IAAA,MAAM,cAAA,GAA+B;AAAA,MACnC,QAAQ,QAAA,CAAS,UAAA;AAAA,MACjB,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,MAAM,MAAA,GAAS,WAAA;AAAA,MAAY,cAAA;AAAA,MAAgB,MACzC,QAAA,CAAS,EAAA,CAAG,QAAA,CAAS,OAAO,OAAO;AAAA,KACrC;AAGA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,eAAA;AAChC,IAAA,IAAI,aAAa,CAAA,EAAG;AAElB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,gCAAgC,UAAU,CAAA,8CAAA;AAAA,OAC5C;AAAA,IACF;AAIA,IAAA,IAAI,CAAC,SAAS,mBAAA,EAAqB;AACjC,MAAA,QAAA,CAAS,mBAAA,GAAsB,IAAA;AAAA,IACjC;AAGA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AACpD,MAAA,MAAMA,MAAAA,GAAQ,QAAA,CAAS,WAAA,CAAY,CAAC,CAAA;AACpC,MAAA,IAAIA,MAAAA,IAAS,CAACA,MAAAA,CAAM,YAAA,EAAc;AAChC,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,IAAA,IAAQ,aAAA;AAClC,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,CAAA,yCAAA,EAA4C,IAAI,CAAA,UAAA,EAAa,CAAC,CAAA,gDAAA;AAAA,WAChE;AAAA,QACF,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,CAAA,qFAAA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,SAAE;AAEA,IAAA,eAAA,GAAkB,IAAA;AAAA,EACpB;AACF;AAOO,SAAS,iBAAiB,QAAA,EAAmC;AAGlE,EAAA,QAAA,CAAS,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAG/C,EAAA,QAAA,CAAS,eAAe,QAAA,CAAS,WAAA;AAGjC,EAAA,eAAA,CAAgB,OAAA,CAAQ,MAAM,YAAA,CAAa,QAAQ,CAAC,CAAA;AACtD;AAEO,SAAS,kBAAA,GAA+C;AAC7D,EAAA,OAAO,eAAA;AACT;AA6DO,SAASO,2BAA0B,QAAA,EAAmC;AAC3E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,kBAAA,oBAAsB,IAAI,GAAA,EAAI;AACtD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,eAAA,oBAAmB,IAAI,GAAA,EAAI;AACnD,EAAA,MAAM,QAAQ,QAAA,CAAS,mBAAA;AAEvB,EAAA,IAAI,UAAU,MAAA,EAAW;AAGzB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG;AAClB,MAAA,MAAM,UAAW,CAAA,CAAqB,QAAA;AACtC,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,QAAA,CAAS,eAAA,GAAkB,KAAA;AAG3B,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,UAAW,CAAA,CAAqB,QAAA;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,uBAAc,GAAA,EAAI;AAElB,MAAC,EAAqB,QAAA,GAAW,OAAA;AAAA,IACnC;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,eAAA,IAAmB,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,QAAA,CAAS,eAAA,GAAkB,MAAA;AAC3B,EAAA,QAAA,CAAS,kBAAA,uBAAyB,GAAA,EAAI;AACtC,EAAA,QAAA,CAAS,mBAAA,GAAsB,MAAA;AACjC;AAEO,SAAS,iBAAA,GAA4B;AAC1C,EAAA,OAAO,UAAA,EAAA;AACT;AAOO,SAAS,eAAe,QAAA,EAAmC;AAChE,EAAA,gBAAA,CAAiB,QAAQ,CAAA;AAC3B;AAMO,SAAS,iBAAiB,QAAA,EAAmC;AAElE,EAAA,MAAM,gBAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,OAAA,IAAW,SAAS,UAAA,EAAY;AACzC,IAAA,IAAI;AACF,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,aAAA,CAAc,KAAK,GAAG,CAAA;AAAA,MACxB,CAAA,MAAO;AAEL,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,MAAA,CAAO,IAAA,CAAK,kCAAkC,GAAG,CAAA;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,QAAA,CAAS,aAAa,EAAC;AACvB,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAE5B,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,aAAA;AAAA,MACA,CAAA,6BAAA,EAAgC,SAAS,EAAE,CAAA;AAAA,KAC7C;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,IAAA,KAAA,MAAW,CAAA,IAAK,SAAS,eAAA,EAAiB;AACxC,MAAA,MAAM,UAAW,CAAA,CAAqB,QAAA;AACtC,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,IACtC;AACA,IAAA,QAAA,CAAS,eAAA,uBAAsB,GAAA,EAAI;AAAA,EACrC;AAGA,EAAA,QAAA,CAAS,gBAAgB,KAAA,EAAM;AAG/B,EAAA,QAAA,CAAS,YAAA,GAAe,IAAA;AAMxB,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACrB;AAntBA,IA0HI,iBACA,UAAA,EAsGA,oBAAA;AAjOJ,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0BAAA,GAAA;AAMA,IAAA,cAAA,EAAA;AAGA,IAAA,YAAA,EAAA;AAKA,IAAA,WAAA,EAAA;AACA,IAAA,SAAA,EAAA;AA+HA,IAAA,aAAA,EAAA;AApBA,IAAI,eAAA,GAA4C,IAAA;AAChD,IAAI,UAAA,GAAa,CAAA;AAsGjB,IAAI,oBAAA,GAAuB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3MpB,SAAS,KAAA,CAAM,MAAc,OAAA,EAA8B;AAEhE,EAAA,MAAM,cAAA,GACJ,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AAC3D,EAAA,MAAM,iBAAA,GACJ,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,KAAY,GAAA,GAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,OAAA;AAGpE,EAAA,MAAM,eAAe,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC7D,EAAA,MAAM,kBAAkB,iBAAA,CAAkB,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAGnE,EAAA,IAAI,gBAAgB,MAAA,KAAW,CAAA,IAAK,eAAA,CAAgB,CAAC,MAAM,GAAA,EAAK;AAG9D,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ;AAAA,QACN,KAAK,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,cAAA,GAAiB,aAAa,CAAC;AAAA;AAChE,KACF;AAAA,EACF;AAGA,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,eAAA,CAAgB,MAAA,EAAQ;AAClD,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,EAAC,EAAE;AAAA,EACtC;AAEA,EAAA,MAAM,SAAiC,EAAC;AAGxC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,eAAA,CAAgB,QAAQ,CAAA,EAAA,EAAK;AAC/C,IAAA,MAAM,cAAA,GAAiB,gBAAgB,CAAC,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAGlC,IAAA,IAAI,eAAe,UAAA,CAAW,GAAG,KAAK,cAAA,CAAe,QAAA,CAAS,GAAG,CAAA,EAAG;AAClE,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC5C,MAAA,MAAA,CAAO,SAAS,CAAA,GAAI,kBAAA,CAAmB,WAAW,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,mBAAmB,GAAA,EAAK;AAEjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA;AAAA,IAChB,CAAA,MAAA,IAAW,mBAAmB,WAAA,EAAa;AAEzC,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,EAAC,EAAE;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AACjC;AAvEA,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACIO,SAAS,iBAAA,GAAgD;AAC9D,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,OAAO,EAAE,mBAAmB,CAAA;AAC9B;AAEO,SAAS,qBAAqB,KAAA,EAA6B;AAGhE,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,GAAA,GAAM,EAAE,mBAAmB,CAAA;AACjC,EAAA,IAAI,GAAA,IAAO,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wDAAA,EAA2D,GAAG,CAAA,aAAA,EAAgB,KAAK,CAAA,8DAAA;AAAA,KAErF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,GAAA,EAAK,CAAA,CAAE,mBAAmB,CAAA,GAAI,KAAA;AACrC;AArBA,IAEM,mBAAA;AAFN,IAAA,oBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gCAAA,GAAA;AAEA,IAAM,mBAAA,mBAAsB,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACFjE,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,gCAAA,EAAA,MAAA,gCAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAkCA,SAAS,aAAa,KAAA,EAAsB;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,UAAA;AACV,IAAA,CAAA,CAAE,cAAc,CAAA,GAAI,KAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAWA,SAAS,SAAS,IAAA,EAAsB;AACtC,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AAC3D,EAAA,OAAO,UAAA,KAAe,MAAM,CAAA,GAAI,UAAA,CAAW,MAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA;AACxE;AAUA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AAG3D,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACrD,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACpD,MAAA,KAAA,IAAS,CAAA;AAAA,IACX,CAAA,MAAA,IAAW,YAAY,GAAA,EAAK;AAC1B,MAAA,KAAA,IAAS,CAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,kBAAkB,GAAA,EAA0B;AAC1D,EAAA,cAAA,GAAiB,GAAA;AACnB;AAGA,SAAS,cAAc,GAAA,EAAa;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,GAAA,EAAK,kBAAkB,CAAA;AACzC,IAAA,OAAO,EAAE,UAAU,CAAA,CAAE,QAAA,EAAU,QAAQ,CAAA,CAAE,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAAA,EAChE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,QAAA,EAAU,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,MAAM,EAAA,EAAG;AAAA,EAC/C;AACF;AAGA,SAAS,WAAc,GAAA,EAAW;AAChC,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAC3D,IAAA,MAAA,CAAO,OAAO,GAA8B,CAAA;AAC5C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,GAA8B,CAAA,EAAG;AAC7D,MAAA,MAAM,KAAA,GAAS,IAAgC,GAAG,CAAA;AAClD,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,aAAqB,KAAK,CAAA;AAAA,IAC1D;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,UAAU,MAAA,EAA4B;AAC7C,EAAA,MAAM,GAAA,GAAM,IAAI,eAAA,CAAgB,MAAA,IAAU,EAAE,CAAA;AAC5C,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAsB;AAC1C,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,GAAA,CAAI,SAAQ,EAAG;AAClC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,SACxB,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,GAAA,GAAkB;AAAA,IACtB,IAAI,GAAA,EAAa;AACf,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC3B,MAAA,OAAO,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACxB,CAAA;AAAA,IACA,OAAO,GAAA,EAAa;AAClB,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC3B,MAAA,OAAO,GAAA,GAAM,CAAC,GAAG,GAAG,IAAI,EAAC;AAAA,IAC3B,CAAA;AAAA,IACA,IAAI,GAAA,EAAa;AACf,MAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,MAAM,MAAyC,EAAC;AAChD,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AACxC,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,CAAC,GAAG,GAAG,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AAAA,MAC5C;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,GACF;AAEA,EAAA,OAAO,WAAW,GAAG,CAAA;AACvB;AAGA,SAAS,eAAe,QAAA,EAAgC;AACtD,EAAA,MAAM,aAAa,SAAA,EAAU;AAC7B,EAAA,MAAM,UAMD,EAAC;AAEN,EAAA,SAASE,gBAAe,IAAA,EAAc;AAEpC,IAAA,MAAM,UAAA,GACJ,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AAC3D,IAAA,IAAI,UAAA,KAAe,MAAM,OAAO,CAAA;AAChC,IAAA,MAAM,WAAW,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACrD,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,GAAG,KAAA,IAAS,CAAA;AAAA,WAAA,IACtD,OAAA,KAAY,KAAK,KAAA,IAAS,CAAA;AAAA,WAC9B,KAAA,IAAS,CAAA;AAAA,IAChB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,MAAM,MAAA,GAAS,KAAA,CAAU,QAAA,EAAU,CAAA,CAAE,IAAI,CAAA;AACzC,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,SAAS,CAAA,CAAE,IAAA;AAAA,QACX,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,MAAO,CAAA,CAAwB,IAAA;AAAA,QAC/B,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,WAAA,EAAaA,eAAAA,CAAe,CAAA,CAAE,IAAI;AAAA,OACnC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,WAAA,GAAc,EAAE,WAAW,CAAA;AAEpD,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACzB,MAAM,CAAA,CAAE,OAAA;AAAA,IACR,QAAQ,UAAA,CAAW,EAAE,GAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,WAAW,CAAA,CAAE;AAAA,GACf,CAAE,CAAA;AACJ;AAUO,SAAS,qBAAA,GAA8B;AAC5C,EAAA,kBAAA,GAAqB,IAAA;AACvB;AAGO,SAAS,8BAAA,GAAuC;AACrD,EAAA,kBAAA,GAAqB,IAAA;AACvB;AAEO,SAAS,gCAAA,GAAyC;AACvD,EAAA,kBAAA,GAAqB,KAAA;AACvB;AAQO,SAAS,KAAA,CACd,IAAA,EACA,OAAA,EACA,SAAA,EACsB;AACtB,EAAA,IAAI,iBAAA,OAAwB,SAAA,EAAW;AACrC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAG/B,IAAA,MAAM,WAAW,2BAAA,EAA4B;AAC7C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAEF;AAAA,IACF;AAGA,IAAA,IAAI,QAAA,GAAW,GAAA;AACf,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,IAAA,GAAO,EAAA;AAEX,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,QAAA,EAAU;AACpD,MAAA,QAAA,GAAW,MAAA,CAAO,SAAS,QAAA,IAAY,GAAA;AACvC,MAAA,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,IAAU,EAAA;AACnC,MAAA,IAAA,GAAO,MAAA,CAAO,SAAS,IAAA,IAAQ,EAAA;AAAA,IACjC,WAAW,cAAA,EAAgB;AACzB,MAAA,MAAM,MAAA,GAAS,cAAc,cAAc,CAAA;AAC3C,MAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAClB,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAChB,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAAA,IAChB;AAEA,IAAA,MAAM,SAAS,UAAA,CAAW;AAAA,MACxB,GAAK,QAAA,CAAS,KAAA,IAAoC;AAAC,KACpD,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,eAAe,QAAQ,CAAA;AAEvC,IAAA,MAAM,QAAA,GAA0B,OAAO,MAAA,CAAO;AAAA,MAC5C,IAAA,EAAM,QAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,IAAA,IAAQ,IAAA;AAAA,MACd,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAc,2BAAA,EAA4B;AAChD,EAAA,IAAI,WAAA,IAAe,YAAY,GAAA,EAAK;AAClC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAkB,EAAE,IAAA,EAAM,OAAA,EAAkC,SAAA,EAAU;AAC5E,EAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AACpB,EAAA,YAAA,CAAa,IAAI,CAAA;AAGjB,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAE3B,EAAA,IAAI,WAAA,GAAc,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AACzC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,WAAA,GAAc,EAAC;AACf,IAAA,aAAA,CAAc,GAAA,CAAI,OAAO,WAAW,CAAA;AAAA,EACtC;AAEA,EAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AAEzB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,UAAA,CAAW,IAAI,SAAS,CAAA;AAAA,EAC1B;AACF;AAKO,SAAS,SAAA,GAAqB;AACnC,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA;AACnB;AAKO,SAAS,mBAAmB,SAAA,EAA4B;AAC7D,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AACvD;AAKO,SAAS,gBAAgB,SAAA,EAA2B;AACzD,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAGtB,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,IAAI,MAAA,CAAO,CAAC,CAAA,CAAE,SAAA,KAAc,SAAA,EAAW;AACrC,MAAA,MAAM,OAAA,GAAU,OAAO,CAAC,CAAA;AACxB,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAGlB,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACnC,MAAA,MAAM,WAAA,GAAc,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC3C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AACvC,QAAA,IAAI,OAAO,CAAA,EAAG;AACZ,UAAA,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,UAAA,CAAW,OAAO,SAAS,CAAA;AAC3B,EAAA,OAAO,SAAS,MAAA,CAAO,MAAA;AACzB;AAKO,SAAS,WAAA,GAAoB;AAClC,EAAA,MAAA,CAAO,MAAA,GAAS,CAAA;AAChB,EAAA,UAAA,CAAW,KAAA,EAAM;AACjB,EAAA,aAAA,CAAc,KAAA,EAAM;AACpB,EAAA,kBAAA,GAAqB,KAAA;AACrB,EAAA,YAAA,CAAa,KAAK,CAAA;AACpB;AAsBA,SAAS,iBAAiB,OAAA,EAA4C;AACpE,EAAA,IAAI,OAAA,IAAW,MAAM,OAAO,MAAA;AAC5B,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAEjC,IAAA,OAAO,CAAC,QAAgC,GAAA,KAAmC;AAIzE,MAAA,IAAI;AACF,QAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,MAC5B,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,QAAQ,MAAM,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,aAAA,CACd,IAAA,EACA,OAAA,EAAA,GACG,QAAA,EACc;AACjB,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAGvC,EAAA,MAAM,UAAA,GAA8B;AAAA,IAClC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAAA,IACjC,aAAA,EAAe;AAAA,GACjB;AAGA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,UAAA,GAAa,iBAAiB,OAAO,CAAA;AAC3C,IAAA,IAAI,OAAA,IAAW,IAAA,IAAQ,CAAC,UAAA,EAAY;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,UAAA,EAAY,KAAA,CAAM,IAAA,EAAM,UAAU,CAAA;AAEtC,IAAA,KAAA,MAAW,KAAA,IAAS,UAAA,CAAW,QAAA,IAAY,EAAC,EAAG;AAE7C,MAAA,MAAM,OAAO,IAAA,KAAS,GAAA,GAAM,KAAK,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA;AACvD,MAAA,MAAM,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,CAAG,OAAA;AAAA,QAC3D,OAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AACtD,QAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAI,eAAA,EAAiB,KAAA,CAAM,SAAA,EAAW,eAAe,CAAA;AAAA,MACvD;AAEA,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ;AAG3C,QAAA,aAAA;AAAA,UACE,SAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAI,KAAA,CAAM;AAAA,SACZ;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,mBAAA,GAAgC;AAC9C,EAAA,OAAO,KAAA,CAAM,KAAK,UAAU,CAAA;AAC9B;AAMO,SAAS,aAAa,QAAA,EAAwC;AACnE,EAAA,MAAM,UAAA,GACJ,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,IAAK,QAAA,KAAa,GAAA,GACnC,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GACpB,QAAA;AACN,EAAA,MAAM,KAAA,GACJ,UAAA,KAAe,GAAA,GAAM,CAAA,GAAI,UAAA,CAAW,MAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA;AAGjE,EAAA,MAAM,aAID,EAAC;AAGN,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC3C,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAU,QAAA,EAAU,CAAA,CAAE,IAAI,CAAA;AACzC,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,UAAA,CAAW,IAAA,CAAK;AAAA,UACd,KAAA,EAAO,CAAA;AAAA,UACP,WAAA,EAAa,cAAA,CAAe,CAAA,CAAE,IAAI,CAAA;AAAA,UAClC,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAIA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AAEtB,IAAA,IAAI,WAAA,EAAa,QAAA,CAAS,CAAC,CAAA,EAAG;AAE9B,IAAA,MAAM,MAAA,GAAS,KAAA,CAAU,QAAA,EAAU,CAAA,CAAE,IAAI,CAAA;AACzC,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,KAAA,EAAO,CAAA;AAAA,QACP,WAAA,EAAa,cAAA,CAAe,CAAA,CAAE,IAAI,CAAA;AAAA,QAClC,QAAQ,MAAA,CAAO;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,UAAA,CAAW,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,WAAA,GAAc,EAAE,WAAW,CAAA;AAGvD,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,CAAK,MAAM,OAAA,EAAS,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,EAC5D;AAEA,EAAA,OAAO,IAAA;AACT;AA3iBA,IA6BM,MAAA,EACA,UAAA,EAEA,cAAA,EAeA,aAAA,EA+CF,cAAA,EAqHA,kBAAA;AAnNJ,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAOA,IAAA,UAAA,EAAA;AACA,IAAA,cAAA,EAAA;AACA,IAAA,oBAAA,EAAA;AAoBA,IAAM,SAAkB,EAAC;AACzB,IAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAYvD,IAAA,YAAA,CAAa,KAAK,CAAA;AAGlB,IAAM,aAAA,uBAAoB,GAAA,EAAqB;AA+C/C,IAAI,cAAA,GAAgC,IAAA;AAqHpC,IAAI,kBAAA,GAAqB,KAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnMlB,SAAS,mBAAA,CACd,UACA,KAAA,EACM;AACN,EAAAC,gBAAAA,GAAkB,QAAA;AAGlB,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,qBAAA,EAAsB;AAAA,EACxB;AACF;AAyDA,SAAS,eAAe,MAAA,EAA6B;AACnD,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,QAAA;AAE7B,EAAA,IAAI,CAACA,gBAAAA,EAAiB;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,aAAa,IAAI,CAAA;AAElC,EAAA,IAAI,QAAA,EAAU;AAEZ,IAAA,gBAAA,CAAiBA,gBAAe,CAAA;AAGhC,IAAAA,gBAAAA,CAAgB,KAAK,QAAA,CAAS,OAAA;AAC9B,IAAAA,gBAAAA,CAAgB,QAAQ,QAAA,CAAS,MAAA;AAGjC,IAAAA,gBAAAA,CAAgB,cAAc,EAAC;AAC/B,IAAAA,gBAAAA,CAAgB,uBAAuB,EAAC;AACxC,IAAAA,iBAAgB,mBAAA,GAAsB,KAAA;AACtC,IAAAA,iBAAgB,eAAA,GAAkB,EAAA;AAElC,IAAAA,gBAAAA,CAAgB,oBAAA,EAAA;AAChB,IAAAA,iBAAgB,YAAA,GAAe,IAAA;AAG/B,IAAAA,gBAAAA,CAAgB,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAEtD,IAAA,cAAA,CAAeA,gBAAe,CAAA;AAAA,EAChC;AACF;AAKO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAA,CAAO,gBAAA,CAAiB,YAAY,cAAc,CAAA;AAAA,EACpD;AACF;AA3HA,IAaIA,gBAAAA;AAbJ,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAIA,IAAA,UAAA,EAAA;AACA,IAAA,cAAA,EAAA;AAQA,IAAIA,gBAAAA,GAA4C,IAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACbhD,IAAAC,SAAAA,GAAA,KAAA,CAAA;AAAA,EAAA,kBAAA,GAAA;AAAA,IAAAR,WAAAA,EAAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACmBO,SAAS,YAAA,GAAuC;AAIrD,EAAA,IAAI,OAAO,qBAAqB,UAAA,EAAY;AAe1C,IAAA,IAASS,gBAAT,WAAwB;AAEtB,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,KAAA,EAAO;AACpC,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,OAAA,GAAU,MAAA;AAAA,MACZ;AAEA,MAAA,MAAM,OAAO,2BAAA,EAA4B;AAMzC,MAAA,IAAI,CAAC,KAAA,IAAS,IAAA,EAAM,KAAA,GAAQ,IAAA;AAG5B,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,QAAA,MAAM,EAAA,GACH,UAAA,CACE,QAAA,KAED,UAAA,CACA,WAAW,EAAC,CAAA;AAChB,QAAA,EAAA,CAAG,cAAA,GAAA,CAAmB,EAAA,CAAG,cAAA,IAA6B,CAAA,IAAK,CAAA;AAAA,MAC7D;AAGA,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAEzC,QAAA,IAAI,QAAQ,KAAA,IAAS,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,YAAY,IAAA,EAAM;AAC5D,UAAA,MAAA,CAAO,IAAA;AAAA,YACL;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,IAAA,IAAQ,KAAA,IAAS,IAAA,KAAS,KAAA,GAAS,OAAA,GAAsB,MAAA;AAAA,IAClE,CAAA;AAxCA,IAAA,IAAI,KAAA,GAAkC,IAAA;AACtC,IAAA,IAAI,OAAA;AAyCJ,IAAAA,aAAAA,CAAa,MAAA,GAAS,SAAS,cAAA,CAAe,KAAA,EAAyB;AAErE,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,MAAM,OAAO,IAAA;AAG7C,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,QAAA,MAAM,EAAA,GACH,UAAA,CACE,QAAA,KAED,UAAA,CACA,WAAW,EAAC,CAAA;AAChB,QAAA,EAAA,CAAG,eAAA,GAAA,CAAoB,EAAA,CAAG,eAAA,IAA8B,CAAA,IAAK,CAAA;AAAA,MAC/D;AAGA,MAAA,OAAA,GAAU,KAAA,CAAM,QAAA;AAGhB,MAAA,IAAI,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,YAAA,EAAa;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAA,OAAOA,aAAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAO,gBAAA,EAAoB;AAEjC,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AAEA,EAAA,UAAA,CAAW,MAAA,GAAS,SAAS,YAAA,CAAa,KAAA,EAAyB;AAGjE,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,MAAM,EAAA,GACH,UAAA,CACE,QAAA,KAED,UAAA,CACA,WAAW,EAAC,CAAA;AAChB,MAAA,EAAA,CAAG,eAAA,GAAA,CAAoB,EAAA,CAAG,eAAA,IAA8B,CAAA,IAAK,CAAA;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,QAAQ,CAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,UAAA;AACT;AAiBA,SAAS,mBAAA,GAAuC;AAK9C,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,IAAI,OAAO,qBAAqB,UAAA,EAAY;AAC1C,MAAA,cAAA,GAAiB,YAAA,EAAsB;AACvC,MAAA,wBAAA,GAA2B,KAAA;AAAA,IAC7B,CAAA,MAAO;AAIL,MAAA,cAAA,GAAiB,YAAA,EAAsB;AACvC,MAAA,wBAAA,GAA2B,IAAA;AAAA,IAC7B;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAKA,EAAA,IAAI,wBAAA,IAA4B,OAAO,gBAAA,KAAqB,UAAA,EAAY;AACtE,IAAA,MAAM,OAAO,YAAA,EAAsB;AACnC,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,wBAAA,GAA2B,KAAA;AAAA,EAC7B;AAKA,EAAA,IAAI,CAAC,wBAAA,IAA4B,OAAO,gBAAA,KAAqB,UAAA,EAAY;AACvE,IAAA,MAAM,WAAW,YAAA,EAAsB;AACvC,IAAA,cAAA,GAAiB,QAAA;AACjB,IAAA,wBAAA,GAA2B,IAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,cAAA;AACT;AAtLA,IAoII,gBACA,wBAAA,EAmDS,aAAA;AAxLb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAOA,IAAA,cAAA,EAAA;AAEA,IAAA,WAAA,EAAA;AA4HA,IAAI,wBAAA,GAA2B,KAAA;AAmDxB,IAAM,iBAAkC,MAAM;AACnD,MAAA,SAAS,IAAA,GAAO;AAId,QAAA,MAAM,CAAA,GAAI,qBAAoB,EAAE;AAChC,QAAA,OAAO,CAAA,KAAM,SAAY,IAAA,GAAO,CAAA;AAAA,MAClC;AACA,MAAA,IAAA,CAAK,MAAA,GAAS,SAAS,MAAA,CAAO,KAAA,EAA+B;AAC3D,QAAA,mBAAA,EAAoB,CAAE,OAAO,KAAK,CAAA;AAClC,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,GAAG;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjMH,cAAA,EAAA;AAOA,cAAA,EAAA;AACA,WAAA,EAAA;AACA,aAAA,EAAA;AACA,oBAAA,EAAA;AA4IAD,SAAAA,EAAAA;AACA,WAAA,EAAA;AA4EA,aAAA,EAAA;AAvNA,IAAME,eAAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAEvD,IAAI,kBAAA,GAAqB,CAAA;AAGzB,IAAM,eAAA,uBAAsB,OAAA,EAAoC;AAGhE,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,kBAAkB,CAAA;AAcpD,SAAS,oBAAA,CACP,aACA,QAAA,EACA;AACA,EAAC,WAAA,CAAmC,cAAc,CAAA,GAAI,MAAM;AAI1D,IAAA,MAAM,SAAoB,EAAC;AAC3B,IAAA,IAAI;AACF,MAAA,kBAAA,CAAmB,WAAW,CAAA;AAAA,IAChC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAIA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,gBAAA,CAAiB,GAAG,CAAA;AACpD,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG;AACvC,QAAA,IAAI;AACF,UAAA,MAAM,OAAQ,CAAA,CACX,eAAA;AACH,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,IAAI;AACF,cAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,YACvB,SAAS,GAAA,EAAK;AACZ,cAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,YACjB;AACA,YAAA,IAAI;AACF,cAAA,OAAQ,CAAA,CACL,eAAA;AAAA,YACL,SAAS,GAAA,EAAK;AACZ,cAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,YACjB;AAAA,UACF;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,gBAAA,CAAiB,QAA6B,CAAA;AAAA,IAChD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,MAAM,IAAI,cAAA,CAAe,MAAA,EAAQ,CAAA,2BAAA,CAA6B,CAAA;AAAA,MAChE,CAAA,MAAA,IAAW,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAChD,QAAA,KAAA,MAAW,GAAA,IAAO,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,yBAAyB,GAAG,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,aACJ,MAAA,CAAO,wBAAA,CAAyB,WAAA,EAAa,WAAW,KACxD,MAAA,CAAO,wBAAA;AAAA,MACL,MAAA,CAAO,eAAe,WAAW,CAAA;AAAA,MACjC;AAAA,KACF,IACA,MAAA,CAAO,wBAAA,CAAyB,OAAA,CAAQ,WAAW,WAAW,CAAA;AAEhE,IAAA,IAAI,UAAA,KAAe,UAAA,CAAW,GAAA,IAAO,UAAA,CAAW,GAAA,CAAA,EAAM;AACpD,MAAA,MAAA,CAAO,cAAA,CAAe,aAAa,WAAA,EAAa;AAAA,QAC9C,GAAA,EAAK,UAAA,CAAW,GAAA,GACZ,WAAyB;AACvB,UAAA,OAAO,UAAA,CAAW,GAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA,QAClC,CAAA,GACA,KAAA,CAAA;AAAA,QACJ,GAAA,EAAK,SAAyB,KAAA,EAAe;AAC3C,UAAA,IAAI,UAAU,EAAA,IAAM,eAAA,CAAgB,GAAA,CAAI,IAAI,MAAM,QAAA,EAAU;AAC1D,YAAA,IAAI;AACF,cAAA,kBAAA,CAAmB,WAAW,CAAA;AAAA,YAChC,SAAS,CAAA,EAAG;AACV,cAAA,IAAI,QAAA,CAAS,eAAe,MAAM,CAAA;AAClC,cAAA,IAAI,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAC3B,gBAAA,MAAA,CAAO,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAAA,YAC1C;AAEA,YAAA,IAAI;AACF,cAAA,gBAAA,CAAiB,QAA6B,CAAA;AAAA,YAChD,SAAS,CAAA,EAAG;AACV,cAAA,IAAI,QAAA,CAAS,eAAe,MAAM,CAAA;AAClC,cAAA,IAAI,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAC3B,gBAAA,MAAA,CAAO,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAAA,YAC1C;AAAA,UACF;AACA,UAAA,IAAI,WAAW,GAAA,EAAK;AAClB,YAAA,OAAO,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,UACxC;AAAA,QACF,CAAA;AAAA,QACA,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAgBA,SAAS,aAAA,CACP,WAAA,EACA,WAAA,EACA,OAAA,EACA;AAEA,EAAA,MAAM,SAAA,GAA+B,CAAC,KAAA,EAAO,GAAA,KAAQ;AACnD,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAClC,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,QAAA,EAAU,YAAA;AAAA,MACV,IAAA,EAAM,aAAA;AAAA,MACN,OAAO,EAAC;AAAA,MACR,GAAA,EAAK;AAAA,KACP;AACA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,QAAA,EACE,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,GACzB,CAAC,WAAW,CAAA,GACZ,CAAC,GAAA,EAAK,WAAW;AAAA;AACzB,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAA,CAAO,cAAA,CAAe,WAAW,MAAA,EAAQ;AAAA,IACvC,KAAA,EAAO,YAAY,IAAA,IAAQ;AAAA,GAC5B,CAAA;AAGD,EAAA,MAAM,eAAA,GAAmB,YAAmC,cAAc,CAAA;AAC1E,EAAA,IAAI,iBAAiB,eAAA,EAAgB;AAErC,EAAA,IAAI,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,WAAW,CAAA;AAE9C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,kBAAA,CAAmB,WAAW,CAAA;AAC9B,IAAA,IAAI;AACF,MAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,IAC3B,SAAS,CAAA,EAAG;AAEV,MAAA,IAAI,OAAA,CAAQ,IAAI,QAAA,KAAa,YAAA;AAC3B,QAAA,MAAA,CAAO,IAAA,CAAK,+BAA+B,CAAC,CAAA;AAAA,IAChD;AAEA,IAAA,QAAA,CAAS,EAAA,GAAK,SAAA;AACd,IAAA,QAAA,CAAS,oBAAA,EAAA;AACT,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,QAAA,CAAS,uBAAuB,EAAC;AACjC,IAAA,QAAA,CAAS,mBAAA,GAAsB,KAAA;AAC/B,IAAA,QAAA,CAAS,MAAA,GAAS,IAAA;AAElB,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,CAAQ,aAAA,KAAkB,SAAA,EAAW;AACzD,MAAA,QAAA,CAAS,gBAAgB,OAAA,CAAQ,aAAA;AAAA,IACnC;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,EAAE,kBAAkB,CAAA;AAC/C,IAAA,QAAA,GAAW,uBAAA,CAAwB,WAAA,EAAa,SAAA,EAAW,IAAI,WAAW,CAAA;AAC1E,IAAA,eAAA,CAAgB,GAAA,CAAI,aAAa,QAAQ,CAAA;AACzC,IAAA,QAAA,CAAS,MAAA,GAAS,IAAA;AAElB,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,CAAQ,aAAA,KAAkB,SAAA,EAAW;AACzD,MAAA,QAAA,CAAS,gBAAgB,OAAA,CAAQ,aAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,oBAAA,CAAqB,aAAa,QAAQ,CAAA;AAC1C,EAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,EAAA,eAAA,CAAgB,KAAA,EAAM;AACxB;AAqCO,SAAS,aAAa,MAAA,EAA4B;AACvD,EAAA,oBAAA,CAAqB,SAAS,CAAA;AAC9B,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,OAAO,MAAA,CAAO,SAAA,KAAc,UAAA,EAAY;AAC1C,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,WAAA,GACJ,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GACnB,SAAS,cAAA,CAAe,MAAA,CAAO,IAAI,CAAA,GACnC,MAAA,CAAO,IAAA;AACb,EAAA,IAAI,CAAC,aAAa,MAAM,IAAI,MAAM,CAAA,wBAAA,EAA2B,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAG1E,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAKA,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,UAAA;AACV,IAAA,IAAI,CAAA,CAAEA,eAAc,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,aAAA,CAAc,WAAA,EAAa,OAAO,SAAA,EAAW;AAAA,IAC3C,eAAe,MAAA,CAAO;AAAA,GACvB,CAAA;AACH;AAsBA,eAAsB,UAAU,MAAA,EAAkC;AAChE,EAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC/D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GACJ,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GACnB,SAAS,cAAA,CAAe,MAAA,CAAO,IAAI,CAAA,GACnC,MAAA,CAAO,IAAA;AACb,EAAA,IAAI,CAAC,aAAa,MAAM,IAAI,MAAM,CAAA,wBAAA,EAA2B,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAG1E,EAAA,MAAM,EAAE,WAAA,EAAAC,YAAAA,EAAa,KAAA,EAAAC,MAAAA,EAAO,uBAAAC,sBAAAA,EAAuB,YAAA,EAAAC,aAAAA,EAAa,GAC9D,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,UAAA,EAAA,EAAA,aAAA,CAAA,CAAA;AAER,EAAAH,YAAAA,EAAY;AACZ,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAE7B,IAAAC,OAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAA,EAAS,EAAE,SAAS,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAcC,sBAAAA,EAAsB;AAGjE,EAAA,MAAM,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW,GAAA;AACxE,EAAA,MAAM,QAAA,GAAWC,cAAa,IAAI,CAAA;AAClC,EAAA,IAAI,CAAC,QAAA,EAAU;AAIb,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,+CAA+C,IAAI,CAAA,8EAAA;AAAA,OACrD;AAAA,IACF;AAGA,IAAA,aAAA,CAAc,WAAA,EAAa,OAAO,EAAE,IAAA,EAAM,OAAO,QAAA,EAAU,IAAG,CAAA,EAAI;AAAA,MAChE,aAAA,EAAe;AAAA,KAChB,CAAA;AAGD,IAAA,MAAMC,SAAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,WAAW,CAAA;AAChD,IAAA,IAAI,CAACA,SAAAA,EAAU,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACrE,IAAA,mBAAA,CAAoBA,SAAmC,CAAA;AACvD,IAAA,oBAAA,EAAqB;AACrB,IAAA;AAAA,EACF;AAIA,EAAA,aAAA,CAAc,WAAA,EAAa,SAAS,OAAA,EAA8B;AAAA,IAChE,aAAA,EAAe;AAAA,GAChB,CAAA;AAGD,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,WAAW,CAAA;AAChD,EAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACrE,EAAA,mBAAA,CAAoB,QAAmC,CAAA;AACvD,EAAA,oBAAA,EAAqB;AACvB;;;AC1XA,cAAA,EAAA;AACA,cAAA,EAAA;AAKA,cAAA,EAAA;AACA,aAAA,EAAA;AA2CO,SAAS,MAAS,YAAA,EAA2B;AAElD,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,EAAA,MAAM,cAAc,QAAA,CAAS,WAAA;AAI7B,EAAA,IAAI,KAAA,GAAQ,SAAS,eAAA,EAAiB;AACpC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,6CAAA,EAAgD,KAAK,CAAA,2BAAA,EACvB,QAAA,CAAS,eAAe,CAAA,qKAAA;AAAA,KAIxD;AAAA,EACF;AAGA,EAAA,SAAA;AAAA,IACE,SAAS,QAAA,CAAS,eAAA;AAAA,IAClB;AAAA,GACF;AACA,EAAA,QAAA,CAAS,eAAA,GAAkB,KAAA;AAG3B,EAAA,IAAI,SAAS,mBAAA,EAAqB;AAEhC,IAAA,IAAI,CAAC,QAAA,CAAS,oBAAA,CAAqB,QAAA,CAAS,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,iDAAiD,KAAK,CAAA,yDAAA,EACM,SAAS,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAC,CAAA,kIAAA;AAAA,OAGtG;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,QAAA,CAAS,oBAAA,CAAqB,KAAK,KAAK,CAAA;AAAA,EAC1C;AAIA,EAAA,IAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAKlC,IAAA,IAAI,QAAA,CAAS,WAAW,QAAA,EAAU;AAChC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,sDAAsD,KAAK,CAAA,yFAAA;AAAA,OAE7D;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,YAAA,EAAc,QAAQ,CAAA;AAGnD,EAAA,WAAA,CAAY,KAAK,CAAA,GAAI,IAAA;AAErB,EAAA,OAAO,IAAA;AACT;AAMA,SAAS,eAAA,CACP,cACA,QAAA,EACU;AACV,EAAA,IAAI,KAAA,GAAQ,YAAA;AAGZ,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA+B;AAGnD,EAAA,SAAS,IAAA,GAAU;AACjB,IAAC,KAAkB,YAAA,GAAe,IAAA;AAGlC,IAAA,MAAM,OAAO,kBAAA,EAAmB;AAChC,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,mBAAA,KAAwB,MAAA,EAAW;AAClD,MAAA,IAAI,CAAC,IAAA,CAAK,kBAAA,EAAoB,IAAA,CAAK,kBAAA,uBAAyB,GAAA,EAAI;AAChE,MAAA,IAAA,CAAK,kBAAA,CAAmB,IAAI,IAAgB,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAC,KAAkB,QAAA,GAAW,OAAA;AAK9B,EAAC,KAAmD,MAAA,GAAS,QAAA;AAG7D,EAAA,IAAA,CAAK,GAAA,GAAM,CAAC,iBAAA,KAAkD;AAG5D,IAAA,MAAM,cAAc,kBAAA,EAAmB;AACvC,IAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,qNAAA;AAAA,OAGF;AAAA,IACF;AAGA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,OAAO,sBAAsB,UAAA,EAAY;AAK3C,MAAA,MAAM,OAAA,GAAU,iBAAA;AAChB,MAAA,QAAA,GAAW,QAAQ,KAAK,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,iBAAA;AAAA,IACb;AAGA,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAA,EAAG;AAIhC,IAAA,IAAIjB,qBAAmB,EAAG;AAGxB,MAAA,KAAA,GAAQ,QAAA;AACR,MAAA;AAAA,IACF;AAGA,IAAA,KAAA,GAAQ,QAAA;AAQR,IAAA,MAAM,aAAc,IAAA,CAAkB,QAAA;AAGtC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,CAAA,IAAK,UAAA,EAAY;AAIzC,QAAA,IAAI,OAAA,CAAQ,oBAAoB,KAAA,EAAO;AACvC,QAAA,IAAI,CAAC,QAAQ,gBAAA,EAAkB;AAG7B,UAAA,OAAA,CAAQ,gBAAA,GAAmB,IAAA;AAC3B,UAAA,MAAM,UAAU,OAAA,CAAQ,iBAAA;AACxB,UAAA,IAAI,OAAA,EAAS,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAA;AAAA;AAE1C,YAAA,eAAA,CAAgB,QAAQ,MAAM;AAC5B,cAAA,OAAA,CAAQ,gBAAA,GAAmB,KAAA;AAC3B,cAAA,OAAA,CAAQ,YAAA,IAAe;AAAA,YACzB,CAAC,CAAA;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAIA,IAAA,MAAM,kBAAA,GAAqB,UAAA;AAC3B,IAAA,MAAM,kBAAA,GAAqB,kBAAA,EAAoB,GAAA,CAAI,QAAQ,CAAA;AAC3D,IAAA,MAAM,kBAAA;AAAA;AAAA,MAEJ,kBAAA,KAAuB,MAAA,IACvB,QAAA,CAAS,eAAA,KAAoB;AAAA,KAAA;AAE/B,IAAA,IAAI,kBAAA,IAAsB,CAAC,QAAA,CAAS,gBAAA,EAAkB;AACpD,MAAA,QAAA,CAAS,gBAAA,GAAmB,IAAA;AAI5B,MAAA,MAAM,OAAO,QAAA,CAAS,iBAAA;AACtB,MAAA,IAAI,IAAA,EAAM,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA;AAAA;AAEpC,QAAA,eAAA,CAAgB,QAAQ,MAAM;AAC5B,UAAA,QAAA,CAAS,gBAAA,GAAmB,KAAA;AAC5B,UAAA,QAAA,CAAS,YAAA,IAAe;AAAA,QAC1B,CAAC,CAAA;AAAA,IACL;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,IAAA;AACT;;;AC3QA,cAAA,EAAA;AAEA,IAAM,YAAA,uBAAmB,OAAA,EAAkD;AAE3E,SAAS,eAAe,QAAA,EAAoD;AAC1E,EAAA,IAAI,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA;AACrC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA,uBAAY,GAAA,EAAI;AAChB,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,KAAA;AACT;AAcO,SAAS,MAAA,CACd,QAIA,GAAA,EACa;AAEb,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,OAAO,MAAA,KAAW,UAAA,EAAY;AACrD,IAAA,MAAMkB,SAAS,MAAA,EAAsB;AACrC,IAAA,IAAIA,MAAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,IAAA,MAAMD,YAAW,2BAAA,EAA4B;AAC7C,IAAA,IAAI,CAACA,SAAAA,EAAU;AACb,MAAA,OAAOC,MAAAA;AAAA,IACT;AAEA,IAAA,MAAMC,MAAAA,GAAQ,eAAeF,SAAQ,CAAA;AACrC,IAAA,IAAIE,OAAM,GAAA,CAAID,MAAgB,GAAG,OAAOC,MAAAA,CAAM,IAAID,MAAgB,CAAA;AAElE,IAAAC,MAAAA,CAAM,GAAA,CAAID,MAAAA,EAAkBA,MAAgB,CAAA;AAC5C,IAAA,OAAOA,MAAAA;AAAA,EACT;AAIA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,IAAc,EAAE,WAAW,MAAA,CAAA,EAAS;AAExD,IAAA,KAAA,GAAS,MAAA,EAAqB;AAAA,EAChC,CAAA,MAAO;AACL,IAAA,KAAA,GAAS,QAAmC,KAAA,IAAU,MAAA;AAAA,EACxD;AACA,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAG1B,EAAA,MAAM,WAAW,2BAAA,EAA4B;AAC7C,EAAA,IAAI,CAAC,QAAA,EAAU;AAEb,IAAA,OAAQ,IAAyB,KAAY,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,KAAA,GAAQ,eAAe,QAAQ,CAAA;AAGrC,EAAA,IAAI,KAAA,CAAM,GAAA,CAAI,KAAgB,CAAA,EAAG;AAC/B,IAAA,OAAO,KAAA,CAAM,IAAI,KAAgB,CAAA;AAAA,EACnC;AAGA,EAAA,MAAM,MAAA,GAAU,IAAyB,KAAY,CAAA;AACrD,EAAA,KAAA,CAAM,GAAA,CAAI,OAAkB,MAAiB,CAAA;AAC7C,EAAA,OAAO,MAAA;AACT","file":"index.js","sourcesContent":["/**\n * Invariant assertion utilities for correctness checking\n * Production-safe: invariants are enforced at build-time or with minimal overhead\n *\n * Core principle: fail fast when invariants are violated\n * All functions throw descriptive errors for debugging\n */\n\n/**\n * Assert a condition; throw with context if false\n * @internal\n */\nexport function invariant(\n condition: boolean,\n message: string,\n context?: Record<string, unknown>\n): asserts condition {\n if (!condition) {\n const contextStr = context ? '\\n' + JSON.stringify(context, null, 2) : '';\n throw new Error(`[Askr Invariant] ${message}${contextStr}`);\n }\n}\n\n/**\n * Assert object property exists and has correct type\n * @internal\n */\nexport function assertProperty<T extends object, K extends keyof T>(\n obj: T,\n prop: K,\n expectedType?: string\n): asserts obj is T & Required<Pick<T, K>> {\n invariant(prop in obj, `Object missing required property '${String(prop)}'`, {\n object: obj,\n });\n\n if (expectedType) {\n const actualType = typeof obj[prop];\n invariant(\n actualType === expectedType,\n `Property '${String(prop)}' has type '${actualType}', expected '${expectedType}'`,\n { value: obj[prop], expectedType }\n );\n }\n}\n\n/**\n * Assert a reference is not null/undefined\n * @internal\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message: string\n): asserts value is T {\n invariant(value !== null && value !== undefined, message, { value });\n}\n\n/**\n * Assert a task runs exactly once atomically\n * Useful for verifying lifecycle events fire precisely when expected\n * @internal\n */\nexport class Once {\n private called = false;\n private calledAt: number | null = null;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\n }\n\n check(): boolean {\n return this.called;\n }\n\n mark(): void {\n invariant(\n !this.called,\n `${this.name} called multiple times (previously at ${this.calledAt}ms)`,\n { now: Date.now() }\n );\n this.called = true;\n this.calledAt = Date.now();\n }\n\n reset(): void {\n this.called = false;\n this.calledAt = null;\n }\n}\n\n/**\n * Assert a value falls in an enumerated set\n * @internal\n */\nexport function assertEnum<T extends readonly unknown[]>(\n value: unknown,\n allowedValues: T,\n fieldName: string\n): asserts value is T[number] {\n invariant(\n allowedValues.includes(value),\n `${fieldName} must be one of [${allowedValues.join(', ')}], got ${JSON.stringify(value)}`,\n { value, allowed: allowedValues }\n );\n}\n\n/**\n * Assert execution context (scheduler, component, etc)\n * @internal\n */\nexport function assertContext(\n actual: unknown,\n expected: unknown,\n contextName: string\n): asserts actual is typeof expected {\n invariant(\n actual === expected,\n `Invalid ${contextName} context. Expected ${expected}, got ${actual}`,\n { expected, actual }\n );\n}\n\n/**\n * Assert scheduling precondition (not reentering, not during render, etc)\n * @internal\n */\nexport function assertSchedulingPrecondition(\n condition: boolean,\n violationMessage: string\n): asserts condition {\n invariant(condition, `[Scheduler Precondition] ${violationMessage}`);\n}\n\n/**\n * Assert state precondition\n * @internal\n */\nexport function assertStatePrecondition(\n condition: boolean,\n violationMessage: string\n): asserts condition {\n invariant(condition, `[State Precondition] ${violationMessage}`);\n}\n\n/**\n * Verify AbortController lifecycle\n * @internal\n */\nexport function assertAbortControllerState(\n signal: AbortSignal,\n expectedAborted: boolean,\n context: string\n): void {\n invariant(\n signal.aborted === expectedAborted,\n `AbortSignal ${expectedAborted ? 'should be' : 'should not be'} aborted in ${context}`,\n { actual: signal.aborted, expected: expectedAborted }\n );\n}\n\n/**\n * Guard: throw if callback is null when it shouldn't be\n * Used for notifyUpdate, event handlers, etc.\n * @internal\n */\nexport function assertCallbackAvailable<\n T extends (...args: unknown[]) => unknown,\n>(callback: T | null | undefined, callbackName: string): asserts callback is T {\n invariant(\n callback !== null && callback !== undefined,\n `${callbackName} callback is required but not available`,\n { callback }\n );\n}\n\n/**\n * Verify evaluation generation prevents stale evaluations\n * @internal\n */\nexport function assertEvaluationGeneration(\n current: number,\n latest: number,\n context: string\n): void {\n invariant(\n current === latest,\n `Stale evaluation generation in ${context}: current ${current}, latest ${latest}`,\n { current, latest }\n );\n}\n\n/**\n * Verify mounted flag state\n * @internal\n */\nexport function assertMountedState(\n mounted: boolean,\n expectedMounted: boolean,\n context: string\n): void {\n invariant(\n mounted === expectedMounted,\n `Invalid mounted state in ${context}: expected ${expectedMounted}, got ${mounted}`,\n { mounted, expected: expectedMounted }\n );\n}\n\n/**\n * Verify no null target when rendering\n * @internal\n */\nexport function assertRenderTarget(\n target: Element | null,\n context: string\n): asserts target is Element {\n invariant(target !== null, `Cannot render in ${context}: target is null`, {\n target,\n });\n}\n","/**\n * Centralized logger interface\n * - Keeps production builds silent for debug/warn/info messages\n * - Ensures consistent behavior across the codebase\n * - Protects against missing `console` in some environments\n */\n\nfunction callConsole(method: string, args: unknown[]): void {\n const c = typeof console !== 'undefined' ? (console as unknown) : undefined;\n if (!c) return;\n const fn = (c as Record<string, unknown>)[method];\n if (typeof fn === 'function') {\n try {\n (fn as (...a: unknown[]) => unknown).apply(console, args as unknown[]);\n } catch {\n // ignore logging errors\n }\n }\n}\n\nexport const logger = {\n debug: (...args: unknown[]) => {\n if (process.env.NODE_ENV === 'production') return;\n callConsole('debug', args);\n },\n\n info: (...args: unknown[]) => {\n if (process.env.NODE_ENV === 'production') return;\n callConsole('info', args);\n },\n\n warn: (...args: unknown[]) => {\n if (process.env.NODE_ENV === 'production') return;\n callConsole('warn', args);\n },\n\n error: (...args: unknown[]) => {\n callConsole('error', args);\n },\n};\n","/**\n * Serialized update scheduler — safer design (no inline execution, explicit flush)\n *\n * Key ideas:\n * - Never execute a task inline from `enqueue`.\n * - `flush()` is explicit and non-reentrant.\n * - `runWithSyncProgress()` allows enqueues temporarily but does not run tasks\n * inline; it runs `fn` and then does an explicit `flush()`.\n * - `waitForFlush()` is race-free with a monotonic `flushVersion`.\n */\n\nimport { assertSchedulingPrecondition, invariant } from '../dev/invariant';\nimport { logger } from '../dev/logger';\n\nconst MAX_FLUSH_DEPTH = 50;\n\ntype Task = () => void;\n\nfunction isBulkCommitActive(): boolean {\n try {\n const fb = (\n globalThis as {\n __ASKR_FASTLANE?: { isBulkCommitActive?: () => boolean };\n }\n ).__ASKR_FASTLANE;\n return typeof fb?.isBulkCommitActive === 'function'\n ? !!fb.isBulkCommitActive()\n : false;\n } catch (e) {\n void e;\n return false;\n }\n}\n\nexport class Scheduler {\n private q: Task[] = [];\n private head = 0;\n\n private running = false;\n private inHandler = false;\n private depth = 0;\n private executionDepth = 0; // for compat with existing diagnostics\n\n // Monotonic flush version increments at end of each flush\n private flushVersion = 0;\n\n // Best-effort microtask kick scheduling\n private kickScheduled = false;\n\n // Escape hatch flag for runWithSyncProgress\n private allowSyncProgress = false;\n\n // Waiters waiting for flushVersion >= target\n private waiters: Array<{\n target: number;\n resolve: () => void;\n reject: (err: unknown) => void;\n timer?: ReturnType<typeof setTimeout>;\n }> = [];\n\n // Keep a lightweight taskCount for compatibility/diagnostics\n private taskCount = 0;\n\n enqueue(task: Task): void {\n assertSchedulingPrecondition(\n typeof task === 'function',\n 'enqueue() requires a function'\n );\n\n // Strict rule: during bulk commit, only allow enqueues if runWithSyncProgress enabled\n if (isBulkCommitActive() && !this.allowSyncProgress) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n '[Scheduler] enqueue() during bulk commit (not allowed)'\n );\n }\n return;\n }\n\n // Enqueue task and account counts\n this.q.push(task);\n this.taskCount++;\n\n // Microtask kick: best-effort, but avoid if we are in handler or running or bulk commit\n if (\n !this.running &&\n !this.kickScheduled &&\n !this.inHandler &&\n !isBulkCommitActive()\n ) {\n this.kickScheduled = true;\n queueMicrotask(() => {\n this.kickScheduled = false;\n if (this.running) return;\n if (isBulkCommitActive()) return;\n try {\n this.flush();\n } catch (err) {\n setTimeout(() => {\n throw err;\n });\n }\n });\n }\n }\n\n flush(): void {\n invariant(\n !this.running,\n '[Scheduler] flush() called while already running'\n );\n\n // Dev-only guard: disallow flush during bulk commit unless allowed\n if (process.env.NODE_ENV !== 'production') {\n if (isBulkCommitActive() && !this.allowSyncProgress) {\n throw new Error(\n '[Scheduler] flush() started during bulk commit (not allowed)'\n );\n }\n }\n\n this.running = true;\n this.depth = 0;\n let fatal: unknown = null;\n\n try {\n while (this.head < this.q.length) {\n this.depth++;\n if (\n process.env.NODE_ENV !== 'production' &&\n this.depth > MAX_FLUSH_DEPTH\n ) {\n throw new Error(\n `[Scheduler] exceeded MAX_FLUSH_DEPTH (${MAX_FLUSH_DEPTH}). Likely infinite update loop.`\n );\n }\n\n const task = this.q[this.head++];\n try {\n this.executionDepth++;\n task();\n this.executionDepth--;\n } catch (err) {\n // ensure executionDepth stays balanced\n if (this.executionDepth > 0) this.executionDepth = 0;\n fatal = err;\n break;\n }\n\n // Account for executed task in taskCount\n if (this.taskCount > 0) this.taskCount--;\n }\n } finally {\n this.running = false;\n this.depth = 0;\n this.executionDepth = 0;\n\n // Compact queue\n if (this.head >= this.q.length) {\n this.q.length = 0;\n this.head = 0;\n } else if (this.head > 0) {\n const remaining = this.q.length - this.head;\n // HOT PATH: compact in-place to avoid slice() allocations (GC tail spikes)\n for (let i = 0; i < remaining; i++) {\n this.q[i] = this.q[this.head + i];\n }\n this.q.length = remaining;\n this.head = 0;\n }\n\n // Advance flush epoch and resolve waiters\n this.flushVersion++;\n this.resolveWaiters();\n }\n\n if (fatal) throw fatal;\n }\n\n runWithSyncProgress<T>(fn: () => T): T {\n const prev = this.allowSyncProgress;\n this.allowSyncProgress = true;\n\n const g = globalThis as {\n queueMicrotask?: (...args: unknown[]) => void;\n setTimeout?: (...args: unknown[]) => unknown;\n };\n const origQueueMicrotask = g.queueMicrotask;\n const origSetTimeout = g.setTimeout;\n\n if (process.env.NODE_ENV !== 'production') {\n g.queueMicrotask = () => {\n throw new Error(\n '[Scheduler] queueMicrotask not allowed during runWithSyncProgress'\n );\n };\n g.setTimeout = () => {\n throw new Error(\n '[Scheduler] setTimeout not allowed during runWithSyncProgress'\n );\n };\n }\n\n // Snapshot flushVersion so we can ensure we always complete an epoch\n const startVersion = this.flushVersion;\n\n try {\n const res = fn();\n\n // Flush deterministically if tasks were enqueued (and we're not already running)\n if (!this.running && this.q.length - this.head > 0) {\n this.flush();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.q.length - this.head > 0) {\n throw new Error(\n '[Scheduler] tasks remain after runWithSyncProgress flush'\n );\n }\n }\n\n return res;\n } finally {\n // Restore guarded globals\n if (process.env.NODE_ENV !== 'production') {\n g.queueMicrotask = origQueueMicrotask;\n g.setTimeout = origSetTimeout;\n }\n\n // If no flush happened during the protected window, complete an epoch so\n // observers (tests) see progress even when fast-lane did synchronous work\n // without enqueuing tasks.\n try {\n if (this.flushVersion === startVersion) {\n this.flushVersion++;\n this.resolveWaiters();\n }\n } catch (e) {\n void e;\n }\n\n this.allowSyncProgress = prev;\n }\n }\n\n waitForFlush(targetVersion?: number, timeoutMs = 2000): Promise<void> {\n const target =\n typeof targetVersion === 'number' ? targetVersion : this.flushVersion + 1;\n if (this.flushVersion >= target) return Promise.resolve();\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n const ns =\n (\n globalThis as unknown as Record<string, unknown> & {\n __ASKR__?: Record<string, unknown>;\n }\n ).__ASKR__ || {};\n const diag = {\n flushVersion: this.flushVersion,\n queueLen: this.q.length - this.head,\n running: this.running,\n inHandler: this.inHandler,\n bulk: isBulkCommitActive(),\n namespace: ns,\n };\n reject(\n new Error(\n `waitForFlush timeout ${timeoutMs}ms: ${JSON.stringify(diag)}`\n )\n );\n }, timeoutMs);\n\n this.waiters.push({ target, resolve, reject, timer });\n });\n }\n\n getState() {\n // Provide the compatibility shape expected by diagnostics/tests\n return {\n queueLength: this.q.length - this.head,\n running: this.running,\n depth: this.depth,\n executionDepth: this.executionDepth,\n taskCount: this.taskCount,\n flushVersion: this.flushVersion,\n // New fields for optional inspection\n inHandler: this.inHandler,\n allowSyncProgress: this.allowSyncProgress,\n };\n }\n\n setInHandler(v: boolean) {\n this.inHandler = v;\n }\n\n isInHandler(): boolean {\n return this.inHandler;\n }\n\n isExecuting(): boolean {\n return this.running || this.executionDepth > 0;\n }\n\n // Clear pending synchronous tasks (used by fastlane enter/exit)\n clearPendingSyncTasks(): number {\n const remaining = this.q.length - this.head;\n if (remaining <= 0) return 0;\n\n if (this.running) {\n this.q.length = this.head;\n this.taskCount = Math.max(0, this.taskCount - remaining);\n queueMicrotask(() => {\n try {\n this.flushVersion++;\n this.resolveWaiters();\n } catch (e) {\n void e;\n }\n });\n return remaining;\n }\n\n this.q.length = 0;\n this.head = 0;\n this.taskCount = Math.max(0, this.taskCount - remaining);\n this.flushVersion++;\n this.resolveWaiters();\n return remaining;\n }\n\n private resolveWaiters() {\n if (this.waiters.length === 0) return;\n const ready: Array<() => void> = [];\n const remaining: typeof this.waiters = [];\n\n for (const w of this.waiters) {\n if (this.flushVersion >= w.target) {\n if (w.timer) clearTimeout(w.timer);\n ready.push(w.resolve);\n } else {\n remaining.push(w);\n }\n }\n\n this.waiters = remaining;\n for (const r of ready) r();\n }\n}\n\nexport const globalScheduler = new Scheduler();\n\nexport function isSchedulerExecuting(): boolean {\n return globalScheduler.isExecuting();\n}\n\nexport function scheduleEventHandler(handler: EventListener): EventListener {\n return (event: Event) => {\n globalScheduler.setInHandler(true);\n try {\n handler.call(null, event);\n } catch (error) {\n logger.error('[Askr] Event handler error:', error);\n } finally {\n globalScheduler.setInHandler(false);\n // If the handler enqueued tasks while we disallowed microtask kicks,\n // ensure we schedule a microtask to flush them now that the handler\n // has completed. This avoids tests timing out waiting for flush.\n const state = globalScheduler.getState();\n if ((state.queueLength ?? 0) > 0 && !state.running) {\n queueMicrotask(() => {\n try {\n if (!globalScheduler.isExecuting()) globalScheduler.flush();\n } catch (err) {\n setTimeout(() => {\n throw err;\n });\n }\n });\n }\n }\n };\n}\n","/**\n * Context system: lexical scope + render-time snapshots\n *\n * CORE SEMANTIC (Option A — Snapshot-Based):\n * ============================================\n * An async resource observes the context of the render that created it.\n * Context changes only take effect via re-render, not magically mid-await.\n *\n * This ensures:\n * - Deterministic behavior\n * - Concurrency safety\n * - Replayable execution\n * - Debuggability\n *\n * INVARIANTS:\n * - readContext() only works during component render (has currentContextFrame)\n * - Each render captures a context snapshot\n * - Async continuations see the snapshot from render start (frozen)\n * - Provider (Scope) creates a new frame that shadows parent\n * - Context updates require re-render to take effect\n */\n\nimport type { JSXElement } from '../common/jsx';\nimport type { Props } from '../common/props';\nimport { getCurrentComponentInstance } from './component';\nimport type { ComponentInstance } from './component';\n\nexport type ContextKey = symbol;\n\n// Lightweight VNode definition used for JSX typing in this module\ntype VNode = {\n type: string;\n props?: Record<string, unknown>;\n children?: (string | VNode | null | undefined | false)[];\n};\n\n// Union of allowed render return values (text, vnode, JSX element, etc.)\ntype Renderable =\n | JSXElement\n | VNode\n | string\n | number\n | null\n | undefined\n | false;\n\nexport interface Context<T> {\n readonly key: ContextKey;\n readonly defaultValue: T;\n // A Scope is a JSX-style element factory returning a JSXElement (component invocation)\n readonly Scope: (props: { value: unknown; children?: unknown }) => JSXElement;\n}\n\nexport interface ContextFrame {\n parent: ContextFrame | null;\n // Lazily allocate `values` Map only when a provider sets values or a read occurs.\n values: Map<ContextKey, unknown> | null;\n}\n\n// Symbol to mark vnodes that need frame restoration\nexport const CONTEXT_FRAME_SYMBOL = Symbol('__tempoContextFrame__');\n\n// Global context frame stack (maintained during render)\n// INVARIANT: Must NEVER be non-null across an await boundary\nlet currentContextFrame: ContextFrame | null = null;\n\n// Async resource frame (maintained during async resource execution)\n// INVARIANT: Set only for synchronous execution steps, cleared in finally\n// This allows async resources to access their frozen render-time snapshot\nlet currentAsyncResourceFrame: ContextFrame | null = null;\n\n/**\n * Execute a function within a specific context frame.\n *\n * CORE PRIMITIVE for context restoration:\n * - Saves the current context\n * - Sets the provided frame as current\n * - Executes the function\n * - Restores the previous context in finally\n *\n * This ensures no context frame remains globally active across await.\n */\nexport function withContext<T>(frame: ContextFrame | null, fn: () => T): T {\n const oldFrame = currentContextFrame;\n currentContextFrame = frame;\n try {\n return fn();\n } finally {\n currentContextFrame = oldFrame;\n }\n}\n\n/**\n * Execute an async resource step within its frozen context snapshot.\n *\n * CRITICAL: This wrapper is applied only to synchronous execution steps of\n * an async resource (the initial call). We intentionally DO NOT restore\n * the resource frame for post-await continuations — continuations must not\n * observe or rely on a live resource frame. This keeps semantics simple and\n * deterministic: async resources see only their creation-time snapshot.\n */\nexport function withAsyncResourceContext<T>(\n frame: ContextFrame | null,\n fn: () => T\n): T {\n const oldFrame = currentAsyncResourceFrame;\n // Only set the frame for the synchronous execution step\n currentAsyncResourceFrame = frame;\n try {\n return fn();\n } finally {\n // Clear the frame to avoid exposing it across await boundaries\n currentAsyncResourceFrame = oldFrame;\n }\n}\n\nexport function defineContext<T>(defaultValue: T): Context<T> {\n const key = Symbol('AskrContext');\n\n return {\n key,\n defaultValue,\n Scope: (props: { value: unknown; children?: unknown }): JSXElement => {\n // Scope component: accepts an unknown value (tests often pass loosely typed values)\n // Cast to the expected T at the call site to preserve runtime behavior.\n const value = props.value as T;\n // Scope component: creates a new frame and renders children within it\n return {\n type: ContextScopeComponent,\n props: { key, value, children: props.children },\n } as JSXElement;\n },\n };\n}\n\nexport function readContext<T>(context: Context<T>): T {\n // Check render frame first (components), then async resource frame (resources)\n const frame = currentContextFrame || currentAsyncResourceFrame;\n\n if (!frame) {\n throw new Error(\n 'readContext() can only be called during component render or async resource execution. ' +\n 'Ensure you are calling this from inside your component or resource function.'\n );\n }\n\n let current: ContextFrame | null = frame;\n while (current) {\n // `values` may be null when no provider has created it yet — treat as empty\n const values = current.values;\n if (values && values.has(context.key)) {\n return values.get(context.key) as T;\n }\n current = current.parent;\n }\n return context.defaultValue;\n}\n\n/**\n * Internal component that manages context frame\n * Used by Context.Scope to provide shadowed value to children\n */\nfunction ContextScopeComponent(props: Props): Renderable {\n // Extract expected properties (we accept a loose shape so this can be used as a component type)\n const key = props['key'] as ContextKey;\n const value = props['value'];\n const children = props['children'] as Renderable;\n\n // Create a new frame with this value\n const instance = getCurrentComponentInstance();\n const parentFrame: ContextFrame | null = (() => {\n // Prefer the live render frame.\n // Note: the runtime executes component functions inside an empty \"render frame\"\n // whose parent points at the nearest provider chain. Even if this frame has no\n // values, it must still be used to preserve the parent linkage.\n if (currentContextFrame) return currentContextFrame;\n\n // If there is no live render frame (should be rare), fall back to the\n // instance's owner frame.\n if (instance && instance.ownerFrame) return instance.ownerFrame;\n\n // Do NOT fall back to the async snapshot stack here: that stack represents\n // unrelated async continuations and must not affect lexical provider chaining.\n return null;\n })();\n\n const newFrame: ContextFrame = {\n parent: parentFrame,\n values: new Map([[key, value]]),\n };\n\n // Helper: create a function-child invoker node (centralized cast)\n function createFunctionChildInvoker(\n fn: () => Renderable,\n frame: ContextFrame,\n owner: ComponentInstance | null\n ): Renderable {\n return {\n type: ContextFunctionChildInvoker,\n props: { fn, __frame: frame, __owner: owner },\n } as unknown as Renderable;\n }\n\n // The renderer will set ownerFrame on child component instances when they're created.\n // We mark vnodes with the frame so the renderer knows which frame to assign.\n if (Array.isArray(children)) {\n // Mark array elements with the frame. If an element is a function-child,\n // convert it into a lazy invoker so it's executed later inside the frame.\n return children.map((child) => {\n if (typeof child === 'function') {\n return createFunctionChildInvoker(\n child as () => Renderable,\n newFrame,\n getCurrentComponentInstance()\n );\n }\n return markWithFrame(child, newFrame);\n }) as unknown as Renderable;\n } else if (typeof children === 'function') {\n // If children is a function (render callback), do NOT execute it eagerly\n // during the parent render. Instead, return a small internal component\n // that will execute the function later (when it itself is rendered) and\n // will execute it within the provider frame so any reads performed during\n // that execution observe the provider's frame.\n return createFunctionChildInvoker(\n children as () => Renderable,\n newFrame,\n getCurrentComponentInstance()\n );\n } else if (children) {\n return markWithFrame(children, newFrame);\n }\n\n return null;\n}\n\n/**\n * Internal: Mark a vnode with a context frame\n * The renderer will restore this frame before executing component functions\n */\nfunction markWithFrame(node: Renderable, frame: ContextFrame): Renderable {\n // Recursively mark node and its subtree so nested provider/component\n // executions will restore the correct frame when they are rendered.\n if (typeof node === 'object' && node !== null) {\n const obj = node as Record<string | symbol, unknown>;\n obj[CONTEXT_FRAME_SYMBOL] = frame;\n\n // If the node is a VNode with children, recursively mark its children\n const children = obj.children as unknown;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as Renderable;\n if (child) {\n children[i] = markWithFrame(child, frame) as Renderable;\n }\n }\n } else if (children) {\n obj.children = markWithFrame(children as Renderable, frame) as Renderable;\n }\n }\n return node;\n}\n\n/**\n * Internal helper component: executes a function-child lazily inside the\n * provided frame and marks the returned subtree with that frame so later\n * component executions will restore the correct context frame.\n *\n * SNAPSHOT SEMANTIC: The frame passed here is the snapshot captured at render\n * time. Any resources created during this execution will observe this frozen\n * snapshot, ensuring deterministic behavior.\n */\nfunction ContextFunctionChildInvoker(props: {\n fn: () => Renderable;\n __frame: ContextFrame;\n __owner?: ComponentInstance | null;\n}): Renderable {\n const { fn, __frame } = props;\n\n // Execute the function-child within the provider frame.\n // The owner's ownerFrame is already set by the renderer when the component was created.\n // Any resources started during this execution will capture this frame as their\n // snapshot, ensuring they see the context values from this render, not future renders.\n const res = withContext(__frame, () => fn());\n\n // Mark the result so the renderer knows to set ownerFrame on child instances\n if (res) return markWithFrame(res, __frame);\n return null;\n}\n\n/**\n * Push a new context frame (for render entry)\n * Called by component runtime when render starts\n */\nexport function pushContextFrame(): ContextFrame {\n // Lazily allocate the `values` map to avoid per-render allocations when\n // components do not use context. The map will be created when a provider\n // sets a value or when a read discovers no map and needs to behave as empty.\n const frame: ContextFrame = {\n parent: currentContextFrame,\n values: null,\n };\n currentContextFrame = frame;\n return frame;\n}\n\n/**\n * Pop context frame (for render exit)\n * Called by component runtime when render ends\n */\nexport function popContextFrame(): void {\n if (currentContextFrame) {\n currentContextFrame = currentContextFrame.parent;\n }\n}\n\n/**\n * Get the current context frame for inspection (used by tests/diagnostics only)\n */\nexport function getCurrentContextFrame(): ContextFrame | null {\n return currentContextFrame;\n}\n\n/**\n * Get the top of the context snapshot stack (used by runtime when deciding\n * how to link snapshots for async continuations). Returns null if stack empty.\n */\nexport function getTopContextSnapshot(): ContextFrame | null {\n return currentContextFrame;\n}\n","type DiagMap = Record<string, unknown>;\n\nfunction getDiagMap(): DiagMap {\n try {\n const root = globalThis as unknown as Record<string, unknown> & {\n __ASKR_DIAG?: DiagMap;\n };\n if (!root.__ASKR_DIAG) root.__ASKR_DIAG = {} as DiagMap;\n return root.__ASKR_DIAG!;\n } catch (e) {\n void e;\n return {} as DiagMap;\n }\n}\n\nexport function __ASKR_set(key: string, value: unknown): void {\n try {\n const g = getDiagMap();\n (g as DiagMap)[key] = value;\n try {\n // Consolidate diagnostics under a single namespace to avoid\n // polluting the top-level global scope. Expose a namespaced view on\n // `globalThis.__ASKR__` so tools and tests can inspect diagnostic keys.\n const root = globalThis as unknown as Record<string, unknown> & {\n __ASKR__?: Record<string, unknown>;\n };\n try {\n const ns = root.__ASKR__ || (root.__ASKR__ = {});\n try {\n ns[key] = value;\n } catch (e) {\n void e;\n }\n } catch (e) {\n void e;\n }\n } catch (e) {\n void e;\n }\n } catch (e) {\n void e;\n }\n}\n\nexport function __ASKR_incCounter(key: string): void {\n try {\n const g = getDiagMap();\n const prev = typeof g[key] === 'number' ? (g[key] as number) : 0;\n const next = prev + 1;\n (g as DiagMap)[key] = next;\n try {\n // Mirror counter into namespaced diagnostics\n const root = globalThis as unknown as Record<string, unknown> & {\n __ASKR__?: Record<string, unknown>;\n };\n const ns = root.__ASKR__ || (root.__ASKR__ = {});\n try {\n const nsPrev = typeof ns[key] === 'number' ? (ns[key] as number) : 0;\n ns[key] = nsPrev + 1;\n } catch (e) {\n void e;\n }\n } catch (e) {\n void e;\n }\n } catch (e) {\n void e;\n }\n}\n","/**\n * Shared utilities for the renderer module.\n * Consolidates common patterns to reduce code duplication.\n */\n\nimport { globalScheduler } from '../runtime/scheduler';\nimport { logger } from '../dev/logger';\nimport { __ASKR_set, __ASKR_incCounter } from './diag';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ListenerEntry {\n handler: EventListener;\n original: EventListener;\n options?: boolean | AddEventListenerOptions;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Event Handler Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Parse an event prop name (e.g., 'onClick') to its DOM event name (e.g., 'click')\n */\nexport function parseEventName(propName: string): string | null {\n if (!propName.startsWith('on') || propName.length <= 2) return null;\n return (\n propName.slice(2).charAt(0).toLowerCase() + propName.slice(3).toLowerCase()\n );\n}\n\n/**\n * Get default event listener options for passive events\n */\nexport function getPassiveOptions(\n eventName: string\n): AddEventListenerOptions | undefined {\n if (\n eventName === 'wheel' ||\n eventName === 'scroll' ||\n eventName.startsWith('touch')\n ) {\n return { passive: true };\n }\n return undefined;\n}\n\n/**\n * Create a wrapped event handler that integrates with the scheduler\n */\nexport function createWrappedHandler(\n handler: EventListener,\n flushAfter = false\n): EventListener {\n return (event: Event) => {\n globalScheduler.setInHandler(true);\n try {\n handler(event);\n } catch (error) {\n logger.error('[Askr] Event handler error:', error);\n } finally {\n globalScheduler.setInHandler(false);\n if (flushAfter) {\n // If the handler enqueued tasks while we disallowed microtask kicks,\n // ensure we schedule a microtask to flush them\n const state = globalScheduler.getState();\n if ((state.queueLength ?? 0) > 0 && !state.running) {\n queueMicrotask(() => {\n try {\n if (!globalScheduler.isExecuting()) globalScheduler.flush();\n } catch (err) {\n queueMicrotask(() => {\n throw err;\n });\n }\n });\n }\n }\n }\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Prop/Attribute Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Props that should be skipped during attribute processing */\nexport function isSkippedProp(key: string): boolean {\n return key === 'children' || key === 'key';\n}\n\n/** Check if prop should be ignored for prop-change detection */\nexport function isIgnoredForPropChanges(key: string): boolean {\n if (key === 'children' || key === 'key') return true;\n if (key.startsWith('on') && key.length > 2) return true;\n if (key.startsWith('data-')) return true;\n return false;\n}\n\n/**\n * Check if an element's current attribute value differs from vnode value\n */\nexport function hasPropChanged(\n el: Element,\n key: string,\n value: unknown\n): boolean {\n try {\n if (key === 'class' || key === 'className') {\n return el.className !== String(value);\n }\n if (key === 'value' || key === 'checked') {\n return (el as HTMLElement & Record<string, unknown>)[key] !== value;\n }\n const attr = el.getAttribute(key);\n if (value === undefined || value === null || value === false) {\n return attr !== null;\n }\n return String(value) !== attr;\n } catch {\n return true;\n }\n}\n\n/**\n * Check if a vnode has non-trivial props (excluding events and data-*)\n */\nexport function hasNonTrivialProps(props: Record<string, unknown>): boolean {\n for (const k of Object.keys(props)) {\n if (isIgnoredForPropChanges(k)) continue;\n return true;\n }\n return false;\n}\n\n/**\n * Check for prop changes between vnode and existing element\n */\nexport function checkPropChanges(\n el: Element,\n props: Record<string, unknown>\n): boolean {\n for (const k of Object.keys(props)) {\n if (isIgnoredForPropChanges(k)) continue;\n if (hasPropChanged(el, k, props[k])) {\n return true;\n }\n }\n return false;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Key Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extract key from a vnode object\n */\nexport function extractKey(vnode: unknown): string | number | undefined {\n if (typeof vnode !== 'object' || vnode === null) return undefined;\n const obj = vnode as Record<string, unknown>;\n const rawKey =\n obj.key ?? (obj.props as Record<string, unknown> | undefined)?.key;\n if (rawKey === undefined) return undefined;\n return typeof rawKey === 'symbol'\n ? String(rawKey)\n : (rawKey as string | number);\n}\n\n/**\n * Build a key map from element's children\n */\nexport function buildKeyMapFromChildren(\n parent: Element\n): Map<string | number, Element> {\n const map = new Map<string | number, Element>();\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n const k = ch.getAttribute('data-key');\n if (k !== null) {\n map.set(k, ch);\n const n = Number(k);\n if (!Number.isNaN(n)) map.set(n, ch);\n }\n }\n return map;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Diagnostic Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Record DOM replace operation for diagnostics\n */\nexport function recordDOMReplace(source: string): void {\n try {\n __ASKR_incCounter('__DOM_REPLACE_COUNT');\n __ASKR_set(`__LAST_DOM_REPLACE_STACK_${source}`, new Error().stack);\n } catch {\n // ignore\n }\n}\n\n/**\n * Record fast-path stats for diagnostics\n */\nexport function recordFastPathStats(\n stats: Record<string, unknown>,\n counterName?: string\n): void {\n try {\n __ASKR_set('__LAST_FASTPATH_STATS', stats);\n __ASKR_set('__LAST_FASTPATH_COMMIT_COUNT', 1);\n if (counterName) {\n __ASKR_incCounter(counterName);\n }\n } catch {\n // ignore\n }\n}\n\n/**\n * Conditionally log debug info for fast-path operations\n */\nexport function logFastPathDebug(\n message: string,\n indexOrData?: number | unknown,\n data?: unknown\n): void {\n if (\n process.env.ASKR_FASTPATH_DEBUG === '1' ||\n process.env.ASKR_FASTPATH_DEBUG === 'true'\n ) {\n if (data !== undefined) {\n logger.warn(`[Askr][FASTPATH] ${message}`, indexOrData, data);\n } else if (indexOrData !== undefined) {\n logger.warn(`[Askr][FASTPATH] ${message}`, indexOrData);\n } else {\n logger.warn(`[Askr][FASTPATH] ${message}`);\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Performance Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get current high-resolution timestamp\n */\nexport function now(): number {\n return typeof performance !== 'undefined' && performance.now\n ? performance.now()\n : Date.now();\n}\n","import type { VNode } from './types';\nimport {\n extractKey,\n buildKeyMapFromChildren,\n isIgnoredForPropChanges,\n hasPropChanged,\n hasNonTrivialProps,\n} from './utils';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Key Map Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const keyedElements = new WeakMap<\n Element,\n Map<string | number, Element>\n>();\n\n/**\n * Retrieve existing keyed map for a parent element (runtime use)\n */\nexport function getKeyMapForElement(el: Element) {\n return keyedElements.get(el);\n}\n\n/**\n * Populate a keyed map for an element by scanning its immediate children\n * for `data-key` attributes. Proactive initialization for runtime layers.\n */\nexport function populateKeyMapForElement(parent: Element): void {\n try {\n if (keyedElements.has(parent)) return;\n\n let domMap = buildKeyMapFromChildren(parent);\n\n // Fallback: map by textContent when keys are not materialized as attrs\n if (domMap.size === 0) {\n domMap = new Map();\n const children = Array.from(parent.children);\n for (const ch of children) {\n const text = (ch.textContent || '').trim();\n if (text) {\n domMap.set(text, ch);\n const n = Number(text);\n if (!Number.isNaN(n)) domMap.set(n, ch);\n }\n }\n }\n\n if (domMap.size > 0) keyedElements.set(parent, domMap);\n } catch {\n // ignore\n }\n}\n\n// Track which parents had the reconciler record fast-path stats during the\n// current evaluation, so we can preserve diagnostics across additional\n// reconciliations within the same render pass without leaking between runs.\nexport const _reconcilerRecordedParents = new WeakSet<Element>();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Fast-Path Eligibility\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface KeyedVnode {\n key: string | number;\n vnode: VNode;\n}\n\n/**\n * Extract keyed vnodes from children array\n */\nfunction extractKeyedVnodes(newChildren: VNode[]): KeyedVnode[] {\n const result: KeyedVnode[] = [];\n for (const child of newChildren) {\n const key = extractKey(child);\n if (key !== undefined) {\n result.push({ key, vnode: child });\n }\n }\n return result;\n}\n\n/**\n * Compute LIS (Longest Increasing Subsequence) length for positions\n */\nfunction computeLISLength(positions: number[]): number {\n const tails: number[] = [];\n for (const pos of positions) {\n if (pos === -1) continue;\n let lo = 0;\n let hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (tails[mid] < pos) lo = mid + 1;\n else hi = mid;\n }\n if (lo === tails.length) tails.push(pos);\n else tails[lo] = pos;\n }\n return tails.length;\n}\n\n/**\n * Check if any vnode has non-trivial props\n */\nfunction checkVnodesHaveProps(keyedVnodes: KeyedVnode[]): boolean {\n for (const { vnode } of keyedVnodes) {\n if (typeof vnode !== 'object' || vnode === null) continue;\n const vnodeObj = vnode as unknown as { props?: Record<string, unknown> };\n if (vnodeObj.props && hasNonTrivialProps(vnodeObj.props)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Check for prop changes between vnodes and existing elements\n */\nfunction checkVnodePropChanges(\n keyedVnodes: KeyedVnode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): boolean {\n for (const { key, vnode } of keyedVnodes) {\n const el = oldKeyMap?.get(key);\n if (!el || typeof vnode !== 'object' || vnode === null) continue;\n const vnodeObj = vnode as unknown as { props?: Record<string, unknown> };\n const props = vnodeObj.props || {};\n for (const k of Object.keys(props)) {\n if (isIgnoredForPropChanges(k)) continue;\n if (hasPropChanged(el, k, props[k])) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Determine if keyed reorder fast-path should be used\n */\nexport function isKeyedReorderFastPathEligible(\n parent: Element,\n newChildren: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n) {\n const keyedVnodes = extractKeyedVnodes(newChildren);\n const totalKeyed = keyedVnodes.length;\n const newKeyOrder = keyedVnodes.map((kv) => kv.key);\n const oldKeyOrder = oldKeyMap ? Array.from(oldKeyMap.keys()) : [];\n\n // Count moves needed\n let moveCount = 0;\n for (let i = 0; i < newKeyOrder.length; i++) {\n const k = newKeyOrder[i];\n if (i >= oldKeyOrder.length || oldKeyOrder[i] !== k || !oldKeyMap?.has(k)) {\n moveCount++;\n }\n }\n\n // Check move threshold triggers\n const FAST_MOVE_THRESHOLD_ABS = 64;\n const FAST_MOVE_THRESHOLD_REL = 0.1;\n const cheapMoveTrigger =\n totalKeyed >= 128 &&\n oldKeyOrder.length > 0 &&\n moveCount >\n Math.max(\n FAST_MOVE_THRESHOLD_ABS,\n Math.floor(totalKeyed * FAST_MOVE_THRESHOLD_REL)\n );\n\n // Compute LIS trigger for large lists\n let lisTrigger = false;\n let lisLen = 0;\n if (totalKeyed >= 128) {\n const parentChildren = Array.from(parent.children);\n const positions = keyedVnodes.map(({ key }) => {\n const el = oldKeyMap?.get(key);\n return el?.parentElement === parent ? parentChildren.indexOf(el) : -1;\n });\n lisLen = computeLISLength(positions);\n lisTrigger = lisLen < Math.floor(totalKeyed * 0.5);\n }\n\n // Check for props that would prevent fast-path\n const hasPropsPresent = checkVnodesHaveProps(keyedVnodes);\n const hasPropChanges = checkVnodePropChanges(keyedVnodes, oldKeyMap);\n\n const useFastPath =\n (cheapMoveTrigger || lisTrigger) && !hasPropChanges && !hasPropsPresent;\n\n return {\n useFastPath,\n totalKeyed,\n moveCount,\n lisLen,\n hasPropChanges,\n } as const;\n}\n","/**\n * Common call contracts: JSX element shape\n */\n\nimport type { Props } from './props';\n\nexport const ELEMENT_TYPE = Symbol.for('askr.element');\nexport const Fragment = Symbol.for('askr.fragment');\n\nexport interface JSXElement {\n /** Internal element marker (optional for plain vnode objects) */\n $$typeof?: symbol;\n\n /** Element type: string, component, Fragment, etc */\n type: unknown;\n\n /** Props bag */\n props: Props;\n\n /** Optional key (normalized by runtime) */\n key?: string | number | null;\n}\n","/**\n * Dev-only namespace helpers for diagnostics\n *\n * Centralizes the repetitive globalThis.__ASKR__ access pattern\n * used throughout runtime for dev-mode diagnostics.\n */\n\ntype DevNamespace = Record<string, unknown>;\n\n/**\n * Get or create the __ASKR__ dev namespace on globalThis.\n * Returns empty object in production to avoid allocations.\n */\nexport function getDevNamespace(): DevNamespace {\n if (process.env.NODE_ENV === 'production') return {};\n try {\n const g = globalThis as unknown as Record<string, DevNamespace>;\n if (!g.__ASKR__) g.__ASKR__ = {};\n return g.__ASKR__;\n } catch {\n return {};\n }\n}\n\n/**\n * Set a value in the dev namespace (no-op in production).\n */\nexport function setDevValue(key: string, value: unknown): void {\n if (process.env.NODE_ENV === 'production') return;\n try {\n getDevNamespace()[key] = value;\n } catch {\n // ignore\n }\n}\n\n/**\n * Get a value from the dev namespace (returns undefined in production).\n */\nexport function getDevValue<T>(key: string): T | undefined {\n if (process.env.NODE_ENV === 'production') return undefined;\n try {\n return getDevNamespace()[key] as T | undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Delete a value from the dev namespace (no-op in production).\n */\nexport function deleteDevValue(key: string): void {\n if (process.env.NODE_ENV === 'production') return;\n try {\n delete getDevNamespace()[key];\n } catch {\n // ignore\n }\n}\n","import { globalScheduler } from './scheduler';\nimport { logger } from '../dev/logger';\nimport type { ComponentInstance } from './component';\nimport {\n getKeyMapForElement,\n isKeyedReorderFastPathEligible,\n populateKeyMapForElement,\n} from '../renderer/keyed';\nimport { Fragment } from '../common/jsx';\nimport { setDevValue, getDevValue } from './dev-namespace';\n\nlet _bulkCommitActive = false;\nlet _appliedParents: WeakSet<Element> | null = null;\n\nexport function enterBulkCommit(): void {\n _bulkCommitActive = true;\n // Initialize registry of parents that had fast-path applied during this bulk commit\n _appliedParents = new WeakSet<Element>();\n\n // Clear any previously scheduled synchronous scheduler tasks so they don't\n // retrigger evaluations during the committed fast-path.\n try {\n const cleared = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n setDevValue('__ASKR_FASTLANE_CLEARED_TASKS', cleared);\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') throw err;\n }\n}\n\nexport function exitBulkCommit(): void {\n _bulkCommitActive = false;\n // Clear registry to avoid leaking across commits\n _appliedParents = null;\n}\n\nexport function isBulkCommitActive(): boolean {\n return _bulkCommitActive;\n}\n\n// Mark that a fast-path was applied on a parent element during the active\n// bulk commit. No-op if there is no active bulk commit.\nexport function markFastPathApplied(parent: Element): void {\n if (!_appliedParents) return;\n try {\n _appliedParents.add(parent);\n } catch (e) {\n void e;\n }\n}\n\nexport function isFastPathApplied(parent: Element): boolean {\n return !!(_appliedParents && _appliedParents.has(parent));\n}\n\nfunction finalizeReadSubscriptions(instance: ComponentInstance): void {\n const newSet = instance._pendingReadStates ?? new Set();\n const oldSet = instance._lastReadStates ?? new Set();\n const token = instance._currentRenderToken;\n\n if (token === undefined) return;\n\n // Remove subscriptions for states that were read previously but not in this render\n for (const s of oldSet) {\n if (!newSet.has(s)) {\n const readers = (s as { _readers?: Map<ComponentInstance, number> })\n ._readers;\n if (readers) readers.delete(instance);\n }\n }\n\n // Commit token becomes the authoritative token for this instance's last render\n instance.lastRenderToken = token;\n\n // Record subscriptions for states read during this render\n for (const s of newSet) {\n let readers = (s as { _readers?: Map<ComponentInstance, number> })._readers;\n if (!readers) {\n readers = new Map();\n (s as { _readers?: Map<ComponentInstance, number> })._readers = readers;\n }\n readers.set(instance, instance.lastRenderToken ?? 0);\n }\n\n instance._lastReadStates = newSet;\n instance._pendingReadStates = new Set();\n instance._currentRenderToken = undefined;\n}\n\n/**\n * Attempt to execute a runtime fast-lane for a single component's synchronous\n * render result. Returns true if the fast-lane was used and commit was done.\n *\n * Preconditions (checked conservatively):\n * - The render result is an intrinsic element root with keyed children\n * - The renderer's fast-path heuristics indicate to use the fast-path\n * - No mount operations are pending on the component instance\n * - No child vnodes are component functions (avoid async/component mounts)\n */\n\n// Helper to unwrap Fragment vnodes to get the first intrinsic element child\nfunction unwrapFragmentForFastPath(vnode: unknown): unknown {\n if (!vnode || typeof vnode !== 'object' || !('type' in vnode)) return vnode;\n const v = vnode as {\n type: unknown;\n children?: unknown;\n props?: { children?: unknown };\n };\n // Check if it's a Fragment\n if (\n typeof v.type === 'symbol' &&\n (v.type === Fragment || String(v.type) === 'Symbol(askr.fragment)')\n ) {\n const children = v.children || v.props?.children;\n if (Array.isArray(children) && children.length > 0) {\n // Return the first child that's an intrinsic element\n for (const child of children) {\n if (child && typeof child === 'object' && 'type' in child) {\n const c = child as { type: unknown };\n if (typeof c.type === 'string') {\n return child;\n }\n }\n }\n }\n }\n return vnode;\n}\n\nexport function classifyUpdate(instance: ComponentInstance, result: unknown) {\n // Returns a classification describing whether this update is eligible for\n // the reorder-only fast-lane. The classifier mirrors renderer-level\n // heuristics and performs runtime-level checks (mounts, effects, component\n // children) that the renderer cannot reason about.\n\n // Unwrap Fragment to get the actual element vnode for classification\n const unwrappedResult = unwrapFragmentForFastPath(result);\n\n if (\n !unwrappedResult ||\n typeof unwrappedResult !== 'object' ||\n !('type' in unwrappedResult)\n )\n return { useFastPath: false, reason: 'not-vnode' };\n\n const vnode = unwrappedResult as {\n type: unknown;\n children?: unknown;\n props?: { children?: unknown };\n };\n if (vnode == null || typeof vnode.type !== 'string')\n return { useFastPath: false, reason: 'not-intrinsic' };\n\n const parent = instance.target;\n if (!parent) return { useFastPath: false, reason: 'no-root' };\n\n const firstChild = parent.children[0] as Element | undefined;\n if (!firstChild) return { useFastPath: false, reason: 'no-first-child' };\n if (firstChild.tagName.toLowerCase() !== String(vnode.type).toLowerCase())\n return { useFastPath: false, reason: 'root-tag-mismatch' };\n\n const children = vnode.children || vnode.props?.children;\n if (!Array.isArray(children))\n return { useFastPath: false, reason: 'no-children-array' };\n\n // Avoid component child vnodes (they may mount/unmount or trigger async)\n for (const c of children) {\n if (\n typeof c === 'object' &&\n c !== null &&\n 'type' in c &&\n typeof (c as { type?: unknown }).type === 'function'\n ) {\n return { useFastPath: false, reason: 'component-child-present' };\n }\n }\n\n if (instance.mountOperations.length > 0)\n return { useFastPath: false, reason: 'pending-mounts' };\n\n // Ask renderer for keyed reorder eligibility (prop differences & heuristics)\n // Ensure a keyed map is available for the first child by populating it proactively.\n try {\n populateKeyMapForElement(firstChild);\n } catch {\n // ignore\n }\n\n const oldKeyMap = getKeyMapForElement(firstChild);\n const decision = isKeyedReorderFastPathEligible(\n firstChild,\n children,\n oldKeyMap\n );\n\n if (!decision.useFastPath || decision.totalKeyed < 128)\n return { ...decision, useFastPath: false, reason: 'renderer-declined' };\n\n return { ...decision, useFastPath: true } as const;\n}\n\nexport function commitReorderOnly(\n instance: ComponentInstance,\n result: unknown\n): boolean {\n // Performs the minimal, synchronous reorder-only commit.\n const evaluate = (\n globalThis as {\n __ASKR_RENDERER?: {\n evaluate?: (node: unknown, target: Element | null) => void;\n };\n }\n ).__ASKR_RENDERER?.evaluate;\n\n if (typeof evaluate !== 'function') {\n logger.warn(\n '[Tempo][FASTPATH][DEV] renderer.evaluate not available; declining fast-lane'\n );\n return false;\n }\n\n const schedBefore =\n process.env.NODE_ENV !== 'production' ? globalScheduler.getState() : null;\n\n enterBulkCommit();\n\n try {\n globalScheduler.runWithSyncProgress(() => {\n evaluate(result, instance.target);\n\n // Finalize runtime bookkeeping (read subscriptions / tokens)\n try {\n finalizeReadSubscriptions(instance);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') throw e;\n }\n });\n\n // Clear any synchronous tasks scheduled during the commit\n const clearedAfter = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n setDevValue('__FASTLANE_CLEARED_AFTER', clearedAfter);\n\n // Dev-only invariant checks\n if (process.env.NODE_ENV !== 'production') {\n validateFastLaneInvariants(instance, schedBefore);\n }\n\n return true;\n } finally {\n exitBulkCommit();\n }\n // Dev-only: verify bulk commit flag was properly cleared (after finally to avoid no-unsafe-finally)\n if (process.env.NODE_ENV !== 'production') {\n if (isBulkCommitActive()) {\n throw new Error(\n 'Fast-lane invariant violated: bulk commit flag still set after commit'\n );\n }\n }\n}\n\n/**\n * Validates fast-lane invariants in dev mode.\n * Extracted to reduce complexity in commitReorderOnly.\n */\nfunction validateFastLaneInvariants(\n instance: ComponentInstance,\n schedBefore: ReturnType<typeof globalScheduler.getState> | null\n): void {\n const commitCount = getDevValue<number>('__LAST_FASTPATH_COMMIT_COUNT') ?? 0;\n const invariants = {\n commitCount,\n mountOps: instance.mountOperations.length,\n cleanupFns: instance.cleanupFns.length,\n };\n setDevValue('__LAST_FASTLANE_INVARIANTS', invariants);\n\n if (commitCount !== 1) {\n console.error(\n '[FASTLANE][INV] commitCount',\n commitCount,\n 'diag',\n (globalThis as Record<string, unknown>).__ASKR_DIAG\n );\n throw new Error(\n 'Fast-lane invariant violated: expected exactly one DOM commit during reorder-only commit'\n );\n }\n\n if (invariants.mountOps > 0) {\n throw new Error(\n 'Fast-lane invariant violated: mount operations were registered during bulk commit'\n );\n }\n\n if (invariants.cleanupFns > 0) {\n throw new Error(\n 'Fast-lane invariant violated: cleanup functions were added during bulk commit'\n );\n }\n\n const schedAfter = globalScheduler.getState();\n if (\n schedBefore &&\n schedAfter &&\n schedAfter.taskCount > schedBefore.taskCount\n ) {\n console.error(\n '[FASTLANE] schedBefore, schedAfter',\n schedBefore,\n schedAfter\n );\n console.error('[FASTLANE] enqueue logs', getDevValue('__ENQUEUE_LOGS'));\n throw new Error(\n 'Fast-lane invariant violated: scheduler enqueued leftover work during bulk commit'\n );\n }\n\n // Final quiescence assertion\n let finalState = globalScheduler.getState();\n const executing = globalScheduler.isExecuting();\n let outstandingAfter = Math.max(\n 0,\n finalState.taskCount - (executing ? 1 : 0)\n );\n\n if (outstandingAfter !== 0) {\n // Attempt to clear newly enqueued synchronous tasks\n let attempts = 0;\n while (attempts < 5) {\n const cleared = globalScheduler.clearPendingSyncTasks?.() ?? 0;\n if (cleared === 0) break;\n attempts++;\n }\n finalState = globalScheduler.getState();\n outstandingAfter = Math.max(\n 0,\n finalState.taskCount - (globalScheduler.isExecuting() ? 1 : 0)\n );\n if (outstandingAfter !== 0) {\n console.error(\n '[FASTLANE] Post-commit enqueue logs:',\n getDevValue('__ENQUEUE_LOGS')\n );\n console.error(\n '[FASTLANE] Cleared counts:',\n getDevValue('__FASTLANE_CLEARED_TASKS'),\n getDevValue('__FASTLANE_CLEARED_AFTER')\n );\n throw new Error(\n `Fast-lane invariant violated: scheduler has ${finalState.taskCount} pending task(s) after commit`\n );\n }\n }\n}\n\nexport function tryRuntimeFastLaneSync(\n instance: ComponentInstance,\n result: unknown\n): boolean {\n const cls = classifyUpdate(instance, result);\n if (!cls.useFastPath) {\n // Clear stale fast-path diagnostics\n setDevValue('__LAST_FASTPATH_STATS', undefined);\n setDevValue('__LAST_FASTPATH_COMMIT_COUNT', 0);\n return false;\n }\n\n try {\n return commitReorderOnly(instance, result);\n } catch (err) {\n // Surface dev-only invariant failures, otherwise decline silently\n if (process.env.NODE_ENV !== 'production') throw err;\n return false;\n }\n}\n\n// Expose fastlane bridge on globalThis for environments/tests\nif (typeof globalThis !== 'undefined') {\n (globalThis as Record<string, unknown>).__ASKR_FASTLANE = {\n isBulkCommitActive,\n enterBulkCommit,\n exitBulkCommit,\n tryRuntimeFastLaneSync,\n markFastPathApplied,\n isFastPathApplied,\n };\n}\n","/**\n * Common call contracts: VNode / virtual DOM shapes\n */\n\nimport type { Props } from './props';\n\nexport interface DOMElement {\n // Element `type` can be an intrinsic tag name, a component function, or\n // a special symbol (e.g. `Fragment`). Include `symbol` in the type union\n // so runtime comparisons against `Fragment` are type-safe.\n type: string | ((props: Props) => unknown) | symbol;\n props?: Props;\n children?: VNode[];\n key?: string | number;\n [Symbol.iterator]?: never;\n}\n\n// Type for virtual DOM nodes\nexport type VNode = DOMElement | string | number | boolean | null | undefined;\n\nexport function _isDOMElement(node: unknown): node is DOMElement {\n return typeof node === 'object' && node !== null && 'type' in node;\n}\n","export type { DOMElement, VNode } from '../common/vnode';\nexport { _isDOMElement } from '../common/vnode';\n","import { cleanupComponent } from '../runtime/component';\nimport type { ComponentInstance } from '../runtime/component';\nimport { logger } from '../dev/logger';\n\ntype InstanceHost = Element & { __ASKR_INSTANCE?: unknown };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Instance Cleanup Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction cleanupSingleInstance(\n node: InstanceHost,\n errors: unknown[] | null,\n strict: boolean\n): void {\n const inst = node.__ASKR_INSTANCE;\n if (!inst) return;\n\n try {\n cleanupComponent(inst as ComponentInstance);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] cleanupComponent failed:', err);\n }\n\n try {\n delete node.__ASKR_INSTANCE;\n } catch (e) {\n if (strict) errors!.push(e);\n }\n}\n\n// Walk descendant elements with minimal allocations.\n// HOT PATH: used during subtree teardown (replace/unmount).\nfunction forEachDescendantElement(root: Element, visit: (el: Element) => void) {\n // Prefer TreeWalker when available; it avoids allocating a NodeList.\n try {\n const doc = root.ownerDocument;\n const createTreeWalker = doc?.createTreeWalker;\n if (typeof createTreeWalker === 'function') {\n // NodeFilter.SHOW_ELEMENT === 1\n const walker = createTreeWalker.call(doc, root, 1);\n let n = walker.firstChild();\n while (n) {\n visit(n as Element);\n n = walker.nextNode();\n }\n return;\n }\n } catch {\n // SLOW PATH: TreeWalker unavailable\n }\n\n // Fallback: querySelectorAll\n const descendants = root.querySelectorAll('*');\n for (let i = 0; i < descendants.length; i++) {\n visit(descendants[i]);\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Clean up component instance attached to a DOM node\n * Accepts an optional `opts.strict` flag to surface errors instead of swallowing them.\n */\nexport function cleanupInstanceIfPresent(\n node: Node | null,\n opts?: { strict?: boolean }\n): void {\n if (!node || !(node instanceof Element)) return;\n\n const strict = opts?.strict ?? false;\n const errors: unknown[] | null = strict ? [] : null;\n\n // Clean up the node itself\n try {\n cleanupSingleInstance(node as InstanceHost, errors, strict);\n } catch (err) {\n if (strict) errors!.push(err);\n else logger.warn('[Askr] cleanupInstanceIfPresent failed:', err);\n }\n\n // Clean up any nested instances on descendants\n try {\n forEachDescendantElement(node, (d) => {\n try {\n cleanupSingleInstance(d as InstanceHost, errors, strict);\n } catch (err) {\n if (strict) errors!.push(err);\n else\n logger.warn(\n '[Askr] cleanupInstanceIfPresent descendant cleanup failed:',\n err\n );\n }\n });\n } catch (err) {\n if (strict) errors!.push(err);\n else\n logger.warn(\n '[Askr] cleanupInstanceIfPresent descendant query failed:',\n err\n );\n }\n\n if (errors && errors.length > 0) {\n throw new AggregateError(errors, 'cleanupInstanceIfPresent failed');\n }\n}\n\n// Public helper to clean up any component instances under a node. Used by\n// runtime commit logic to ensure component instances are torn down when their\n// host nodes are removed during an update.\nexport function cleanupInstancesUnder(\n node: Node | null,\n opts?: { strict?: boolean }\n): void {\n cleanupInstanceIfPresent(node, opts);\n}\n\n// Track listeners so we can remove them on cleanup\nexport interface ListenerMapEntry {\n handler: EventListener;\n original: EventListener;\n options?: boolean | AddEventListenerOptions;\n}\nexport const elementListeners = new WeakMap<\n Element,\n Map<string, ListenerMapEntry>\n>();\n\nexport function removeElementListeners(element: Element): void {\n const map = elementListeners.get(element);\n if (map) {\n for (const [eventName, entry] of map) {\n // When removing, reuse the original options if present for correctness\n if (entry.options !== undefined)\n element.removeEventListener(eventName, entry.handler, entry.options);\n else element.removeEventListener(eventName, entry.handler);\n }\n elementListeners.delete(element);\n }\n}\n\nexport function removeAllListeners(root: Element | null): void {\n if (!root) return;\n\n // Remove listeners from root\n removeElementListeners(root);\n\n // Recursively remove from all children\n forEachDescendantElement(root, removeElementListeners);\n}\n","/**\n * JSX type definitions\n *\n * These define the canonical JSX element shape used by:\n * - jsx-runtime\n * - jsx-dev-runtime\n * - Slot / cloneElement\n * - the reconciler\n */\n\nimport type { Props } from '../common/props';\nimport type { JSXElement } from '../common/jsx';\n\nexport { ELEMENT_TYPE, Fragment } from '../common/jsx';\nexport type { JSXElement } from '../common/jsx';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n // Components must be synchronous\n interface Element extends JSXElement {\n readonly __askrJsxElementBrand?: never;\n }\n\n interface IntrinsicElements {\n [elem: string]: Props;\n }\n\n interface ElementAttributesProperty {\n props: Props;\n }\n }\n}\n\nexport {};\n","/**\n * JSX runtime factory\n * Same element shape as production runtime.\n */\n\nimport { ELEMENT_TYPE, Fragment, type JSXElement } from './types';\n\nexport function jsxDEV(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number\n): JSXElement {\n return {\n $$typeof: ELEMENT_TYPE,\n type,\n props: props ?? {},\n key: key ?? null,\n };\n}\n\n// Production-style helpers: alias to the DEV factory for now\nexport function jsx(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number\n) {\n return jsxDEV(type, props, key);\n}\n\nexport function jsxs(\n type: unknown,\n props: Record<string, unknown> | null,\n key?: string | number\n) {\n return jsxDEV(type, props, key);\n}\n\n// Re-export Fragment for JSX.\nexport { Fragment };\n","import { logger } from '../dev/logger';\nimport type { Props } from '../common/props';\nimport { Fragment } from '../jsx/jsx-runtime';\nimport {\n CONTEXT_FRAME_SYMBOL,\n withContext,\n getCurrentContextFrame,\n ContextFrame,\n} from '../runtime/context';\nimport {\n createComponentInstance,\n renderComponentInline,\n mountInstanceInline,\n getCurrentInstance,\n} from '../runtime/component';\nimport type {\n ComponentInstance,\n ComponentFunction,\n} from '../runtime/component';\nimport {\n cleanupInstanceIfPresent,\n elementListeners,\n removeAllListeners,\n} from './cleanup';\nimport { __ASKR_set, __ASKR_incCounter } from './diag';\nimport { _isDOMElement, type DOMElement, type VNode } from './types';\nimport { keyedElements } from './keyed';\nimport {\n parseEventName,\n getPassiveOptions,\n createWrappedHandler,\n isSkippedProp,\n now,\n recordDOMReplace,\n recordFastPathStats,\n logFastPathDebug,\n} from './utils';\n\ntype ElementWithContext = DOMElement & {\n [CONTEXT_FRAME_SYMBOL]?: ContextFrame;\n __instance?: ComponentInstance;\n};\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Event Handler Management\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Add an event listener to an element with tracking\n */\nfunction addTrackedListener(\n el: Element,\n eventName: string,\n handler: EventListener\n): void {\n const wrappedHandler = createWrappedHandler(handler, true);\n const options = getPassiveOptions(eventName);\n\n if (options !== undefined) {\n el.addEventListener(eventName, wrappedHandler, options);\n } else {\n el.addEventListener(eventName, wrappedHandler);\n }\n\n if (!elementListeners.has(el)) {\n elementListeners.set(el, new Map());\n }\n elementListeners.get(el)!.set(eventName, {\n handler: wrappedHandler,\n original: handler,\n options,\n });\n}\n\n/**\n * Apply attributes and event listeners to an element from props\n */\nfunction applyPropsToElement(\n el: Element,\n props: Record<string, unknown>,\n tagName: string\n): void {\n for (const key in props) {\n const value = props[key];\n if (isSkippedProp(key)) continue;\n if (value === undefined || value === null || value === false) continue;\n\n const eventName = parseEventName(key);\n if (eventName) {\n addTrackedListener(el, eventName, value as EventListener);\n continue;\n }\n\n if (key === 'class' || key === 'className') {\n el.className = String(value);\n } else if (key === 'value' || key === 'checked') {\n applyFormControlProp(el, key, value, tagName);\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\n/**\n * Apply value/checked props to form controls\n */\nfunction applyFormControlProp(\n el: Element,\n key: string,\n value: unknown,\n tagName: string\n): void {\n if (key === 'value') {\n if (\n tagNamesEqualIgnoreCase(tagName, 'input') ||\n tagNamesEqualIgnoreCase(tagName, 'textarea') ||\n tagNamesEqualIgnoreCase(tagName, 'select')\n ) {\n (el as HTMLInputElement & Props).value = String(value);\n el.setAttribute('value', String(value));\n } else {\n el.setAttribute('value', String(value));\n }\n } else if (key === 'checked') {\n if (tagNamesEqualIgnoreCase(tagName, 'input')) {\n (el as HTMLInputElement & Props).checked = Boolean(value);\n el.setAttribute('checked', String(Boolean(value)));\n } else {\n el.setAttribute('checked', String(Boolean(value)));\n }\n }\n}\n\n/**\n * Materialize vnode key as data-key attribute\n */\nfunction materializeKey(\n el: Element,\n vnode: DOMElement,\n props: Record<string, unknown>\n): void {\n const vnodeKey = vnode.key ?? props?.key;\n if (vnodeKey !== undefined) {\n el.setAttribute('data-key', String(vnodeKey));\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic List Warnings\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Warn about missing keys on dynamic lists (dev only)\n */\nfunction warnMissingKeys(children: unknown[]): void {\n if (process.env.NODE_ENV === 'production') return;\n\n let hasElements = false;\n let hasKeys = false;\n\n for (const item of children) {\n if (typeof item === 'object' && item !== null && 'type' in item) {\n hasElements = true;\n const rawKey =\n (item as DOMElement).key ??\n ((item as DOMElement).props as Record<string, unknown> | undefined)\n ?.key;\n if (rawKey !== undefined) {\n hasKeys = true;\n break;\n }\n }\n }\n\n if (hasElements && !hasKeys) {\n try {\n const inst = getCurrentInstance();\n const name = inst?.fn?.name || '<anonymous>';\n logger.warn(\n `Missing keys on dynamic lists in ${name}. Each child in a list should have a unique \"key\" prop.`\n );\n } catch {\n logger.warn(\n 'Missing keys on dynamic lists. Each child in a list should have a unique \"key\" prop.'\n );\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DOM Node Creation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a DOM node from a VNode\n */\nexport function createDOMNode(node: unknown): Node | null {\n // SSR guard: don't attempt DOM ops when document is unavailable\n if (!IS_DOM_AVAILABLE) {\n if (process.env.NODE_ENV !== 'production') {\n try {\n logger.warn('[Askr] createDOMNode called in non-DOM environment');\n } catch {\n // ignore\n }\n }\n return null;\n }\n\n // Fast paths for primitives (most common)\n if (typeof node === 'string') {\n return document.createTextNode(node);\n }\n if (typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n\n // Null/undefined/false\n if (!node) {\n return null;\n }\n\n // Array (fragment) - batch all at once\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n const dom = createDOMNode(child);\n if (dom) fragment.appendChild(dom);\n }\n return fragment;\n }\n\n // Element or Component\n if (typeof node === 'object' && node !== null && 'type' in node) {\n const type = (node as DOMElement).type;\n const props = ((node as DOMElement).props || {}) as Record<string, unknown>;\n\n // Intrinsic element (string type)\n if (typeof type === 'string') {\n return createIntrinsicElement(node as DOMElement, type, props);\n }\n\n // Component (function type) - inline execution\n if (typeof type === 'function') {\n return createComponentElement(node as ElementWithContext, type, props);\n }\n\n // Fragment support\n if (\n typeof type === 'symbol' &&\n (type === Fragment || String(type) === 'Symbol(Fragment)')\n ) {\n return createFragmentElement(node as DOMElement, props);\n }\n }\n\n return null;\n}\n\n/**\n * Create an intrinsic DOM element (div, span, etc.)\n */\nfunction createIntrinsicElement(\n node: DOMElement,\n type: string,\n props: Record<string, unknown>\n): Element {\n const el = document.createElement(type);\n\n // Materialize key into DOM attribute\n materializeKey(el, node, props);\n\n // Apply props/attributes\n applyPropsToElement(el, props, type);\n\n // Add children\n const children = props.children || node.children;\n if (children) {\n if (Array.isArray(children)) {\n warnMissingKeys(children);\n for (const child of children) {\n const dom = createDOMNode(child);\n if (dom) el.appendChild(dom);\n }\n } else {\n const dom = createDOMNode(children);\n if (dom) el.appendChild(dom);\n }\n }\n\n return el;\n}\n\n/**\n * Create element from a component function\n */\nfunction createComponentElement(\n node: ElementWithContext,\n type: (props: Props) => unknown,\n props: Record<string, unknown>\n): Node {\n // Check if this vnode has a marked context frame\n const frame = node[CONTEXT_FRAME_SYMBOL];\n const snapshot = frame || getCurrentContextFrame();\n\n const componentFn = type as (props: Props) => unknown;\n const isAsync = componentFn.constructor.name === 'AsyncFunction';\n\n if (isAsync) {\n throw new Error(\n 'Async components are not supported. Use resource() for async work.'\n );\n }\n\n // Ensure there is a persistent instance object attached to this vnode\n let childInstance = node.__instance;\n if (!childInstance) {\n childInstance = createComponentInstance(\n `comp-${Math.random().toString(36).slice(2, 7)}`,\n componentFn as ComponentFunction,\n props || {},\n null\n );\n node.__instance = childInstance;\n }\n\n if (snapshot) {\n childInstance.ownerFrame = snapshot;\n }\n\n const result = withContext(snapshot, () =>\n renderComponentInline(childInstance)\n );\n\n if (result instanceof Promise) {\n throw new Error(\n 'Async components are not supported. Components must return synchronously.'\n );\n }\n\n const dom = withContext(snapshot, () => createDOMNode(result));\n\n if (dom instanceof Element) {\n mountInstanceInline(childInstance, dom);\n return dom;\n }\n\n // For null/undefined returns, use a comment placeholder that can be replaced\n // when the component re-renders with actual content. This is necessary for\n // portals and other components that may initially return null but later have content.\n if (!dom) {\n const placeholder = document.createComment('');\n // Store reference so we can find and replace it on re-render\n childInstance._placeholder = placeholder;\n childInstance.mounted = true;\n // Ensure notifyUpdate is set so the component can be re-rendered when content appears\n childInstance.notifyUpdate = childInstance._enqueueRun!;\n return placeholder;\n }\n\n // For non-Element returns (Text nodes or DocumentFragment), wrap in host\n const host = document.createElement('div');\n host.appendChild(dom);\n mountInstanceInline(childInstance, host);\n return host;\n}\n\n/**\n * Create a document fragment from Fragment vnode\n */\nfunction createFragmentElement(\n node: DOMElement,\n props: Record<string, unknown>\n): DocumentFragment {\n const fragment = document.createDocumentFragment();\n const children = props.children || node.children;\n if (children) {\n if (Array.isArray(children)) {\n for (const child of children) {\n const dom = createDOMNode(child);\n if (dom) fragment.appendChild(dom);\n }\n } else {\n const dom = createDOMNode(children);\n if (dom) fragment.appendChild(dom);\n }\n }\n return fragment;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Element Updates\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Update an existing element's attributes and children from vnode\n */\nexport function updateElementFromVnode(\n el: Element,\n vnode: VNode,\n updateChildren = true\n): void {\n if (!_isDOMElement(vnode)) {\n return;\n }\n\n const props = (vnode.props || {}) as Record<string, unknown>;\n\n // Ensure key is materialized\n materializeKey(el, vnode, props);\n\n // Diff and update event listeners and other attributes\n const existingListeners = elementListeners.get(el);\n // Lazily materialize desired event names only if we need to diff against existing listeners.\n // This avoids allocating a Set for the common case (no listeners, or no event props).\n let desiredEventNames: Set<string> | null = null;\n\n for (const key in props) {\n const value = props[key];\n if (isSkippedProp(key)) continue;\n\n const eventName = parseEventName(key);\n\n // Handle removal cases\n if (value === undefined || value === null || value === false) {\n if (key === 'class' || key === 'className') {\n el.className = '';\n } else if (eventName && existingListeners?.has(eventName)) {\n const entry = existingListeners.get(eventName)!;\n if (entry.options !== undefined) {\n el.removeEventListener(eventName, entry.handler, entry.options);\n } else {\n el.removeEventListener(eventName, entry.handler);\n }\n existingListeners.delete(eventName);\n } else {\n el.removeAttribute(key);\n }\n continue;\n }\n\n if (key === 'class' || key === 'className') {\n el.className = String(value);\n } else if (key === 'value' || key === 'checked') {\n (el as HTMLElement & Record<string, unknown>)[key] = value;\n } else if (eventName) {\n if (existingListeners && existingListeners.size > 0) {\n (desiredEventNames ??= new Set()).add(eventName);\n }\n\n const existing = existingListeners?.get(eventName);\n // If handler reference unchanged, keep existing wrapped handler\n if (existing && existing.original === value) {\n continue;\n }\n\n // Remove old handler if present\n if (existing) {\n if (existing.options !== undefined) {\n el.removeEventListener(eventName, existing.handler, existing.options);\n } else {\n el.removeEventListener(eventName, existing.handler);\n }\n }\n\n // Add new handler\n const wrappedHandler = createWrappedHandler(\n value as EventListener,\n false\n );\n const options = getPassiveOptions(eventName);\n\n if (options !== undefined) {\n el.addEventListener(eventName, wrappedHandler, options);\n } else {\n el.addEventListener(eventName, wrappedHandler);\n }\n\n if (!elementListeners.has(el)) {\n elementListeners.set(el, new Map());\n }\n elementListeners.get(el)!.set(eventName, {\n handler: wrappedHandler,\n original: value as EventListener,\n options,\n });\n } else {\n el.setAttribute(key, String(value));\n }\n }\n\n // Remove any remaining listeners not desired by current props\n if (existingListeners && existingListeners.size > 0) {\n // If no event props were present, all existing listeners are undesired.\n if (desiredEventNames === null) {\n for (const [eventName, entry] of existingListeners) {\n if (entry.options !== undefined) {\n el.removeEventListener(eventName, entry.handler, entry.options);\n } else {\n el.removeEventListener(eventName, entry.handler);\n }\n }\n elementListeners.delete(el);\n } else {\n for (const [eventName, entry] of existingListeners) {\n if (!desiredEventNames.has(eventName)) {\n if (entry.options !== undefined) {\n el.removeEventListener(eventName, entry.handler, entry.options);\n } else {\n el.removeEventListener(eventName, entry.handler);\n }\n existingListeners.delete(eventName);\n }\n }\n if (existingListeners.size === 0) elementListeners.delete(el);\n }\n }\n\n // Update children\n if (updateChildren) {\n const children =\n vnode.children || (props.children as VNode | VNode[] | undefined);\n updateElementChildren(el, children);\n }\n}\n\nexport function updateElementChildren(\n el: Element,\n children: VNode | VNode[] | undefined\n): void {\n if (!children) {\n el.textContent = '';\n return;\n }\n\n if (\n !Array.isArray(children) &&\n (typeof children === 'string' || typeof children === 'number')\n ) {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === 3) {\n (el.firstChild as Text).data = String(children);\n } else {\n el.textContent = String(children);\n }\n return;\n }\n\n if (Array.isArray(children)) {\n updateUnkeyedChildren(el, children as unknown[]);\n return;\n }\n\n el.textContent = '';\n const dom = createDOMNode(children);\n if (dom) el.appendChild(dom);\n}\n\nexport function updateUnkeyedChildren(\n parent: Element,\n newChildren: unknown[]\n): void {\n const existing = Array.from(parent.children);\n\n // Special case: if we have a single text/number child and the parent has a single text node,\n // update the text node in place to preserve identity\n if (\n newChildren.length === 1 &&\n existing.length === 0 &&\n parent.childNodes.length === 1\n ) {\n const firstNewChild = newChildren[0];\n const firstExisting = parent.firstChild;\n if (\n (typeof firstNewChild === 'string' ||\n typeof firstNewChild === 'number') &&\n firstExisting?.nodeType === 3 // Text node\n ) {\n (firstExisting as Text).data = String(firstNewChild);\n return;\n }\n }\n\n // If there are only text nodes (no element children), clear before updating\n if (existing.length === 0 && parent.childNodes.length > 0) {\n parent.textContent = '';\n }\n const max = Math.max(existing.length, newChildren.length);\n\n for (let i = 0; i < max; i++) {\n const current = existing[i];\n const next = newChildren[i];\n\n // Remove extra existing children\n if (next === undefined && current) {\n // Clean up any component instance mounted on this node\n cleanupInstanceIfPresent(current);\n current.remove();\n continue;\n }\n\n // Append new children beyond existing length\n if (!current && next !== undefined) {\n const dom = createDOMNode(next);\n if (dom) parent.appendChild(dom);\n continue;\n }\n\n if (!current || next === undefined) continue;\n\n // Update existing element based on next vnode/primitive\n if (typeof next === 'string' || typeof next === 'number') {\n current.textContent = String(next);\n } else if (_isDOMElement(next)) {\n if (typeof next.type === 'string') {\n // If element type matches, update in place; otherwise replace\n if (tagsEqualIgnoreCase(current.tagName, next.type)) {\n updateElementFromVnode(current, next);\n } else {\n const dom = createDOMNode(next);\n if (dom) {\n if (current instanceof Element) removeAllListeners(current);\n cleanupInstanceIfPresent(current);\n parent.replaceChild(dom, current);\n }\n }\n } else {\n // Non-string types: replace conservatively\n const dom = createDOMNode(next);\n if (dom) {\n if (current instanceof Element) removeAllListeners(current);\n cleanupInstanceIfPresent(current);\n parent.replaceChild(dom, current);\n }\n }\n } else {\n // Fallback for other types: replace\n const dom = createDOMNode(next);\n if (dom) {\n if (current instanceof Element) removeAllListeners(current);\n cleanupInstanceIfPresent(current);\n parent.replaceChild(dom, current);\n }\n }\n }\n}\n\n/**\n * Positional update for keyed lists where keys changed en-masse but structure\n * (element tags and simple text children) remains identical. This updates\n * text content in-place and remaps the `data-key` attribute to the new key so\n * subsequent updates can find elements by their data-key.\n */\nexport function performBulkPositionalKeyedTextUpdate(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n) {\n const total = keyedVnodes.length;\n let reused = 0;\n let updatedKeys = 0;\n const t0 = now();\n const debugFastPath =\n process.env.ASKR_FASTPATH_DEBUG === '1' ||\n process.env.ASKR_FASTPATH_DEBUG === 'true';\n\n for (let i = 0; i < total; i++) {\n const { key, vnode } = keyedVnodes[i];\n const ch = parent.children[i] as Element | undefined;\n\n if (\n ch &&\n _isDOMElement(vnode) &&\n typeof (vnode as DOMElement).type === 'string'\n ) {\n const vnodeType = (vnode as DOMElement).type as string;\n\n if (tagsEqualIgnoreCase(ch.tagName, vnodeType)) {\n const children =\n (vnode as DOMElement).children ||\n (vnode as DOMElement).props?.children;\n\n if (debugFastPath) {\n logFastPathDebug('positional idx', i, {\n chTag: ch.tagName,\n vnodeType,\n chChildNodes: ch.childNodes.length,\n childrenType: Array.isArray(children) ? 'array' : typeof children,\n });\n }\n\n updateTextContent(ch, children, vnode as DOMElement);\n setDataKey(ch, key, () => updatedKeys++);\n reused++;\n continue;\n } else {\n if (debugFastPath) {\n logFastPathDebug('positional tag mismatch', i, {\n chTag: ch.tagName,\n vnodeType,\n });\n }\n }\n } else {\n if (debugFastPath) {\n logFastPathDebug('positional missing or invalid', i, { ch: !!ch });\n }\n }\n\n // Fallback: replace the node at position i\n replaceNodeAtPosition(parent, i, vnode);\n }\n\n const t = now() - t0;\n updateKeyedElementsMap(parent, keyedVnodes);\n\n const stats = { n: total, reused, updatedKeys, t } as const;\n recordFastPathStats(stats, 'bulkKeyedPositionalHits');\n\n return stats;\n}\n\n/** Update text content of element from children prop */\nfunction updateTextContent(\n el: Element,\n children: unknown,\n vnode: DOMElement\n): void {\n if (typeof children === 'string' || typeof children === 'number') {\n setTextNodeData(el, String(children));\n } else if (\n Array.isArray(children) &&\n children.length === 1 &&\n (typeof children[0] === 'string' || typeof children[0] === 'number')\n ) {\n setTextNodeData(el, String(children[0]));\n } else {\n // For more complex child shapes, try a small specialized text update before\n // falling back to a real vnode-driven update.\n if (!tryUpdateTwoChildTextPattern(el, vnode)) {\n updateElementFromVnode(el, vnode);\n }\n }\n}\n\n// Common keyed-list pattern in benches:\n// <div> [ <span>text</span>, <p>text</p> ]\n// Update text nodes in place without running a full vnode diff.\nfunction tryUpdateTwoChildTextPattern(\n parentEl: Element,\n vnode: DOMElement\n): boolean {\n const vnodeChildren = vnode.children || vnode.props?.children;\n if (!Array.isArray(vnodeChildren) || vnodeChildren.length !== 2) return false;\n\n const c0 = vnodeChildren[0];\n const c1 = vnodeChildren[1];\n if (!_isDOMElement(c0) || !_isDOMElement(c1)) return false;\n if (typeof c0.type !== 'string' || typeof c1.type !== 'string') return false;\n\n const el0 = parentEl.children[0] as Element | undefined;\n const el1 = parentEl.children[1] as Element | undefined;\n if (!el0 || !el1) return false;\n\n if (!tagsEqualIgnoreCase(el0.tagName, c0.type)) return false;\n if (!tagsEqualIgnoreCase(el1.tagName, c1.type)) return false;\n\n const t0 = (c0.children || c0.props?.children) as unknown;\n const t1 = (c1.children || c1.props?.children) as unknown;\n\n if (typeof t0 === 'string' || typeof t0 === 'number') {\n setTextNodeData(el0, String(t0));\n } else if (\n Array.isArray(t0) &&\n t0.length === 1 &&\n (typeof t0[0] === 'string' || typeof t0[0] === 'number')\n ) {\n setTextNodeData(el0, String(t0[0]));\n } else {\n return false;\n }\n\n if (typeof t1 === 'string' || typeof t1 === 'number') {\n setTextNodeData(el1, String(t1));\n } else if (\n Array.isArray(t1) &&\n t1.length === 1 &&\n (typeof t1[0] === 'string' || typeof t1[0] === 'number')\n ) {\n setTextNodeData(el1, String(t1[0]));\n } else {\n return false;\n }\n\n return true;\n}\n\n/** Set text node data or textContent */\nfunction setTextNodeData(el: Element, text: string): void {\n if (el.childNodes.length === 1 && el.firstChild?.nodeType === 3) {\n (el.firstChild as Text).data = text;\n } else {\n el.textContent = text;\n }\n}\n\n/** Set data-key attribute with counter callback */\nfunction setDataKey(\n el: Element,\n key: string | number,\n onSet: () => void\n): void {\n try {\n const next = String(key);\n if (el.getAttribute('data-key') === next) return;\n el.setAttribute('data-key', next);\n onSet();\n } catch {\n // Ignore errors setting data-key\n }\n}\n\nfunction upperCommonTagName(tag: string): string | null {\n // Fast common tags (avoid per-iteration allocations).\n switch (tag) {\n case 'div':\n return 'DIV';\n case 'span':\n return 'SPAN';\n case 'p':\n return 'P';\n case 'a':\n return 'A';\n case 'button':\n return 'BUTTON';\n case 'input':\n return 'INPUT';\n case 'ul':\n return 'UL';\n case 'ol':\n return 'OL';\n case 'li':\n return 'LI';\n default:\n return null;\n }\n}\n\nfunction tagNamesEqualIgnoreCase(a: string, b: string): boolean {\n if (a === b) return true;\n const len = a.length;\n if (len !== b.length) return false;\n\n for (let i = 0; i < len; i++) {\n const ac = a.charCodeAt(i);\n const bc = b.charCodeAt(i);\n\n if (ac === bc) continue;\n\n // ASCII-only case fold; tag names are ASCII.\n const an = ac >= 65 && ac <= 90 ? ac + 32 : ac; // A-Z -> a-z\n const bn = bc >= 65 && bc <= 90 ? bc + 32 : bc;\n if (an !== bn) return false;\n }\n\n return true;\n}\n\nfunction tagsEqualIgnoreCase(\n elementTagName: string,\n vnodeType: string\n): boolean {\n const upperCommon = upperCommonTagName(vnodeType);\n if (upperCommon !== null && elementTagName === upperCommon) return true;\n // Works for HTML and non-HTML elements without allocating.\n return tagNamesEqualIgnoreCase(elementTagName, vnodeType);\n}\n\n/** Replace node at position with new vnode */\nfunction replaceNodeAtPosition(\n parent: Element,\n index: number,\n vnode: VNode\n): void {\n const dom = createDOMNode(vnode);\n if (dom) {\n const existing = parent.children[index];\n if (existing) {\n cleanupInstanceIfPresent(existing);\n parent.replaceChild(dom, existing);\n } else {\n parent.appendChild(dom);\n }\n }\n}\n\n/** Update keyed elements map after bulk operation */\nfunction updateKeyedElementsMap(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n): void {\n try {\n // HOT PATH: reuse the existing map to avoid per-update allocations.\n const existing = keyedElements.get(parent);\n const newKeyMap = existing\n ? (existing.clear(), existing)\n : new Map<string | number, Element>();\n for (let i = 0; i < keyedVnodes.length; i++) {\n const k = keyedVnodes[i].key;\n const ch = parent.children[i] as Element | undefined;\n if (ch) newKeyMap.set(k, ch);\n }\n keyedElements.set(parent, newKeyMap);\n } catch {\n // Ignore errors updating key map\n }\n}\n\nexport function performBulkTextReplace(parent: Element, newChildren: VNode[]) {\n const t0 = now();\n const existing = Array.from(parent.childNodes);\n const finalNodes: Node[] = [];\n let reused = 0;\n let created = 0;\n\n for (let i = 0; i < newChildren.length; i++) {\n const result = processChildNode(newChildren[i], existing[i], finalNodes);\n if (result === 'reused') reused++;\n else if (result === 'created') created++;\n }\n\n const tBuild = now() - t0;\n const tCommit = commitBulkReplace(parent, finalNodes);\n\n // Clear keyed map for unkeyed path\n keyedElements.delete(parent);\n\n const stats = {\n n: newChildren.length,\n reused,\n created,\n tBuild,\n tCommit,\n } as const;\n recordBulkTextStats(stats);\n\n return stats;\n}\n\n/** Process a single child vnode for bulk replace */\nfunction processChildNode(\n vnode: VNode,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' | 'skipped' {\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return processTextVnode(String(vnode), existingNode, finalNodes);\n }\n\n if (typeof vnode === 'object' && vnode !== null && 'type' in vnode) {\n return processElementVnode(vnode, existingNode, finalNodes);\n }\n\n return 'skipped';\n}\n\n/** Process text vnode */\nfunction processTextVnode(\n text: string,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' {\n if (existingNode && existingNode.nodeType === 3) {\n (existingNode as Text).data = text;\n finalNodes.push(existingNode);\n return 'reused';\n }\n finalNodes.push(document.createTextNode(text));\n return 'created';\n}\n\n/** Process element vnode */\nfunction processElementVnode(\n vnode: VNode,\n existingNode: ChildNode | undefined,\n finalNodes: Node[]\n): 'reused' | 'created' | 'skipped' {\n const vnodeObj = vnode as unknown as { type?: unknown };\n\n if (typeof vnodeObj.type === 'string') {\n const tag = vnodeObj.type;\n if (\n existingNode &&\n existingNode.nodeType === 1 &&\n tagsEqualIgnoreCase((existingNode as Element).tagName, tag)\n ) {\n updateElementFromVnode(existingNode as Element, vnode);\n finalNodes.push(existingNode);\n return 'reused';\n }\n }\n\n const dom = createDOMNode(vnode);\n if (dom) {\n finalNodes.push(dom);\n return 'created';\n }\n return 'skipped';\n}\n\n/** Clean up nodes that will be removed */\n/** Commit bulk replace with fragment */\nfunction commitBulkReplace(parent: Element, nodes: Node[]): number {\n const fragStart = Date.now();\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < nodes.length; i++) {\n fragment.appendChild(nodes[i]);\n }\n\n // Cleanup nodes that will be removed.\n // At this point, any reused nodes have been moved into the fragment, so\n // whatever remains under `parent` will be removed by replaceChildren.\n try {\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n if (n instanceof Element) removeAllListeners(n);\n cleanupInstanceIfPresent(n);\n n = next;\n }\n } catch {\n // SLOW PATH: cleanup failure\n }\n\n recordDOMReplace('bulk-text-replace');\n parent.replaceChildren(fragment);\n return Date.now() - fragStart;\n}\n\n/** Record bulk text fast-path stats */\nfunction recordBulkTextStats(stats: {\n n: number;\n reused: number;\n created: number;\n tBuild: number;\n tCommit: number;\n}): void {\n try {\n __ASKR_set('__LAST_BULK_TEXT_FASTPATH_STATS', stats);\n __ASKR_set('__LAST_FASTPATH_STATS', stats);\n __ASKR_set('__LAST_FASTPATH_COMMIT_COUNT', 1);\n __ASKR_incCounter('bulkTextFastpathHits');\n } catch {\n // Ignore stats errors\n }\n}\n\n/**\n * Heuristic to detect large bulk text-dominant updates eligible for fast-path.\n * Conditions:\n * - total children >= threshold\n * - majority of children are simple text (string/number) or intrinsic elements\n * with a single primitive child\n * - conservative: avoid when component children or complex shapes present\n */\nexport function isBulkTextFastPathEligible(\n parent: Element,\n newChildren: VNode[]\n) {\n const threshold = Number(process.env.ASKR_BULK_TEXT_THRESHOLD) || 1024;\n const requiredFraction = 0.8;\n\n const total = Array.isArray(newChildren) ? newChildren.length : 0;\n\n if (total < threshold) {\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n reason: 'too-small',\n total,\n threshold,\n });\n return false;\n }\n\n const result = countSimpleChildren(newChildren);\n if (result.componentFound !== undefined) {\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n reason: 'component-child',\n index: result.componentFound,\n });\n return false;\n }\n\n const fraction = result.simple / total;\n const eligible =\n fraction >= requiredFraction && parent.childNodes.length >= total;\n\n recordBulkDiag({\n phase: 'bulk-unkeyed-eligible',\n total,\n simple: result.simple,\n fraction,\n requiredFraction,\n eligible,\n });\n\n return eligible;\n}\n\n/** Count simple children (text/number or simple intrinsic elements) */\nfunction countSimpleChildren(children: VNode[]): {\n simple: number;\n componentFound?: number;\n} {\n let simple = 0;\n\n for (let i = 0; i < children.length; i++) {\n const c = children[i];\n\n if (typeof c === 'string' || typeof c === 'number') {\n simple++;\n continue;\n }\n\n if (typeof c === 'object' && c !== null && 'type' in c) {\n const dv = c as DOMElement;\n\n // Component child - decline fast path\n if (typeof dv.type === 'function') {\n return { simple, componentFound: i };\n }\n\n if (typeof dv.type === 'string' && isSimpleElement(dv)) {\n simple++;\n }\n }\n }\n\n return { simple };\n}\n\n/** Check if element is simple (empty or single text child) */\nfunction isSimpleElement(dv: DOMElement): boolean {\n const children = dv.children || dv.props?.children;\n\n if (!children) return true; // empty element\n\n if (typeof children === 'string' || typeof children === 'number') {\n return true;\n }\n\n if (\n Array.isArray(children) &&\n children.length === 1 &&\n (typeof children[0] === 'string' || typeof children[0] === 'number')\n ) {\n return true;\n }\n\n return false;\n}\n\n/** Record bulk diagnostics */\nfunction recordBulkDiag(data: Record<string, unknown>): void {\n if (\n process.env.NODE_ENV !== 'production' ||\n process.env.ASKR_FASTPATH_DEBUG === '1'\n ) {\n try {\n __ASKR_set('__BULK_DIAG', data);\n } catch {\n // Ignore\n }\n }\n}\n","import type { VNode } from './types';\nimport { createDOMNode } from './dom';\nimport { _reconcilerRecordedParents } from './keyed';\nimport { logger } from '../dev/logger';\nimport { cleanupInstanceIfPresent, removeAllListeners } from './cleanup';\nimport { __ASKR_set, __ASKR_incCounter } from './diag';\nimport { isSchedulerExecuting } from '../runtime/scheduler';\nimport { isBulkCommitActive, markFastPathApplied } from '../runtime/fastlane';\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\n// Apply the \"renderer\" fast-path: build final node list reusing existing\n// elements by key when possible, then perform a single atomic replaceChildren\n// commit. Returns a new key map when the fast-path is applied, otherwise\n// returns null to indicate the caller should continue with fallback paths.\nexport function applyRendererFastPath(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>,\n oldKeyMap?: Map<string | number, Element>,\n unkeyedVnodes?: VNode[]\n): Map<string | number, Element> | null {\n // SSR guard: fast-path is DOM-specific\n if (typeof document === 'undefined') return null;\n\n const totalKeyed = keyedVnodes.length;\n if (totalKeyed === 0 && (!unkeyedVnodes || unkeyedVnodes.length === 0))\n return null;\n\n // Dev invariant: ensure we are executing inside the scheduler/commit flush\n if (!isSchedulerExecuting()) {\n logger.warn(\n '[Askr][FASTPATH][DEV] Fast-path reconciliation invoked outside scheduler execution'\n );\n }\n\n // Choose lookup strategy depending on size (linear scan for small lists)\n let parentChildrenArr: Element[] | undefined;\n let localOldKeyMap: Map<string | number, Element> | undefined;\n\n if (totalKeyed <= 20) {\n try {\n const pc = parent.children;\n parentChildrenArr = new Array(pc.length);\n for (let i = 0; i < pc.length; i++)\n parentChildrenArr[i] = pc[i] as Element;\n } catch (e) {\n parentChildrenArr = undefined;\n void e;\n }\n } else {\n localOldKeyMap = new Map<string | number, Element>();\n try {\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n const k = ch.getAttribute('data-key');\n if (k !== null) {\n localOldKeyMap.set(k, ch);\n const n = Number(k);\n if (!Number.isNaN(n)) localOldKeyMap.set(n, ch);\n }\n }\n } catch (e) {\n localOldKeyMap = undefined;\n void e;\n }\n }\n\n const finalNodes: Node[] = [];\n let mapLookups = 0;\n let createdNodes = 0;\n let reusedCount = 0;\n\n for (let i = 0; i < keyedVnodes.length; i++) {\n const { key, vnode } = keyedVnodes[i];\n mapLookups++;\n\n let el: Element | undefined;\n if (totalKeyed <= 20 && parentChildrenArr) {\n const ks = String(key);\n for (let j = 0; j < parentChildrenArr.length; j++) {\n const ch = parentChildrenArr[j];\n const k = ch.getAttribute('data-key');\n if (k !== null && (k === ks || Number(k) === (key as number))) {\n el = ch;\n break;\n }\n }\n if (!el) el = oldKeyMap?.get(key);\n } else {\n el = localOldKeyMap?.get(key as string | number) ?? oldKeyMap?.get(key);\n }\n\n if (el) {\n finalNodes.push(el);\n reusedCount++;\n } else {\n const newEl = createDOMNode(vnode);\n if (newEl) {\n finalNodes.push(newEl);\n createdNodes++;\n }\n }\n }\n\n // Add unkeyed nodes (detached as well)\n if (unkeyedVnodes && unkeyedVnodes.length) {\n for (const vnode of unkeyedVnodes) {\n const newEl = createDOMNode(vnode);\n if (newEl) {\n finalNodes.push(newEl);\n createdNodes++;\n }\n }\n }\n\n // Atomic commit\n try {\n const tFragmentStart = Date.now();\n const fragment = document.createDocumentFragment();\n let fragmentAppendCount = 0;\n for (let i = 0; i < finalNodes.length; i++) {\n fragment.appendChild(finalNodes[i]);\n fragmentAppendCount++;\n }\n\n // Pre-cleanup: remove component instances that will be removed by replaceChildren\n try {\n // At this point, any reused nodes have been moved into the fragment,\n // so whatever remains under parent will be removed by replaceChildren.\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n if (n instanceof Element) removeAllListeners(n);\n cleanupInstanceIfPresent(n);\n n = next;\n }\n } catch (e) {\n void e;\n }\n\n try {\n __ASKR_incCounter('__DOM_REPLACE_COUNT');\n __ASKR_set('__LAST_DOM_REPLACE_STACK_FASTPATH', new Error().stack);\n } catch (e) {\n void e;\n }\n\n parent.replaceChildren(fragment);\n\n // Record that we performed exactly one DOM commit.\n try {\n __ASKR_set('__LAST_FASTPATH_COMMIT_COUNT', 1);\n } catch (e) {\n void e;\n }\n\n // If a runtime bulk commit is active, mark this parent as fast-path applied.\n try {\n if (isBulkCommitActive()) markFastPathApplied(parent);\n } catch (e) {\n void e;\n }\n\n // Phase: bookkeeping - populate newKeyMap\n const newKeyMap = new Map<string | number, Element>();\n for (let i = 0; i < keyedVnodes.length; i++) {\n const key = keyedVnodes[i].key;\n const node = finalNodes[i];\n if (node instanceof Element) newKeyMap.set(key, node as Element);\n }\n\n // Dev tracing\n try {\n const stats = {\n n: totalKeyed,\n moves: 0,\n lisLen: 0,\n t_lookup: 0,\n t_fragment: Date.now() - tFragmentStart,\n t_commit: 0,\n t_bookkeeping: 0,\n fragmentAppendCount,\n mapLookups,\n createdNodes,\n reusedCount,\n } as const;\n if (typeof globalThis !== 'undefined') {\n __ASKR_set('__LAST_FASTPATH_STATS', stats);\n __ASKR_set('__LAST_FASTPATH_REUSED', reusedCount > 0);\n __ASKR_incCounter('fastpathHistoryPush');\n }\n if (\n process.env.ASKR_FASTPATH_DEBUG === '1' ||\n process.env.ASKR_FASTPATH_DEBUG === 'true'\n ) {\n logger.warn(\n '[Askr][FASTPATH]',\n JSON.stringify({ n: totalKeyed, createdNodes, reusedCount })\n );\n }\n } catch (e) {\n void e;\n }\n\n // Record that reconciler recorded stats for this parent in this pass\n try {\n _reconcilerRecordedParents.add(parent);\n } catch (e) {\n void e;\n }\n\n return newKeyMap;\n } catch (e) {\n void e;\n return null;\n }\n}\n","import type { VNode } from './types';\nimport {\n createDOMNode,\n updateElementFromVnode,\n performBulkPositionalKeyedTextUpdate,\n} from './dom';\nimport {\n keyedElements,\n _reconcilerRecordedParents,\n isKeyedReorderFastPathEligible,\n} from './keyed';\nimport { removeAllListeners, cleanupInstanceIfPresent } from './cleanup';\nimport { isBulkCommitActive } from '../runtime/fastlane';\nimport { __ASKR_set, __ASKR_incCounter } from './diag';\nimport { applyRendererFastPath } from './fastpath';\nimport {\n extractKey,\n checkPropChanges,\n recordFastPathStats,\n recordDOMReplace,\n} from './utils';\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\n// Helper type for narrowings\ntype VnodeObj = VNode & { type?: unknown; props?: Record<string, unknown> };\n\nfunction tagNamesEqualIgnoreCase(a: string, b: string): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const ca = a.charCodeAt(i);\n const cb = b.charCodeAt(i);\n if (ca === cb) continue;\n // Fast ASCII case-fold: A-Z (65-90) -> a-z (97-122)\n const fa = ca >= 65 && ca <= 90 ? ca + 32 : ca;\n const fb = cb >= 65 && cb <= 90 ? cb + 32 : cb;\n if (fa !== fb) return false;\n }\n return true;\n}\n\nexport function reconcileKeyedChildren(\n parent: Element,\n newChildren: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> {\n const { keyedVnodes, unkeyedVnodes } = partitionChildren(newChildren);\n\n // Try fast paths first\n const fastPathResult = tryFastPaths(\n parent,\n newChildren,\n keyedVnodes,\n unkeyedVnodes,\n oldKeyMap\n );\n if (fastPathResult) return fastPathResult;\n\n // Full reconciliation\n return performFullReconciliation(parent, newChildren, keyedVnodes, oldKeyMap);\n}\n\n/** Partition children into keyed and unkeyed */\nfunction partitionChildren(newChildren: VNode[]): {\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>;\n unkeyedVnodes: VNode[];\n} {\n const keyedVnodes: Array<{ key: string | number; vnode: VNode }> = [];\n const unkeyedVnodes: VNode[] = [];\n\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i];\n const key = extractKey(child);\n if (key !== undefined) {\n keyedVnodes.push({ key, vnode: child });\n } else {\n unkeyedVnodes.push(child);\n }\n }\n\n return { keyedVnodes, unkeyedVnodes };\n}\n\n/** Try fast paths before full reconciliation */\nfunction tryFastPaths(\n parent: Element,\n newChildren: VNode[],\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>,\n unkeyedVnodes: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> | null {\n try {\n // Try renderer fast-path for large keyed reorder-only updates\n const rendererResult = tryRendererFastPath(\n parent,\n newChildren,\n keyedVnodes,\n unkeyedVnodes,\n oldKeyMap\n );\n if (rendererResult) return rendererResult;\n\n // Try positional bulk update for medium-sized lists\n const positionalResult = tryPositionalBulkUpdate(parent, keyedVnodes);\n if (positionalResult) return positionalResult;\n } catch {\n // Fall through to full reconciliation\n }\n\n return null;\n}\n\n/** Try renderer fast-path */\nfunction tryRendererFastPath(\n parent: Element,\n newChildren: VNode[],\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>,\n unkeyedVnodes: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> | null {\n const decision = isKeyedReorderFastPathEligible(\n parent,\n newChildren,\n oldKeyMap\n );\n\n if (\n (decision.useFastPath && keyedVnodes.length >= 128) ||\n isBulkCommitActive()\n ) {\n try {\n const map = applyRendererFastPath(\n parent,\n keyedVnodes,\n oldKeyMap,\n unkeyedVnodes\n );\n if (map) {\n keyedElements.set(parent, map);\n return map;\n }\n } catch {\n // Fall through\n }\n }\n\n return null;\n}\n\n/** Try positional bulk update for medium-sized lists */\nfunction tryPositionalBulkUpdate(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n): Map<string | number, Element> | null {\n const total = keyedVnodes.length;\n if (total < 10) return null;\n\n const matchCount = countPositionalMatches(parent, keyedVnodes);\n\n // Require high positional match fraction\n if (matchCount / total < 0.9) return null;\n\n // Check for prop changes that would prevent positional update\n if (hasPositionalPropChanges(parent, keyedVnodes)) return null;\n\n // Perform positional update\n try {\n const stats = performBulkPositionalKeyedTextUpdate(parent, keyedVnodes);\n recordFastPathStats(stats, 'bulkKeyedPositionalHits');\n\n rebuildKeyedMap(parent);\n return keyedElements.get(parent) as Map<string | number, Element>;\n } catch {\n return null;\n }\n}\n\n/** Count how many vnodes match parent children by position and tag */\nfunction countPositionalMatches(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n): number {\n let matchCount = 0;\n\n try {\n for (let i = 0; i < keyedVnodes.length; i++) {\n const vnode = keyedVnodes[i].vnode as VnodeObj;\n if (!vnode || typeof vnode !== 'object' || typeof vnode.type !== 'string')\n continue;\n\n const el = parent.children[i] as Element | undefined;\n if (!el) continue;\n\n if (tagNamesEqualIgnoreCase(el.tagName, vnode.type)) {\n matchCount++;\n }\n }\n } catch {\n // Ignore\n }\n\n return matchCount;\n}\n\n/** Check if positional prop changes would prevent bulk update */\nfunction hasPositionalPropChanges(\n parent: Element,\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>\n): boolean {\n try {\n for (let i = 0; i < keyedVnodes.length; i++) {\n const vnode = keyedVnodes[i].vnode as VnodeObj;\n const el = parent.children[i] as Element | undefined;\n if (!el || !vnode || typeof vnode !== 'object') continue;\n\n if (checkPropChanges(el, vnode.props || {})) {\n return true;\n }\n }\n } catch {\n return true;\n }\n\n return false;\n}\n\n/** Rebuild keyed map from parent children */\nfunction rebuildKeyedMap(parent: Element): void {\n try {\n const map = new Map<string | number, Element>();\n for (let el = parent.firstElementChild; el; el = el.nextElementSibling) {\n const k = el.getAttribute('data-key');\n if (k !== null) {\n map.set(k, el);\n const n = Number(k);\n if (!Number.isNaN(n)) map.set(n, el);\n }\n }\n keyedElements.set(parent, map);\n } catch {\n // Ignore\n }\n}\n\n/** Perform full reconciliation when fast paths don't apply */\nfunction performFullReconciliation(\n parent: Element,\n newChildren: VNode[],\n keyedVnodes: Array<{ key: string | number; vnode: VNode }>,\n oldKeyMap: Map<string | number, Element> | undefined\n): Map<string | number, Element> {\n const newKeyMap = new Map<string | number, Element>();\n const finalNodes: Node[] = [];\n const usedOldEls = new WeakSet<Node>();\n\n const resolveOldElOnce = createOldElResolver(parent, oldKeyMap, usedOldEls);\n\n // Positional reconciliation\n for (let i = 0; i < newChildren.length; i++) {\n const child = newChildren[i];\n const node = reconcileSingleChild(\n child,\n i,\n parent,\n resolveOldElOnce,\n usedOldEls,\n newKeyMap\n );\n if (node) finalNodes.push(node);\n }\n\n // SSR guard\n if (typeof document === 'undefined') return newKeyMap;\n\n commitReconciliation(parent, finalNodes);\n keyedElements.delete(parent);\n\n return newKeyMap;\n}\n\n/** Create resolver for finding old elements by key */\nfunction createOldElResolver(\n parent: Element,\n oldKeyMap: Map<string | number, Element> | undefined,\n usedOldEls: WeakSet<Node>\n): (k: string | number) => Element | undefined {\n return (k: string | number) => {\n if (!oldKeyMap) return undefined;\n\n // Fast-path: directly from oldKeyMap\n const direct = oldKeyMap.get(k);\n if (direct && !usedOldEls.has(direct)) {\n usedOldEls.add(direct);\n return direct;\n }\n\n // Try string form\n const s = String(k);\n const byString = oldKeyMap.get(s);\n if (byString && !usedOldEls.has(byString)) {\n usedOldEls.add(byString);\n return byString;\n }\n\n // Try numeric form\n const n = Number(s);\n if (!Number.isNaN(n)) {\n const byNum = oldKeyMap.get(n);\n if (byNum && !usedOldEls.has(byNum)) {\n usedOldEls.add(byNum);\n return byNum;\n }\n }\n\n // Fallback: scan parent children\n return scanForElementByKey(parent, k, s, usedOldEls);\n };\n}\n\n/** Scan parent children for element with matching key */\nfunction scanForElementByKey(\n parent: Element,\n k: string | number,\n keyStr: string,\n usedOldEls: WeakSet<Node>\n): Element | undefined {\n try {\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n if (usedOldEls.has(ch)) continue;\n const attr = ch.getAttribute('data-key');\n if (attr === keyStr) {\n usedOldEls.add(ch);\n return ch;\n }\n if (attr !== null) {\n const numAttr = Number(attr);\n if (!Number.isNaN(numAttr) && numAttr === (k as number)) {\n usedOldEls.add(ch);\n return ch;\n }\n }\n }\n } catch {\n // Ignore\n }\n return undefined;\n}\n\n/** Reconcile a single child */\nfunction reconcileSingleChild(\n child: VNode,\n index: number,\n parent: Element,\n resolveOldElOnce: (k: string | number) => Element | undefined,\n usedOldEls: WeakSet<Node>,\n newKeyMap: Map<string | number, Element>\n): Node | null {\n // Keyed child\n const key = extractKey(child);\n if (key !== undefined) {\n return reconcileKeyedChild(child, key, parent, resolveOldElOnce, newKeyMap);\n }\n\n // Unkeyed or primitive child\n return reconcileUnkeyedChild(child, index, parent, usedOldEls);\n}\n\n/** Reconcile a keyed child */\nfunction reconcileKeyedChild(\n child: VNode,\n key: string | number,\n parent: Element,\n resolveOldElOnce: (k: string | number) => Element | undefined,\n newKeyMap: Map<string | number, Element>\n): Node | null {\n const el = resolveOldElOnce(key);\n\n if (el && el.parentElement === parent) {\n // Strict keyed guarantee: if the element tag changes for an existing key,\n // replace the DOM node rather than mutating in place.\n try {\n const childObj = child as VnodeObj;\n if (\n childObj &&\n typeof childObj === 'object' &&\n typeof childObj.type === 'string'\n ) {\n if (tagNamesEqualIgnoreCase(el.tagName, childObj.type)) {\n updateElementFromVnode(el, child);\n newKeyMap.set(key, el);\n return el;\n }\n }\n } catch {\n // Fall through to replacement\n }\n }\n\n const dom = createDOMNode(child);\n if (dom) {\n if (dom instanceof Element) newKeyMap.set(key, dom);\n return dom;\n }\n\n return null;\n}\n\n/** Reconcile an unkeyed or primitive child */\nfunction reconcileUnkeyedChild(\n child: VNode,\n index: number,\n parent: Element,\n usedOldEls: WeakSet<Node>\n): Node | null {\n try {\n const existing = parent.children[index] as Element | undefined;\n\n // Primitive child with existing element\n if (\n existing &&\n (typeof child === 'string' || typeof child === 'number') &&\n existing.nodeType === 1\n ) {\n existing.textContent = String(child);\n usedOldEls.add(existing);\n return existing;\n }\n\n // Element child matching existing unkeyed element\n if (canReuseElement(existing, child)) {\n updateElementFromVnode(existing!, child);\n usedOldEls.add(existing!);\n return existing!;\n }\n\n // Try to find available unkeyed element elsewhere\n const avail = findAvailableUnkeyedElement(parent, usedOldEls);\n if (avail) {\n const reuseResult = tryReuseElement(avail, child, usedOldEls);\n if (reuseResult) return reuseResult;\n }\n } catch {\n // Fall through to create new\n }\n\n const dom = createDOMNode(child);\n return dom;\n}\n\n/** Check if existing element can be reused for child */\nfunction canReuseElement(existing: Element | undefined, child: VNode): boolean {\n if (!existing) return false;\n if (typeof child !== 'object' || child === null || !('type' in child))\n return false;\n\n const childObj = child as VnodeObj;\n const existingKey = existing.getAttribute('data-key');\n const hasNoKey = existingKey === null || existingKey === undefined;\n\n return (\n hasNoKey &&\n typeof childObj.type === 'string' &&\n tagNamesEqualIgnoreCase(existing.tagName, childObj.type)\n );\n}\n\n/** Find available unkeyed element in parent */\nfunction findAvailableUnkeyedElement(\n parent: Element,\n usedOldEls: WeakSet<Node>\n): Element | undefined {\n for (let ch = parent.firstElementChild; ch; ch = ch.nextElementSibling) {\n if (usedOldEls.has(ch)) continue;\n if (ch.getAttribute('data-key') === null) return ch;\n }\n return undefined;\n}\n\n/** Try to reuse available element for child */\nfunction tryReuseElement(\n avail: Element,\n child: VNode,\n usedOldEls: WeakSet<Node>\n): Node | null {\n if (typeof child === 'string' || typeof child === 'number') {\n avail.textContent = String(child);\n usedOldEls.add(avail);\n return avail;\n }\n\n if (typeof child === 'object' && child !== null && 'type' in child) {\n const childObj = child as VnodeObj;\n if (\n typeof childObj.type === 'string' &&\n tagNamesEqualIgnoreCase(avail.tagName, childObj.type)\n ) {\n updateElementFromVnode(avail, child);\n usedOldEls.add(avail);\n return avail;\n }\n }\n\n return null;\n}\n\n/** Commit reconciliation by replacing parent children */\nfunction commitReconciliation(parent: Element, finalNodes: Node[]): void {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < finalNodes.length; i++) {\n fragment.appendChild(finalNodes[i]);\n }\n\n // Cleanup existing nodes\n try {\n // HOT PATH: avoid Array.from(parent.childNodes) allocation\n for (let n = parent.firstChild; n; ) {\n const next = n.nextSibling;\n if (n instanceof Element) removeAllListeners(n);\n cleanupInstanceIfPresent(n);\n n = next;\n }\n } catch {\n // SLOW PATH: cleanup failure (dev-only diagnostics live elsewhere)\n // Ignore\n }\n\n recordDOMReplace('reconcile');\n parent.replaceChildren(fragment);\n}\n","import { logger } from '../dev/logger';\nimport type { Props } from '../common/props';\nimport { elementListeners } from './cleanup';\nimport { keyedElements } from './keyed';\nimport { reconcileKeyedChildren } from './reconcile';\nimport { _isDOMElement, type DOMElement, type VNode } from './types';\nimport {\n createDOMNode,\n updateElementFromVnode,\n updateUnkeyedChildren,\n performBulkPositionalKeyedTextUpdate,\n performBulkTextReplace,\n isBulkTextFastPathEligible,\n} from './dom';\nimport { __ASKR_set, __ASKR_incCounter } from './diag';\nimport { Fragment } from '../common/jsx';\nimport {\n createWrappedHandler,\n extractKey,\n getPassiveOptions,\n parseEventName,\n} from './utils';\n\n/**\n * Internal marker for component-owned DOM ranges\n * Allows efficient partial DOM updates instead of clearing entire target\n */\ninterface DOMRange {\n start: Node; // Start marker (comment node)\n end: Node; // End marker (comment node)\n}\n\nexport const IS_DOM_AVAILABLE = typeof document !== 'undefined';\n\nconst domRanges = new WeakMap<object, DOMRange>();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helper Types & Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface SimpleTextResult {\n isSimple: true;\n text: string;\n}\n\ninterface NotSimpleTextResult {\n isSimple: false;\n text?: undefined;\n}\n\ntype TextCheckResult = SimpleTextResult | NotSimpleTextResult;\n\nfunction tagNamesEqualIgnoreCase(a: string, b: string): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const ca = a.charCodeAt(i);\n const cb = b.charCodeAt(i);\n if (ca === cb) continue;\n const fa = ca >= 65 && ca <= 90 ? ca + 32 : ca;\n const fb = cb >= 65 && cb <= 90 ? cb + 32 : cb;\n if (fa !== fb) return false;\n }\n return true;\n}\n\n/**\n * Check if vnode children represent a simple text value\n */\nfunction checkSimpleText(vnodeChildren: unknown): TextCheckResult {\n if (!Array.isArray(vnodeChildren)) {\n if (\n typeof vnodeChildren === 'string' ||\n typeof vnodeChildren === 'number'\n ) {\n return { isSimple: true, text: String(vnodeChildren) };\n }\n } else if (vnodeChildren.length === 1) {\n const child = vnodeChildren[0];\n if (typeof child === 'string' || typeof child === 'number') {\n return { isSimple: true, text: String(child) };\n }\n }\n return { isSimple: false };\n}\n\n/**\n * Try to update a single text node in place\n * Returns true if update was performed, false otherwise\n */\nfunction tryUpdateTextInPlace(element: Element, text: string): boolean {\n if (\n element.childNodes.length === 1 &&\n element.firstChild?.nodeType === 3 // TEXT_NODE\n ) {\n (element.firstChild as Text).data = text;\n return true;\n }\n return false;\n}\n\n/**\n * Build a key map from existing DOM children\n */\nfunction buildKeyMapFromDOM(parent: Element): Map<string | number, Element> {\n const keyMap = new Map<string | number, Element>();\n for (\n let child = parent.firstElementChild;\n child;\n child = child.nextElementSibling\n ) {\n const k = child.getAttribute('data-key');\n if (k !== null) {\n keyMap.set(k, child);\n const n = Number(k);\n if (!Number.isNaN(n)) keyMap.set(n, child);\n }\n }\n return keyMap;\n}\n\n/**\n * Get or initialize key map for an element\n */\nfunction getOrBuildKeyMap(\n parent: Element\n): Map<string | number, Element> | undefined {\n let keyMap = keyedElements.get(parent);\n if (!keyMap) {\n keyMap = buildKeyMapFromDOM(parent);\n if (keyMap.size > 0) {\n keyedElements.set(parent, keyMap);\n }\n }\n return keyMap.size > 0 ? keyMap : undefined;\n}\n\n/**\n * Check if children array contains keyed elements\n */\nfunction hasKeyedChildren(children: unknown[]): boolean {\n for (let i = 0; i < children.length; i++) {\n if (extractKey(children[i]) !== undefined) return true;\n }\n return false;\n}\n\n/**\n * Track bulk text fast-path stats (dev only)\n */\nfunction trackBulkTextStats(\n stats: ReturnType<typeof performBulkTextReplace>\n): void {\n if (process.env.NODE_ENV !== 'production') {\n try {\n __ASKR_set('__LAST_BULK_TEXT_FASTPATH_STATS', stats);\n __ASKR_incCounter('bulkTextHits');\n } catch {\n // ignore\n }\n }\n}\n\n/**\n * Track bulk text miss (dev only)\n */\nfunction trackBulkTextMiss(): void {\n if (process.env.NODE_ENV !== 'production') {\n try {\n __ASKR_incCounter('bulkTextMisses');\n } catch {\n // ignore\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Child Reconciliation Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Reconcile keyed children with optional forced bulk path\n */\nfunction reconcileKeyed(\n parent: Element,\n children: VNode[],\n oldKeyMap: Map<string | number, Element> | undefined\n): void {\n // Optional forced positional bulk path for large keyed lists\n if (process.env.ASKR_FORCE_BULK_POSREUSE === '1') {\n const result = tryForcedBulkKeyedPath(parent, children);\n if (result) return;\n }\n\n // Standard keyed reconciliation\n const newKeyMap = reconcileKeyedChildren(parent, children, oldKeyMap);\n keyedElements.set(parent, newKeyMap);\n}\n\n/**\n * Try the forced bulk keyed positional path\n * Returns true if applied, false to fall back to normal reconciliation\n */\nfunction tryForcedBulkKeyedPath(parent: Element, children: VNode[]): boolean {\n try {\n const keyedVnodes: Array<{ key: string | number; vnode: VNode }> = [];\n for (const child of children) {\n if (_isDOMElement(child) && (child as DOMElement).key !== undefined) {\n keyedVnodes.push({\n key: (child as DOMElement).key as string | number,\n vnode: child,\n });\n }\n }\n\n // Only apply when all children are keyed and count matches\n if (keyedVnodes.length === 0 || keyedVnodes.length !== children.length) {\n return false;\n }\n\n if (\n process.env.ASKR_FASTPATH_DEBUG === '1' ||\n process.env.ASKR_FASTPATH_DEBUG === 'true'\n ) {\n logger.warn(\n '[Askr][FASTPATH] forced positional bulk keyed reuse (evaluate-level)'\n );\n }\n\n const stats = performBulkPositionalKeyedTextUpdate(parent, keyedVnodes);\n\n if (\n process.env.NODE_ENV !== 'production' ||\n process.env.ASKR_FASTPATH_DEBUG === '1'\n ) {\n try {\n __ASKR_set('__LAST_FASTPATH_STATS', stats);\n __ASKR_set('__LAST_FASTPATH_COMMIT_COUNT', 1);\n __ASKR_incCounter('bulkKeyedPositionalForced');\n } catch {\n // ignore\n }\n }\n\n // Rebuild keyed map from DOM\n const newMap = buildKeyMapFromDOM(parent);\n keyedElements.set(parent, newMap);\n return true;\n } catch (err) {\n if (\n process.env.ASKR_FASTPATH_DEBUG === '1' ||\n process.env.ASKR_FASTPATH_DEBUG === 'true'\n ) {\n logger.warn(\n '[Askr][FASTPATH] forced bulk path failed, falling back',\n err\n );\n }\n return false;\n }\n}\n\n/**\n * Reconcile unkeyed children, using bulk fast-path when eligible\n */\nfunction reconcileUnkeyed(parent: Element, children: VNode[]): void {\n if (isBulkTextFastPathEligible(parent, children)) {\n const stats = performBulkTextReplace(parent, children);\n trackBulkTextStats(stats);\n } else {\n trackBulkTextMiss();\n updateUnkeyedChildren(parent, children);\n }\n keyedElements.delete(parent);\n}\n\n/**\n * Update element children (handles keyed, unkeyed, and non-array cases)\n */\nfunction updateElementChildren(element: Element, vnodeChildren: unknown): void {\n if (!vnodeChildren) {\n element.textContent = '';\n keyedElements.delete(element);\n return;\n }\n\n if (!Array.isArray(vnodeChildren)) {\n element.textContent = '';\n const dom = createDOMNode(vnodeChildren);\n if (dom) element.appendChild(dom);\n keyedElements.delete(element);\n return;\n }\n\n if (hasKeyedChildren(vnodeChildren)) {\n const oldKeyMap = getOrBuildKeyMap(element);\n try {\n reconcileKeyed(element, vnodeChildren, oldKeyMap);\n } catch {\n // Fall back on error\n const newKeyMap = reconcileKeyedChildren(\n element,\n vnodeChildren,\n oldKeyMap\n );\n keyedElements.set(element, newKeyMap);\n }\n } else {\n reconcileUnkeyed(element, vnodeChildren);\n }\n}\n\n/**\n * Perform a smart update on an existing element\n * Tries text-in-place update first, then full child reconciliation\n */\nfunction smartUpdateElement(element: Element, vnode: DOMElement): void {\n const vnodeChildren = vnode.children || vnode.props?.children;\n const textCheck = checkSimpleText(vnodeChildren);\n\n if (textCheck.isSimple && tryUpdateTextInPlace(element, textCheck.text)) {\n // Text updated in place, nothing more to do for children\n } else {\n updateElementChildren(element, vnodeChildren);\n }\n\n updateElementFromVnode(element, vnode, false);\n}\n\n/**\n * Process Fragment children with smart updates for each child\n */\nfunction processFragmentChildren(target: Element, childArray: unknown[]): void {\n // Avoid Array.from(target.children) (expensive in jsdom).\n // Iterate via sibling pointers; semantics remain element-only (as before).\n let existingNode: Element | null = target.firstElementChild;\n\n for (let i = 0; i < childArray.length; i++) {\n const childVnode = childArray[i];\n const nextExisting = existingNode ? existingNode.nextElementSibling : null;\n\n // Apply the same smart update logic as the single-element case\n if (\n existingNode &&\n _isDOMElement(childVnode) &&\n typeof (childVnode as DOMElement).type === 'string' &&\n tagNamesEqualIgnoreCase(\n existingNode.tagName,\n (childVnode as DOMElement).type as string\n )\n ) {\n // Same element type - do smart update\n smartUpdateElement(existingNode, childVnode as DOMElement);\n existingNode = nextExisting;\n continue;\n }\n\n // Different type or no existing node - replace\n const newDom = createDOMNode(childVnode);\n if (newDom) {\n if (existingNode) {\n target.replaceChild(newDom, existingNode);\n } else {\n target.appendChild(newDom);\n }\n }\n\n existingNode = nextExisting;\n }\n\n // Remove extra element-children (preserves previous element-only behavior)\n while (existingNode) {\n const next = existingNode.nextElementSibling;\n target.removeChild(existingNode);\n existingNode = next;\n }\n}\n\n/**\n * Apply props/attributes to an element (used for first render with keyed children)\n */\nfunction applyPropsToElement(el: Element, props: Props): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children' || key === 'key') continue;\n if (value === undefined || value === null || value === false) continue;\n\n const eventName = parseEventName(key);\n if (eventName) {\n const wrappedHandler = createWrappedHandler(\n value as EventListener,\n false\n );\n const options = getPassiveOptions(eventName);\n\n if (options !== undefined)\n el.addEventListener(eventName, wrappedHandler, options);\n else el.addEventListener(eventName, wrappedHandler);\n\n if (!elementListeners.has(el)) elementListeners.set(el, new Map());\n elementListeners.get(el)!.set(eventName, {\n handler: wrappedHandler,\n original: value as EventListener,\n options,\n });\n continue;\n }\n\n if (key === 'class' || key === 'className') {\n el.className = String(value);\n } else if (key === 'value' || key === 'checked') {\n (el as HTMLElement & Props)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n }\n}\n\n/**\n * Try to handle first render of element with keyed children\n * Returns true if handled, false to fall back to default rendering\n */\nfunction tryFirstRenderKeyedChildren(\n target: Element,\n vnode: DOMElement\n): boolean {\n const children = vnode.children;\n if (!Array.isArray(children) || !hasKeyedChildren(children)) {\n return false;\n }\n\n const el = document.createElement(vnode.type as string);\n target.appendChild(el);\n\n applyPropsToElement(el, vnode.props || {});\n\n const newKeyMap = reconcileKeyedChildren(el, children, undefined);\n keyedElements.set(el, newKeyMap);\n return true;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Fragment Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a vnode is a Fragment\n */\nfunction isFragment(vnode: unknown): vnode is DOMElement {\n return (\n _isDOMElement(vnode) &&\n typeof (vnode as DOMElement).type === 'symbol' &&\n ((vnode as DOMElement).type === Fragment ||\n String((vnode as DOMElement).type) === 'Symbol(askr.fragment)')\n );\n}\n\n/**\n * Unwrap Fragment to get children array\n */\nfunction getFragmentChildren(vnode: DOMElement): unknown[] {\n const fragmentChildren = vnode.props?.children || vnode.children || [];\n return Array.isArray(fragmentChildren)\n ? fragmentChildren\n : [fragmentChildren];\n}\n\nexport function evaluate(\n node: unknown,\n target: Element | null,\n context?: object\n): void {\n if (!target) return;\n // SSR guard: avoid DOM ops when not in a browser-like environment\n if (typeof document === 'undefined') {\n if (process.env.NODE_ENV !== 'production') {\n try {\n // Keep this lightweight and non-throwing so test harnesses and SSR\n // imports don't crash at runtime; callers should avoid calling\n // `evaluate` in SSR, but we make it safe as a no-op.\n console.warn('[Askr] evaluate() called in non-DOM environment; no-op.');\n } catch (e) {\n void e;\n }\n }\n return;\n }\n // Debug tracing to help understand why initial mounts sometimes don't\n // result in DOM mutations during tests.\n\n // If context provided, use component-owned DOM range (only replace that range)\n if (context && domRanges.has(context)) {\n const range = domRanges.get(context)!;\n // Remove all nodes between start and end markers\n let current = range.start.nextSibling;\n while (current && current !== range.end) {\n const next = current.nextSibling;\n current.remove();\n current = next;\n }\n // Append new DOM before end marker\n const dom = createDOMNode(node);\n if (dom) {\n target.insertBefore(dom, range.end);\n }\n } else if (context) {\n // First render with context: create range markers\n const start = document.createComment('component-start');\n const end = document.createComment('component-end');\n target.appendChild(start);\n target.appendChild(end);\n domRanges.set(context, { start, end });\n // Render into the range\n const dom = createDOMNode(node);\n if (dom) {\n target.insertBefore(dom, end);\n }\n } else {\n // Root render (no context): smart update strategy\n // If target has exactly one child of the same element type as the vnode,\n // reuse the element and just update its content.\n // This preserves the element reference and event handlers across renders.\n\n let vnode = node;\n\n // If vnode is a Fragment, unwrap it to get the actual content for the smart update path.\n // Fragments become invisible in the DOM - their children are placed directly in the parent.\n // So for smart updates, we need to compare against the Fragment's children, not the Fragment itself.\n if (isFragment(vnode)) {\n const childArray = getFragmentChildren(vnode as DOMElement);\n // If Fragment has exactly one child that's an element, unwrap to that child\n // This allows the smart update path to match against it\n if (\n childArray.length === 1 &&\n _isDOMElement(childArray[0]) &&\n typeof (childArray[0] as DOMElement).type === 'string'\n ) {\n vnode = childArray[0];\n } else {\n // Fragment with multiple children - process each child with full smart update logic\n processFragmentChildren(target, childArray);\n return;\n }\n }\n\n const firstChild = target.children[0] as Element | undefined;\n\n if (\n firstChild &&\n _isDOMElement(vnode) &&\n typeof vnode.type === 'string' &&\n tagNamesEqualIgnoreCase(firstChild.tagName, vnode.type)\n ) {\n // Reuse the existing element - it's the same type\n smartUpdateElement(firstChild, vnode as DOMElement);\n } else {\n // Clear and rebuild (first render or structure changed)\n target.textContent = '';\n\n // Check if this is an element with keyed children even on first render\n if (\n _isDOMElement(vnode) &&\n typeof vnode.type === 'string' &&\n tryFirstRenderKeyedChildren(target, vnode as DOMElement)\n ) {\n return;\n }\n\n // Default: create whole tree\n const dom = createDOMNode(vnode);\n if (dom) {\n target.appendChild(dom);\n }\n }\n }\n}\n\nexport function clearDOMRange(context: object): void {\n domRanges.delete(context);\n}\n","// Renderer barrel entrypoint.\n// Keep this file small: re-export the public surface and attach the\n// runtime fast-lane bridge on import.\n\nexport * from './types';\nexport * from './cleanup';\nexport * from './keyed';\nexport * from './dom';\nexport { evaluate, clearDOMRange } from './evaluate';\n\nimport { evaluate as _evaluate } from './evaluate';\nimport { isKeyedReorderFastPathEligible, getKeyMapForElement } from './keyed';\n\n// Expose minimal renderer bridge for runtime fast-lane to call `evaluate`\nif (typeof globalThis !== 'undefined') {\n const _g = globalThis as Record<string, unknown>;\n _g.__ASKR_RENDERER = {\n evaluate: _evaluate,\n isKeyedReorderFastPathEligible,\n getKeyMapForElement,\n };\n}\n","/**\n * Component instance lifecycle management\n * Internal only — users never see this\n */\n\nimport { type State } from './state';\nimport { globalScheduler } from './scheduler';\nimport type { Props } from '../common/props';\nimport type { ComponentFunction } from '../common/component';\nimport {\n // withContext is the sole primitive for context restoration\n withContext,\n type ContextFrame,\n} from './context';\nimport { logger } from '../dev/logger';\nimport { __ASKR_incCounter, __ASKR_set } from '../renderer/diag';\n\nexport type { ComponentFunction } from '../common/component';\n\nexport interface ComponentInstance {\n id: string;\n fn: ComponentFunction;\n props: Props;\n target: Element | null;\n mounted: boolean;\n abortController: AbortController; // Per-component abort lifecycle\n ssr?: boolean; // Set to true for SSR temporary instances\n // Opt-in strict cleanup mode: when true cleanup errors are aggregated and re-thrown\n cleanupStrict?: boolean;\n stateValues: State<unknown>[]; // Persistent state storage across renders\n evaluationGeneration: number; // Prevents stale async evaluation completions\n notifyUpdate: (() => void) | null; // Callback for state updates (persisted on instance)\n // Internal: prebound helpers to avoid per-update closures (allocation hot-path)\n _pendingFlushTask?: () => void; // Clears hasPendingUpdate and triggers notifyUpdate\n _pendingRunTask?: () => void; // Clears hasPendingUpdate and runs component\n _enqueueRun?: () => void; // Batches run requests and enqueues _pendingRunTask\n stateIndexCheck: number; // Track state indices to catch conditional calls\n expectedStateIndices: number[]; // Expected sequence of state indices (frozen after first render)\n firstRenderComplete: boolean; // Flag to detect transition from first to subsequent renders\n mountOperations: Array<\n () => void | (() => void) | Promise<void | (() => void)>\n >; // Operations to run when component mounts\n cleanupFns: Array<() => void>; // Cleanup functions to run on unmount\n hasPendingUpdate: boolean; // Flag to batch state updates (coalescing)\n ownerFrame: ContextFrame | null; // Provider chain for this component (set by Scope, never overwritten)\n isRoot?: boolean;\n\n // Render-tracking for precise subscriptions (internal)\n _currentRenderToken?: number; // Token for the in-progress render (set before render)\n lastRenderToken?: number; // Token of the last *committed* render\n _pendingReadStates?: Set<State<unknown>>; // States read during the in-progress render\n _lastReadStates?: Set<State<unknown>>; // States read during the last committed render\n\n // Placeholder for null-returning components. When a component initially returns\n // null, we create a comment placeholder so updates can replace it with content.\n _placeholder?: Comment;\n}\n\nexport function createComponentInstance(\n id: string,\n fn: ComponentFunction,\n props: Props,\n target: Element | null\n): ComponentInstance {\n const instance: ComponentInstance = {\n id,\n fn,\n props,\n target,\n mounted: false,\n abortController: new AbortController(), // Create per-component\n stateValues: [],\n evaluationGeneration: 0,\n notifyUpdate: null,\n // Prebound helpers (initialized below) to avoid per-update allocations\n _pendingFlushTask: undefined,\n _pendingRunTask: undefined,\n _enqueueRun: undefined,\n stateIndexCheck: -1,\n expectedStateIndices: [],\n firstRenderComplete: false,\n mountOperations: [],\n cleanupFns: [],\n hasPendingUpdate: false,\n ownerFrame: null, // Will be set by renderer when vnode is marked\n ssr: false,\n cleanupStrict: false,\n isRoot: false,\n\n // Render-tracking (for precise state subscriptions)\n _currentRenderToken: undefined,\n lastRenderToken: 0,\n _pendingReadStates: new Set(),\n _lastReadStates: new Set(),\n };\n\n // Initialize prebound helper tasks once per instance to avoid allocations\n instance._pendingRunTask = () => {\n // Clear pending flag when the run task executes\n instance.hasPendingUpdate = false;\n // Execute component run (will set up notifyUpdate before render)\n runComponent(instance);\n };\n\n instance._enqueueRun = () => {\n if (!instance.hasPendingUpdate) {\n instance.hasPendingUpdate = true;\n // Enqueue single run task (coalesces multiple writes)\n globalScheduler.enqueue(instance._pendingRunTask!);\n }\n };\n\n instance._pendingFlushTask = () => {\n // Called by state.set() when we want to flush a pending update\n instance.hasPendingUpdate = false;\n // Trigger a run via enqueue helper — this will schedule the component run\n instance._enqueueRun?.();\n };\n\n return instance;\n}\n\nlet currentInstance: ComponentInstance | null = null;\nlet stateIndex = 0;\n\n// Export for state.ts to access\nexport function getCurrentComponentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\n// Export for SSR to set temporary instance\nexport function setCurrentComponentInstance(\n instance: ComponentInstance | null\n): void {\n currentInstance = instance;\n}\n\n/**\n * Register a mount operation that will run after the component is mounted\n * Used by operations (task, on, timer, etc) to execute after render completes\n */\nimport { isBulkCommitActive } from './fastlane';\nimport { evaluate, cleanupInstancesUnder } from '../renderer';\n\nexport function registerMountOperation(\n operation: () => void | (() => void) | Promise<void | (() => void)>\n): void {\n const instance = getCurrentComponentInstance();\n if (instance) {\n // If we're in bulk-commit fast lane, registering mount operations is a\n // violation of the fast-lane preconditions. Throw in dev, otherwise ignore\n // silently in production (we must avoid scheduling work during bulk commit).\n if (isBulkCommitActive()) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'registerMountOperation called during bulk commit fast-lane'\n );\n }\n return;\n }\n instance.mountOperations.push(operation);\n }\n}\n\n/**\n * Execute all mount operations for a component\n * These run after the component is rendered and mounted to the DOM\n */\nfunction executeMountOperations(instance: ComponentInstance): void {\n // Only execute mount operations for root app instance. Child component\n // operations are currently registered but should not be executed (per\n // contract tests). They remain registered for cleanup purposes.\n if (!instance.isRoot) return;\n\n for (const operation of instance.mountOperations) {\n const result = operation();\n if (result instanceof Promise) {\n result.then((cleanup) => {\n if (typeof cleanup === 'function') {\n instance.cleanupFns.push(cleanup);\n }\n });\n } else if (typeof result === 'function') {\n instance.cleanupFns.push(result);\n }\n }\n // Clear the operations array so they don't run again on subsequent renders\n instance.mountOperations = [];\n}\n\nexport function mountInstanceInline(\n instance: ComponentInstance,\n target: Element | null\n): void {\n instance.target = target;\n // Record backref on host element so renderer can clean up when the\n // node is removed. Avoids leaks if the node is detached or replaced.\n try {\n if (target instanceof Element)\n (\n target as Element & { __ASKR_INSTANCE?: ComponentInstance }\n ).__ASKR_INSTANCE = instance;\n } catch (err) {\n void err;\n }\n\n // Ensure notifyUpdate is available for async resource completions that may\n // try to trigger re-render. This mirrors the setup in executeComponent().\n // Use prebound enqueue helper to avoid allocating a new closure\n instance.notifyUpdate = instance._enqueueRun!;\n\n const wasFirstMount = !instance.mounted;\n instance.mounted = true;\n if (wasFirstMount && instance.mountOperations.length > 0) {\n executeMountOperations(instance);\n }\n}\n\n/**\n * Run a component synchronously: execute function, handle result\n * This is the internal workhorse that manages async continuations and generation tracking.\n * Must always be called through the scheduler.\n *\n * ACTOR INVARIANT: This function is enqueued as a task, never called directly.\n */\nlet _globalRenderCounter = 0;\n\nfunction runComponent(instance: ComponentInstance): void {\n // CRITICAL: Ensure notifyUpdate is available for state.set() calls during this render.\n // This must be set before executeComponentSync() runs, not after.\n // Use prebound enqueue helper to avoid allocating per-render closures\n instance.notifyUpdate = instance._enqueueRun!;\n\n // Assign a token for this in-progress render and start a fresh pending-read set\n instance._currentRenderToken = ++_globalRenderCounter;\n instance._pendingReadStates = new Set();\n\n // Atomic rendering: capture DOM state for rollback on error\n const domSnapshot = instance.target ? instance.target.innerHTML : '';\n\n const result = executeComponentSync(instance);\n if (result instanceof Promise) {\n // Async components are not supported. Components must be synchronous and\n // must not return a Promise from their render function.\n throw new Error(\n 'Async components are not supported. Components must be synchronous.'\n );\n } else {\n // Try runtime fast-lane synchronously; if it activates we do not enqueue\n // follow-up work and the commit happens atomically in this task.\n // (Runtime fast-lane has conservative preconditions.)\n const fastlaneBridge = (\n globalThis as {\n __ASKR_FASTLANE?: {\n tryRuntimeFastLaneSync?: (\n instance: unknown,\n result: unknown\n ) => boolean;\n };\n }\n ).__ASKR_FASTLANE;\n try {\n const used = fastlaneBridge?.tryRuntimeFastLaneSync?.(instance, result);\n if (used) return;\n } catch (err) {\n // If invariant check failed in dev, surface the error; otherwise fall back\n if (process.env.NODE_ENV !== 'production') throw err;\n }\n\n // Fallback: enqueue the render/commit normally\n globalScheduler.enqueue(() => {\n // Handle placeholder-based updates: when a component initially returned null,\n // we created a comment placeholder. If it now has content, we need to create\n // a host element and replace the placeholder.\n if (!instance.target && instance._placeholder) {\n // Component previously returned null (has placeholder), check if now has content\n if (result === null || result === undefined) {\n // Still null - nothing to do, keep placeholder\n finalizeReadSubscriptions(instance);\n return;\n }\n\n // Has content now - need to create DOM and replace placeholder\n const placeholder = instance._placeholder;\n const parent = placeholder.parentNode;\n if (!parent) {\n // Placeholder was removed from DOM - can't render\n logger.warn(\n '[Askr] placeholder no longer in DOM, cannot render component'\n );\n return;\n }\n\n // Create a new host element for the content\n const host = document.createElement('div');\n\n // Set up instance for normal updates\n const oldInstance = currentInstance;\n currentInstance = instance;\n try {\n evaluate(result, host);\n\n // Replace placeholder with host\n parent.replaceChild(host, placeholder);\n\n // Set up instance for future updates\n instance.target = host;\n instance._placeholder = undefined;\n (\n host as Element & { __ASKR_INSTANCE?: ComponentInstance }\n ).__ASKR_INSTANCE = instance;\n\n finalizeReadSubscriptions(instance);\n } finally {\n currentInstance = oldInstance;\n }\n return;\n }\n\n if (instance.target) {\n // Keep `oldChildren` in the outer scope so rollback handlers can\n // reference the original node list even if the inner try block\n // throws. This preserves listeners and instance backrefs on rollback.\n let oldChildren: Node[] = [];\n try {\n const wasFirstMount = !instance.mounted;\n // Ensure nested component executions during evaluation have access to\n // the current component instance. This allows nested components to\n // call `state()`, `resource()`, and other runtime helpers which\n // rely on `getCurrentComponentInstance()` being available.\n const oldInstance = currentInstance;\n currentInstance = instance;\n // Capture snapshot of current children (by reference) so we can\n // restore them on render failure without losing event listeners or\n // instance attachments.\n oldChildren = Array.from(instance.target.childNodes);\n\n try {\n evaluate(result, instance.target);\n } catch (e) {\n // If evaluation failed, attempt to cleanup any partially-added nodes\n // and restore the old children to preserve listeners and instances.\n try {\n const newChildren = Array.from(instance.target.childNodes);\n for (const n of newChildren) {\n try {\n cleanupInstancesUnder(n);\n } catch (err) {\n logger.warn(\n '[Askr] error cleaning up failed commit children:',\n err\n );\n }\n }\n } catch (_err) {\n void _err;\n }\n\n // Restore original children by re-inserting the old node references\n // this preserves attached listeners and instance backrefs.\n try {\n __ASKR_incCounter('__DOM_REPLACE_COUNT');\n __ASKR_set(\n '__LAST_DOM_REPLACE_STACK_COMPONENT_RESTORE',\n new Error().stack\n );\n } catch (e) {\n void e;\n }\n instance.target.replaceChildren(...oldChildren);\n throw e;\n } finally {\n currentInstance = oldInstance;\n }\n\n // Commit succeeded — finalize recorded state reads so subscriptions reflect\n // the last *committed* render. This updates per-state reader maps\n // deterministically and synchronously with the commit.\n finalizeReadSubscriptions(instance);\n\n instance.mounted = true;\n // Execute mount operations after first mount (do NOT run these with\n // currentInstance set - they may perform state mutations/registrations)\n if (wasFirstMount && instance.mountOperations.length > 0) {\n executeMountOperations(instance);\n }\n } catch (renderError) {\n // Atomic rendering: rollback on render error. Attempt non-lossy restore of\n // original child node references to preserve listeners/instances.\n try {\n const currentChildren = Array.from(instance.target.childNodes);\n for (const n of currentChildren) {\n try {\n cleanupInstancesUnder(n);\n } catch (err) {\n logger.warn(\n '[Askr] error cleaning up partial children during rollback:',\n err\n );\n }\n }\n } catch (_err) {\n void _err;\n }\n\n try {\n try {\n __ASKR_incCounter('__DOM_REPLACE_COUNT');\n __ASKR_set(\n '__LAST_DOM_REPLACE_STACK_COMPONENT_ROLLBACK',\n new Error().stack\n );\n } catch (e) {\n void e;\n }\n instance.target.replaceChildren(...oldChildren);\n } catch {\n // Fallback to innerHTML restore if replaceChildren fails for some reason.\n instance.target.innerHTML = domSnapshot;\n }\n\n throw renderError;\n }\n }\n });\n }\n}\n\n/**\n * Execute a component's render function synchronously.\n * Returns either a vnode/promise immediately (does NOT render).\n * Rendering happens separately through runComponent.\n */\nexport function renderComponentInline(\n instance: ComponentInstance\n): unknown | Promise<unknown> {\n // Ensure inline executions (rendered during parent's evaluate) still\n // receive a render token and have their state reads finalized so\n // subscriptions are correctly recorded. If this function is called\n // as part of a scheduled run, the token will already be set by\n // runComponent and we should not overwrite it.\n const hadToken = instance._currentRenderToken !== undefined;\n const prevToken = instance._currentRenderToken;\n const prevPendingReads = instance._pendingReadStates;\n if (!hadToken) {\n instance._currentRenderToken = ++_globalRenderCounter;\n instance._pendingReadStates = new Set();\n }\n\n try {\n const result = executeComponentSync(instance);\n // If we set the token for inline execution, finalize subscriptions now\n // because the component is effectively committed as part of the parent's\n // synchronous evaluation.\n if (!hadToken) {\n finalizeReadSubscriptions(instance);\n }\n return result;\n } finally {\n // Restore previous token/read states for nested inline render scenarios\n instance._currentRenderToken = prevToken;\n instance._pendingReadStates = prevPendingReads ?? new Set();\n }\n}\n\nfunction executeComponentSync(\n instance: ComponentInstance\n): unknown | Promise<unknown> {\n // Reset state index tracking for this render\n instance.stateIndexCheck = -1;\n\n // Reset read tracking for all existing state\n for (const state of instance.stateValues) {\n if (state) {\n state._hasBeenRead = false;\n }\n }\n\n // Prepare pending read set for this render (reads will be finalized on commit)\n instance._pendingReadStates = new Set();\n\n currentInstance = instance;\n stateIndex = 0;\n\n try {\n // Track render time in dev mode\n const renderStartTime =\n process.env.NODE_ENV !== 'production' ? Date.now() : 0;\n\n // Create context object with abort signal\n const context = {\n signal: instance.abortController.signal,\n };\n\n // Execute component within its owner frame (provider chain).\n // This ensures all context reads see the correct provider values.\n // We create a new execution frame whose parent is the ownerFrame. The\n // `values` map is lazily allocated to avoid per-render Map allocations\n // for components that do not use context.\n const executionFrame: ContextFrame = {\n parent: instance.ownerFrame,\n values: null,\n };\n const result = withContext(executionFrame, () =>\n instance.fn(instance.props, context)\n );\n\n // Check render time\n const renderTime = Date.now() - renderStartTime;\n if (renderTime > 5) {\n // Warn if render takes more than 5ms\n logger.warn(\n `[askr] Slow render detected: ${renderTime}ms. Consider optimizing component performance.`\n );\n }\n\n // Mark first render complete after successful execution\n // This enables hook order validation on subsequent renders\n if (!instance.firstRenderComplete) {\n instance.firstRenderComplete = true;\n }\n\n // Check for unused state\n for (let i = 0; i < instance.stateValues.length; i++) {\n const state = instance.stateValues[i];\n if (state && !state._hasBeenRead) {\n try {\n const name = instance.fn?.name || '<anonymous>';\n logger.warn(\n `[askr] Unused state variable detected in ${name} at index ${i}. State should be read during render or removed.`\n );\n } catch {\n logger.warn(\n `[askr] Unused state variable detected. State should be read during render or removed.`\n );\n }\n }\n }\n\n return result;\n } finally {\n // Synchronous path: we did not push a fresh frame, so nothing to pop here.\n currentInstance = null;\n }\n}\n\n/**\n * Public entry point: Execute component with full lifecycle (execute + render)\n * Handles both initial mount and re-execution. Always enqueues through scheduler.\n * Single entry point to avoid lifecycle divergence.\n */\nexport function executeComponent(instance: ComponentInstance): void {\n // Create a fresh abort controller on mount to allow remounting\n // (old one may have been aborted during previous cleanup)\n instance.abortController = new AbortController();\n\n // Setup notifyUpdate callback using prebound helper to avoid per-call closures\n instance.notifyUpdate = instance._enqueueRun!;\n\n // Enqueue the initial component run\n globalScheduler.enqueue(() => runComponent(instance));\n}\n\nexport function getCurrentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\n/**\n * Get the abort signal for the current component\n * Used to cancel async operations on unmount/navigation\n *\n * The signal is guaranteed to be aborted when:\n * - Component unmounts\n * - Navigation occurs (different route)\n * - Parent is destroyed\n *\n * IMPORTANT: getSignal() must be called during component render execution.\n * It captures the current component instance from context.\n *\n * @returns AbortSignal that will be aborted when component unmounts\n * @throws Error if called outside component execution\n *\n * @example\n * ```ts\n * // ✅ Correct: called during render, used in async operation\n * export async function UserPage({ id }: { id: string }) {\n * const signal = getSignal();\n * const user = await fetch(`/api/users/${id}`, { signal });\n * return <div>{user.name}</div>;\n * }\n *\n * // ✅ Correct: passed to event handler\n * export function Button() {\n * const signal = getSignal();\n * return {\n * type: 'button',\n * props: {\n * onClick: async () => {\n * const data = await fetch(url, { signal });\n * }\n * }\n * };\n * }\n *\n * // ❌ Wrong: called outside component context\n * const signal = getSignal(); // Error: not in component\n * ```\n */\nexport function getSignal(): AbortSignal {\n if (!currentInstance) {\n throw new Error(\n 'getSignal() can only be called during component render execution. ' +\n 'Ensure you are calling this from inside your component function.'\n );\n }\n return currentInstance.abortController.signal;\n}\n\n/**\n * Finalize read subscriptions for an instance after a successful commit.\n * - Update per-state readers map to point to this instance's last committed token\n * - Remove this instance from states it no longer reads\n * This is deterministic and runs synchronously with commit to ensure\n * subscribers are only notified when they actually read a state in their\n * last committed render.\n */\nexport function finalizeReadSubscriptions(instance: ComponentInstance): void {\n const newSet = instance._pendingReadStates ?? new Set();\n const oldSet = instance._lastReadStates ?? new Set();\n const token = instance._currentRenderToken;\n\n if (token === undefined) return;\n\n // Remove subscriptions for states that were read previously but not in this render\n for (const s of oldSet) {\n if (!newSet.has(s)) {\n const readers = (s as State<unknown>)._readers;\n if (readers) readers.delete(instance);\n }\n }\n\n // Commit token becomes the authoritative token for this instance's last render\n instance.lastRenderToken = token;\n\n // Record subscriptions for states read during this render\n for (const s of newSet) {\n let readers = (s as State<unknown>)._readers;\n if (!readers) {\n readers = new Map();\n // s is a State object; assign its _readers map\n (s as State<unknown>)._readers = readers;\n }\n readers.set(instance, instance.lastRenderToken ?? 0);\n }\n\n instance._lastReadStates = newSet;\n instance._pendingReadStates = new Set();\n instance._currentRenderToken = undefined;\n}\n\nexport function getNextStateIndex(): number {\n return stateIndex++;\n}\n\n/**\n * Mount a component instance.\n * This is just an alias to executeComponent() to maintain API compatibility.\n * All lifecycle logic is unified in executeComponent().\n */\nexport function mountComponent(instance: ComponentInstance): void {\n executeComponent(instance);\n}\n\n/**\n * Clean up component — abort pending operations\n * Called on unmount or route change\n */\nexport function cleanupComponent(instance: ComponentInstance): void {\n // Execute cleanup functions (from mount effects)\n const cleanupErrors: unknown[] = [];\n for (const cleanup of instance.cleanupFns) {\n try {\n cleanup();\n } catch (err) {\n if (instance.cleanupStrict) {\n cleanupErrors.push(err);\n } else {\n // Preserve previous behavior: log warnings in dev and continue\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('[Askr] cleanup function threw:', err);\n }\n }\n }\n }\n instance.cleanupFns = [];\n if (cleanupErrors.length > 0) {\n // If strict mode, surface all cleanup errors as an AggregateError after attempting all cleanups\n throw new AggregateError(\n cleanupErrors,\n `Cleanup failed for component ${instance.id}`\n );\n }\n\n // Remove deterministic state subscriptions for this instance\n if (instance._lastReadStates) {\n for (const s of instance._lastReadStates) {\n const readers = (s as State<unknown>)._readers;\n if (readers) readers.delete(instance);\n }\n instance._lastReadStates = new Set();\n }\n\n // Abort all pending operations\n instance.abortController.abort();\n\n // Clear update callback to prevent dangling references and stale updates\n instance.notifyUpdate = null;\n\n // Mark instance as unmounted so external tracking (e.g., portal host lists)\n // can deterministically prune stale instances. Not marking this leads to\n // retained \"mounted\" flags across cleanup boundaries which breaks\n // owner selection in the portal fallback.\n instance.mounted = false;\n}\n","/**\n * Path matching and parameter extraction\n */\n\nexport interface MatchResult {\n matched: boolean;\n params: Record<string, string>;\n}\n\n/**\n * Match a path against a route pattern and extract params\n *\n * @example\n * match('/users/123', '/users/{id}')\n * // → { matched: true, params: { id: '123' } }\n *\n * match('/posts/hello-world/edit', '/posts/{slug}/{action}')\n * // → { matched: true, params: { slug: 'hello-world', action: 'edit' } }\n *\n * match('/users', '/posts/{id}')\n * // → { matched: false, params: {} }\n */\nexport function match(path: string, pattern: string): MatchResult {\n // Normalize trailing slashes\n const normalizedPath =\n path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n const normalizedPattern =\n pattern.endsWith('/') && pattern !== '/' ? pattern.slice(0, -1) : pattern;\n\n // Split into segments\n const pathSegments = normalizedPath.split('/').filter(Boolean);\n const patternSegments = normalizedPattern.split('/').filter(Boolean);\n\n // Support catch-all route: /* matches any path at any depth\n if (patternSegments.length === 1 && patternSegments[0] === '*') {\n // For multi-segment paths, preserve the leading slash\n // For single-segment paths, return just the segment\n return {\n matched: true,\n params: {\n '*': pathSegments.length > 1 ? normalizedPath : pathSegments[0],\n },\n };\n }\n\n // Check if lengths match (wildcard segments still need to match one segment)\n if (pathSegments.length !== patternSegments.length) {\n return { matched: false, params: {} };\n }\n\n const params: Record<string, string> = {};\n\n // Match each segment\n for (let i = 0; i < patternSegments.length; i++) {\n const patternSegment = patternSegments[i];\n const pathSegment = pathSegments[i];\n\n // Parameter: {paramName}\n if (patternSegment.startsWith('{') && patternSegment.endsWith('}')) {\n const paramName = patternSegment.slice(1, -1);\n params[paramName] = decodeURIComponent(pathSegment);\n } else if (patternSegment === '*') {\n // Wildcard: match single segment\n params['*'] = pathSegment;\n } else if (patternSegment !== pathSegment) {\n // Literal segment mismatch\n return { matched: false, params: {} };\n }\n }\n\n return { matched: true, params };\n}\n","export type ExecutionModel = 'spa' | 'islands' | 'ssr';\n\nconst EXECUTION_MODEL_KEY = Symbol.for('__ASKR_EXECUTION_MODEL__');\n\nexport function getExecutionModel(): ExecutionModel | undefined {\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n return g[EXECUTION_MODEL_KEY] as ExecutionModel | undefined;\n}\n\nexport function assertExecutionModel(model: ExecutionModel): void {\n // Mixing execution models is forbidden: once an app starts in one model,\n // attempting to start another is an invariant violation.\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n const cur = g[EXECUTION_MODEL_KEY] as ExecutionModel | undefined;\n if (cur && cur !== model) {\n throw new Error(\n `[Askr] mixing execution models is not allowed (current: ${cur}, attempted: ${model}). ` +\n `Choose exactly one: createSPA, createSSR, or createIslands.`\n );\n }\n if (!cur) g[EXECUTION_MODEL_KEY] = model;\n}\n","/**\n * Route definition and matching\n * Supports dynamic route registration for micro frontends\n *\n * Optimization: Index by depth but maintain insertion order within each depth\n */\n\nimport { match as matchPath } from './match';\nimport { getCurrentComponentInstance } from '../runtime/component';\nimport { getExecutionModel } from '../runtime/execution-model';\n\nexport type {\n RouteHandler,\n Route,\n ResolvedRoute,\n RouteMatch,\n RouteQuery,\n RouteSnapshot,\n} from '../common/router';\n\nimport type {\n RouteHandler,\n Route,\n ResolvedRoute,\n RouteMatch,\n RouteQuery,\n RouteSnapshot,\n} from '../common/router';\n\nconst routes: Route[] = [];\nconst namespaces = new Set<string>();\n\nconst HAS_ROUTES_KEY = Symbol.for('__ASKR_HAS_ROUTES__');\n\nfunction setHasRoutes(value: boolean): void {\n try {\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n g[HAS_ROUTES_KEY] = value;\n } catch {\n // ignore\n }\n}\n\n// Initialize to false at module load.\nsetHasRoutes(false);\n\n// Route index by depth - maintains insertion order\nconst routesByDepth = new Map<number, Route[]>();\n\n/**\n * Parse route path depth\n */\nfunction getDepth(path: string): number {\n const normalized =\n path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n return normalized === '/' ? 0 : normalized.split('/').filter(Boolean).length;\n}\n\n/**\n * Calculate route specificity for priority matching\n * Higher score = more specific\n * - Literal segments: 3 points each\n * - Parameter segments ({id}): 2 points each\n * - Wildcard segments (*): 1 point each\n * - Catch-all (/*): 0 points\n */\nfunction getSpecificity(path: string): number {\n const normalized =\n path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n\n // Special case: catch-all pattern\n if (normalized === '/*') {\n return 0;\n }\n\n const segments = normalized.split('/').filter(Boolean);\n let score = 0;\n\n for (const segment of segments) {\n if (segment.startsWith('{') && segment.endsWith('}')) {\n score += 2; // Parameter\n } else if (segment === '*') {\n score += 1; // Wildcard\n } else {\n score += 3; // Literal\n }\n }\n\n return score;\n}\n\n// SSR helper: when rendering on the server, callers may set a location so that\n// render-time route() returns deterministic server values that match client\n// hydration. This is deliberately an opt-in escape for SSR and tests.\nlet serverLocation: string | null = null;\n\nexport function setServerLocation(url: string | null): void {\n serverLocation = url;\n}\n\n// Helper: parse a URL string into components\nfunction parseLocation(url: string) {\n try {\n const u = new URL(url, 'http://localhost');\n return { pathname: u.pathname, search: u.search, hash: u.hash };\n } catch {\n return { pathname: '/', search: '', hash: '' };\n }\n}\n\n// Deep freeze utility for small objects\nfunction deepFreeze<T>(obj: T): T {\n if (obj && typeof obj === 'object' && !Object.isFrozen(obj)) {\n Object.freeze(obj as Record<string, unknown>);\n for (const key of Object.keys(obj as Record<string, unknown>)) {\n const value = (obj as Record<string, unknown>)[key];\n if (value && typeof value === 'object') deepFreeze(value);\n }\n }\n return obj;\n}\n\n// Build an immutable query helper from a search string\nfunction makeQuery(search: string): RouteQuery {\n const usp = new URLSearchParams(search || '');\n const mapping = new Map<string, string[]>();\n for (const [k, v] of usp.entries()) {\n const existing = mapping.get(k);\n if (existing) existing.push(v);\n else mapping.set(k, [v]);\n }\n\n const obj: RouteQuery = {\n get(key: string) {\n const arr = mapping.get(key);\n return arr ? arr[0] : null;\n },\n getAll(key: string) {\n const arr = mapping.get(key);\n return arr ? [...arr] : [];\n },\n has(key: string) {\n return mapping.has(key);\n },\n toJSON() {\n const out: Record<string, string | string[]> = {};\n for (const [k, arr] of mapping.entries()) {\n out[k] = arr.length > 1 ? [...arr] : arr[0];\n }\n return out;\n },\n };\n\n return deepFreeze(obj);\n}\n\n// Compute matches by scanning registered routes (public API: getRoutes)\nfunction computeMatches(pathname: string): RouteMatch[] {\n const routesList = getRoutes();\n const matches: Array<{\n pattern: string;\n params: Record<string, string>;\n name?: string;\n namespace?: string;\n specificity: number;\n }> = [];\n\n function getSpecificity(path: string) {\n // Reuse same heuristic as above\n const normalized =\n path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\n if (normalized === '/*') return 0;\n const segments = normalized.split('/').filter(Boolean);\n let score = 0;\n for (const segment of segments) {\n if (segment.startsWith('{') && segment.endsWith('}')) score += 2;\n else if (segment === '*') score += 1;\n else score += 3;\n }\n return score;\n }\n\n for (const r of routesList) {\n const result = matchPath(pathname, r.path);\n if (result.matched) {\n matches.push({\n pattern: r.path,\n params: result.params,\n name: (r as { name?: string }).name,\n namespace: r.namespace,\n specificity: getSpecificity(r.path),\n });\n }\n }\n\n matches.sort((a, b) => b.specificity - a.specificity);\n\n return matches.map((m) => ({\n path: m.pattern,\n params: deepFreeze({ ...m.params }),\n name: m.name,\n namespace: m.namespace,\n }));\n}\n\n/**\n * Dual-purpose `route` function:\n * - route() → returns a read-only, deeply frozen RouteSnapshot (render-time)\n * - route(path, handler, namespace?) → registers a route handler (existing semantics)\n */\n// Prevent runtime registrations after the app has started\nlet registrationLocked = false;\n\nexport function lockRouteRegistration(): void {\n registrationLocked = true;\n}\n\n// Internal test helpers\nexport function _lockRouteRegistrationForTests(): void {\n registrationLocked = true;\n}\n\nexport function _unlockRouteRegistrationForTests(): void {\n registrationLocked = false;\n}\n\nexport function route(): RouteSnapshot;\nexport function route(\n path: string,\n handler?: RouteHandler,\n namespace?: string\n): void;\nexport function route(\n path?: string,\n handler?: RouteHandler,\n namespace?: string\n): void | RouteSnapshot {\n if (getExecutionModel() === 'islands') {\n throw new Error(\n 'Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.'\n );\n }\n\n // If called with no args, act as render-time accessor\n if (typeof path === 'undefined') {\n // Access the current component instance to ensure route() is only\n // called during render.\n const instance = getCurrentComponentInstance();\n if (!instance) {\n throw new Error(\n 'route() can only be called during component render execution. ' +\n 'Call route() from inside your component function.'\n );\n }\n\n // Determine location source: client window if present; otherwise SSR override\n let pathname = '/';\n let search = '';\n let hash = '';\n\n if (typeof window !== 'undefined' && window.location) {\n pathname = window.location.pathname || '/';\n search = window.location.search || '';\n hash = window.location.hash || '';\n } else if (serverLocation) {\n const parsed = parseLocation(serverLocation);\n pathname = parsed.pathname;\n search = parsed.search;\n hash = parsed.hash;\n }\n\n const params = deepFreeze({\n ...((instance.props as Record<string, string>) || {}),\n });\n const query = makeQuery(search);\n const matches = computeMatches(pathname);\n\n const snapshot: RouteSnapshot = Object.freeze({\n path: pathname,\n params,\n query,\n hash: hash || null,\n matches: Object.freeze(matches),\n });\n\n return snapshot;\n }\n\n // Disallow route registration during SSR render\n const currentInst = getCurrentComponentInstance();\n if (currentInst && currentInst.ssr) {\n throw new Error(\n 'route() cannot be called during SSR rendering. Register routes at module load time instead.'\n );\n }\n\n // Disallow registrations after app startup\n if (registrationLocked) {\n throw new Error(\n 'Route registration is locked after app startup. Register routes at module load time before calling createSPA or createSSR.'\n );\n }\n\n // Otherwise register a route (backwards compatible behavior)\n if (typeof handler !== 'function') {\n throw new Error(\n 'route(path, handler) requires a function handler that returns a VNode (e.g. () => <Page />). ' +\n 'Passing JSX elements or VNodes directly is not supported.'\n );\n }\n\n const routeObj: Route = { path, handler: handler as RouteHandler, namespace };\n routes.push(routeObj);\n setHasRoutes(true);\n\n // Index by depth (maintains insertion order within depth)\n const depth = getDepth(path);\n\n let depthRoutes = routesByDepth.get(depth);\n if (!depthRoutes) {\n depthRoutes = [];\n routesByDepth.set(depth, depthRoutes);\n }\n\n depthRoutes.push(routeObj);\n\n if (namespace) {\n namespaces.add(namespace);\n }\n}\n\n/**\n * Get all registered routes\n */\nexport function getRoutes(): Route[] {\n return [...routes];\n}\n\n/**\n * Get routes for a specific namespace\n */\nexport function getNamespaceRoutes(namespace: string): Route[] {\n return routes.filter((r) => r.namespace === namespace);\n}\n\n/**\n * Unload all routes from a namespace (for MFE unmounting)\n */\nexport function unloadNamespace(namespace: string): number {\n const before = routes.length;\n\n // Remove from main array\n for (let i = routes.length - 1; i >= 0; i--) {\n if (routes[i].namespace === namespace) {\n const removed = routes[i];\n routes.splice(i, 1);\n\n // Remove from depth index\n const depth = getDepth(removed.path);\n const depthRoutes = routesByDepth.get(depth);\n if (depthRoutes) {\n const idx = depthRoutes.indexOf(removed);\n if (idx >= 0) {\n depthRoutes.splice(idx, 1);\n }\n }\n }\n }\n\n namespaces.delete(namespace);\n return before - routes.length;\n}\n\n/**\n * Clear all registered routes (mainly for testing)\n */\nexport function clearRoutes(): void {\n routes.length = 0;\n namespaces.clear();\n routesByDepth.clear();\n registrationLocked = false;\n setHasRoutes(false);\n}\n\n/**\n * RouteDescriptor type — used by `registerRoute` for nested descriptors.\n *\n * Note: `registerRouteTree` helper was removed; prefer explicit `route()` registrations.\n */\nexport type RouteDescriptor = {\n path: string;\n handler?: RouteHandler | unknown;\n children?: RouteDescriptor[];\n _isDescriptor?: true;\n};\n\n// `registerRouteTree` was removed — register explicit absolute paths with `route(path, handler)` instead.\n// If you need a helper to register descriptor trees, add a small wrapper in userland that\n// calls `route()` recursively.\n\n// Helper: normalize common handler shapes\n// NOTE: Only function handlers are accepted — passing raw JSX/VNodes at register\n// time is not allowed. This keeps registration data-only and avoids surprising\n// semantics between module-load-time and render-time.\nfunction normalizeHandler(handler: unknown): RouteHandler | undefined {\n if (handler == null) return undefined;\n if (typeof handler === 'function') {\n // Accept both (params) => ... handlers and component functions that take no args / props\n return (params: Record<string, string>, ctx?: { signal?: AbortSignal }) => {\n // Call with params and ctx; component functions can ignore them\n // Allow handler to return JSX element, VNode, Promise, etc.\n // If the function expects only props, passing params is safe (extra args ignored)\n try {\n return handler(params, ctx);\n } catch {\n return handler(params);\n }\n };\n }\n return undefined;\n}\n\n// Register route with flexible handler shapes and optional nested descriptors.\n// Usage patterns supported:\n// - Absolute flat registration: registerRoute('/pages', () => List())\n// - Nested descriptors: registerRoute('/', () => Home(), registerRoute('pages', () => List(), registerRoute('{id}', () => Detail())))\n// Note: child descriptors should use relative paths (no leading '/').\nexport function registerRoute(\n path: string,\n handler?: unknown,\n ...children: Array<RouteDescriptor | undefined>\n): RouteDescriptor {\n const isRelative = !path.startsWith('/');\n\n // Build descriptor that can be used for nesting\n const descriptor: RouteDescriptor = {\n path,\n handler,\n children: children.filter(Boolean) as RouteDescriptor[],\n _isDescriptor: true,\n };\n\n // If path is absolute, perform registration immediately and recurse into children\n if (!isRelative) {\n const normalized = normalizeHandler(handler);\n if (handler != null && !normalized) {\n throw new Error(\n 'registerRoute(path, handler) requires a function handler. Passing JSX elements or VNodes directly is not supported.'\n );\n }\n if (normalized) route(path, normalized);\n\n for (const child of descriptor.children || []) {\n // Compute child full path\n const base = path === '/' ? '' : path.replace(/\\/$/, '');\n const childPath = `${base}/${child.path.replace(/^\\//, '')}`.replace(\n /\\/\\//g,\n '/'\n );\n // Recurse: if child.handler is provided, register it\n if (child.handler) {\n const childNormalized = normalizeHandler(child.handler);\n if (!childNormalized) {\n throw new Error(\n 'registerRoute child handler must be a function. Passing JSX elements directly is not supported.'\n );\n }\n if (childNormalized) route(childPath, childNormalized);\n }\n // Recurse into grandchildren\n if (child.children && child.children.length) {\n // Convert child.children into descriptors and register them\n // Use registerRoute recursively with absolute childPath\n registerRoute(\n childPath,\n null,\n ...(child.children as RouteDescriptor[])\n );\n }\n }\n\n return descriptor;\n }\n\n // If relative, return descriptor for nesting (do not register yet)\n return descriptor;\n}\n\n/**\n * Get all loaded namespaces (MFE identifiers)\n */\nexport function getLoadedNamespaces(): string[] {\n return Array.from(namespaces);\n}\n\n/**\n * Resolve a path to a route handler with optimized lookup\n * Routes are matched by specificity: literals > parameters > wildcards > catch-all\n */\nexport function resolveRoute(pathname: string): ResolvedRoute | null {\n const normalized =\n pathname.endsWith('/') && pathname !== '/'\n ? pathname.slice(0, -1)\n : pathname;\n const depth =\n normalized === '/' ? 0 : normalized.split('/').filter(Boolean).length;\n\n // Collect all matching routes with their specificity\n const candidates: Array<{\n route: Route;\n specificity: number;\n params: Record<string, string>;\n }> = [];\n\n // Try routes at this depth first (most likely match)\n const depthRoutes = routesByDepth.get(depth);\n if (depthRoutes) {\n for (const r of depthRoutes) {\n const result = matchPath(pathname, r.path);\n if (result.matched) {\n candidates.push({\n route: r,\n specificity: getSpecificity(r.path),\n params: result.params,\n });\n }\n }\n }\n\n // Fallback: scan all routes for different depths\n // (handles edge cases like wildcard routes)\n for (const r of routes) {\n // Skip if already checked in depth routes\n if (depthRoutes?.includes(r)) continue;\n\n const result = matchPath(pathname, r.path);\n if (result.matched) {\n candidates.push({\n route: r,\n specificity: getSpecificity(r.path),\n params: result.params,\n });\n }\n }\n\n // Sort by specificity (highest first)\n candidates.sort((a, b) => b.specificity - a.specificity);\n\n // Return most specific match\n if (candidates.length > 0) {\n const best = candidates[0];\n return { handler: best.route.handler, params: best.params };\n }\n\n return null;\n}\n","/**\n * Client-side navigation with History API\n */\n\nimport { resolveRoute, lockRouteRegistration } from './route';\nimport {\n mountComponent,\n cleanupComponent,\n type ComponentInstance,\n} from '../runtime/component';\nimport { logger } from '../dev/logger';\n\n// Global app state for navigation\nlet currentInstance: ComponentInstance | null = null;\n\n/** Register the current app instance (called by createSPA/hydrateSPA). */\nexport function registerAppInstance(\n instance: ComponentInstance,\n _path: string\n): void {\n currentInstance = instance;\n // Lock further route registrations after the app has started — but allow tests to register routes.\n // Enforce only in production to avoid breaking test infra which registers routes dynamically.\n if (process.env.NODE_ENV === 'production') {\n lockRouteRegistration();\n }\n}\n\n/**\n * Navigate to a new path\n * Updates URL, resolves route, and re-mounts app with new handler\n */\nexport function navigate(path: string): void {\n if (typeof window === 'undefined') {\n // SSR context\n return;\n }\n\n // Resolve the new path to a route\n const resolved = resolveRoute(path);\n\n if (!resolved) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`No route found for path: ${path}`);\n }\n return;\n }\n\n // Update browser history\n window.history.pushState({ path }, '', path);\n\n // Re-render with the new route handler and params\n if (currentInstance) {\n // Cleanup previous route (abort pending operations)\n cleanupComponent(currentInstance);\n\n // The route handler IS the component function\n // It takes params as props and renders the route\n currentInstance.fn = resolved.handler as ComponentInstance['fn'];\n currentInstance.props = resolved.params;\n\n // Reset state to prevent leakage from previous route\n // Each route navigation starts completely fresh\n currentInstance.stateValues = [];\n currentInstance.expectedStateIndices = [];\n currentInstance.firstRenderComplete = false;\n currentInstance.stateIndexCheck = -1;\n // Increment generation to invalidate pending async evaluations from previous route\n currentInstance.evaluationGeneration++;\n currentInstance.notifyUpdate = null;\n\n // CRITICAL FIX: Create new AbortController for new route\n // Old controller is already aborted; we need a fresh one for async operations\n currentInstance.abortController = new AbortController();\n\n // Re-execute and re-mount component\n mountComponent(currentInstance);\n }\n}\n\n/**\n * Handle browser back/forward buttons\n */\nfunction handlePopState(_event: PopStateEvent): void {\n const path = window.location.pathname;\n\n if (!currentInstance) {\n return;\n }\n\n const resolved = resolveRoute(path);\n\n if (resolved) {\n // Cleanup old component\n cleanupComponent(currentInstance);\n\n // The route handler IS the component function\n currentInstance.fn = resolved.handler as ComponentInstance['fn'];\n currentInstance.props = resolved.params;\n\n // Reset state to prevent leakage from previous route\n currentInstance.stateValues = [];\n currentInstance.expectedStateIndices = [];\n currentInstance.firstRenderComplete = false;\n currentInstance.stateIndexCheck = -1;\n // Increment generation to invalidate pending async evaluations from previous route\n currentInstance.evaluationGeneration++;\n currentInstance.notifyUpdate = null;\n\n // CRITICAL FIX: Create new AbortController for back/forward navigation\n currentInstance.abortController = new AbortController();\n\n mountComponent(currentInstance);\n }\n}\n\n/**\n * Setup popstate listener for browser navigation\n */\nexport function initializeNavigation(): void {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', handlePopState);\n }\n}\n\n/**\n * Cleanup navigation listeners\n */\nexport function cleanupNavigation(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n","export { Fragment, ELEMENT_TYPE } from './types';\nexport type { JSXElement } from './types';\n\nexport { isElement, cloneElement } from './utils';\n","/**\n * Portal / Host primitive.\n *\n * A portal is a named render slot within the existing tree.\n * It does NOT create a second tree or touch the DOM directly.\n */\n\nimport { getCurrentComponentInstance } from '../runtime/component';\nimport type { ComponentInstance } from '../runtime/component';\nimport { logger } from '../dev/logger';\n\nexport interface Portal<T = unknown> {\n /** Mount point — rendered exactly once */\n (): unknown;\n\n /** Render content into the portal */\n render(props: { children?: T }): unknown;\n}\n\nexport function definePortal<T = unknown>(): Portal<T> {\n // If the runtime primitive isn't installed yet, provide a no-op fallback.\n // Using `typeof createPortalSlot` is safe even if the identifier is not\n // defined at runtime (it returns 'undefined' rather than throwing).\n if (typeof createPortalSlot !== 'function') {\n // Fallback implementation for environments where the runtime primitive\n // isn't available (tests, SSR).\n //\n // Invariants this fallback tries to maintain:\n // - Always use the *current* host instance (update `owner` each render)\n // - Preserve the last `value` written before host mounts and expose it so\n // it can be flushed into a real portal if/when the runtime installs\n // - Schedule `owner.notifyUpdate()` when a host exists so updates are\n // reflected immediately\n // Fast fallback for module/SSR/test environments.\n // Track a single owner to avoid per-render array scans.\n let owner: ComponentInstance | null = null;\n let pending: T | undefined;\n\n function HostFallback() {\n // Drop owner + pending when owner unmounts to avoid replay.\n if (owner && owner.mounted === false) {\n owner = null;\n pending = undefined;\n }\n\n const inst = getCurrentComponentInstance();\n\n // Capture the first host as the owner.\n // We intentionally do NOT require `mounted === true` here because the\n // host can render before the runtime flips its mounted flag. Capturing\n // early ensures `DefaultPortal.render()` works immediately after mount.\n if (!owner && inst) owner = inst;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n const ns =\n (globalThis as unknown as { __ASKR__?: Record<string, unknown> })\n .__ASKR__ ||\n ((\n globalThis as unknown as { __ASKR__?: Record<string, unknown> }\n ).__ASKR__ = {} as Record<string, unknown>);\n ns.__PORTAL_READS = ((ns.__PORTAL_READS as number) || 0) + 1;\n }\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n // Minimal dev diagnostics; avoid heavy allocations in the hot path.\n if (inst && owner && inst !== owner && inst.mounted === true) {\n logger.warn(\n '[Portal] multiple mounted hosts detected; first mounted host is owner'\n );\n }\n }\n\n return inst && owner && inst === owner ? (pending as unknown) : undefined;\n }\n\n HostFallback.render = function RenderFallback(props: { children?: T }) {\n // Owner must be fully mounted (mounted === true) to accept writes.\n if (!owner || owner.mounted !== true) return null;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n const ns =\n (globalThis as unknown as { __ASKR__?: Record<string, unknown> })\n .__ASKR__ ||\n ((\n globalThis as unknown as { __ASKR__?: Record<string, unknown> }\n ).__ASKR__ = {} as Record<string, unknown>);\n ns.__PORTAL_WRITES = ((ns.__PORTAL_WRITES as number) || 0) + 1;\n }\n\n // Update pending value for the live owner\n pending = props.children as T | undefined;\n\n // Schedule an update on the owner so it re-renders\n if (owner.notifyUpdate) owner.notifyUpdate();\n return null;\n };\n\n return HostFallback as Portal<T>;\n }\n\n // Runtime-provided slot implementation\n const slot = createPortalSlot<T>();\n\n function PortalHost() {\n return slot.read();\n }\n\n PortalHost.render = function PortalRender(props: { children?: T }) {\n // Keep counter increment guarded for dev-only behavior\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n const ns =\n (globalThis as unknown as { __ASKR__?: Record<string, unknown> })\n .__ASKR__ ||\n ((\n globalThis as unknown as { __ASKR__?: Record<string, unknown> }\n ).__ASKR__ = {} as Record<string, unknown>);\n ns.__PORTAL_WRITES = ((ns.__PORTAL_WRITES as number) || 0) + 1;\n }\n slot.write(props.children);\n return null;\n };\n\n return PortalHost as Portal<T>;\n}\n\n// Default portal instance: lazily created wrapper so runtime primitive is not\n// invoked during module initialization (avoids ReferenceError when runtime\n// slot primitive is not yet installed).\nlet _defaultPortal: Portal<unknown> | undefined;\nlet _defaultPortalIsFallback = false;\n\n/**\n * Reset the default portal state. Used by tests to ensure isolation.\n * @internal\n */\nexport function _resetDefaultPortal(): void {\n _defaultPortal = undefined;\n _defaultPortalIsFallback = false;\n}\n\nfunction ensureDefaultPortal(): Portal<unknown> {\n // If a portal hasn't been initialized yet, create a real portal if the\n // runtime primitive exists; otherwise create a fallback. If a fallback\n // was previously created and the runtime primitive becomes available\n // later, replace the fallback with a real portal on first use.\n if (!_defaultPortal) {\n if (typeof createPortalSlot === 'function') {\n _defaultPortal = definePortal<unknown>();\n _defaultPortalIsFallback = false;\n } else {\n // Create a fallback via definePortal so it uses the same owner/pending\n // semantics as the non-default portals (keeps runtime and fallback\n // behavior consistent).\n _defaultPortal = definePortal<unknown>();\n _defaultPortalIsFallback = true;\n }\n return _defaultPortal;\n }\n\n // Replace fallback with real portal once runtime primitive becomes available\n // NOTE: We intentionally do NOT replay pending writes from a fallback.\n // Early writes are dropped by design to avoid replaying invisible UI.\n if (_defaultPortalIsFallback && typeof createPortalSlot === 'function') {\n const real = definePortal<unknown>();\n _defaultPortal = real;\n _defaultPortalIsFallback = false;\n }\n\n // If the runtime primitive is removed (tests may simulate this by\n // deleting `createPortalSlot` between runs), revert to a fallback so\n // subsequent tests observe the appropriate fallback semantics.\n if (!_defaultPortalIsFallback && typeof createPortalSlot !== 'function') {\n const fallback = definePortal<unknown>();\n _defaultPortal = fallback;\n _defaultPortalIsFallback = true;\n }\n\n return _defaultPortal;\n}\n\nexport const DefaultPortal: Portal<unknown> = (() => {\n function Host() {\n // Delegate to the lazily-created portal host (created when runtime is ready)\n // Return null when no pending value exists so the component renders nothing\n // (consistent with SSR which renders Fragment children as empty string)\n const v = ensureDefaultPortal()();\n return v === undefined ? null : v;\n }\n Host.render = function Render(props: { children?: unknown }) {\n ensureDefaultPortal().render(props);\n return null;\n };\n return Host as Portal<unknown>;\n})();\n\n/**\n * NOTE:\n * createPortalSlot is a runtime primitive.\n * It owns scheduling, consistency, and SSR behavior.\n */\ndeclare function createPortalSlot<T>(): {\n read(): unknown;\n write(value: T | undefined): void;\n};\n","/**\n * App bootstrap and mount\n */\n\nimport {\n createComponentInstance,\n mountComponent,\n cleanupComponent,\n type ComponentFunction,\n type ComponentInstance,\n} from '../runtime/component';\nimport { globalScheduler } from '../runtime/scheduler';\nimport { logger } from '../dev/logger';\nimport { registerAppInstance, initializeNavigation } from '../router/navigate';\nimport { assertExecutionModel } from '../runtime/execution-model';\n\nconst HAS_ROUTES_KEY = Symbol.for('__ASKR_HAS_ROUTES__');\n\nlet componentIdCounter = 0;\n\n// Track instances by root element to support multiple createIsland calls on same root\nconst instancesByRoot = new WeakMap<Element, ComponentInstance>();\n\n// Symbol for storing cleanup on elements\nconst CLEANUP_SYMBOL = Symbol.for('__tempoCleanup__');\n\n// Type for elements that have cleanup functions attached\ninterface ElementWithCleanup extends Element {\n [CLEANUP_SYMBOL]?: () => void;\n}\n\nexport interface AppConfig {\n root: Element | string;\n component: ComponentFunction;\n // Opt-in: surface cleanup errors during teardown for this app instance\n cleanupStrict?: boolean;\n}\n\nfunction attachCleanupForRoot(\n rootElement: Element,\n instance: ComponentInstance\n) {\n (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL] = () => {\n // Attempt to remove listeners and cleanup instances under the root.\n // In non-strict mode we preserve previous behavior by swallowing errors\n // (but logging in dev); in strict mode we aggregate and re-throw.\n const errors: unknown[] = [];\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n errors.push(e);\n }\n\n // Manually traverse descendants and attempt to cleanup their instances.\n // Avoids import cycles by using local traversal and existing cleanupComponent.\n try {\n const descendants = rootElement.querySelectorAll('*');\n for (const d of Array.from(descendants)) {\n try {\n const inst = (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n if (inst) {\n try {\n cleanupComponent(inst);\n } catch (err) {\n errors.push(err);\n }\n try {\n delete (d as Element & { __ASKR_INSTANCE?: ComponentInstance })\n .__ASKR_INSTANCE;\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (err) {\n errors.push(err);\n }\n }\n } catch (e) {\n errors.push(e);\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n errors.push(e);\n }\n\n if (errors.length > 0) {\n if (instance.cleanupStrict) {\n throw new AggregateError(errors, `cleanup failed for app root`);\n } else if (process.env.NODE_ENV !== 'production') {\n for (const err of errors) logger.warn('[Askr] cleanup error:', err);\n }\n }\n };\n\n try {\n const descriptor =\n Object.getOwnPropertyDescriptor(rootElement, 'innerHTML') ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(rootElement),\n 'innerHTML'\n ) ||\n Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n\n if (descriptor && (descriptor.get || descriptor.set)) {\n Object.defineProperty(rootElement, 'innerHTML', {\n get: descriptor.get\n ? function (this: Element) {\n return descriptor.get!.call(this);\n }\n : undefined,\n set: function (this: Element, value: string) {\n if (value === '' && instancesByRoot.get(this) === instance) {\n try {\n removeAllListeners(rootElement);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] cleanup error:', e);\n }\n\n try {\n cleanupComponent(instance as ComponentInstance);\n } catch (e) {\n if (instance.cleanupStrict) throw e;\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] cleanup error:', e);\n }\n }\n if (descriptor.set) {\n return descriptor.set.call(this, value);\n }\n },\n configurable: true,\n });\n }\n } catch {\n // If Object.defineProperty fails, ignore\n }\n}\n\n/**\n * Explicitly teardown an app mounted on `root` if present. This is the\n * recommended API for deterministic cleanup rather than relying on overriding\n * `innerHTML` setter behavior.\n */\nexport function teardownApp(_root: Element | string) {\n throw new Error(\n 'The `teardownApp` alias has been removed. Use `cleanupApp(root)` instead.'\n );\n}\n\nimport { Fragment, ELEMENT_TYPE } from '../jsx';\nimport { DefaultPortal } from '../foundations/portal';\n\nfunction mountOrUpdate(\n rootElement: Element,\n componentFn: ComponentFunction,\n options?: { cleanupStrict?: boolean }\n) {\n // Ensure root component always includes a DefaultPortal host by wrapping it.\n const wrappedFn: ComponentFunction = (props, ctx) => {\n const out = componentFn(props, ctx);\n const portalVNode = {\n $$typeof: ELEMENT_TYPE,\n type: DefaultPortal,\n props: {},\n key: '__default_portal',\n } as unknown;\n return {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: {\n children:\n out === undefined || out === null\n ? [portalVNode]\n : [out, portalVNode],\n },\n } as unknown as ReturnType<ComponentFunction>;\n };\n // Preserve the original component name for debugging/dev warnings\n Object.defineProperty(wrappedFn, 'name', {\n value: componentFn.name || 'Component',\n });\n\n // Clean up existing cleanup function before mounting new one\n const existingCleanup = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (existingCleanup) existingCleanup();\n\n let instance = instancesByRoot.get(rootElement);\n\n if (instance) {\n removeAllListeners(rootElement);\n try {\n cleanupComponent(instance);\n } catch (e) {\n // If previous cleanup threw in strict mode, log but continue mounting new instance\n if (process.env.NODE_ENV !== 'production')\n logger.warn('[Askr] prior cleanup threw:', e);\n }\n\n instance.fn = wrappedFn;\n instance.evaluationGeneration++;\n instance.mounted = false;\n instance.expectedStateIndices = [];\n instance.firstRenderComplete = false;\n instance.isRoot = true;\n // Update strict flag if provided\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n } else {\n const componentId = String(++componentIdCounter);\n instance = createComponentInstance(componentId, wrappedFn, {}, rootElement);\n instancesByRoot.set(rootElement, instance);\n instance.isRoot = true;\n // Initialize strict flag from options\n if (options && typeof options.cleanupStrict === 'boolean') {\n instance.cleanupStrict = options.cleanupStrict;\n }\n }\n\n attachCleanupForRoot(rootElement, instance);\n mountComponent(instance);\n globalScheduler.flush();\n}\n\n// New strongly-typed init functions\nimport type { Route } from '../common/router';\nimport { removeAllListeners } from '../renderer';\n\nexport type IslandConfig = {\n root: Element | string;\n component: ComponentFunction;\n // Optional: surface cleanup errors during teardown for this island\n cleanupStrict?: boolean;\n // Explicitly disallow routes on islands at type level\n routes?: never;\n};\n\nexport type IslandsConfig = {\n islands: IslandConfig[];\n};\n\nexport type SPAConfig = {\n root: Element | string;\n routes: Route[]; // routes are required\n // Optional: surface cleanup errors during teardown for this SPA\n cleanupStrict?: boolean;\n component?: never;\n};\n\nexport type HydrateSPAConfig = {\n root: Element | string;\n routes: Route[];\n // Optional: surface cleanup errors during teardown for this SPA\n cleanupStrict?: boolean;\n};\n\n/**\n * createIsland: Enhances existing DOM (no router, mounts once)\n */\nexport function createIsland(config: IslandConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIsland requires a config object');\n }\n if (typeof config.component !== 'function') {\n throw new Error('createIsland: component must be a function');\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Islands must not initialize router or routes\n if ('routes' in config) {\n throw new Error(\n 'createIsland does not accept routes; use createSPA for routed apps'\n );\n }\n\n // Routes are never supported with islands.\n // If routes were registered (even at module load time), fail fast to avoid\n // surprising partial router behavior.\n try {\n const g = globalThis as unknown as Record<string | symbol, unknown>;\n if (g[HAS_ROUTES_KEY]) {\n throw new Error(\n 'Routes are not supported with islands. Use createSPA (client) or createSSR (server) instead.'\n );\n }\n } catch {\n // ignore\n }\n\n mountOrUpdate(rootElement, config.component, {\n cleanupStrict: config.cleanupStrict,\n });\n}\n\n/**\n * createIslands: Enhances one or more existing DOM roots (no router).\n * The only public islands constructor.\n */\nexport function createIslands(config: IslandsConfig): void {\n assertExecutionModel('islands');\n if (!config || typeof config !== 'object') {\n throw new Error('createIslands requires a config object');\n }\n if (!Array.isArray(config.islands) || config.islands.length === 0) {\n throw new Error('createIslands requires a non-empty islands array');\n }\n for (const island of config.islands) {\n createIsland(island);\n }\n}\n\n/**\n * createSPA: Initializes router and mounts the app with provided route table\n */\nexport async function createSPA(config: SPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('createSPA requires a config object');\n }\n if (!Array.isArray(config.routes) || config.routes.length === 0) {\n throw new Error(\n 'createSPA requires a route table. If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Register routes at startup (clear previous registrations to avoid surprises)\n const { clearRoutes, route, lockRouteRegistration, resolveRoute } =\n await import('../router/route');\n\n clearRoutes();\n for (const r of config.routes) {\n // Using typed Route from router; allow handler functions\n route(r.path, r.handler, r.namespace);\n }\n // Lock registration in production to prevent late registration surprises\n if (process.env.NODE_ENV === 'production') lockRouteRegistration();\n\n // Mount the currently-resolved route handler (if any)\n const path = typeof window !== 'undefined' ? window.location.pathname : '/';\n const resolved = resolveRoute(path);\n if (!resolved) {\n // If no route currently matches, mount an empty placeholder and continue.\n // This supports cases where routes are registered but the current URL is\n // not one of them (common in router tests that navigate programmatically).\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(\n `createSPA: no route found for current path (${path}). Mounting empty placeholder; navigation will activate routes when requested.`\n );\n }\n\n // Mount a no-op component until navigation occurs\n mountOrUpdate(rootElement, () => ({ type: 'div', children: [] }), {\n cleanupStrict: false,\n });\n\n // Still register app instance and initialize navigation so future navigations work\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n return;\n }\n\n // Mount resolved handler as the root component\n // Convert resolved.handler to a ComponentFunction-compatible shape\n mountOrUpdate(rootElement, resolved.handler as ComponentFunction, {\n cleanupStrict: false,\n });\n\n // Register for navigation and wire up history handling\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n}\n\n/**\n * hydrateSPA: Hydrate server-rendered HTML with explicit routes\n */\nexport async function hydrateSPA(config: HydrateSPAConfig): Promise<void> {\n assertExecutionModel('spa');\n if (!config || typeof config !== 'object') {\n throw new Error('hydrateSPA requires a config object');\n }\n if (!Array.isArray(config.routes) || config.routes.length === 0) {\n throw new Error(\n 'hydrateSPA requires a route table. If you are enhancing existing HTML, use createIsland instead.'\n );\n }\n\n const rootElement =\n typeof config.root === 'string'\n ? document.getElementById(config.root)\n : config.root;\n if (!rootElement) throw new Error(`Root element not found: ${config.root}`);\n\n // Capture server HTML for mismatch detection\n const serverHTML = rootElement.innerHTML;\n\n // Register routes for hydration and set server location for deterministic route()\n const {\n clearRoutes,\n route,\n setServerLocation,\n lockRouteRegistration,\n resolveRoute,\n } = await import('../router/route');\n\n clearRoutes();\n for (const r of config.routes) {\n route(r.path, r.handler, r.namespace);\n }\n // Set server location so route() reflects server URL during SSR checks\n const path = typeof window !== 'undefined' ? window.location.pathname : '/';\n setServerLocation(path);\n if (process.env.NODE_ENV === 'production') lockRouteRegistration();\n\n // Resolve handler for current path\n const resolved = resolveRoute(path);\n if (!resolved) {\n throw new Error(`hydrateSPA: no route found for current path (${path}).`);\n }\n\n // Synchronously render expected HTML using SSR helper\n const { renderToStringSync } = await import('../ssr');\n // renderToStringSync takes a zero-arg component factory; wrap the handler to pass params\n const expectedHTML = renderToStringSync(() => {\n const out = resolved.handler(resolved.params);\n return (out ?? {\n type: 'div',\n children: [],\n }) as ReturnType<ComponentFunction>;\n });\n\n // Prefer a DOM-based comparison to avoid false positives from attribute order\n // or whitespace differences between server and expected HTML.\n const serverContainer = document.createElement('div');\n serverContainer.innerHTML = serverHTML;\n const expectedContainer = document.createElement('div');\n expectedContainer.innerHTML = expectedHTML;\n\n if (!serverContainer.isEqualNode(expectedContainer)) {\n throw new Error(\n '[Askr] Hydration mismatch detected. Server HTML does not match expected server-render output.'\n );\n }\n\n // Proceed to mount the client SPA (this will attach listeners and start navigation)\n // Reuse createSPA path but we already registered routes and set server location, so just mount\n // Mount resolved handler\n mountOrUpdate(rootElement, resolved.handler as ComponentFunction, {\n cleanupStrict: false,\n });\n\n // Register navigation and instance\n const { registerAppInstance, initializeNavigation } =\n await import('../router/navigate');\n const instance = instancesByRoot.get(rootElement);\n if (!instance) throw new Error('Internal error: app instance missing');\n registerAppInstance(instance as ComponentInstance, path);\n initializeNavigation();\n}\n\nexport async function hydrate(_config: AppConfig): Promise<void> {\n throw new Error(\n 'The legacy `hydrate` API is removed. Use `hydrateSPA({ root, routes })` for SSR hydration with an explicit route table.'\n );\n}\n\n/**\n * Cleanup an app mounted on a root element (element or id).\n * Safe to call multiple times — no-op when nothing is mounted.\n */\nexport function cleanupApp(root: Element | string): void {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return;\n\n const cleanupFn = (rootElement as ElementWithCleanup)[CLEANUP_SYMBOL];\n if (typeof cleanupFn === 'function') {\n cleanupFn();\n }\n\n instancesByRoot.delete(rootElement);\n}\n\n/**\n * Check whether an app is mounted on the given root\n */\nexport function hasApp(root: Element | string): boolean {\n const rootElement =\n typeof root === 'string' ? document.getElementById(root) : root;\n\n if (!rootElement) return false;\n return instancesByRoot.has(rootElement);\n}\n","/**\n * State primitive for Askr components\n * Optimized for minimal overhead and fast updates\n *\n * INVARIANTS ENFORCED:\n * - state() only callable during component render (currentInstance exists)\n * - state() called at top-level only (indices must be monotonically increasing)\n * - state values persist across re-renders (stored in stateValues array)\n * - state.set() cannot be called during render (causes infinite loops)\n * - state.set() always enqueues through scheduler (never direct mutation)\n * - state.set() callback (notifyUpdate) always available\n */\n\nimport { globalScheduler } from './scheduler';\nimport {\n getCurrentInstance,\n getNextStateIndex,\n type ComponentInstance,\n} from './component';\nimport { invariant } from '../dev/invariant';\nimport { isBulkCommitActive } from './fastlane';\n\n/**\n * State value holder - callable to read, has set method to update\n * @example\n * const count = state(0);\n * count(); // read: 0\n * count.set(1); // write: triggers re-render\n */\nexport interface State<T> {\n (): T;\n set(value: T): void;\n set(updater: (prev: T) => T): void;\n _hasBeenRead?: boolean; // Internal: track if state has been read during render\n _readers?: Map<ComponentInstance, number>; // Internal: map of readers -> last committed token\n}\n\n/**\n * Creates a local state value for a component\n * Optimized for:\n * - O(1) read performance\n * - Minimal allocation per state\n * - Fast scheduler integration\n *\n * IMPORTANT: state() must be called during component render execution.\n * It captures the current component instance from context.\n * Calling outside a component function will throw an error.\n *\n * @example\n * ```ts\n * // ✅ Correct: called during render\n * export function Counter() {\n * const count = state(0);\n * return { type: 'button', children: [count()] };\n * }\n *\n * // ❌ Wrong: called outside component\n * const count = state(0);\n * export function BadComponent() {\n * return { type: 'div' };\n * }\n * ```\n */\nexport function state<T>(initialValue: T): State<T> {\n // INVARIANT: state() must be called during component render\n const instance = getCurrentInstance();\n if (!instance) {\n throw new Error(\n 'state() can only be called during component render execution. ' +\n 'Move state() calls to the top level of your component function.'\n );\n }\n\n const index = getNextStateIndex();\n const stateValues = instance.stateValues;\n\n // INVARIANT: Detect conditional state() calls by validating index order\n // If indices go backward, state() was called conditionally\n if (index < instance.stateIndexCheck) {\n throw new Error(\n `State index violation: state() call at index ${index}, ` +\n `but previously saw index ${instance.stateIndexCheck}. ` +\n `This happens when state() is called conditionally (inside if/for/etc). ` +\n `Move all state() calls to the top level of your component function, ` +\n `before any conditionals.`\n );\n }\n\n // INVARIANT: stateIndexCheck advances monotonically\n invariant(\n index >= instance.stateIndexCheck,\n '[State] State indices must increase monotonically'\n );\n instance.stateIndexCheck = index;\n\n // INVARIANT: On subsequent renders, validate that state calls happen in same order\n if (instance.firstRenderComplete) {\n // Check if this index was expected based on first render\n if (!instance.expectedStateIndices.includes(index)) {\n throw new Error(\n `Hook order violation: state() called at index ${index}, ` +\n `but this index was not in the first render's sequence [${instance.expectedStateIndices.join(', ')}]. ` +\n `This usually means state() is inside a conditional or loop. ` +\n `Move all state() calls to the top level of your component function.`\n );\n }\n } else {\n // First render - record this index in the expected sequence\n instance.expectedStateIndices.push(index);\n }\n\n // INVARIANT: Reuse existing state if it exists (fast path on re-renders)\n // This ensures state identity and persistence and enforces ownership stability\n if (stateValues[index]) {\n const existing = stateValues[index] as State<T> & {\n _owner?: ComponentInstance;\n };\n // Ownership must be stable: the state cell belongs to the instance that\n // created it and must never change. This checks for accidental reuse.\n if (existing._owner !== instance) {\n throw new Error(\n `State ownership violation: state() called at index ${index} is owned by a different component instance. ` +\n `State ownership is positional and immutable.`\n );\n }\n return existing as State<T>;\n }\n\n // Create new state (slow path, only on first render) — delegated to helper\n const cell = createStateCell(initialValue, instance);\n\n // INVARIANT: Store state in instance for persistence across renders\n stateValues[index] = cell;\n\n return cell;\n}\n\n/**\n * Internal helper: create the backing state cell (value + readers + set semantics)\n * This extraction makes it easier to later split hook wiring from storage.\n */\nfunction createStateCell<T>(\n initialValue: T,\n instance: ComponentInstance\n): State<T> {\n let value = initialValue;\n\n // Per-state reader map: component -> last-committed render token\n const readers = new Map<ComponentInstance, number>();\n\n // Use a function as the state object (callable directly)\n function read(): T {\n (read as State<T>)._hasBeenRead = true;\n\n // Record that the current instance read this state during its in-progress render\n const inst = getCurrentInstance();\n if (inst && inst._currentRenderToken !== undefined) {\n if (!inst._pendingReadStates) inst._pendingReadStates = new Set();\n inst._pendingReadStates.add(read as State<T>);\n }\n\n return value;\n }\n\n // Attach the readers map to the callable so other runtime parts can access it\n (read as State<T>)._readers = readers;\n\n // Record explicit ownership of this state cell. Ownership is the component\n // instance that created the state cell and must never change for the life\n // of the cell. We expose this for runtime invariant checks/tests.\n (read as State<T> & { _owner?: ComponentInstance })._owner = instance;\n\n // Attach set method directly to function\n read.set = (newValueOrUpdater: T | ((prev: T) => T)): void => {\n // INVARIANT: State cannot be mutated during component render\n // (when currentInstance is non-null). It must be scheduled for consistency.\n const currentInst = getCurrentInstance();\n if (currentInst !== null) {\n throw new Error(\n `[Askr] state.set() cannot be called during component render. ` +\n `State mutations during render break the actor model and cause infinite loops. ` +\n `Move state updates to event handlers or use conditional rendering instead.`\n );\n }\n\n // Compute new value if an updater was provided\n let newValue: T;\n if (typeof newValueOrUpdater === 'function') {\n // Note: function-valued state cannot be set directly via a function argument;\n // such an argument is treated as a functional updater (this follows the common\n // convention from other libraries). If you need to store a function as state,\n // wrap it in an object.\n const updater = newValueOrUpdater as (prev: T) => T;\n newValue = updater(value);\n } else {\n newValue = newValueOrUpdater as T;\n }\n\n // Skip work if value didn't change\n if (Object.is(value, newValue)) return;\n\n // If a bulk commit is active, update backing value only and DO NOT notify or enqueue.\n // Bulk commits must be side-effect silent with respect to runtime notifications.\n if (isBulkCommitActive()) {\n // In bulk commit mode we must be side-effect free: update backing\n // value only and do not notify, enqueue, or log.\n value = newValue;\n return;\n }\n\n // INVARIANT: Update the value\n value = newValue;\n\n // notifyUpdate may be temporarily unavailable (e.g. during hydration).\n // We intentionally avoid logging here to keep the state mutation path\n // side-effect free. The scheduler will process updates when the system\n // is stable.\n\n // After value change, notify only components that *read* this state in their last committed render\n const readersMap = (read as State<T>)._readers as\n | Map<ComponentInstance, number>\n | undefined;\n if (readersMap) {\n for (const [subInst, token] of readersMap) {\n // Only notify if the component's last committed render token matches the token recorded\n // when it last read this state. This ensures we only wake components that actually\n // observed the state in their most recent render.\n if (subInst.lastRenderToken !== token) continue;\n if (!subInst.hasPendingUpdate) {\n // Log enqueue decision for subInst\n\n subInst.hasPendingUpdate = true;\n const subTask = subInst._pendingFlushTask;\n if (subTask) globalScheduler.enqueue(subTask);\n else\n globalScheduler.enqueue(() => {\n subInst.hasPendingUpdate = false;\n subInst.notifyUpdate?.();\n });\n }\n }\n }\n\n // OPTIMIZATION: Batch state updates from the same component within the same event loop tick\n // Only enqueue the owner component if it actually read this state during its last committed render\n const readersMapForOwner = readersMap;\n const ownerRecordedToken = readersMapForOwner?.get(instance);\n const ownerShouldEnqueue =\n // Normal case: owner read this state in last committed render\n ownerRecordedToken !== undefined &&\n instance.lastRenderToken === ownerRecordedToken;\n\n if (ownerShouldEnqueue && !instance.hasPendingUpdate) {\n instance.hasPendingUpdate = true;\n // INVARIANT: All state updates go through scheduler\n // Use prebound task to avoid allocating a closure per update\n // Fallback to a safe closure if the prebound task is not present\n const task = instance._pendingFlushTask;\n if (task) globalScheduler.enqueue(task);\n else\n globalScheduler.enqueue(() => {\n instance.hasPendingUpdate = false;\n instance.notifyUpdate?.();\n });\n }\n };\n\n return read as State<T>;\n}\n","import type { ComponentInstance } from './component';\nimport { getCurrentComponentInstance } from './component';\n\nconst deriveCaches = new WeakMap<ComponentInstance, Map<unknown, unknown>>();\n\nfunction getDeriveCache(instance: ComponentInstance): Map<unknown, unknown> {\n let cache = deriveCaches.get(instance);\n if (!cache) {\n cache = new Map();\n deriveCaches.set(instance, cache);\n }\n return cache;\n}\n\n// Short-form overload: accept a single function that returns the derived value\nexport function derive<TOut>(fn: () => TOut): TOut | null;\n\n// Normal-form overload: derive(source, map)\nexport function derive<TIn, TOut>(\n source:\n | { value: TIn | null; pending?: boolean; error?: Error | null }\n | TIn\n | (() => TIn),\n map: (value: TIn) => TOut\n): TOut | null;\n\nexport function derive<TIn, TOut>(\n source:\n | { value: TIn | null; pending?: boolean; error?: Error | null }\n | TIn\n | (() => TIn),\n map?: (value: TIn) => TOut\n): TOut | null {\n // Short-form: derive(() => someExpression)\n if (map === undefined && typeof source === 'function') {\n const value = (source as () => TOut)();\n if (value == null) return null;\n\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return value as TOut;\n }\n\n const cache = getDeriveCache(instance);\n if (cache.has(value as unknown)) return cache.get(value as unknown) as TOut;\n\n cache.set(value as unknown, value as unknown);\n return value as TOut;\n }\n\n // Normal form: derive(source, map)\n // Extract the actual value\n let value: TIn;\n if (typeof source === 'function' && !('value' in source)) {\n // It's a function (not a binding object with value property)\n value = (source as () => TIn)();\n } else {\n value = (source as { value?: TIn | null })?.value ?? (source as TIn);\n }\n if (value == null) return null;\n\n // Get or create memoization cache for this component\n const instance = getCurrentComponentInstance();\n if (!instance) {\n // No component context - just compute eagerly\n return (map as (v: TIn) => TOut)(value as TIn);\n }\n\n const cache = getDeriveCache(instance);\n\n // Check if we already have a cached result for this source value\n if (cache.has(value as unknown)) {\n return cache.get(value as unknown) as TOut;\n }\n\n // Compute and cache the result\n const result = (map as (v: TIn) => TOut)(value as TIn);\n cache.set(value as unknown, result as unknown);\n return result;\n}\n"]}